summaryrefslogtreecommitdiffstats
path: root/opensuse/core
diff options
context:
space:
mode:
Diffstat (limited to 'opensuse/core')
-rw-r--r--opensuse/core/.metadata/.atlassian-connector-for-eclipse/usage-data.xml0
-rw-r--r--opensuse/core/.metadata/.lock0
-rw-r--r--opensuse/core/.metadata/.log194
-rw-r--r--opensuse/core/.metadata/.mylyn/.repositories.xml.zipbin0 -> 458 bytes
-rw-r--r--opensuse/core/.metadata/.mylyn/repositories.xml.zipbin0 -> 620 bytes
-rw-r--r--opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.bamboo.core/repositoryConfigurationsbin0 -> 719 bytes
-rw-r--r--opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.jira.core/serverCache/repositoryConfigurationsbin0 -> 2100 bytes
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.cdt.core/.log2
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version1
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.indexbin0 -> 151 bytes
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version1
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/2.treebin0 -> 2207 bytes
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resourcesbin0 -> 850 bytes
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.bamboo.ui.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.jira.ui.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.monitor.ui.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs5
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.mpc.ui.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs15
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs6
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.equinox.p2.ui/dialog_settings.xml3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.equinox.security.ui/dialog_settings.xml10
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCachebin0 -> 4 bytes
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCachebin0 -> 4 bytes
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.datbin0 -> 129 bytes
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml2
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml2
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml5
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/46/refactorings.history3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/46/refactorings.index3
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml7
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log1
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.100.20110804-1717.xml41
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.team.ui/syncParticipants.xml2
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml5
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml16
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml4
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml20
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml172
-rw-r--r--opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml4
-rw-r--r--opensuse/core/.metadata/version.ini1
-rw-r--r--opensuse/core/arts/.project12
-rw-r--r--opensuse/core/arts/arts-start-on-demand.diff25
-rw-r--r--opensuse/core/arts/arts-vorbis-fix.dif27
-rw-r--r--opensuse/core/arts/arts.changes1406
-rw-r--r--opensuse/core/arts/arts.spec197
-rw-r--r--opensuse/core/arts/artswrapper.7.gzbin0 -> 1134 bytes
-rw-r--r--opensuse/core/arts/avoid_la_files.diff26
-rw-r--r--opensuse/core/arts/baselibs.conf1
-rw-r--r--opensuse/core/arts/fortify_source.patch13
-rw-r--r--opensuse/core/arts/no-informational-messages.diff15
-rw-r--r--opensuse/core/libdbus-1-tqt-0/.project12
-rw-r--r--opensuse/core/libdbus-1-tqt-0/README.VERSION1
-rw-r--r--opensuse/core/libdbus-1-tqt-0/fix_circular_destructor.patch14
-rw-r--r--opensuse/core/libdbus-1-tqt-0/fix_ifdef.patch18
-rw-r--r--opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.changes58
-rw-r--r--opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.spec135
-rw-r--r--opensuse/core/libdbus-1-tqt-0/r785103.patch996
-rw-r--r--opensuse/core/libdbus-1-tqt-0/r795238.patch60
-rw-r--r--opensuse/core/libdbus-tqt-1-0/.project12
-rw-r--r--opensuse/core/libdbus-tqt-1-0/README.VERSION1
-rw-r--r--opensuse/core/libdbus-tqt-1-0/baselibs.conf1
-rw-r--r--opensuse/core/libdbus-tqt-1-0/dbus-qt3-compile-fix-thoenig-01.patch85
-rw-r--r--opensuse/core/libdbus-tqt-1-0/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch12
-rw-r--r--opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.changes61
-rw-r--r--opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.spec147
-rw-r--r--opensuse/core/libtqt4/.project12
-rw-r--r--opensuse/core/libtqt4/libtqt4.changes11
-rw-r--r--opensuse/core/libtqt4/libtqt4.spec173
-rw-r--r--opensuse/core/qt3/.project12
-rw-r--r--opensuse/core/tde-filesystem/.project12
-rw-r--r--opensuse/core/tde-filesystem/COPYING502
-rw-r--r--opensuse/core/tde-filesystem/macros.tde150
-rw-r--r--opensuse/core/tde-filesystem/tde-filesystem.changes5
-rw-r--r--opensuse/core/tde-filesystem/tde-filesystem.spec61
-rw-r--r--opensuse/core/tdeaccessibility/.project12
-rw-r--r--opensuse/core/tdeaddons/.project12
-rw-r--r--opensuse/core/tdeartwork/.project12
-rw-r--r--opensuse/core/tdebase/.project12
-rw-r--r--opensuse/core/tdebase/3_5_BRANCH.diff1176
-rw-r--r--opensuse/core/tdebase/access.diff51
-rw-r--r--opensuse/core/tdebase/applet-lock-logout.diff122
-rw-r--r--opensuse/core/tdebase/arts-start-on-demand.diff98
-rw-r--r--opensuse/core/tdebase/artwork.diff35
-rw-r--r--opensuse/core/tdebase/autorun.patch27
-rw-r--r--opensuse/core/tdebase/background_default.diff13
-rw-r--r--opensuse/core/tdebase/baselibs.conf2
-rw-r--r--opensuse/core/tdebase/beagle-0.3.diff21
-rw-r--r--opensuse/core/tdebase/bnc.desktop8
-rw-r--r--opensuse/core/tdebase/bnc584223.diff189
-rw-r--r--opensuse/core/tdebase/clock-applet-style.diff22
-rw-r--r--opensuse/core/tdebase/clock-suse-integrate.diff288
-rw-r--r--opensuse/core/tdebase/console8x16.pcf.gzbin0 -> 12244 bytes
-rw-r--r--opensuse/core/tdebase/default-kdeprintfax.diff13
-rw-r--r--opensuse/core/tdebase/default_fonts.diff25
-rw-r--r--opensuse/core/tdebase/devmon-automounter.sh1086
-rw-r--r--opensuse/core/tdebase/dont-always-start-kaccess.diff66
-rw-r--r--opensuse/core/tdebase/fileshareset.8.gzbin0 -> 1086 bytes
-rw-r--r--opensuse/core/tdebase/fileshareset2.tar.bz2bin0 -> 8677 bytes
-rw-r--r--opensuse/core/tdebase/fix-desktop-icons.diff250
-rw-r--r--opensuse/core/tdebase/fix-kcontrol-yast.diff63
-rw-r--r--opensuse/core/tdebase/fix-kio-smb-auth.diff13
-rw-r--r--opensuse/core/tdebase/fix-lockup-from-gnome-apps.diff20
-rw-r--r--opensuse/core/tdebase/fix_default_theme_reset.diff59
-rw-r--r--opensuse/core/tdebase/gcc44.diff20
-rw-r--r--opensuse/core/tdebase/hide-only-showin-entries.diff14
-rw-r--r--opensuse/core/tdebase/improve-panelservicemenu-geticonset.diff32
-rw-r--r--opensuse/core/tdebase/ioslaveinfo-icon.diff13
-rw-r--r--opensuse/core/tdebase/kcheckpass-pam-11.06
-rw-r--r--opensuse/core/tdebase/kcheckpass-pam-11.15
-rw-r--r--opensuse/core/tdebase/kcheckpass-pam-legacy7
-rw-r--r--opensuse/core/tdebase/kcheckpass.8.gzbin0 -> 836 bytes
-rw-r--r--opensuse/core/tdebase/kcminit-ignore-arts.diff14
-rw-r--r--opensuse/core/tdebase/kcmkdm-default-grub.diff13
-rw-r--r--opensuse/core/tdebase/kcmsamba_log.diff31
-rw-r--r--opensuse/core/tdebase/kcmshell_use_kde-sound.diff11
-rw-r--r--opensuse/core/tdebase/kcontrol-energy.diff167
-rw-r--r--opensuse/core/tdebase/kcontrol.diff11
-rw-r--r--opensuse/core/tdebase/kde3-session-restore.diff12
-rw-r--r--opensuse/core/tdebase/kde3-session.diff13
-rw-r--r--opensuse/core/tdebase/kdebase_khc_rellinks.diff606
-rw-r--r--opensuse/core/tdebase/kdebase_networkstatus_branch.diff36
-rw-r--r--opensuse/core/tdebase/kdeeject.diff58
-rw-r--r--opensuse/core/tdebase/kdesktop_icons.diff311
-rw-r--r--opensuse/core/tdebase/kdesu-remember-keep-password.diff18
-rw-r--r--opensuse/core/tdebase/kdesud-security.diff21
-rw-r--r--opensuse/core/tdebase/kdm-admin-mode.diff424
-rw-r--r--opensuse/core/tdebase/kdm-aliasing.diff11
-rw-r--r--opensuse/core/tdebase/kdm-align-userlist-labels.diff46
-rw-r--r--opensuse/core/tdebase/kdm-all-users-nopass.diff34
-rw-r--r--opensuse/core/tdebase/kdm-audit-log.diff190
-rw-r--r--opensuse/core/tdebase/kdm-color-scheme.diff28
-rw-r--r--opensuse/core/tdebase/kdm-consolekit.diff822
-rw-r--r--opensuse/core/tdebase/kdm-cope-with-new-grub.diff27
-rw-r--r--opensuse/core/tdebase/kdm-make_it_cool.diff1534
-rw-r--r--opensuse/core/tdebase/kdm-mark_autologin.diff13
-rw-r--r--opensuse/core/tdebase/kdm-pam-np-legacy7
-rw-r--r--opensuse/core/tdebase/kdm-relaxed-auth.diff22
-rw-r--r--opensuse/core/tdebase/kdm-suspend-hal.diff331
-rw-r--r--opensuse/core/tdebase/kdm-sysconfig-values.diff737
-rw-r--r--opensuse/core/tdebase/kdm-use-rpmoptflags.diff29
-rw-r--r--opensuse/core/tdebase/kdm-wordbreak.diff22
-rw-r--r--opensuse/core/tdebase/kfontinst.diff10
-rw-r--r--opensuse/core/tdebase/khelpcenter-beagle.diff172
-rw-r--r--opensuse/core/tdebase/khelpcenter-delayed-indexcheck.cpp23
-rw-r--r--opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch327
-rw-r--r--opensuse/core/tdebase/khelpcenter-gnome-support.patch335
-rw-r--r--opensuse/core/tdebase/khelpcenter-localindices.patch41
-rw-r--r--opensuse/core/tdebase/khelpcenter-use-suseconfig-indexer.diff25
-rw-r--r--opensuse/core/tdebase/khelpcenter-use-susehelp.diff13
-rw-r--r--opensuse/core/tdebase/khotkeys-multimedia-action.diff345
-rw-r--r--opensuse/core/tdebase/khotkeys-multimedia-action2.diff81
-rw-r--r--opensuse/core/tdebase/kicker-defaults.diff57
-rw-r--r--opensuse/core/tdebase/kickerrc63
-rw-r--r--opensuse/core/tdebase/kickoff-beagle.diff1329
-rw-r--r--opensuse/core/tdebase/kickoff-data.tar.bz2bin0 -> 581352 bytes
-rw-r--r--opensuse/core/tdebase/kickoff-install-software.diff25
-rw-r--r--opensuse/core/tdebase/kickoff-kcm.diff217
-rw-r--r--opensuse/core/tdebase/kickoff.diff9812
-rw-r--r--opensuse/core/tdebase/kio-media-errorhandling.diff18
-rw-r--r--opensuse/core/tdebase/klipperrc.diff22
-rw-r--r--opensuse/core/tdebase/kmenu-search-fs20050503-fixed.diff342
-rw-r--r--opensuse/core/tdebase/kmenu-search-slowdown-fix.diff129
-rw-r--r--opensuse/core/tdebase/knetattach-show.diff7
-rw-r--r--opensuse/core/tdebase/kompmgr_use_defaults.diff34
-rw-r--r--opensuse/core/tdebase/konq-combo-editor.diff42
-rw-r--r--opensuse/core/tdebase/konsole-schema-update.diff33
-rw-r--r--opensuse/core/tdebase/konsole_keytab.diff17
-rw-r--r--opensuse/core/tdebase/kpamgreeter.diff852
-rw-r--r--opensuse/core/tdebase/krandr-0.5.2.1.diff.bz2bin0 -> 22752 bytes
-rw-r--r--opensuse/core/tdebase/kscreensaver-random-NG.diff189
-rw-r--r--opensuse/core/tdebase/ksmserver-defaulttohalt.diff13
-rw-r--r--opensuse/core/tdebase/ksmserver-kdeinit.diff67
-rw-r--r--opensuse/core/tdebase/ksmserver-suspend.diff233
-rw-r--r--opensuse/core/tdebase/ksmserver-timed.diff700
-rw-r--r--opensuse/core/tdebase/ksmserver-tooltips.diff38
-rw-r--r--opensuse/core/tdebase/ksplashml.patch19
-rw-r--r--opensuse/core/tdebase/ksysguard-slp-ratelimit.diff15
-rw-r--r--opensuse/core/tdebase/ksysguardd-openslp.diff288
-rw-r--r--opensuse/core/tdebase/ksysguardd.init80
-rw-r--r--opensuse/core/tdebase/ksysguardd.reg12
-rw-r--r--opensuse/core/tdebase/kwinbindings.diff43
-rw-r--r--opensuse/core/tdebase/kxkb-include-latin-layout.diff14
-rw-r--r--opensuse/core/tdebase/less_verbal_kdesu.patch26
-rw-r--r--opensuse/core/tdebase/libkonq-kdemm.diff117
-rw-r--r--opensuse/core/tdebase/locale-dont-show-flag.diff33
-rw-r--r--opensuse/core/tdebase/lock-xvkbd.diff380
-rw-r--r--opensuse/core/tdebase/lowdiskspace.patch413
-rw-r--r--opensuse/core/tdebase/mach_blass.diff160
-rw-r--r--opensuse/core/tdebase/make-wallpapers-hideable.diff48
-rw-r--r--opensuse/core/tdebase/media-cryptosupport.diff31
-rw-r--r--opensuse/core/tdebase/media-iPod.diff26
-rw-r--r--opensuse/core/tdebase/media-teardown_crypto.diff175
-rw-r--r--opensuse/core/tdebase/media_suse.diff49
-rw-r--r--opensuse/core/tdebase/mediamanager-mount-point-utf8.diff13
-rw-r--r--opensuse/core/tdebase/minicli-combo-editor.diff34
-rw-r--r--opensuse/core/tdebase/mp3-info.tar.bz2bin0 -> 2606 bytes
-rw-r--r--opensuse/core/tdebase/mtab-reenable.patch153
-rw-r--r--opensuse/core/tdebase/non-fast-malloc.diff15
-rw-r--r--opensuse/core/tdebase/nsplugin-Preference.diff13
-rw-r--r--opensuse/core/tdebase/nsplugin-init-gtk.diff49
-rw-r--r--opensuse/core/tdebase/openssl1.patch40
-rw-r--r--opensuse/core/tdebase/optional-compmgr.diff32
-rw-r--r--opensuse/core/tdebase/quick_browser_menu.diff30
-rw-r--r--opensuse/core/tdebase/remove-beagle-stuff.diff34
-rw-r--r--opensuse/core/tdebase/restore-description-parens.diff13
-rw-r--r--opensuse/core/tdebase/rotate-wacom-pointers.diff291
-rw-r--r--opensuse/core/tdebase/runupdater.patch133
-rw-r--r--opensuse/core/tdebase/select-wm-gui.diff635
-rw-r--r--opensuse/core/tdebase/short-menus.diff209
-rw-r--r--opensuse/core/tdebase/show-konqueror-in-menu.diff30
-rw-r--r--opensuse/core/tdebase/simplify-randr-settings.diff91
-rw-r--r--opensuse/core/tdebase/sourceforge.desktop7
-rw-r--r--opensuse/core/tdebase/spellcheck-default-utf8.diff13
-rw-r--r--opensuse/core/tdebase/startkde.diff80
-rw-r--r--opensuse/core/tdebase/startkde.suse.sh140
-rw-r--r--opensuse/core/tdebase/stopkde.suse.sh13
-rw-r--r--opensuse/core/tdebase/suse_default_move.diff83
-rw-r--r--opensuse/core/tdebase/suspend-kpowersave.diff178
-rw-r--r--opensuse/core/tdebase/suspend-unmount.diff179
-rw-r--r--opensuse/core/tdebase/system-folder_man.diff13
-rw-r--r--opensuse/core/tdebase/systray_order.diff162
-rw-r--r--opensuse/core/tdebase/taskbar.patch29
-rw-r--r--opensuse/core/tdebase/tdebase.changes5422
-rw-r--r--opensuse/core/tdebase/tdebase.fillup25
-rw-r--r--opensuse/core/tdebase/tdebase.spec1851
-rw-r--r--opensuse/core/tdebase/teach-minicli-lock.diff30
-rw-r--r--opensuse/core/tdebase/uninit.diff10
-rw-r--r--opensuse/core/tdebase/use-full-hinting-by-default.diff35
-rw-r--r--opensuse/core/tdebase/use-pam-before-classic.diff17
-rw-r--r--opensuse/core/tdebase/wizard_small.pngbin0 -> 40259 bytes
-rw-r--r--opensuse/core/tdebase/workaround-pdf-on64bit-nsplugin-bug.diff44
-rw-r--r--opensuse/core/tdebase/xcursor.diff36
-rw-r--r--opensuse/core/tdebase/xinerama.patch951
-rw-r--r--opensuse/core/tdebase/zh_TW.flag.pngbin0 -> 175 bytes
-rw-r--r--opensuse/core/tdebindings/.project12
-rw-r--r--opensuse/core/tdedevelop/.project12
-rw-r--r--opensuse/core/tdeedu/.project12
-rw-r--r--opensuse/core/tdegames/.project12
-rw-r--r--opensuse/core/tdegraphics/.project12
-rw-r--r--opensuse/core/tdelibs/.project12
-rw-r--r--opensuse/core/tdelibs/10888-bt.tar.gzbin0 -> 48208 bytes
-rw-r--r--opensuse/core/tdelibs/3_5_BRANCH.diff126
-rw-r--r--opensuse/core/tdelibs/CATALOG.kdelibs3.diff139
-rw-r--r--opensuse/core/tdelibs/add-suse-translations.diff14
-rw-r--r--opensuse/core/tdelibs/admin.diff55
-rw-r--r--opensuse/core/tdelibs/admin.tar.bz2bin0 -> 188090 bytes
-rw-r--r--opensuse/core/tdelibs/allow-man-setgid.diff32
-rw-r--r--opensuse/core/tdelibs/api_docu_description36
-rw-r--r--opensuse/core/tdelibs/applications.menu-fallback.diff19
-rw-r--r--opensuse/core/tdelibs/arts-acinclude.patch66
-rw-r--r--opensuse/core/tdelibs/artwork.diff46
-rw-r--r--opensuse/core/tdelibs/autostart-spec.diff55
-rw-r--r--opensuse/core/tdelibs/avahi-pidfile.diff13
-rw-r--r--opensuse/core/tdelibs/baselibs.conf3
-rw-r--r--opensuse/core/tdelibs/bnc557126.diff21
-rw-r--r--opensuse/core/tdelibs/bug-382959_kabc_fix_vcardparser.patch562
-rw-r--r--opensuse/core/tdelibs/bug-399296_ftphandling-fix.diff57
-rw-r--r--opensuse/core/tdelibs/bundle-locale-help.diff107
-rw-r--r--opensuse/core/tdelibs/clever-menu.diff221
-rw-r--r--opensuse/core/tdelibs/common_options156
-rw-r--r--opensuse/core/tdelibs/cr16-filesys-file_broken.pngbin0 -> 696 bytes
-rw-r--r--opensuse/core/tdelibs/create-kdeapi107
-rw-r--r--opensuse/core/tdelibs/default-useragent.diff13
-rw-r--r--opensuse/core/tdelibs/desktop-translations.diff209
-rw-r--r--opensuse/core/tdelibs/disable-idn-support.diff34
-rw-r--r--opensuse/core/tdelibs/disable-samba-dialog-without-smb.diff66
-rw-r--r--opensuse/core/tdelibs/do_make96
-rw-r--r--opensuse/core/tdelibs/fileshare.diff296
-rw-r--r--opensuse/core/tdelibs/fix-dcopidlng-within-kdelibs-build.diff16
-rw-r--r--opensuse/core/tdelibs/fix-gnome-help-support.diff130
-rw-r--r--opensuse/core/tdelibs/fix-gnome-help-support_legacy.diff126
-rw-r--r--opensuse/core/tdelibs/fix-kdemm-build.diff88
-rw-r--r--opensuse/core/tdelibs/fix-kerberos-printing.diff37
-rw-r--r--opensuse/core/tdelibs/fix-macmenu.patch11
-rw-r--r--opensuse/core/tdelibs/fix-qxembed.diff80
-rw-r--r--opensuse/core/tdelibs/flash-player-non-oss.diff44
-rw-r--r--opensuse/core/tdelibs/fontconfig-reverse-lookup.diff137
-rw-r--r--opensuse/core/tdelibs/gcc44.diff20
-rw-r--r--opensuse/core/tdelibs/gcc45.diff31
-rw-r--r--opensuse/core/tdelibs/google-mail.diff18
-rw-r--r--opensuse/core/tdelibs/ignore-inline-menu.diff18
-rw-r--r--opensuse/core/tdelibs/integrate-global-pixmaps-10.1.diff26
-rw-r--r--opensuse/core/tdelibs/integrate-global-pixmaps-new.diff13
-rw-r--r--opensuse/core/tdelibs/kcontrol_crash_patch.diff11
-rw-r--r--opensuse/core/tdelibs/kde3rc.dif17
-rw-r--r--opensuse/core/tdelibs/kde4-applications.diff70
-rw-r--r--opensuse/core/tdelibs/kdecode_fakes_include.diff18
-rw-r--r--opensuse/core/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch62
-rw-r--r--opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch42
-rw-r--r--opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch13
-rw-r--r--opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch30
-rw-r--r--opensuse/core/tdelibs/kdelibs-3.5.10-kio.patch47
-rw-r--r--opensuse/core/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch143
-rw-r--r--opensuse/core/tdelibs/kdelibs-3.5.10-ossl-1.x.patch180
-rw-r--r--opensuse/core/tdelibs/kdelibs-3.5.10.tar.bz2bin0 -> 15614607 bytes
-rw-r--r--opensuse/core/tdelibs/kdelibs-3.5.12.99.tar.bz2bin0 -> 14993135 bytes
-rw-r--r--opensuse/core/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch545
-rw-r--r--opensuse/core/tdelibs/kdelibs3-gcc-4.1-miscompile.diff15
-rw-r--r--opensuse/core/tdelibs/kdelibs3-hicolor-scalable-sizes.patch50
-rw-r--r--opensuse/core/tdelibs/kdelibs_networkstatus_branch2.diff69
-rw-r--r--opensuse/core/tdelibs/kdemm-20050330.tar.bz2bin0 -> 42068 bytes
-rw-r--r--opensuse/core/tdelibs/kdemm-filepreview.diff40
-rw-r--r--opensuse/core/tdelibs/kdemm.diff669
-rw-r--r--opensuse/core/tdelibs/kdeprint-restart-cupsd.diff32
-rw-r--r--opensuse/core/tdelibs/kdeprint-utf8.diff13
-rw-r--r--opensuse/core/tdelibs/kdesu-settings.diff50
-rw-r--r--opensuse/core/tdelibs/kdeversion.diff13
-rw-r--r--opensuse/core/tdelibs/kfile-beagle.diff42
-rw-r--r--opensuse/core/tdelibs/kickoff-drop-shadow.diff177
-rw-r--r--opensuse/core/tdelibs/kimproxy-warning.diff13
-rw-r--r--opensuse/core/tdelibs/kmimelist.diff81
-rw-r--r--opensuse/core/tdelibs/kremoteencoding-utf8.diff28
-rw-r--r--opensuse/core/tdelibs/ktip-icon-hack.diff56
-rw-r--r--opensuse/core/tdelibs/kwalletd-try-open.diff81
-rw-r--r--opensuse/core/tdelibs/light_v_2_scrollbar_patch.patch34
-rw-r--r--opensuse/core/tdelibs/limit-max-image-size.diff28
-rw-r--r--opensuse/core/tdelibs/lpoptions-cups-1.2.diff28
-rw-r--r--opensuse/core/tdelibs/mimetype-changes.diff36
-rw-r--r--opensuse/core/tdelibs/mimetype-icons.tar.bz2bin0 -> 84604 bytes
-rw-r--r--opensuse/core/tdelibs/mozilla-sliders.patch19
-rw-r--r--opensuse/core/tdelibs/networkstatus.diff6006
-rw-r--r--opensuse/core/tdelibs/no-debug-by-default.diff158
-rw-r--r--opensuse/core/tdelibs/no-progress-for-beagle-status-query.diff13
-rw-r--r--opensuse/core/tdelibs/noauto-package.diff13
-rw-r--r--opensuse/core/tdelibs/oom_score_adj.patch36
-rw-r--r--opensuse/core/tdelibs/patch-mimetype-iconnames.diff39
-rw-r--r--opensuse/core/tdelibs/prefer_distribution_settings.dif13
-rw-r--r--opensuse/core/tdelibs/printpreview.patch14
-rw-r--r--opensuse/core/tdelibs/r874968-ebay-crash.diff24
-rw-r--r--opensuse/core/tdelibs/rubberband-selection.diff380
-rw-r--r--opensuse/core/tdelibs/show-distribution.diff21
-rw-r--r--opensuse/core/tdelibs/silence.diff13
-rw-r--r--opensuse/core/tdelibs/smooth-scrolling.diff267
-rw-r--r--opensuse/core/tdelibs/spellcheck-default-utf8.diff26
-rw-r--r--opensuse/core/tdelibs/stat-on-media.diff14
-rw-r--r--opensuse/core/tdelibs/tdelibs-devel-doc.changes2956
-rw-r--r--opensuse/core/tdelibs/tdelibs-devel-doc.spec115
-rw-r--r--opensuse/core/tdelibs/tdelibs.changes4301
-rw-r--r--opensuse/core/tdelibs/tdelibs.spec825
-rw-r--r--opensuse/core/tdelibs/tderc11
-rw-r--r--opensuse/core/tdelibs/textcompletion-editor.diff344
-rw-r--r--opensuse/core/tdelibs/use-mediamanager.diff44
-rw-r--r--opensuse/core/tdelibs/use-xauthlocalhostname.diff240
-rw-r--r--opensuse/core/tdelibs/vnd.openxmlformats-officedocument.presentationml.presentation.desktop10
-rw-r--r--opensuse/core/tdelibs/vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop10
-rw-r--r--opensuse/core/tdelibs/vnd.openxmlformats-officedocument.wordprocessingml.document.desktop10
-rw-r--r--opensuse/core/tdelibs/x-jar-desktop.diff10
-rw-r--r--opensuse/core/tdelibs/x-kde-InitialPreference.diff16
-rw-r--r--opensuse/core/tdelibs/xinerama.patch543
-rw-r--r--opensuse/core/tdelibs/xml-catalog.diff44
-rw-r--r--opensuse/core/tdelibs/xmlhttprequest_3.x.diff47
-rw-r--r--opensuse/core/tdemultimedia/.project12
-rw-r--r--opensuse/core/tdenetwork/.project12
-rw-r--r--opensuse/core/tdepim/.project12
-rw-r--r--opensuse/core/tdesdk/.project12
-rw-r--r--opensuse/core/tdetoys/.project12
-rw-r--r--opensuse/core/tdeutils/.project12
-rw-r--r--opensuse/core/tdewebdev/.project12
370 files changed, 65722 insertions, 0 deletions
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
--- /dev/null
+++ b/opensuse/core/.metadata/.atlassian-connector-for-eclipse/usage-data.xml
diff --git a/opensuse/core/.metadata/.lock b/opensuse/core/.metadata/.lock
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/opensuse/core/.metadata/.lock
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
--- /dev/null
+++ b/opensuse/core/.metadata/.mylyn/.repositories.xml.zip
Binary files 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
--- /dev/null
+++ b/opensuse/core/.metadata/.mylyn/repositories.xml.zip
Binary files 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
--- /dev/null
+++ b/opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.bamboo.core/repositoryConfigurations
Binary files 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
--- /dev/null
+++ b/opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.jira.core/serverCache/repositoryConfigurations
Binary files 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
--- /dev/null
+++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index
Binary files 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
--- /dev/null
+++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree
Binary files 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
--- /dev/null
+++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources
Binary files 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=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\n<sourceLookupDirector>\n<sourceContainers duplicates\="false"/>\n</sourceLookupDirector>\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=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\n<launchPerspectives/>\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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+</section>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+ <section name="StorageLoginDialogNew">
+ <item value="613" key="DIALOG_WIDTH"/>
+ <item value="176" key="DIALOG_Y_ORIGIN"/>
+ <item value="319" key="DIALOG_HEIGHT"/>
+ <item value="210" key="DIALOG_X_ORIGIN"/>
+ <item value="1|Ubuntu|11.0|0|GTK|1|" key="DIALOG_FONT_NAME"/>
+ </section>
+</section>
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
--- /dev/null
+++ b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache
Binary files 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
--- /dev/null
+++ b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache
Binary files 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
--- /dev/null
+++ b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat
Binary files 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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<typeInfoHistroy/>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<qualifiedTypeNameHistroy/>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+ <section name="JavaElementSearchActions">
+ </section>
+</section>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<session version="1.0">&#x0A;<refactoring comment="Delete 2 resources" deleteContents="true" description="Delete 2 resources" element1="/libtqt4" element2="/qt3" flags="7" id="org.eclipse.ltk.core.refactoring.delete.resources" resources="2" stamp="1320812229683"/>&#x0A;<refactoring comment="Delete resource &apos;tdeaccessibility&apos;" deleteContents="true" description="Delete resource &apos;tdeaccessibility&apos;" element1="/tdeaccessibility" flags="7" id="org.eclipse.ltk.core.refactoring.delete.resources" resources="1" stamp="1320897148756"/>&#x0A;<refactoring comment="Delete resource &apos;tdesdk&apos;" deleteContents="true" description="Delete resource &apos;tdesdk&apos;" element1="/tdesdk" flags="7" id="org.eclipse.ltk.core.refactoring.delete.resources" resources="1" stamp="1320897860502"/>
+</session> \ 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+ <section name="RefactoringWizard.preview">
+ <item value="400" key="height"/>
+ <item value="600" key="width"/>
+ </section>
+</section>
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 @@
+<configuration scan="true">
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern>
+ </encoder>
+ <filter class="org.eclipse.m2e.logback.appender.ConsoleAppenderFilter"/>
+ </appender>
+
+ <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <File>${org.eclipse.m2e.log.dir}/0.log</File>
+ <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+ <FileNamePattern>${org.eclipse.m2e.log.dir}/%i.log</FileNamePattern>
+ <MinIndex>1</MinIndex>
+ <MaxIndex>10</MaxIndex>
+ </rollingPolicy>
+ <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+ <MaxFileSize>100MB</MaxFileSize>
+ </triggeringPolicy>
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="EclipseLog" class="org.eclipse.m2e.logback.appender.EclipseLogAppender">
+ <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+ <level>WARN</level>
+ </filter>
+ </appender>
+
+ <appender name="MavenConsoleLog" class="org.eclipse.m2e.logback.appender.MavenConsoleAppender">
+ </appender>
+
+ <root level="INFO">
+ <appender-ref ref="FILE" />
+ <appender-ref ref="STDOUT" />
+ <appender-ref ref="EclipseLog" />
+ <appender-ref ref="MavenConsoleLog" />
+ </root>
+
+ <logger name="com.ning.http.client" level="INFO" />
+</configuration>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<syncparticipants/> \ 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+ <section name="quick_assist_proposal_size">
+ </section>
+</section>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+ <section name="SaveAsDialogSettings">
+ <item value="613" key="DIALOG_WIDTH"/>
+ <item value="0" key="DIALOG_Y_ORIGIN"/>
+ <item value="205" key="DIALOG_X_ORIGIN"/>
+ <item value="598" key="DIALOG_HEIGHT"/>
+ <item value="1|Ubuntu|11.0|0|GTK|1|" key="DIALOG_FONT_NAME"/>
+ </section>
+ <section name="NewWizardAction">
+ <item value="org.eclipse.linuxtools.rpm.ui.RPMNewProject" key="NewWizardSelectionPage.STORE_SELECTED_ID"/>
+ <list key="NewWizardSelectionPage.STORE_EXPANDED_CATEGORIES_ID">
+ <item value="org.eclipse.linuxtools.rpm.ui.editor"/>
+ </list>
+ </section>
+</section>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+ <item value="1024" key="introLaunchBar.location"/>
+</section>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section name="Workbench">
+ <section name="NewWizardAction">
+ <item value="org.eclipse.linuxtools.rpm.ui.RPMNewProject" key="NewWizardSelectionPage.STORE_SELECTED_ID"/>
+ <list key="NewWizardSelectionPage.STORE_EXPANDED_CATEGORIES_ID">
+ <item value="org.eclipse.linuxtools.rpm.ui.editor"/>
+ </list>
+ </section>
+ <section name="ShowViewDialog">
+ <item value="376" key="DIALOG_WIDTH"/>
+ <item value="com.atlassian.connector.eclipse.bamboo.ui.plans" key="ShowViewDialog.STORE_SELECTED_VIEW_ID"/>
+ <item value="92" key="DIALOG_Y_ORIGIN"/>
+ <item value="445" key="DIALOG_HEIGHT"/>
+ <item value="328" key="DIALOG_X_ORIGIN"/>
+ <item value="1|Ubuntu|11.0|0|GTK|1|" key="DIALOG_FONT_NAME"/>
+ <list key="ShowViewDialog.STORE_EXPANDED_CATEGORIES_ID">
+ <item value="com.atlassian.connector.eclipse.ui.category"/>
+ </list>
+ </section>
+</section>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workbench progressCount="34" version="2.0">
+<workbenchAdvisor/>
+<window height="746" maximized="true" width="1023" x="14" y="24">
+<fastViewData fastViewLocation="1024"/>
+<perspectiveBar>
+<itemSize x="160"/>
+</perspectiveBar>
+<coolbarLayout>
+<coolItem id="group.file" itemType="typeGroupMarker"/>
+<coolItem id="org.eclipse.ui.workbench.file" itemType="typeToolBarContribution" x="132" y="30"/>
+<coolItem id="additions" itemType="typeGroupMarker"/>
+<coolItem id="org.eclipse.debug.ui.launchActionSet" itemType="typeToolBarContribution" x="48" y="30"/>
+<coolItem id="org.eclipse.search.searchActionSet" itemType="typeToolBarContribution" x="104" y="30"/>
+<coolItem id="org.eclipse.ui.edit.text.actionSet.presentation" itemType="typeToolBarContribution" x="68" y="30"/>
+<coolItem id="org.eclipse.wst.xml.ui.perspective.NewFileToolBar" itemType="typeToolBarContribution" x="-1" y="-1"/>
+<coolItem id="org.eclipse.wst.xml.ui.design.DesignToolBar" itemType="typeToolBarContribution" x="-1" y="-1"/>
+<coolItem id="group.nav" itemType="typeGroupMarker"/>
+<coolItem id="org.eclipse.ui.workbench.navigate" itemType="typeToolBarContribution" x="184" y="30"/>
+<coolItem id="group.editor" itemType="typeGroupMarker"/>
+<coolItem id="org.eclipse.ui.DefaultTextEditor" itemType="typePlaceholder" x="-1" y="-1"/>
+<coolItem id="group.help" itemType="typeGroupMarker"/>
+<coolItem id="org.eclipse.ui.workbench.help" itemType="typeToolBarContribution" x="-1" y="-1"/>
+</coolbarLayout>
+<page aggregateWorkingSetId="Aggregate for window 1320810933209" focus="true" label="Workspace - Resource">
+<editors>
+<editorArea activeWorkbook="DefaultEditorWorkbook">
+<info part="DefaultEditorWorkbook">
+<folder appearance="1" expanded="2">
+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory"/>
+</folder>
+</info>
+</editorArea>
+</editors>
+<views>
+<view id="org.eclipse.mylyn.tasks.ui.views.repositories" partName="Task Repositories">
+<viewState/>
+</view>
+<view id="org.eclipse.ui.navigator.ProjectExplorer" partName="Project Explorer">
+<viewState CommonNavigator.LINKING_ENABLED="0" CommonNavigator.LINKING_ENABLED.delayed="0" org.eclipse.cdt.ui.cview.groupincludes="false" org.eclipse.cdt.ui.editor.CUChildren="true" org.eclipse.ui.navigator.resources.workingSets.showTopLevelWorkingSets="0"/>
+</view>
+<view id="com.atlassian.connector.eclipse.bamboo.ui.plans" partName="Bamboo">
+<viewState/>
+</view>
+<view id="org.eclipse.ui.views.TaskList" partName="Tasks">
+<viewState PRIMARY_SORT_FIELD="org.eclipse.ui.ide.completionField" categoryGroup="none" markerContentGenerator="org.eclipse.ui.ide.tasksGenerator" partName="Tasks">
+<columnWidths org.eclipse.ui.ide.completionField="40" org.eclipse.ui.ide.descriptionField="350" org.eclipse.ui.ide.locationField="105" org.eclipse.ui.ide.markerType="105" org.eclipse.ui.ide.pathField="140" org.eclipse.ui.ide.priorityField="35" org.eclipse.ui.ide.resourceField="105"/>
+<visible IMemento.internal.id="org.eclipse.ui.ide.completionField"/>
+<visible IMemento.internal.id="org.eclipse.ui.ide.priorityField"/>
+<visible IMemento.internal.id="org.eclipse.ui.ide.descriptionField"/>
+<visible IMemento.internal.id="org.eclipse.ui.ide.resourceField"/>
+<visible IMemento.internal.id="org.eclipse.ui.ide.pathField"/>
+<visible IMemento.internal.id="org.eclipse.ui.ide.locationField"/>
+<visible IMemento.internal.id="org.eclipse.ui.ide.markerType"/>
+</viewState>
+</view>
+<view id="org.eclipse.ui.views.ContentOutline" partName="Outline">
+<viewState/>
+</view>
+</views>
+<perspectives activePart="org.eclipse.ui.navigator.ProjectExplorer" activePerspective="org.eclipse.ui.resourcePerspective">
+<perspective editorAreaTrimState="2" editorAreaVisible="1" fixed="0" version="0.016">
+<descriptor class="org.eclipse.ui.internal.ide.application.ResourcePerspective" id="org.eclipse.ui.resourcePerspective" label="Resource"/>
+<alwaysOnActionSet id="org.eclipse.ui.cheatsheets.actionSet"/>
+<alwaysOnActionSet id="org.eclipse.search.searchActionSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.edit.text.actionSet.annotationNavigation"/>
+<alwaysOnActionSet id="org.eclipse.ui.edit.text.actionSet.navigation"/>
+<alwaysOnActionSet id="org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo"/>
+<alwaysOnActionSet id="org.eclipse.ui.externaltools.ExternalToolsSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.actionSet.keyBindings"/>
+<alwaysOnActionSet id="org.eclipse.ui.actionSet.openFiles"/>
+<alwaysOnActionSet id="org.eclipse.egit.ui.navigation"/>
+<alwaysOnActionSet id="org.eclipse.linuxtools.changelog.actionSet"/>
+<alwaysOnActionSet id="org.eclipse.ui.NavigateActionSet"/>
+<alwaysOnActionSet id="org.eclipse.mylyn.context.ui.actionSet"/>
+<alwaysOnActionSet id="org.eclipse.mylyn.tasks.ui.navigation"/>
+<show_view_action id="org.eclipse.ant.ui.views.AntView"/>
+<show_view_action id="org.eclipse.pde.runtime.LogView"/>
+<show_view_action id="org.eclipse.ui.navigator.ProjectExplorer"/>
+<show_view_action id="org.eclipse.ui.views.BookmarkView"/>
+<show_view_action id="org.eclipse.ui.views.ContentOutline"/>
+<show_view_action id="org.eclipse.ui.views.ProblemView"/>
+<show_view_action id="org.eclipse.ui.views.ProgressView"/>
+<show_view_action id="org.eclipse.ui.views.PropertySheet"/>
+<show_view_action id="org.eclipse.ui.views.TaskList"/>
+<new_wizard_action id="org.eclipse.linuxtools.rpm.ui.RPMNewProject"/>
+<new_wizard_action id="org.eclipse.ui.editors.wizards.UntitledTextFileWizard"/>
+<new_wizard_action id="org.eclipse.ui.wizards.new.folder"/>
+<new_wizard_action id="org.eclipse.ui.wizards.new.file"/>
+<perspective_action id="org.eclipse.cdt.ui.CPerspective"/>
+<perspective_action id="org.eclipse.jdt.ui.JavaPerspective"/>
+<perspective_action id="org.eclipse.jdt.ui.JavaBrowsingPerspective"/>
+<perspective_action id="org.eclipse.team.cvs.ui.cvsPerspective"/>
+<perspective_action id="org.eclipse.team.ui.TeamSynchronizingPerspective"/>
+<perspective_action id="org.eclipse.wst.xml.ui.perspective"/>
+<hide_toolbar_item_id id="org.eclipse.jdt.ui.actions.OpenProjectWizard"/>
+<hide_toolbar_item_id id="org.eclipse.ui.edit.text.toggleShowSelectedElementOnly"/>
+<view id="org.eclipse.ui.navigator.ProjectExplorer"/>
+<view id="org.eclipse.ui.views.ContentOutline"/>
+<view id="org.eclipse.ui.views.TaskList"/>
+<view id="com.atlassian.connector.eclipse.bamboo.ui.plans"/>
+<view id="org.eclipse.mylyn.tasks.ui.views.repositories"/>
+<fastViewBars/>
+<layout>
+<mainWindow>
+<info folder="true" part="topLeft">
+<folder activePageID="org.eclipse.ui.navigator.ProjectExplorer" appearance="2" expanded="2">
+<page content="org.eclipse.ui.navigator.ProjectExplorer" label="Project Explorer"/>
+<page content="org.eclipse.ui.views.BookmarkView" label="LabelNotFound"/>
+<page content="org.eclipse.ui.views.ResourceNavigator" label="LabelNotFound"/>
+<page content="org.eclipse.team.ccvs.ui.RepositoriesView" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">
+<part id="0"/>
+</presentation>
+</folder>
+</info>
+<info folder="true" part="org.eclipse.ui.internal.ViewStack@1a3bff5" ratio="0.7495049" ratioLeft="757" ratioRight="253" relationship="2" relative="topLeft">
+<folder appearance="2" expanded="2">
+<page content="org.eclipse.help.ui.HelpView" label="LabelNotFound"/>
+<page content="org.eclipse.ui.internal.introview" label="LabelNotFound"/>
+<page content="org.eclipse.ui.cheatsheets.views.CheatSheetView" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory"/>
+</folder>
+</info>
+<info part="org.eclipse.ui.editorss" ratio="0.25940594" ratioLeft="262" ratioRight="748" relationship="2" relative="topLeft"/>
+<info folder="true" part="bottomRight" ratio="0.65912765" ratioLeft="408" ratioRight="211" relationship="4" relative="org.eclipse.ui.editorss">
+<folder activePageID="com.atlassian.connector.eclipse.bamboo.ui.plans" appearance="2" expanded="2">
+<page content="org.eclipse.ui.views.TaskList" label="Tasks"/>
+<page content="com.atlassian.connector.eclipse.bamboo.ui.plans" label="Bamboo"/>
+<page content="org.eclipse.mylyn.tasks.ui.views.repositories" label="Task Repositories"/>
+<page content="org.eclipse.team.ui.GenericHistoryView" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">
+<part id="0"/>
+<part id="1"/>
+<part id="2"/>
+</presentation>
+</folder>
+</info>
+<info folder="true" part="bottomLeft" ratio="0.49919224" ratioLeft="309" ratioRight="310" relationship="4" relative="topLeft">
+<folder activePageID="org.eclipse.ui.views.ContentOutline" appearance="2" expanded="2">
+<page content="org.eclipse.ui.views.ContentOutline" label="Outline"/>
+<page content="org.eclipse.ant.ui.views.AntView" label="LabelNotFound"/>
+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">
+<part id="0"/>
+</presentation>
+</folder>
+</info>
+</mainWindow>
+</layout>
+</perspective>
+</perspectives>
+<workingSets/>
+<navigationHistory/>
+<input factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/" type="8"/>
+</page>
+<workbenchWindowAdvisor/>
+<actionBarAdvisor/>
+<trimLayout>
+<trimArea IMemento.internal.id="128">
+<trimItem IMemento.internal.id="org.eclipse.ui.internal.WorkbenchWindow.topBar"/>
+<trimItem IMemento.internal.id="org.eclipse.mylyn.tasks.ui.trim.container"/>
+</trimArea>
+<trimArea IMemento.internal.id="1024">
+<trimItem IMemento.internal.id="org.eclise.ui.internal.FastViewBar"/>
+<trimItem IMemento.internal.id="org.eclipse.jface.action.StatusLineManager"/>
+<trimItem IMemento.internal.id="org.eclipse.ui.internal.progress.ProgressRegion"/>
+<trimItem IMemento.internal.id="org.eclipse.ui.internal.intro.impl.presentations.IntroLaunchBar"/>
+</trimArea>
+</trimLayout>
+</window>
+<mruList/>
+</workbench> \ 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workingSetManager>
+<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1320810933212_0" label="Window Working Set" name="Aggregate for window 1320810933209"/>
+</workingSetManager> \ 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>arts</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 <stdio.h>
++#include <stdlib.h>
+ #include <unistd.h>
+ #include <iostream>
+
+@@ -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 <libpng> to <libpng-devel-packages>
+
+-------------------------------------------------------------------
+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 <META http-equiv="Cache-Control" content="no-cache">
+ * 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 <docbkdsl> to <docbook-dsssl-stylesheets>
+
+-------------------------------------------------------------------
+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 <docbk30> to <docbook_3>
+
+-------------------------------------------------------------------
+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 <stefan@space.twc.de>
+
+%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 <stefan@space.twc.de>
+
+%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 <stefan@space.twc.de>
+
+%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 <stefan@space.twc.de>
+
+%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
--- /dev/null
+++ b/opensuse/core/arts/artswrapper.7.gz
Binary files 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 <vorbis/vorbisfile.h>
+ #include <string.h>
+ #include <unistd.h>
+-
++#include <string.h>
+
+ /* --- 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>libdbus-1-tqt-0</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 <qcstring.h>
+
+ /**
+@@ -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 <kevin.krammer@gmx.at>
+
+%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 <kevin.krammer@gmx.at>
+
+%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 <kevin.krammer@gmx.at>
+
+%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<QDBusConnectionPrivate *>(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<QDBusConnectionPrivate *>(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<QDBusConnectionPrivate *>(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("<qmap.h>");
++ forwards.erase("template <typename K, typename V> class QMap");
++
++ includes["qdbus"].insertString("<dbus/qdbusmessage.h>");
++ 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("<qmap.h>");
++ forwards.erase("template <typename K, typename V> 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<Method>::const_iterator it =
++ classData.asyncReplyMethods.begin();
++ QValueList<Method>::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<Method>::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<int, QString> 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<Method>::const_iterator it = classData.methods.begin();
+ QValueList<Method>::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<int, QDBusMessage> m_asyncCalls;" << endl;
++ stream << endl;
++ }
++}
++
++static void writeInterfaceAsyncReplyHandlers(const Class& classData,
++ QTextStream& stream)
++{
++ if (classData.asyncReplyMethods.isEmpty()) return;
++
++ QValueList<Method>::const_iterator it = classData.asyncReplyMethods.begin();
++ QValueList<Method>::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<Method>::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<Method>::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<Method>::iterator it = classData.methods.begin();
++ QValueList<Method>::iterator endIt = classData.methods.end();
++ for (; it != endIt; ++it)
++ {
++ if (!(*it).async) continue;
++
++ Method method = *it;
++
++ QValueList<Argument> methodArgs;
++ QValueList<Argument> signalArgs;
++
++ // add id argument
++ methodArgs << idArgMethod;
++ signalArgs << idArgSignal;
++
++ // split in/out arguments: "in" belong to the method, "out" to the new signal
++ QValueList<Argument>::const_iterator argIt = method.arguments.begin();
++ QValueList<Argument>::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<Method>::iterator it = classData.methods.begin();
++ QValueList<Method>::iterator endIt = classData.methods.end();
++ for (; it != endIt; ++it)
++ {
++ if (!(*it).async) continue;
++
++ Method method = *it;
++
++ QValueList<Argument> methodArgs;
++ QValueList<Argument> replyArgs;
++
++ // add id argument
++ methodArgs << idArgMethod;
++ replyArgs << idArgReply;
++
++ // split in/out arguments: "in" belong to the call, "out" to the reply
++ QValueList<Argument>::const_iterator argIt = method.arguments.begin();
++ QValueList<Argument>::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<Argument> 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<Argument>::const_iterator it = method.arguments.begin();
+ QValueList<Argument>::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<Argument>::const_iterator it = method.arguments.begin();
++ QValueList<Argument>::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<int, QDBusMessage>::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<int, QDBusMessage>::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<Argument>::const_iterator it = method.arguments.begin();
+ QValueList<Argument>::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<int, QString>::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<Method>::const_iterator it = classData.asyncReplySignals.begin();
++ QValueList<Method>::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<Argument> arguments;
+ bool noReply;
++ bool async;
+ };
+
+ class Property : public Argument
+@@ -86,6 +87,10 @@
+ QValueList<Method> methods;
+ QValueList<Method> signals;
+ QValueList<Property> properties;
++
++ QValueList<Method> asyncMethods;
++ QValueList<Method> asyncReplySignals;
++ QValueList<Method> 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<Property>::const_iterator propertyIt = classData.properties.begin();
+ QValueList<Property>::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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>libdbus-tqt-1-0</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 <oliv__a@users.sourceforge.net>
+ Philip Blundell <pb@nexus.co.uk>
+ Anders Carlsson <andersca@gnome.org>
+ Kristian Hogsberg <krh@redhat.com>
+ Alex Larsson <alexl@redhat.com>
+ Michael Meeks <michael@ximian.com>
+ Seth Nickell <seth@gnome.org>
+ Havoc Pennington <hp@redhat.com>
+ Harri Porten <porten@kde.org>
+ Matthew Rickard <mjricka@epoch.ncsc.mil>
+ Zack Rusin <zack@kde.org>
+ Joe Shaw <joe@assbarn.com>
+ Colin Walters <walters@gnu.org>
+ David Zeuthen <david@fubar.dk>
+
+%description devel
+Developer package for TQt/KDE bindings for D-Bus.
+
+
+
+Authors:
+--------
+ Olivier Andrieu <oliv__a@users.sourceforge.net>
+ Philip Blundell <pb@nexus.co.uk>
+ Anders Carlsson <andersca@gnome.org>
+ Kristian Hogsberg <krh@redhat.com>
+ Alex Larsson <alexl@redhat.com>
+ Michael Meeks <michael@ximian.com>
+ Seth Nickell <seth@gnome.org>
+ Havoc Pennington <hp@redhat.com>
+ Harri Porten <porten@kde.org>
+ Matthew Rickard <mjricka@epoch.ncsc.mil>
+ Zack Rusin <zack@kde.org>
+ Joe Shaw <joe@assbarn.com>
+ Colin Walters <walters@gnu.org>
+ David Zeuthen <david@fubar.dk>
+
+%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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>libtqt4</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 <kb9vqf@pearsoncomputing.net>
+    Robert Xu <rxu@lincomlinux.org>
+    Tim Williams <tim@my-place.org.uk>
+    Serghei Amelian <serghei@thel.ro>
+
+%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 <kb9vqf@pearsoncomputing.net>
+    Robert Xu <rxu@lincomlinux.org>
+    Tim Williams <tim@my-place.org.uk>
+    Serghei Amelian <serghei@thel.ro>
+
+
+%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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>qt3</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tde-filesystem</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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.
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+    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.
+  <signature of Ty Coon>, 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 <rxu@lincomlinux.org>
+
+%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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdeaccessibility</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdeaddons</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdeartwork</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdebase</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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; i<m_numRenderers; ++i)
+- m_renderer[i]->desktopResized();
++
++ 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 <qscrollview.h>
++#include <qwidget.h>
+
+ #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<UserHidden>(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 <X11/Xlib.h>
+
++#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<SystemTrayApplet*>(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<SystemTrayApplet*>(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 <kickertip.h>
+ #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 <global.h> // 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<QString,QString> 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 @@
+ </sizepolicy>
+ </property>
+ <property name="maxValue">
+- <number>32768</number>
++ <number>65535</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
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 <stdlib.h>
++#include <unistd.h>
+ #include <math.h>
+
+ #include <dcopref.h>
+@@ -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 <qtoolbutton.h>
+ #include <qstyle.h>
+ #include <qtooltip.h>
++#include <qobjectlist.h>
+
+ #include <dcopclient.h>
+
+@@ -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 <l.lunak@suse.cz>
++
++ 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 <kconfig.h>
++#include <kinstance.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <X11/Xlib.h>
++
++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 <sys/socket.h>
++#include <sys/un.h>
++#include <sys/stat.h>
++#include <sys/types.h>
++#include <string.h>
++#include <unistd.h>
++#include <errno.h>
++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 @@
+ <choice name="Analog"/>
+ <choice name="Fuzzy"/>
+ </choices>
+- <default>Digital</default>
++ <default>Plain</default>
+ </entry>
+ </group>
+ <group name="Date">
+@@ -56,7 +56,7 @@ defFont.setPointSize(8);
+ <label>Font for the clock.</label>
+ <code>
+ defFont=KGlobalSettings::generalFont();
+-defFont.setPointSize(8);
++defFont.setPointSize(16);
+ defFont.setBold(true);
+ </code>
+ <default code="true">defFont</default>
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 <qlabel.h>
+ #include <qfile.h>
++#include <qregexp.h>
+
+ #include <kdebug.h>
+ #include <klocale.h>
+ #include <kmessagebox.h>
+ #include <kdialog.h>
+ #include <kio/netaccess.h>
++#include <kprocess.h>
++#include <ksavefile.h>
++#include <kstandarddirs.h>
+
+ //#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 <kmessagebox.h>
+ #include <kdialog.h>
+ #include <kconfig.h>
++#include <kstandarddirs.h>
+
+ #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("<h1>Date & Time</h1> 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
--- /dev/null
+++ b/opensuse/core/tdebase/console8x16.pcf.gz
Binary files 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
--- /dev/null
+++ b/opensuse/core/tdebase/fileshareset.8.gz
Binary files differ
diff --git a/opensuse/core/tdebase/fileshareset2.tar.bz2 b/opensuse/core/tdebase/fileshareset2.tar.bz2
new file mode 100644
index 000000000..5e26bb796
--- /dev/null
+++ b/opensuse/core/tdebase/fileshareset2.tar.bz2
Binary files 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 <unistd.h>
+ #include <sys/types.h>
++#include <stdlib.h>
+
+
+ #include <qlabel.h>
+@@ -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<NavigatorAppItem *>( item );
+ if ( appItem ) appItem->populate( true /* recursive */ );
++ for ( QListViewItem *subitem = item->firstChild(); subitem;
++ subitem = subitem->nextSibling() ) {
++ appItem = dynamic_cast<NavigatorAppItem *>( 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
--- /dev/null
+++ b/opensuse/core/tdebase/kcheckpass.8.gz
Binary files 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 <qlabel.h>
+ #include <qlayout.h>
+ #include <qwhatsthis.h>
++#include <qpushbutton.h>
+
+ #include <kconfig.h>
+ #include <kcursor.h>
+@@ -36,6 +37,7 @@
+ #include <krun.h>
+ #include <kstandarddirs.h>
+ #include <kurllabel.h>
++#include <dcopref.h>
+
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+@@ -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("<h1>Display Power Control</h1> 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 @@
+ <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+-<kpartgui name="khelpcenter" version="14">
++<kpartgui name="khelpcenter" version="15">
+ <MenuBar>
+ <Menu name="file" noMerge="1">
+ <text>&amp;File</text>
+@@ -23,8 +23,8 @@
+ </Menu>
+ <Menu name="go_web">
+ <text>&amp;Go</text>
+- <Action name="prevPage" />
+- <Action name="nextPage" />
++ <Action name="rellinks_previous" />
++ <Action name="rellinks_next" />
+ <Separator />
+ <Action name="back" />
+ <Action name="forward" />
+@@ -41,13 +41,19 @@
+ <Action name="go_home" />
+ <Action name="back" />
+ <Action name="forward" />
+- <Separator />
++ <Separator />
+ <Action name="printFrame" />
+ <Separator />
+ <Action name="copy_text" />
+ <Action name="find" />
+- <Separator />
+ <Action name="incFontSizes" />
+ <Action name="decFontSizes" />
++ <Separator />
++ <Action name="rellinks_top" />
++ <Action name="rellinks_up" />
++ <Action name="rellinks_first" />
++ <Action name="rellinks_previous" />
++ <Action name="rellinks_next" />
++ <Action name="rellinks_last" />
+ </ToolBar>
+ </kpartgui>
+Index: khelpcenter/mainwindow.cpp
+===================================================================
+--- khelpcenter/mainwindow.cpp.orig
++++ khelpcenter/mainwindow.cpp
+@@ -41,6 +41,7 @@
+ #include <kstatusbar.h>
+ #include <kstdaccel.h>
+ #include <kdialogbase.h>
++#include <kpopupmenu.h>
+
+ #include <qsplitter.h>
+ #include <qtextedit.h>
+@@ -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("<p>This link references a home page or the top of some hierarchy.</p>") );
++
++ kaction_map["up"] = new KAction( i18n("&Up"), "1uparrow", KShortcut("Ctrl+Alt+U"), this, SLOT(goUp()), actionCollection(), "rellinks_up" );
++ kaction_map["up"]->setWhatsThis( i18n("<p>This link references the immediate parent of the current document.</p>") );
++
++ 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("<p>This link type tells search engines which document is considered by the author to be the starting point of the collection.</p>") );
++
++ 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("<p>This link references the previous document in an ordered series of documents.</p>") );
++
++ 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("<p>This link references the next document in an ordered series of documents.</p>") );
++
++ 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("<p>This link references the end of a sequence of documents.</p>") );
++
++ // ------------ 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("<p>This link references the search.</p>") );
++
++ // ------------ Document structure links ---------------
++ m_document = new KActionMenu( i18n("Document"), "contents", actionCollection(), "rellinks_document" );
++ m_document->setWhatsThis( i18n("<p>This menu contains the links referring the document information.</p>") );
++ 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("<p>This link references the table of contents.</p>") );
++
++ 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("<p>This menu references the chapters of the document.</p>") );
++ 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("<p>This menu references the sections of the document.</p>") );
++ 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("<p>This menu references the subsections of the document.</p>") );
++ 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("<p>This link references the appendix.</p>") );
++ 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("<p>This link references the glossary.</p>") );
++
++ 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("<p>This link references the index.</p>") );
++
++ // Other links
++ m_more = new KActionMenu( i18n("More"), "misc", actionCollection(), "rellinks_more" );
++ m_more->setWhatsThis( i18n("<p>This menu contains other important links.</p>") );
++ 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("<p>This link references the help.</p>") );
++
++ 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("<p>This link references the author.</p>") );
++
++ 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("<p>This link references the copyright.</p>") );
++
++ kactionmenu_map["bookmark"] = new KActionMenu( i18n("Bookmarks"), "bookmark_folder", actionCollection(), "rellinks_bookmarks" );
++ m_more->insert(kactionmenu_map["bookmark"]);
++ kactionmenu_map["bookmark"]->setWhatsThis( i18n("<p>This menu references the bookmarks.</p>") );
++ 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("<p>This link references the alternate versions of this document.</p>") );
++ 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("<p>Miscellaneous links.</p>") );
++ 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 <anders@alweb.dk> *
++ * Copyright (C) 2003, 2004, Franck Qu�ain <shift@free.fr> *
++ * Copyright (C) 2004, Kevin Krammer <kevin.krammer@gmx.at> *
++ * Copyright (C) 2004, 2005, Oliviet Goffart <ogoffart @ kde.org>
++*/
++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 <dom/dom_element.h>
++
++class KAction;
++class KActionMenu;
++// type definitions
++typedef QMap<int,DOM::Element> DOMElementMap;
++typedef QMap<QString, KAction*> KActionMap;
++typedef QMap<QString, KActionMenu*> 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<QString,DOMElementMap> 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 <kprogress.h>
+ #include <klocale.h>
+ #include <ksqueezedtextlabel.h>
++#include <networkstatusindicator.h>
+
+ #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 <david@mandrakesoft.com>
+ #
+-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 <name> 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 <name> 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 <unistd.h>
+ #include <kcolordrag.h>
+ #include <kurldrag.h>
++#include <stdlib.h>
++#include <kio/job.h>
++#include <qfile.h>
+
+ #include <qdir.h>
+ #include <qevent.h>
+@@ -58,6 +61,7 @@
+ #include <kglobalsettings.h>
+ #include <kpopupmenu.h>
+ #include <kapplication.h>
++#include <kdirlister.h>
+ // Create the equivalent of KAccelBase::connectItem
+ // and then remove this include and fix reconnects in initRoot() -- ellis
+ //#include <kaccelbase.h>
+@@ -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<KIO::CopyInfo> 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"<<endl;
++ m_dotDirectory = new KSimpleConfig( dotDirectoryPath(), true );
++ // recursion
++ slotNewItems( entries );
++ delete m_dotDirectory;
++ m_dotDirectory = 0;
++ return;
++ }
++
+ for (; it.current(); ++it)
+ {
+ KURL url = it.current()->url();
+@@ -1026,15 +1038,6 @@ void KDIconView::slotNewItems( const KFi
+ kdDebug(1214)<<"Using saved position"<<endl;
+ }
+ }
+- else
+- {
+- // Not found, we'll need to save the new pos
+- kdDebug(1214)<<"slotNewItems(): New item without position information, try to find a sane location"<<endl;
+-
+- moveToFreePosition(fileIVI);
+-
+- m_bNeedSave = true;
+- }
+ }
+ }
+
+@@ -1638,6 +1641,98 @@ void KDIconView::moveToFreePosition(QIco
+ }
+
+
++QPoint KDIconView::findPlaceForIconCol( int column, int dx, int dy)
++{
++ if (column < 0)
++ return QPoint();
++
++ QRect rect;
++ rect.moveTopLeft( QPoint(column * dx, 0) );
++ rect.setWidth(dx);
++ rect.setHeight(dy);
++
++ if (rect.right() > 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<KIO::CopyInfo> &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 <pwd.h>
+ #include <errno.h>
+
++#include <sys/prctl.h>
+ #include <sys/time.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
+@@ -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 <literal>Plastik</literal>.
+
++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 <hansen@kde.org>
++ Copyright (C) 2000-2003 Oswald Buddenhagen <ossi@kde.org>
++
++
++ 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 <stdlib.h>
++
++#include <kapplication.h>
++#include <kseparator.h>
++#include <klocale.h>
++#include <kpushbutton.h>
++#include <kstdguiitem.h>
++
++#include <qcombobox.h>
++#include <qvbuttongroup.h>
++#include <qstyle.h>
++#include <qlayout.h>
++#include <qaccel.h>
++#include <qpopupmenu.h>
++
++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 <hansen@kde.org>
++ Copyright (C) 2000-2003 Oswald Buddenhagen <ossi@kde.org>
++
++
++ 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 <qradiobutton.h>
++
++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 <qtooltip.h>
+ #include <qaccel.h>
+ #include <qeventloop.h>
++#include <qbitmap.h>
+
+ #include <pwd.h>
+ #include <grp.h>
+@@ -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).
+ <emphasis>Never</emphasis> list <systemitem class="username">root</systemitem>.
+
++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 <libaudit.h>
++#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 <qtimer.h>
+ #include <qcursor.h>
+ #include <qpalette.h>
++#include <qfile.h>
+
+ #include <stdlib.h> // free(), exit()
+ #include <unistd.h> // 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 <signal.h>
+
++#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 <mccann@jhu.edu>
++ * Copyright (C) 2007 Kevin Kofler <Kevin@tigcc.ticalc.org>
++ *
++ * 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 <stdlib.h>
++#include <string.h>
++#include <pwd.h>
++
++#define DBUS_API_SUBJECT_TO_CHANGE
++#include <dbus/dbus.h>
++
++#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 <mccann@jhu.edu>
++ * Copyright (C) 2007 Kevin Kofler <Kevin@tigcc.ticalc.org>
++ *
++ * 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 <pwd.h>
++
++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 <config.ci>
+
+@@ -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 <ctype.h>
+ #include <signal.h>
+
++#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 <sched.h>
+ #endif
+
+-#if defined(HAVE_XTEST) || defined(HAVE_XKB)
+ # include <X11/Xlib.h>
++#if defined(HAVE_XTEST) || defined(HAVE_XKB)
+ # include <X11/keysym.h>
+ #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<KdmItem *> 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 <qfile.h>
+ #include <qfileinfo.h>
+-//#include <qtimer.h> // animation timer - TODO
++#include <qtimer.h> // animation timer - TODO
+ #include <qobjectlist.h>
+ #include <qpainter.h>
+ #include <qwidget.h>
+ #include <qregion.h>
++#include <qlineedit.h>
++#include <qapplication.h>
+
+ #include <unistd.h>
+
+@@ -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<QPaintEvent *>(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 <kdebug.h>
+@@ -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 <kglobal.h>
+ #include <kdebug.h>
+@@ -35,9 +36,7 @@
+ #include <qwidget.h>
+ #include <qlayout.h>
+ #include <qimage.h>
+-#ifdef DRAW_OUTLINE
+-# include <qpainter.h>
+-#endif
++#include <qpainter.h>
+
+ 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<KdmItem *>( parent );
++ KdmItem *parentItem = static_cast<KdmItem *>( 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( &copy, 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<KdmItem *>::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<KdmItem*>( 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 <config.h>
+
+ #include "kdmpixmap.h"
++#include <kdmconfig.h>
+
+ #include <kimageeffect.h>
+ #ifdef HAVE_LIBART
+@@ -29,6 +30,7 @@
+ #endif
+
+ #include <kdebug.h>
++#include <kstandarddirs.h>
+
+ #include <qpainter.h>
+ #include <qpixmap.h>
+@@ -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 <config.h>
+ #include "kdmlabel.h"
+-#include <kgreeter.h>
++#include "kdmconfig.h"
++#include "../kgreeter.h"
+
+ #include <kglobal.h>
+ #include <klocale.h>
+@@ -31,6 +33,7 @@
+ #include <qpainter.h>
+ #include <qfontmetrics.h>
+ #include <qtimer.h>
++#include <qaccel.h>
+
+ #include <unistd.h>
+ #include <sys/utsname.h>
+@@ -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 <stock> element. Check your theme!" << endl;
++ kdDebug() << timestamp() << " Invalid <stock> 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<QChar,QString> 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 <qstring.h>
+ #include <qstringlist.h>
+ #include <qfont.h>
++#include <sys/time.h>
+
+ 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<SessType> sessionTypes;
++ QStringList randomFaces;
++ QMap<QString, QString> 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 <klocale.h>
++#include <kiconloader.h>
+
+ #include <qaccel.h>
+ #include <qlayout.h>
+@@ -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 <unistd.h>
+ #include <sys/utsname.h>
+
++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 <kcrash.h>
+ #include <kstandarddirs.h>
+ #include <ksimpleconfig.h>
++#include <klocale.h>
++#include <kdebug.h>
+
+ #include <qtimer.h>
+ #include <qcursor.h>
+@@ -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 <klistview.h>
+ #include <ksimpleconfig.h>
+ #include <kstringhandler.h>
++#include <kdebug.h>
+
+ #undef Unsorted // x headers suck - make qdir.h work with --enable-final
+ #include <qdir.h>
+@@ -46,6 +47,7 @@ Foundation, Inc., 51 Franklin Street, Fi
+ #include <qmemarray.h>
+ #include <qimage.h>
+ #include <qmovie.h>
++#include <qpainter.h>
+ #include <qpopupmenu.h>
+ #include <qtimer.h>
+ #include <qheader.h>
+@@ -63,27 +65,46 @@ Foundation, Inc., 51 Franklin Street, Fi
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <sys/types.h>
++#include <utmp.h>
++#include <utmpx.h>
+
+ #include <X11/Xlib.h>
+
+ 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<int> 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 <acronym>FiFo</acronym>.
+
++Key: AllowSuspend
++Type: enum
++ None/SHUT_NONE: no <guilabel>Suspend...</guilabel> menu entry is shown at all
++ Root/SHUT_ROOT: the <systemitem class="username">root</systemitem> 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 <liblazy.h>
+ #include "kdmshutdown.h"
+ #include "kdm_greet.h"
+
+@@ -34,6 +35,7 @@ Foundation, Inc., 51 Franklin Street, Fi
+ #include <kdialog.h>
+ #include <kstandarddirs.h>
+ #include <kuser.h>
++#include <kdebug.h>
+
+ #include <qcombobox.h>
+ #include <qvbuttongroup.h>
+@@ -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<KDMDelayedPushButton*>(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( "<qt><center><b><nobr>"
+ "%1%2"
+ "</nobr></b></center><br></qt>" )
+- .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("<br>(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:
+ <emphasis>Do not</emphasis> 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.
++ <emphasis>Do not</emphasis> 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 &amp; 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.
+ </para><para>
+ The default is something reasonable for the system on which &kdm; was built,
+- like <command>/usr/X11R6/bin/X</command>.
++ like <command>/usr/bin/X</command>.
+
+ 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 <guilabel>Shutdown...</guilabel> menu entry is shown at all
+ Root/SHUT_ROOT: the <systemitem class="username">root</systemitem> 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. <emphasis>Use with extreme care!</emphasis>
+@@ -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 <coolo@suse.de>
++#
++
++#
++# 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 <klocale.h>
+ #include <kpushbutton.h>
+ #include <kstdguiitem.h>
++#include <kglobalsettings.h>
+
+ #include <qlabel.h>
+ #include <qlayout.h>
+@@ -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(<IN>) {
++ if (/^Daemon version:/) {
++ close(IN);
++ return 1;
++ }
++ }
++ close(IN);
++ return 0;
++}
++
++sub formatHTML($$)
++{
++ my ($query, $hits) = @_;
++
++ print "<html>\n<body\n<ul>\n";
++
++ foreach my $hit(@$hits) {
++ print "<li>$hit</li>\n";
++ }
++ print "</ul>\n</body>\n</html>\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(<IN>) {
++ 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 "<a href=\"help:/$appName\">$appName</a>";
++ }
++ return "<a href=\"help:/$appName2/$appName\">$appName ($appName2)</a>";
++}
++
++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(<IN>) {
++ 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 <qregexp.h>
+ #include <qfileinfo.h>
++#include <stdlib.h>
+
+ #include <kdebug.h>
+ #include <kdesktopfile.h>
+@@ -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 <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
++#include <stdlib.h>
+
+ #include <qdir.h>
+ #include <qfile.h>
+@@ -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 <stdlib.h>
++
+ #include <kdebug.h>
+ #include <kservicegroup.h>
+
+@@ -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 @@
+ </table-of-contents>
+ </xsl:template>
+
++<xsl:template match="article">
++<table-of-contents>
++<xsl:apply-templates select="sect1"/>
++</table-of-contents>
++</xsl:template>
++
+ <xsl:template match="chapter">
+ <chapter>
+ <title><xsl:value-of select="title"/></title>
+@@ -20,7 +26,15 @@
+ <section>
+ <title><xsl:value-of select="title"/></title>
+ <anchor><xsl:value-of select="@id"/></anchor>
++<xsl:apply-templates select="sect2"/>
+ </section>
+ </xsl:template>
+
++<xsl:template match="sect2">
++<subsection>
++<title><xsl:value-of select="title"/></title>
++<anchor><xsl:value-of select="@id"/></anchor>
++</subsection>
++</xsl:template>
++
+ </xsl:stylesheet>
+--- 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 <qregexp.h>
+ #include <qfileinfo.h>
++#include <stdlib.h>
+
+ #include <kdebug.h>
+ #include <kdesktopfile.h>
+@@ -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 <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
++#include <stdlib.h>
+
+ #include <qdir.h>
+ #include <qfile.h>
+@@ -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 <stdlib.h>
++
+ #include <kdebug.h>
+ #include <kservicegroup.h>
+
+@@ -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 @@
+ </table-of-contents>
+ </xsl:template>
+
++<xsl:template match="article">
++<table-of-contents>
++<xsl:apply-templates select="sect1"/>
++</table-of-contents>
++</xsl:template>
++
+ <xsl:template match="chapter">
+ <chapter>
+ <title><xsl:value-of select="title"/></title>
+@@ -20,7 +26,15 @@
+ <section>
+ <title><xsl:value-of select="title"/></title>
+ <anchor><xsl:value-of select="@id"/></anchor>
++<xsl:apply-templates select="sect2"/>
+ </section>
+ </xsl:template>
+
++<xsl:template match="sect2">
++<subsection>
++<title><xsl:value-of select="title"/></title>
++<anchor><xsl:value-of select="@id"/></anchor>
++</subsection>
++</xsl:template>
++
+ </xsl:stylesheet>
+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 <kaccel.h>
+ #include <kservice.h>
+ #include <kprocess.h>
++#include <qregexp.h>
+
+ #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 @@
+
+ <entry name="MenuExtensions" key="Extensions" type="StringList" >
+ <label>Optional Menus</label>
+- <default>prefmenu.desktop,systemmenu.desktop</default>
++ <default>recentdocs.desktop,systemmenu.desktop</default>
+ </entry>
+
+ <entry name="RecentAppsStat" type="StringList" >
+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 <dbera.web@gmail.com>
++
++ 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 <qdatetime.h>
++#include <qmutex.h>
++#include <qstringlist.h>
++#include <qapplication.h>
++#include <time.h>
++
++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<QStringList> 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<Hit>;
++ 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<Hit> *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 <binner@kde.org> *
++ * Copyright (c) 2006 Debajyoti Bera <dbera.web@gmail.com> *
++ * *
++ * 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 <qregexp.h>
++#include <qtimer.h>
++
++#include <kapplication.h>
++#include <kdesktopfile.h>
++#include <kgenericfactory.h>
++#include <kservice.h>
++
++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<KickoffBeaglePlugin>( "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<QStringList> all = hit->getAllProperties();
++ QDictIterator<QStringList> 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<Hit> *hits = result->getHits();
++ if (hits == NULL) {
++ kdDebug () << "Hmm... null" << endl;
++ delete result;
++ return;
++ }
++ kickoffSearchInterface()->initCategoryTitlesUpdate();
++
++ QPtrListIterator<Hit> 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 <dbera.web@gmail.com>
++
++ 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 <qdict.h>
++#include <qptrlist.h>
++#include <qthread.h>
++#include <qevent.h>
++#include <qmutex.h>
++
++#include <kdebug.h>
++#include <kurl.h>
++
++extern "C" {
++#include <glib.h>
++#include <beagle/beagle.h>
++}
++
++// 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<QStringList>& 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<QStringList> 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<Hit> *getHits () const;
++
++private:
++ // lists of hits
++ QPtrList<Hit> *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 <binner@kde.org> *
++ * Copyright (c) 2006 Debajyoti Bera <dbera.web@gmail.com> *
++ * *
++ * 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<BeagleSearchClient> 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
--- /dev/null
+++ b/opensuse/core/tdebase/kickoff-data.tar.bz2
Binary files 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 <qcheckbox.h>
++#include <qgroupbox.h>
+ #include <qdir.h>
+ #include <qlabel.h>
+ #include <qlayout.h>
+ #include <qpushbutton.h>
+ #include <qradiobutton.h>
++#include <qcombobox.h>
++#include <qbuttongroup.h>
+
++#include <dcopref.h>
+ #include <kapplication.h>
+ #include <kdebug.h>
+ #include <kdesktopfile.h>
+@@ -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 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>410</width>
+- <height>437</height>
++ <width>923</width>
++ <height>649</height>
+ </rect>
+ </property>
+ <vbox>
+@@ -19,6 +19,59 @@
+ <property name="margin">
+ <number>0</number>
+ </property>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout5</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Start menu style:</string>
++ </property>
++ <property name="buddy" stdset="0">
++ <cstring>comboMenuStyle</cstring>
++ </property>
++ </widget>
++ <widget class="QComboBox">
++ <item>
++ <property name="text">
++ <string>SUSE</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>KDE</string>
++ </property>
++ </item>
++ <property name="name">
++ <cstring>m_comboMenuStyle</cstring>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer4</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>40</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_kmenuGroup</cstring>
+@@ -38,6 +91,14 @@
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
++ <widget class="QCheckBox" row="0" column="0">
++ <property name="name">
++ <cstring>m_openOnHover</cstring>
++ </property>
++ <property name="text">
++ <string>Open menu on mouse hover</string>
++ </property>
++ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>kcfg_MenuEntryFormat</cstring>
+@@ -377,6 +438,8 @@
+ </widget>
+ </vbox>
+ </widget>
++<customwidgets>
++</customwidgets>
+ <tabstops>
+ <tabstop>m_formatSimple</tabstop>
+ <tabstop>m_formatNameDesc</tabstop>
+@@ -400,8 +463,5 @@
+ <includehints>
+ <includehint>klistview.h</includehint>
+ <includehint>knuminput.h</includehint>
+- <includehint>knuminput.h</includehint>
+- <includehint>knuminput.h</includehint>
+- <includehint>knuminput.h</includehint>
+ </includehints>
+ </UI>
+--- 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 @@
+ <label>A list of extensions that have been loaded at runtime. In the case of a crash these extensions will not be loaded at the next Kicker start, in case they caused the crash</label>
+ </entry>
+
++<entry name="LegacyKMenu" type="Bool" >
++ <label>When this option is enabled, the classic K Menu is used.</label>
++ <default>false</default>
++ </entry>
++
++<entry name="OpenOnHover" type="Bool" >
++ <label>When this option is enabled, the SUSE Menu does open on mouse hover.</label>
++ <default>true</default>
++ </entry>
++
++<entry name="ScrollFlipView" type="Bool" >
++ <label>When this option is enabled, the SUSE Menu application view switching will scroll.</label>
++ <default>true</default>
++ </entry>
++
++<entry name="KMenuWidth" type="Int">
++ <label>Preferred width of the KMenu</label>
++ <default>0</default>
++ </entry>
++
++<entry name="KMenuHeight" type="Int">
++ <label>Preferred width of the KMenu</label>
++ <default>0</default>
++ </entry>
++
++<entry name="KickoffFontPointSizeOffset" type="Int" >
++ <label>With this option the scale of the fonts Kickoff uses can be influenced</label>
++ <default>0</default>
++ <min>-100</min>
++ <max>100</max>
++ </entry>
++
++<entry name="KickoffSearchAddressBook" type="Bool" >
++ <label>When this option is enabled, kabc is utilized to search for addresses. This may start KMail.</label>
++ <default>false</default>
++ </entry>
++
++<entry name="KickoffDrawGeekoEye" type="Bool" >
++ <label>When this option is enabled, the Geeko eye moves when the mouse hovers the start menu button</label>
++ <default>false</default>
++ </entry>
++
++<entry name="KickoffTabBarFormat" type="Enum" >
++ <choices>
++ <choice name="LabelAndIcon">
++ <label>Show names and icons on tabs</label>
++ </choice>
++ <choice name="LabelOnly">
++ <label>Show only the names</label>
++ </choice>
++ <choice name="IconOnly">
++ <label>Show only the icons</label>
++ </choice>
++ </choices>
++ <default>LabelAndIcon</default>
++ <label>Appearace of the Kickoff tabbar</label>
++ </entry>
++
++<entry name="KickoffSwitchTabsOnHover" type="Bool" >
++ <label>When this option is enabled, the tabs in the Kickoff menu will switch without the need to click</label>
++ <default>true</default>
++ </entry>
++
++
+ </group>
+
+ <group name="menus">
+@@ -172,6 +236,19 @@
+ <default>false</default>
+ </entry>
+
++<entry name="Favorites" type="StringList">
++ <label>The menu entries shown in the Favorites tab</label>
++ </entry>
++
++<entry name="FirstRun" type="Bool" >
++ <label>Whether the panel has been started before or not</label>
++ <default>false</default>
++ </entry>
++
++<entry name="FirstSeenApps" type="StringList">
++ <label>When the applications were first seen by Kickoff</label>
++ </entry>
++
+ </group>
+
+ <group name="button_tiles">
+@@ -337,6 +414,29 @@
+
+ </group>
+
++ <group name="SearchField">
++ <entry key="History" type="PathList">
++ <default></default>
++ <label></label>
++ <whatsthis></whatsthis>
++ </entry>
++ <entry key="HistoryLength" type="Int">
++ <default>50</default>
++ <label></label>
++ <whatsthis></whatsthis>
++ </entry>
++ <entry key="CompletionItems" type="PathList">
++ <default></default>
++ <label></label>
++ <whatsthis></whatsthis>
++ </entry>
++ <entry key="CompletionMode" type="Int">
++ <default>2</default>
++ <label></label>
++ <whatsthis></whatsthis>
++ </entry>
++ </group>
++
+ </kcfg>
+
+
+--- libkicker/kickertip.cpp (Revision 849788)
++++ libkicker/kickertip.cpp (Revision 849791)
+@@ -38,6 +38,7 @@
+
+ // putting this #include higher results in compile errors
+ #include <netwm.h>
++#include <assert.h>
+
+ 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 <kipc.h>
+ #include <kstandarddirs.h>
+ #include <klocale.h>
++#include <kdebug.h>
+
+ #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<QPopupMenu*>(m_popup))
++ static_cast<QPopupMenu*>(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 <binner@kde.org> *
++ * Copyright (c) 2006 Debajyoti Bera <dbera.web@gmail.com> *
++ * *
++ * 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 <qobject.h>
++#include <kurl.h>
++#include <kservice.h>
++
++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 <binner@kde.org> *
++ * *
++ * 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 <binner@kde.org> *
++ * *
++ * 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 <qobject.h>
++
++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 <binner@kde.org> *
++ * *
++ * 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 <qobjectlist.h>
++
++KickoffSearch::Plugin::Plugin(QObject *parent, const char* name )
++ :QObject( parent, name )
++{
++}
++
++KickoffSearch::Plugin::~Plugin()
++{
++}
++
++KickoffSearch::KickoffSearchInterface* KickoffSearch::Plugin::kickoffSearchInterface()
++{
++ return static_cast<KickoffSearchInterface*>( 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 <qvaluelist.h>
+
+ class PanelKMenu;
++class KMenu;
+ class KickerClientMenu;
++class KMenuStub;
+ class PanelPopupButton;
+
+ typedef QValueList<PanelPopupButton*> 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<KickerClientMenu*> 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<QWidget*>(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 <wstephenson@novell.com>
++
++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 <qapplication.h>
++#include <qhbox.h>
++#include <qheader.h>
++#include <assert.h>
++
++#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<KMenuItem*>(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 <binner@kde.org>
++
++ 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 <kdebug.h>
++
++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;index<term.length();index++) {
++ if (current_part.isEmpty() && query_term[index]=='-')
++ exclude_part = true;
++ else if (term[index]=='\'' || term[index]=='"') {
++ if (within_quotes)
++ add_term();
++ else
++ within_quotes = true;
++ }
++ else if (!within_quotes && query_term[index]==' ')
++ add_term();
++ else if (!exclude_part && !within_quotes && query_term[index]=='O' && index+1<term.length() && query_term[index+1]=='R') {
++ index++;
++ alternatives.append(current_alternative);
++ current_alternative = new Alternative;
++ within_quotes = false;
++ exclude_part = false;
++ current_part = QString::null;
++ }
++ else
++ current_part+=term[index];
++ }
++ add_term();
++ alternatives.append(current_alternative);
++
++#if 0
++ for (Alternative* alt=alternatives.first(); alt; alt=alternatives.next()) {
++ kdDebug() << "---" << endl;
++ kdDebug() << "*** includes = " << alt->includes << endl;
++ kdDebug() << "*** excludes = " << alt->excludes << endl;
++ }
++#endif
++}
++
++void Query::add_term() {
++ if (!current_part.isEmpty()) {
++ if (current_part.startsWith("*"))
++ current_part=current_part.mid(1);
++
++ if (current_part.endsWith("*"))
++ current_part=current_part.mid(0,current_part.length()-1);
++
++ if (exclude_part)
++ current_alternative->excludes+=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 <dbera.web@gmail.com>
++ Copyright (c) 2006 Dirk Mueller <mueller@kde.org>
++
++ 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 <stdlib.h>
++#include <sys/types.h>
++#include <unistd.h>
++#include <dmctl.h>
++#include <inttypes.h>
++
++#include <qimage.h>
++#include <qpainter.h>
++#include <qstyle.h>
++#include <qwidgetstack.h>
++#include <qlayout.h>
++#include <qlabel.h>
++#include <qregexp.h>
++#include <qfile.h>
++#include <qstylesheet.h>
++#include <qaccel.h>
++#include <qcursor.h>
++#include <qdir.h>
++#include <qsimplerichtext.h>
++#include <qtooltip.h>
++#include <qtabbar.h>
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kaboutkde.h>
++#include <kaction.h>
++#include <kbookmarkmenu.h>
++#include <kconfig.h>
++#include <kdebug.h>
++#include <kglobal.h>
++#include <kglobalsettings.h>
++#include <kiconloader.h>
++#include <klineedit.h>
++#include <klocale.h>
++#include <kmessagebox.h>
++#include <kstandarddirs.h>
++#include <kcombobox.h>
++#include <kwin.h>
++#include <kdebug.h>
++#include <kuser.h>
++#include <kurllabel.h>
++#include <krun.h>
++#include <kmimetype.h>
++#include <krecentdocument.h>
++#include <kcompletionbox.h>
++#include <kurifilter.h>
++#include <kbookmarkmanager.h>
++#include <kbookmark.h>
++#include <kprocess.h>
++#include <kio/jobclasses.h>
++#include <kio/job.h>
++#include <dcopref.h>
++#include <konq_popupmenu.h>
++#include <konqbookmarkmanager.h>
++#include <kparts/componentfactory.h>
++
++#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 <dmctl.h>
++#include <sys/vfs.h>
++#include <mykickoffsearchinterface.h>
++
++#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("<u>","&");
++ 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 <assert.h>
++
++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&nbsp;<b>%1</b>&nbsp;on&nbsp;<b>%2</b>" )
++ .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, "<qt>" + i18n( "Most commonly used applications and documents" ) + "</qt>" );
++ m_tabs[ApplicationsTab] = new QTab;
++ m_tabBar->addTab(m_tabs[ApplicationsTab]);
++ m_tabBar->setToolTip(ApplicationsTab, "<qt>" + i18n( "List of installed applications" ) +
++ "</qt>" );
++
++ m_tabs[ComputerTab] = new QTab;
++ m_tabBar->addTab(m_tabs[ComputerTab]);
++ m_tabBar->setToolTip(ComputerTab, "<qt>" + i18n( "Information and configuration of your "
++ "system, access to personal files, network resources and connected disk drives")
++ + "</qt>");
++#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, "<qt>" + i18n( "Recently used applications and documents" ) +
++ "</qt>" );
++ m_tabs[LeaveTab] = new QTab;
++ m_tabBar->addTab(m_tabs[LeaveTab]);
++ m_tabBar->setToolTip(LeaveTab, i18n("<qt>Logout, switch user, switch off or reset,"
++ " suspend of the system" ) + "</qt>" );
++
++ if (KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) {
++ m_tabs[FavoriteTab]->setText(workaroundStringFreeze(i18n("<p align=\"center\"> <u>F</u>avorites</p>")));
++ m_tabs[HistoryTab]->setText(workaroundStringFreeze(i18n("<p align=\"center\"><u>H</u>istory</p>")));
++ m_tabs[ComputerTab]->setText(
++ workaroundStringFreeze(i18n("<p align=\"center\"> <u>C</u>omputer</p>")));
++ m_tabs[ApplicationsTab]->setText(workaroundStringFreeze(i18n("<p align=\"center\"><u>A</u>pplications</p>")));
++ m_tabs[LeaveTab]->setText(
++ workaroundStringFreeze(i18n("<p align=\"center\"><u>L</u>eave</p>")));
++ }
++
++ 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<KLineEdit*>(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<QMouseEvent*>(e);
++ p = me->globalPos();
++ }
++ else if (e->type() == QEvent::Wheel) {
++ QWheelEvent* we = static_cast<QWheelEvent*>(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<QWidget*>(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<QWidget*>(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<QWidget*>(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<ItemView*>(m_stacker->visibleWidget());
++
++ if (view)
++ {
++ bool handled = true;
++ switch (static_cast<QKeyEvent*>(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<KMenuItem*>(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<FlipScrollView*>(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<FlipScrollView*>(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<QScrollView*>(raiseWidget))
++ // m_activeTab->setFocusProxy(static_cast<QScrollView*>(raiseWidget)->viewport());
++
++ if (0 && /*raiseWidget == m_stacker->visibleWidget() &&*/ !raiseWidget->hasFocus()) {
++
++ if (dynamic_cast<QScrollView*>(raiseWidget))
++ static_cast<QScrollView*>(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<ItemView*>(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<KSharedPtr<KSycocaEntry>,QCString> slist;
++ KSortableValueList<KSharedPtr<KSycocaEntry>,QCString> glist;
++ QMap<QString,QString> specialTitle;
++ QMap<QString,QString> categoryIcon;
++ QMap<QString,QString> shortenedMenuPath;
++#endif
++
++ for (; it != _list.end(); ++it)
++ {
++ KSycocaEntry * e = *it;
++
++ if (e->isType(KST_KServiceGroup))
++ {
++ KServiceGroup::Ptr g(static_cast<KServiceGroup *>(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<KService *>(_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<KService *>(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<KServiceGroup *>(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<KService *>(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<KSycocaEntry*>(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<KService *>(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("<p>You have chosen to open another desktop session.<br>"
++ "The current session will be hidden "
++ "and a new login screen will be displayed.<br>"
++ "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.</p>")
++ .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("<center><b>%1</b></center>\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("<center><b>%1</b></center>\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("<center><b>%1</b></center>\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()<screen.height()/2)
++ ? TopDown : BottomUp);
++ }
++
++ m_browserDirty=true;
++ m_recentDirty=true;
++
++ updateMedia();
++ m_mediaFreeTimer.start(10 * 1000); // refresh all 10s
++
++ m_stacker->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<QString>::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<KServiceGroup *>(e));
++ if(!g->noDisplay())
++ createNewProgramList(g->relPath());
++ } else if(e->isType(KST_KService)) {
++ KService::Ptr s(static_cast<KService *>(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<KServiceGroup *>(e));
++ if(!g->noDisplay())
++ searchProgramList(g->relPath());
++ } else if(e->isType(KST_KService)) {
++ KService::Ptr s(static_cast<KService *>(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<KickoffSearch::Plugin>
++ ( 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; i<num_categories; ++i) {
++ categorised_hit_total [i] = 0;
++ max_category_id [i] = base_category_id [i];
++ }
++}
++
++void KMenu::doQuery (bool return_pressed)
++{
++ QString query_str = m_kcommand->lineEdit()->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; i<num_categories; ++i)
++ already_added [i] = (max_category_id [i] != base_category_id [i]);
++}
++
++void KMenu::updateCategoryTitles()
++{
++ // update category title
++ for (int i=0; i<num_categories; ++i) {
++ if (i == OTHER)
++ continue;
++ // nothing is in this category
++ if (max_category_id [i] == base_category_id [i])
++ continue;
++
++ KMenuItemSeparator *sep = 0;
++
++ // if nothing was in this category before but now there is
++ if (! already_added [i]) {
++ // insert a new title for this category
++ int index = getHitMenuItemPosition (new HitMenuItem (
++ base_category_id[i],
++ i));
++ QString title = QString ("%1").arg (i18n(categories [i].utf8()));
++ sep = m_searchResultsWidget->insertSeparator(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<KMenuItemSeparator*>( 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<KMenuItem*>(item);
++ if (!kitem)
++ return;
++
++ KFileItemList _items;
++ _items.setAutoDelete(true);
++
++ if (dynamic_cast<KMenuItemSeparator*>(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<KMenuItem*>(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<KMenuItem*>(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<HitMenuItem> 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<HitMenuItem> 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<KMenuItem*>(item);
++ KMenuItem* kafterNow = dynamic_cast<KMenuItem*>(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<KMenuSpacer*>(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 <liblazy.h>
++#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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>KMenuItemBase</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>KMenuItemBase</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>514</width>
++ <height>80</height>
++ </rect>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>7</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="minimumSize">
++ <size>
++ <width>0</width>
++ <height>0</height>
++ </size>
++ </property>
++ <property name="maximumSize">
++ <size>
++ <width>32767</width>
++ <height>80</height>
++ </size>
++ </property>
++ <property name="caption">
++ <string>KMenuItemBase</string>
++ </property>
++ <grid>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <property name="margin">
++ <number>2</number>
++ </property>
++ <widget class="QLayoutWidget" row="0" column="1">
++ <property name="name">
++ <cstring>layout11</cstring>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>itemTitle</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>7</hsizetype>
++ <vsizetype>1</vsizetype>
++ <horstretch>1</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="font">
++ <font>
++ <pointsize>14</pointsize>
++ </font>
++ </property>
++ <property name="text">
++ <string></string>
++ </property>
++ <property name="textFormat">
++ <enum>RichText</enum>
++ </property>
++ <property name="alignment">
++ <set>WordBreak|AlignTop</set>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>itemDescription</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>7</hsizetype>
++ <vsizetype>7</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>1</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="paletteForegroundColor">
++ <color>
++ <red>188</red>
++ <green>188</green>
++ <blue>188</blue>
++ </color>
++ </property>
++ <property name="text">
++ <string></string>
++ </property>
++ <property name="textFormat">
++ <enum>RichText</enum>
++ </property>
++ <property name="alignment">
++ <set>WordBreak|AlignTop</set>
++ </property>
++ </widget>
++ </vbox>
++ </widget>
++ <widget class="QLayoutWidget" row="0" column="0">
++ <property name="name">
++ <cstring>layout4</cstring>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>itemPixmap</cstring>
++ </property>
++ <property name="minimumSize">
++ <size>
++ <width>64</width>
++ <height>64</height>
++ </size>
++ </property>
++ <property name="text">
++ <string></string>
++ </property>
++ <property name="alignment">
++ <set>AlignTop|AlignHCenter</set>
++ </property>
++ </widget>
++ </vbox>
++ </widget>
++ </grid>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
+--- 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 <mueller@kde.org>
++
++ 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 <qiconset.h>
++#include <qpainter.h>
++#include <qcursor.h>
++#include <qstyle.h>
++#include <qapplication.h>
++
++#include <kdebug.h>
++#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 <coolo@novell.com>
++
++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 <dcopobject.h>
++#include <qobject.h>
++#include <qstringlist.h>
++
++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 <wstephenson@novell.com>
++
++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 <qscrollview.h>
++#include <qlistview.h>
++#include <qframe.h>
++#include <qtimer.h>
++#include <qpainter.h>
++#include <kstandarddirs.h>
++#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 <dbera.web@gmail.com>
++
++ 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 <dcopobject.h>
++#include <qintdict.h>
++#include <qpixmap.h>
++#include <qframe.h>
++#include <qtoolbutton.h>
++#include <qscrollview.h>
++#include <qtimer.h>
++#include <qbitmap.h>
++#include <qvbox.h>
++#include <qregexp.h>
++
++#include <kabc/addressbook.h>
++#include <kabc/stdaddressbook.h>
++#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<KickerClientMenu> 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<QString, QString> mimetype_iconstore;
++ QMap<QString, QString> 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<HitMenuItem> 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<HitMenuItem> 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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>KMenuBase</class>
++<widget class="QDialog">
++ <property name="name">
++ <cstring>KMenu</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>723</width>
++ <height>580</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>KMenu</string>
++ </property>
++ <property name="frameShadow" stdset="0">
++ <string>MShadow</string>
++ </property>
++ <property name="frameShape" stdset="0">
++ <string>MShape</string>
++ </property>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>m_search</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>20</x>
++ <y>40</y>
++ <width>190</width>
++ <height>54</height>
++ </rect>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <property name="margin">
++ <number>0</number>
++ </property>
++ <property name="spacing">
++ <number>0</number>
++ </property>
++ <widget class="QFrame">
++ <property name="name">
++ <cstring>m_searchFrame</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>5</hsizetype>
++ <vsizetype>0</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="minimumSize">
++ <size>
++ <width>0</width>
++ <height>52</height>
++ </size>
++ </property>
++ <property name="maximumSize">
++ <size>
++ <width>32767</width>
++ <height>52</height>
++ </size>
++ </property>
++ <property name="frameShape">
++ <enum>StyledPanel</enum>
++ </property>
++ <property name="frameShadow">
++ <enum>Raised</enum>
++ </property>
++ <property name="lineWidth">
++ <number>0</number>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout18</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>m_searchLabel</cstring>
++ </property>
++ <property name="backgroundOrigin">
++ <enum>ParentOrigin</enum>
++ </property>
++ <property name="font">
++ <font>
++ <pointsize>14</pointsize>
++ </font>
++ </property>
++ <property name="text">
++ <string>Search:</string>
++ </property>
++ </widget>
++ <widget class="KHistoryCombo">
++ <property name="name">
++ <cstring>m_kcommand</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>7</hsizetype>
++ <vsizetype>0</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>m_searchPixmap</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>1</hsizetype>
++ <vsizetype>1</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="minimumSize">
++ <size>
++ <width>32</width>
++ <height>32</height>
++ </size>
++ </property>
++ <property name="maximumSize">
++ <size>
++ <width>32</width>
++ <height>32</height>
++ </size>
++ </property>
++ <property name="backgroundMode">
++ <enum>PaletteBackground</enum>
++ </property>
++ <property name="backgroundOrigin">
++ <enum>ParentOrigin</enum>
++ </property>
++ <property name="scaledContents">
++ <bool>true</bool>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ </hbox>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer5_2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Preferred</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>16</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>m_footer</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>20</x>
++ <y>110</y>
++ <width>407</width>
++ <height>34</height>
++ </rect>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <property name="margin">
++ <number>4</number>
++ </property>
++ <property name="spacing">
++ <number>4</number>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>m_userInfo</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>3</hsizetype>
++ <vsizetype>0</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>User&amp;nbsp;&lt;b&gt;user&lt;/b&gt;&amp;nbsp;on&amp;nbsp;&lt;b&gt;host&lt;/b&gt;</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer13_2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>MinimumExpanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>10</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QToolButton">
++ <property name="name">
++ <cstring>m_branding</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>4</hsizetype>
++ <vsizetype>4</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="maximumSize">
++ <size>
++ <width>90</width>
++ <height>24</height>
++ </size>
++ </property>
++ <property name="text">
++ <string></string>
++ </property>
++ <property name="iconSet">
++ <iconset>image0</iconset>
++ </property>
++ <property name="usesBigPixmap">
++ <bool>true</bool>
++ </property>
++ <property name="autoRaise">
++ <bool>true</bool>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer13</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Fixed</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>14</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++</widget>
++<customwidgets>
++</customwidgets>
++<images>
++ <image name="image0">
++ <data format="XPM.GZ" length="2522">789cdd933d6fdb30104077ff0a21de8c82b12d5bb2507448f6021d0b141dc82369d9116d7d50b1ada2ffbdbca3c4444950244032b4b790efce7cd29de8eb59f4fddbd768763d692cb73b8820e7753493ad31971f3fbffc9a5c6d36d17219c5f36871f56972e57e104dd7324be325a2464cd24cc60a5120a6731eaf046241c879b64e113bc44dcc751223da802bc41de16ac092508a753a4754885922440a8892301332a5e79e10f91c169b0cf1963083345b231a423ee0bec78dc71c51c420393578249432e664be2354d2bd17628d0889cc0447bc20cab9d490205601a9df29e142cd3d9e0933b59234ba0321576b49d3d8f69878bc41544b952a6abf218c9590f41a9c70a5c0e33d21e885a2e1b4883ad1a9de2032420ac20f8affde3df5415bdea7f8b8c0fbed507fa59b0bf02119739f9172b46e755fc819dbf55bd07ba15fef0ec7f6b41f728c0dcf84bbc76ebedfbfde0d2042eb8fdd5b801de5b794281e06f716f7ee710f619d5227a1b01b1d0aeedc18e366660ec7b2ac18ab1d1a9745acd1ad3161f28631dbbb716d86c29112c2f86363770ec20a383a89b51a9a06b4b5503a2c10dd771b46d98cdcac180a052528cc13b781b6bd7759506d5b435541ddb6161cba16c0f5a174383872b3729057c19dbfe06ed16ddab642b7324638b77b870add3eaae76e1fb577db17e7fdcc5d586bcd5fddc59bdda7deed7d83db580a81ee93bb906eefd4ee0fa24201ddda53f9d4ad4ce92605fae466713843614ceddd17b83008d1b06618bd2b5e42de3da70b7019dfc1b2eb3af7e140a9ae7342d3d152babb75ee1a76ea7c9478ea5c92bd3bf6c7a870f6677cdc8cdd7d840bf40ef1cc7dfb716efd81eef78c7fd6fdfbf3e40f51236246</data>
++ </image>
++</images>
++<includes>
++ <include location="local" impldecl="in implementation">kmenubase.ui.h</include>
++</includes>
++<functions>
++ <function access="private" specifier="non virtual">init()</function>
++</functions>
++<layoutdefaults spacing="6" margin="11"/>
++<includehints>
++ <includehint>kcombobox.h</includehint>
++</includehints>
++</UI>
+--- 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 <mueller@kde.org>
++
++ 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 <qtabbar.h>
++
++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 <mueller@kde.org>
++
++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 <X11/Xlib.h>
++
++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 <binner@kde.org> *
++ * *
++ * 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 <dcopobject.h>
++#include <qintdict.h>
++#include <qpixmap.h>
++#include <qframe.h>
++#include <qtoolbutton.h>
++#include <klistview.h>
++#include <qdragobject.h>
++
++#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 <binner@kde.org>
++
++ 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 <qstringlist.h>
++#include <qptrlist.h>
++
++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<Alternative> 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 <mueller@kde.org>
++
++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 <qstring.h>
++#include <qpoint.h>
++
++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 <binner@kde.org> *
++ * *
++ * 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 <stdlib.h>
++#include <sys/types.h>
++#include <unistd.h>
++#include <dmctl.h>
++
++#include <qapplication.h>
++#include <qimage.h>
++#include <qpainter.h>
++#include <qstyle.h>
++#include <qwidgetstack.h>
++#include <qlayout.h>
++#include <qlabel.h>
++#include <qvbox.h>
++#include <qheader.h>
++#include <qdrawutil.h>
++#include <qdragobject.h>
++#include <qcursor.h>
++#include <qpaintdevicemetrics.h>
++#include <qbuffer.h>
++#include <qtooltip.h>
++#include <qstylesheet.h>
++#include <qiconview.h>
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kaboutkde.h>
++#include <kpixmapeffect.h>
++#include <kaction.h>
++#include <kbookmarkmenu.h>
++#include <kconfig.h>
++#include <kdebug.h>
++#include <kglobal.h>
++#include <kglobalsettings.h>
++#include <kiconloader.h>
++#include <klocale.h>
++#include <kmessagebox.h>
++#include <kstandarddirs.h>
++#include <kcombobox.h>
++#include <kwin.h>
++#include <kdebug.h>
++#include <kmimetype.h>
++#include <kmultipledrag.h>
++
++#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<ItemView*>( 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<ItemView*>( 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<KMenuItem*>( itemAbove() );
++ else
++ listview->m_lastOne = static_cast<KMenuItem*>( 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 + "<br><br>" + 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 + "<br><br>" + 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<KMenuItem*>( 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<KMenuItem*>(it.current())->id() == nId)
++ return static_cast<KMenuItem*>(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<KMenuItem*>(lastItem());
++
++ int i = 1;
++ QListViewItemIterator it(this);
++ for (;it.current(); ++i, ++it) {
++ if(i == nIndex)
++ return static_cast<KMenuItem*>(it.current());
++ }
++
++ return static_cast<KMenuItem*>(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<KMenuSpacer*>( 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<KMenuItem*>(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<KMenuItemSeparator*>( 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<KMenuItemSeparator*>( 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<KMenuItem*>(item);
++
++ if (dynamic_cast<KMenuItemHeader*>(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<KMenuSpacer*>( 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 <coolo@novell.com>
++
++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 <kapplication.h>
++#include <kdebug.h>
++#include <dcopclient.h>
++#include <dcopref.h>
++
++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 <binner@kde.org>
++ Stephan Kulow <coolo@kde.org>
++ Dirk Mueller <mueller@kde.org>
++
++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 <cassert>
++#include <cmath>
++
++#include <qtooltip.h>
++#include <qpainter.h>
++#include <qcursor.h>
++#include <private/qeffects_p.h>
++
++#include <klocale.h>
++#include <kapplication.h>
++#include <kstandarddirs.h>
++#include <kiconloader.h>
++#include <kdebug.h>
++
++#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<KNewButton*>(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<KNewButton*>(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<QMouseEvent *>(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<QMouseEvent *>(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<KMenu*>(m_popup));
++
++ disconnect(dynamic_cast<KMenu*>(m_popup), SIGNAL(aboutToHide()), this,
++ SLOT(slotStopAnimation()));
++ connect(dynamic_cast<KMenu*>(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<KMenu*>(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 <binner@kde.org>
++ Stephan Kulow <coolo@kde.org>
++ Dirk Mueller <mueller@kde.org>
++
++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 <qmovie.h>
++#include <qpoint.h>
++
++/**
++ * 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 <konq_drag.h>
+
+ 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<QPopupMenu*>(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<QPopupMenu*>(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<QPopupMenu*>(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 <unistd.h>
+ #include <dmctl.h>
+
++#include <qhbox.h>
+ #include <qimage.h>
++#include <qlabel.h>
+ #include <qpainter.h>
+ #include <qstyle.h>
++#include <qtimer.h>
++#include <qtooltip.h>
+
+ #include <dcopclient.h>
+ #include <kapplication.h>
+@@ -40,9 +44,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE
+ #include <kglobal.h>
+ #include <kglobalsettings.h>
+ #include <kiconloader.h>
++#include <klineedit.h>
+ #include <klocale.h>
+ #include <kmessagebox.h>
+ #include <kstandarddirs.h>
++#include <ktoolbarbutton.h>
+ #include <kwin.h>
+
+ #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 <qbitmap.h>
+ #include <qpixmap.h>
+ #include <qimage.h>
++#include <qmap.h>
+
+ #include <dcopclient.h>
+ #include <kapplication.h>
+@@ -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<KSycocaEntry*>(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<KService *>(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<int> nonemptyMenus;
++ std::set<int>::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 <qmap.h>
+ #include <qvaluevector.h>
++#include <set>
+
+ #include <ksycocaentry.h>
+ #include <kservice.h>
+@@ -41,8 +42,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE
+ * @author Rik Hemsley <rik@kde.org>
+ */
+
++class KLineEdit;
+ typedef QMap<int, KSycocaEntry::Ptr> EntryMap;
+ typedef QValueVector<QPopupMenu*> PopupMenuList;
++class PanelServiceMenu;
++typedef QMap<PanelServiceMenu*,int> 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<int> 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<KSycocaEntry*>(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<KSycocaEntry*>(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<KService *>(static_cast<KSycocaEntry*>(mapIt.data()));
++ if (s)
++ changeItem(mapIt.key(),KickerLib::menuIconSet(s->icon()),text(mapIt.key()));
++ else {
++ KServiceGroup *g = dynamic_cast<KServiceGroup *>(static_cast<KSycocaEntry*>(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<int> 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 <kprocess.h>
+ #include <qtabwidget.h>
+
++#include <stdlib.h>
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xutil.h>
+@@ -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 <mueller@kde.org>
++
++based on classic kdm greeter:
++
++ Copyright (C) 1997, 1998, 2000 Steffen Hansen <hansen@kde.org>
++ Copyright (C) 2000-2003 Oswald Buddenhagen <ossi@kde.org>
++
++
++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 <klocale.h>
++#include <klineedit.h>
++#include <kpassdlg.h>
++#include <kuser.h>
++
++#include <qregexp.h>
++#include <qlayout.h>
++#include <qlabel.h>
++#include <qtimer.h>
++
++#include <stdlib.h>
++#include <stdio.h>
++#include <stdarg.h>
++#include <syslog.h>
++
++//#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<QLayout *>(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<KdmLabel*>(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<KdmLabel*>(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<KPasswordEdit*>::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<KPasswordEdit*>::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<assert.h>
++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<KPasswordEdit*>::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 <mueller@kde.org>
++
++
++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 <qobject.h>
++#include <qlayout.h>
++
++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<QGridLayout*>(layoutItem); }
++
++ public slots:
++ void slotLoginLostFocus();
++ void slotActivity();
++
++ private:
++ void setActive( bool enable );
++ void setAllActive( bool enable );
++ void returnData();
++
++ QLabel *loginLabel;
++ QValueList<QLabel*> authLabel;
++ KLineEdit *loginEdit;
++ QWidget* m_parentWidget;
++ QValueList<KPasswordEdit*> 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
--- /dev/null
+++ b/opensuse/core/tdebase/krandr-0.5.2.1.diff.bz2
Binary files 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 <qframe.h>
+ #include <qcheckbox.h>
+ #include <qwidget.h>
++#include <qfileinfo.h>
+
+ #include <kapplication.h>
+ #include <kstandarddirs.h>
+@@ -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 <GL/glx.h>
++#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<QString, int> 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<QCString> argList;
++ for ( int i=1; i < n; i++)
++ argList.append( QCString(command[i].latin1()));
++ DCOPRef( launcher ).send( "exec_blind", app, DCOPArg( argList, "QValueList<QCString>" ) );
++ 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 <ett
+ #include <kpixmapeffect.h>
+ #include <kdialog.h>
+ #include <kseparator.h>
++#include <kmessagebox.h>
+
+ #include <sys/types.h>
+ #include <sys/utsname.h>
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <dmctl.h>
++#include <liblazy.h>
+
+ #include <X11/Xlib.h>
+
+ #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( "<qt><h3>Turn Off Computer</h3><p>Log out of the current session and turn off the computer</p></qt>" ) );
+ 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( "<qt><h3>Restart Computer</h3><p>Log out of the current session and restart the computer</p></qt>" ) );
+- }
+
++ 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<KSMDelayedPushButton*>(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 <kmessagebox.h>
++
++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 <ett
+ #include <qimage.h>
+
+ #include <klocale.h>
++#include <kconfig.h>
+ #include <kapplication.h>
+ #include <kdebug.h>
+ #include <kpushbutton.h>
+@@ -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 <kapplication.h>
+
+ // 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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TimedLogoutDlg</class>
++<widget class="QDialog">
++ <property name="name">
++ <cstring>TimedLogoutDlg</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>381</width>
++ <height>131</height>
++ </rect>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>5</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="caption">
++ <string>Confirmation</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <property name="margin">
++ <number>0</number>
++ </property>
++ <property name="spacing">
++ <number>0</number>
++ </property>
++ <widget class="QFrame">
++ <property name="name">
++ <cstring>frame3</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>5</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="frameShape">
++ <enum>StyledPanel</enum>
++ </property>
++ <property name="frameShadow">
++ <enum>Raised</enum>
++ </property>
++ <property name="lineWidth">
++ <number>2</number>
++ </property>
++ <property name="margin">
++ <number>0</number>
++ </property>
++ <property name="midLineWidth">
++ <number>0</number>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout10</cstring>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <property name="margin">
++ <number>0</number>
++ </property>
++ <property name="spacing">
++ <number>0</number>
++ </property>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout8</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout6</cstring>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <property name="margin">
++ <number>0</number>
++ </property>
++ <property name="spacing">
++ <number>0</number>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer3_2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Vertical</enum>
++ </property>
++ <property name="sizeType">
++ <enum>MinimumExpanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>20</width>
++ <height>2</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>m_logo</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>1</hsizetype>
++ <vsizetype>1</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="minimumSize">
++ <size>
++ <width>48</width>
++ <height>48</height>
++ </size>
++ </property>
++ <property name="scaledContents">
++ <bool>true</bool>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer3</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Vertical</enum>
++ </property>
++ <property name="sizeType">
++ <enum>MinimumExpanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>20</width>
++ <height>2</height>
++ </size>
++ </property>
++ </spacer>
++ </vbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout7</cstring>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <property name="margin">
++ <number>7</number>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>m_title</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>7</hsizetype>
++ <vsizetype>0</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="font">
++ <font>
++ <bold>1</bold>
++ </font>
++ </property>
++ <property name="text">
++ <string>Would you like to shutdown your computer?</string>
++ </property>
++ <property name="textFormat">
++ <enum>PlainText</enum>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter|AlignLeft</set>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>m_text</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>7</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>If you do not act, your computer will shutdown
++after X automatically.</string>
++ </property>
++ <property name="textFormat">
++ <enum>RichText</enum>
++ </property>
++ <property name="alignment">
++ <set>WordBreak|AlignVCenter</set>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer4</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Vertical</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Preferred</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>30</width>
++ <height>0</height>
++ </size>
++ </property>
++ </spacer>
++ </vbox>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout9</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>90</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>pushButton1</cstring>
++ </property>
++ <property name="text">
++ <string>Confirm</string>
++ </property>
++ <property name="on">
++ <bool>false</bool>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2_2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>90</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>pushButton2</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>1</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>Cancel</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2_2_2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>90</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++ </widget>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<connections>
++ <connection>
++ <sender>pushButton1</sender>
++ <signal>clicked()</signal>
++ <receiver>TimedLogoutDlg</receiver>
++ <slot>accept()</slot>
++ </connection>
++ <connection>
++ <sender>pushButton2</sender>
++ <signal>clicked()</signal>
++ <receiver>TimedLogoutDlg</receiver>
++ <slot>reject()</slot>
++ </connection>
++</connections>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
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( "<qt><h3>End Current Session</h3><p>Log out of the current session to login with a different user</p></qt>" ) );
+ 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( "<qt><h3>Turn Off Computer</h3><p>Log out of the current session and turn off the computer</p></qt>" ) );
+ 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( "<qt><h3>Restart Computer</h3><p>Log out of the current session and restart the computer</p><p>Hold the mouse button or the space bar for a short while to get a list of options what to boot</p></qt>" ) );
+ 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( "<qt><h3>Restart Computer</h3><p>Log out of the current session and restart the computer</p></qt>" ) );
+ }
+
+ 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 <slp.h>
++ ],[
++ 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 <stdlib.h>
+ #include <unistd.h>
+
++#include <qregexp.h>
++
+ #include <kaboutdata.h>
+ #include <kaction.h>
+ #include <kapplication.h>
+@@ -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 <config.h>
++
+ #include <qevent.h>
+
+ #include <dcopclient.h>
+@@ -34,6 +36,10 @@
+
+ #include <ksgrd/SensorClient.h>
+
++#if HAVE_SLP
++#include <slp.h>
++#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 <dns_sd.h>
+ #endif
++#if HAVE_SLP
++#include <slp.h>
++#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 <kartsdispatcher.h>
+ #include <kdebug.h>
+-#include <kplayobjectfactory.h>
+-#include <soundserver.h>
++#include <kdemm/simpleplayer.h>
++#include <kdemm/factory.h>
+
+ #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<Arts::TraderOffer> *offers = query.query();
+-
+- for (vector<Arts::TraderOffer>::iterator it = offers->begin();
+- it != offers->end(); ++it)
+- {
+- vector<string> *prop = (*it).getProperty("MimeType");
+- for (vector<string>::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 <kstdguiitem.h>
+ #include <kpixmapeffect.h>
+ #include <kpixmap.h>
++#include <kwin.h>
++#include <kwinmodule.h>
+
+ #include <qframe.h>
+ #include <qlabel.h>
+@@ -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 <X11/Xlib.h>
+
+ 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 <qstring.h>
+ #include <qmap.h>
+
++class FreeSpaceNotifier;
++
+ class MediaNotifier: public KDEDModule
+ {
+ Q_OBJECT
+@@ -52,6 +54,8 @@ private:
+ const QString &autoopenFile );
+
+ QMap<KIO::Job*,bool> 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 <ltinkl@suse.cz>
++ Copyright (c) 2008 Lubos Lunak <l.lunak@suse.cz>
++
++ 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 <http://www.gnu.org/licenses/>.
++*/
++
++#include "freespacenotifier.h"
++
++#include <sys/vfs.h>
++#include <unistd.h>
++
++#include <qdir.h>
++#include <qfile.h>
++#include <qlabel.h>
++#include <qspinbox.h>
++
++#include <kconfig.h>
++#include <kdebug.h>
++#include <klocale.h>
++#include <krun.h>
++
++#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 <ltinkl@suse.cz>
++ Copyright (c) 2008 Lubos Lunak <l.lunak@suse.cz>
++
++ 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 <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef _FREESPACENOTIFIER_H_
++#define _FREESPACENOTIFIER_H_
++
++#include <qtimer.h>
++
++#include <kdialogbase.h>
++
++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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>FreeSpaceWidget</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>Form1</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>489</width>
++ <height>108</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>warningLabel</cstring>
++ </property>
++ <property name="text">
++ <string></string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel2</cstring>
++ </property>
++ <property name="text">
++ <string>Would you like to run a file manager to free some disk space and fix the problem?</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer3</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Vertical</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>20</width>
++ <height>40</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout3</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel3</cstring>
++ </property>
++ <property name="text">
++ <string>Warn again when the free space is below</string>
++ </property>
++ </widget>
++ <widget class="QSpinBox">
++ <property name="name">
++ <cstring>spinbox</cstring>
++ </property>
++ <property name="suffix">
++ <string> MiB</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>30</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Vertical</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>20</width>
++ <height>16</height>
++ </size>
++ </property>
++ </spacer>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
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 <ett
+ #include <kuser.h>
+ #include <kpixmap.h>
+ #include <kimageeffect.h>
++#include <kpixmapeffect.h>
+ #include <kdialog.h>
+ #include <kseparator.h>
+
+@@ -48,6 +49,9 @@ Copyright (C) 2000 Matthias Ettrich <ett
+
+ #include "shutdowndlg.moc"
+
++static const int max_faded = 2300;
++static const int slice = 20;
++
+ KSMShutdownFeedback * KSMShutdownFeedback::s_pSelf = 0L;
+
+ KSMShutdownFeedback::KSMShutdownFeedback()
+@@ -56,12 +60,22 @@ KSMShutdownFeedback::KSMShutdownFeedback
+ {
+ setBackgroundMode( QWidget::NoBackground );
+ setGeometry( QApplication::desktop()->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, &copy);
++ //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 <ett
+
+ #include <qpixmap.h>
+ #include <qdialog.h>
++#include <qdatetime.h>
+ #include <kpushbutton.h>
++#include <qimage.h>
+ 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 <kmountpoint.h>
+ #include <kmessagebox.h>
+ #include <kio/job.h>
++#include <kprotocolinfo.h>
+
+ #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<Medium> 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 <dcopclient.h>
+ #include <dcopref.h>
+ #include <qtimer.h>
++#include <qregexp.h>
+ #include <stdlib.h>
+ #include <kdebug.h>
+ #include <kglobal.h>
+@@ -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<QString,QString> 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
--- /dev/null
+++ b/opensuse/core/tdebase/mp3-info.tar.bz2
Binary files 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<NSPluginInstance> _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 <kfileitem.h>
+ #include <kglobal.h>
+ #include <kglobalsettings.h>
++#include <kconfig.h>
+ #include <kiconloader.h>
+ #include <kio/global.h>
+ #include <klocale.h>
+@@ -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 <kiconloader.h>
+ #include <qlabel.h>
+ #include <qdesktopwidget.h>
++#include <kprocess.h>
++#include <kstandarddirs.h>
+
+ #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 <kdebug.h>
+ #include <kconfig.h>
++#include <kprocess.h>
++#include <kstandarddirs.h>
+ #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 <kdebug.h>
++#include <kprocess.h>
++#include <kstandarddirs.h>
+ #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 <kapplication.h>
++#include <kconfig.h>
++#include <ksimpleconfig.h>
++#include <kstandarddirs.h>
++
++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<QStringList> 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<QStringList> 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 <ett
+ #define SESSION_PREVIOUS_LOGOUT "saved at previous logout"
+ #define SESSION_BY_USER "saved by user"
+
++class KProcess;
++
+ typedef QValueList<QCString> 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 <kprocess.h>
+ #include <dcopclient.h>
+ #include <dcopref.h>
++#include <kdesktopfile.h>
++#include <kshell.h>
+
+ #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<QCString> argList;
+- for ( int i=1; i < n; i++)
+- argList.append( QCString(command[i].latin1()));
+- DCOPRef( launcher ).send( "exec_blind", app, DCOPArg( argList, "QValueList<QCString>" ) );
++ 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 @@
+-<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+ <class>SMServerConfigDlg</class>
+ <widget class="QWidget">
+ <property name="name">
+@@ -8,8 +8,8 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>325</width>
+- <height>366</height>
++ <width>334</width>
++ <height>476</height>
+ </rect>
+ </property>
+ <property name="caption">
+@@ -148,6 +148,24 @@
+ </widget>
+ </vbox>
+ </widget>
++ <widget class="QGroupBox">
++ <property name="name">
++ <cstring>windowManagerGroup</cstring>
++ </property>
++ <property name="title">
++ <string>Window Manager</string>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QComboBox">
++ <property name="name">
++ <cstring>windowManagerCombo</cstring>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>advancedGroup</cstring>
+@@ -236,6 +254,12 @@
+ <receiver>SMServerConfigDlg</receiver>
+ <slot>configChanged()</slot>
+ </connection>
++ <connection>
++ <sender>windowManagerCombo</sender>
++ <signal>activated(int)</signal>
++ <receiver>SMServerConfigDlg</receiver>
++ <slot>configChanged()</slot>
++ </connection>
+ </connections>
+ <includes>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+Index: kcontrol/smserver/kcmsmserver.cpp
+===================================================================
+--- kcontrol/smserver/kcmsmserver.cpp.orig
++++ kcontrol/smserver/kcmsmserver.cpp
+@@ -22,6 +22,8 @@
+ #include <qcheckbox.h>
+ #include <qlayout.h>
+ #include <qradiobutton.h>
++#include <qcombobox.h>
++#include <qfile.h>
+
+ #include <dcopclient.h>
+
+@@ -29,6 +31,12 @@
+ #include <kconfig.h>
+ #include <kgenericfactory.h>
+ #include <klineedit.h>
++#include <kstandarddirs.h>
++#include <qregexp.h>
++#include <kdesktopfile.h>
++#include <kdebug.h>
++#include <kprocess.h>
++#include <kmessagebox.h>
+
+ #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<KSharedPtr<KSycocaEntry>,QCString> slist;
++ KSortableValueList<KSharedPtr<KSycocaEntry>,QCString> glist;
++ QMap<QString,QString> specialTitle;
++ QMap<QString,QString> 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<KServiceGroup *>(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<KService *>(_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<KService *>(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<KServiceGroup *>(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<KService *>(_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<KService *>(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<KSycocaEntry*>(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 @@
+ <default>true</default>
+ </entry>
+
++<entry name="ReduceMenuDepth" type="Bool" >
++ <label>Simplify menus with only a single item inside</label>
++ <default>false</default>
++ </entry>
++
+ <entry name="MenuEntryHeight" type="Int" >
+ <label>Height of menu entries in pixels</label>
+ <default>0</default>
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 <localprefix>/env/*.sh and <prefixes>/env/*.sh
+ # (where <localprefix> is $KDEHOME or ~/.kde, and <prefixes> 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 <kstandarddirs.h>
++#include <kglobalsettings.h>
++#include <kapplication.h>
++#include "KDesktopIface_stub.h"
++#include <kdebugclasses.h>
++#include <kcmdlineargs.h>
++#include <kconfig.h>
++#include <unistd.h>
++#include <stdlib.h>
++#include <qfileinfo.h>
++
++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 <liblazy.h>
++
++#include <X11/Xlib.h>
++#include <fixx11h.h>
+ #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 <ett
+ #include <kdialog.h>
+ #include <kseparator.h>
+ #include <kmessagebox.h>
++#include <dcopref.h>
+
+ #include <sys/types.h>
+ #include <sys/utsname.h>
+@@ -264,6 +265,14 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget*
+ } else
+ QToolTip::add( btnReboot, i18n( "<qt><h3>Restart Computer</h3><p>Log out of the current session and restart the computer</p></qt>" ) );
+
++ 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<const Medium>;
+ };
+
+ namespace MediaManagerUtils {
+- static inline QMap<QString,QString> splitOptions(const QStringList & options)
++ static inline QMap<QString,QString> splitOptions(const QStringList & options)
+ {
+ QMap<QString,QString> 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<Medium> list = m_mediaList.list();
++
++ QPtrList<Medium>::const_iterator it = list.begin();
++ QPtrList<Medium>::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 <owner>:<group> 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 <laurivan@eircom.net>)
+
+-------------------------------------------------------------------
+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 <ssh> to <openssh>
+
+-------------------------------------------------------------------
+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 <docbkdsl> to <docbook-dsssl-stylesheets>
+
+-------------------------------------------------------------------
+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 <mesaglu> to <xf86glu>
+- changed neededforbuild <mesaglu-devel> to <xf86glu-devel>
+
+-------------------------------------------------------------------
+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 <docbk30> to <docbook_3>
+
+-------------------------------------------------------------------
+Wed Mar 7 16:58:40 CET 2001 - ro@suse.de
+
+- changed neededforbuild <mesadev> to <mesa-devel>
+
+-------------------------------------------------------------------
+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 <cyrus-sasl> to <cyrus-sasl cyrus-sasl-devel>
+
+-------------------------------------------------------------------
+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 <kde@kde.org>
+
+%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 <kde@kde.org>
+
+%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 <kde@kde.org>
+
+%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 <kde@kde.org>
+
+%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 <kde@kde.org>
+
+%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 <kde@kde.org>
+
+%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 <kde@kde.org>
+
+%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 <kde@kde.org>
+
+%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 <kde@kde.org>
+
+%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 <kde@kde.org>
+
+
+%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 <kde@kde.org>
+
+
+%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 <kde@kde.org>
+
+%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 <kde@kde.org>
+
+%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 <uwe.gansert at SuSE dot de>
+
+%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
--- /dev/null
+++ b/opensuse/core/tdebase/wizard_small.png
Binary files 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<int> 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 <klocale.h>
+ #include <qapplication.h>
+ #include <qdesktopwidget.h>
+-#include <qcursor.h>
+ #include <kstringhandler.h>
+ #include <stdarg.h>
+ #include <kdebug.h>
+@@ -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 <klocale.h>
+ #include <qapplication.h>
+ #include <qdesktopwidget.h>
+-#include <qcursor.h>
+ #include <kstringhandler.h>
+ #include <kglobalsettings.h>
+
+@@ -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 @@
+ <entry key="IgnorePositionClasses" type="StringList" />
+ <entry key="KillPingTimeout" type="Int" />
+ <entry key="ShowDesktopIsMinimizeAll" type="Bool" />
++ <entry key="SeparateScreenFocus" type="Bool" />
++ <entry key="ActiveMouseScreen" type="Bool" />
++ <entry key="XineramaPlacementScreen" type="Int" />
+ </group>
+
+ <group name="WM" >
+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
--- /dev/null
+++ b/opensuse/core/tdebase/zh_TW.flag.png
Binary files 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdebindings</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdedevelop</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdeedu</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdegames</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdegraphics</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdelibs</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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
--- /dev/null
+++ b/opensuse/core/tdelibs/10888-bt.tar.gz
Binary files 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 <sys/inotify.h>
++ ],
++ [
++#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 <sys/ioctl.h>
+
+-#ifdef HAVE_INOTIFY
++#ifdef HAVE_SYS_INOTIFY
++#include <sys/inotify.h>
++#include <fcntl.h>
++#elif HAVE_INOTIFY
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <sys/syscall.h>
+-#include <linux/types.h>
+ // Linux kernel headers are documented to not compile
+ #define _S390_BITOPS_H
+ #include <linux/inotify.h>
+@@ -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 <sys/utsname.h>
+Index: kdoctools/customization/pt-BR/user.entities
+===================================================================
+--- kdoctools/customization/pt-BR/user.entities.orig
++++ kdoctools/customization/pt-BR/user.entities
+@@ -17,7 +17,7 @@
+ <!ENTITY Esc "<keycap>Esc</keycap>">
+ <!ENTITY etc "<abbrev>etc</abbrev>">
+ <!ENTITY ex "<abbrev>por exemplo</abbrev>">
+-<!ENTITY FAQ "Perguntas Mais Freqüentes (do inglês <acronym>FAQ</acronym>)">
++<!ENTITY FAQ "Perguntas mais freqüentes (do inglês <acronym>FAQ</acronym>)">
+ <!ENTITY HTML '<acronym>HTML</acronym>'>
+ <!ENTITY ie "isto é">
+ <!ENTITY infocenter "<application>Centro de Informações</application>">
+@@ -34,7 +34,7 @@
+ <!ENTITY LMB "botão <mousebutton>esquerdo</mousebutton> do mouse">
+ <!ENTITY MMB "botão do <mousebutton>meio</mousebutton> do mouse">
+ <!ENTITY OS "<acronym>Sistema Operacional</acronym>">
+-<!ENTITY RMB "botão <mousebutton>direto</mousebutton> do mouse">
++<!ENTITY RMB "botão <mousebutton>direito</mousebutton> do mouse">
+ <!ENTITY Shift "<keycap>Shift</keycap>">
+ <!ENTITY systemtray "<application>bandeja do sistema</application>">
+ <!ENTITY Tab "<keycap>Tab</keycap>">
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
++<kde-docbook@kde.org>.
++--
++
++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
--- /dev/null
+++ b/opensuse/core/tdelibs/admin.tar.bz2
Binary files 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 <sys/stat.h>
+ #endif
+ #include <sys/wait.h>
++#include <grp.h>
++#include <sys/types.h>
+
+ #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 <skasal@redhat.com>
+
+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 <dns_sd.h>
+ #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 <qcstring.h>
+ #include <qregexp.h>
+ #include <qtextcodec.h>
++#include <qvaluelist.h>
+
+ #include <kmdcodec.h>
++#include <kdebug.h>
+
+ #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<QCString> QCStringList;
+
+-static void addEscapes( QString &str )
++QValueList<QCString> splitCString( const QCString &str, char sep )
+ {
+- str.replace( '\\', backslash );
+- str.replace( ',', comma );
+- str.replace( '\r', cr );
+- str.replace( '\n', newline );
++ QValueList<QCString> 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<QCString> splitCString( const QCString &str, const QRegExp &exp )
++{
++ QValueList<QCString> 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<QString,QVariant>::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<QString,QVariant>::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<KService *>(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 <<inlineHeader<<_inlineAlias<<_allowInline;
++ d->sortOrder <<_showEmptyMenu <<inlineHeader<<_inlineAlias<<_allowInline <<
++ d->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<KServiceGroup *>(p)->noDisplay() :
+ static_cast<KService *>(p)->noDisplay();
+ if (excludeNoDisplay && noDisplay)
+ continue;
++ bool SuSEunimportant = p->isType(KST_KService) &&
++ static_cast<KService *>(p)->SuSEunimportant();
++ if (excludeSuSEunimportant && SuSEunimportant)
++ continue;
++
+ // Choose the right list
+ KSortableValueList<SPtr,QCString> & 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<SPtr,QCString> slist, KSortableValueList<SPtr,QCString> 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<SPtr,QCString>::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 <qvariant.h>
+
+ #include <kdesktopfile.h>
++#include <ksortablevaluelist.h>
+
+ #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<SPtr,QCString> slist, KSortableValueList<SPtr,QCString> 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 "<includehints>" "$i"; then
+ echo WARNING: removing include hints from $i
+ sed -i -e 's,<includehint>.*</includehint>,,' "$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
--- /dev/null
+++ b/opensuse/core/tdelibs/cr16-filesys-file_broken.png
Binary files 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 <adrian@suse.de>
+#
+# 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 <<EOF
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="Author" content="kde-maintainers@suse.de">
+ <meta name="GENERATOR" content="create-kdeapi">
+ <title>KDE API Reference</title>
+</head>
+
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EE" vlink="#551A8B" alink="#FF0000">
+ <CENTER><H1>KDE 3.x API Reference</H1></CENTER>
+
+EOF
+
+#
+# list all the api start pages
+#
+
+cat >> $r/${kdeapi}/index.html <<EOF
+<TABLE WIDTH="100%" BORDER="0">
+<TR bgcolor="b0b0b0">
+<TH>&nbsp;</TH><TH>Description</TH><TH>from package</TH></TR>
+<TR bgcolor="ffffff"><TD><A HREF="/usr/share/doc/packages/qt3/html/classes.html">
+Qt </A></TD> <TD>all Qt classes</TD> <TD>qt</TD></TR>
+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 "<TR bgcolor=\"eeeeee\">" >> $r/${kdeapi}/index.html
+ else
+ dark=1
+ echo "<TR bgcolor=\"ffffff\">" >> $r/${kdeapi}/index.html
+ fi
+
+ echo "<TD><A HREF=\"${apipath}\"> ${mod} </A></TD>" >> $r/${kdeapi}/index.html
+ echo "<TD>${description}</TD>" >> $r/${kdeapi}/index.html
+ echo "<TD>${package}</TD>" >> $r/${kdeapi}/index.html
+ echo "</TR>" >> $r/${kdeapi}/index.html
+
+done
+
+#
+# finish it ...
+#
+cat >> $r/${kdeapi}/index.html <<EOF
+</TABLE>
+<hr>
+<table>
+<tr><td><small> generated by create-kdeapi on `date` </td></tr>
+</table>
+
+</body>
+</html>
+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 <stdlib.h>
+ # include <idna.h>
+ #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 <qradiobutton.h>
+ #include <qbuttongroup.h>
+ #include <qlayout.h>
++#include <qlineedit.h>
+ #include <kprocess.h>
+ #include <kprocio.h>
+ #include <klocale.h>
+@@ -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 <qdir.h>
+ #include <qfile.h>
++#include <qregexp.h>
+ #include <kprocess.h>
+ #include <kprocio.h>
+ #include <klocale.h>
+@@ -35,8 +36,10 @@
+ #include <kuser.h>
+
+ KFileShare::Authorization KFileShare::s_authorization = NotInitialized;
+-QStringList* KFileShare::s_shareList = 0L;
+-static KStaticDeleter<QStringList> sdShareList;
++//QStringList* KFileShare::s_shareList = 0L;
++//static KStaticDeleter<QStringList> sdShareList;
++QMap<QString,QString>* KFileShare::s_shareMap = 0L;
++static KStaticDeleter<QMap<QString,QString> > 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<QString,QString> );
+ 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<QString,QString>* 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 <kretz@kde.org>
+ * \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 <kretz@kde.org>
+ * \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 <kretz@kde.org>
+ * \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 <kdelibs_export.h>
+ #include <qobject.h>
+
+ class KURL;
+@@ -35,7 +36,7 @@ namespace Multimedia
+ * \author Matthias Kretz <kretz@kde.org>
+ * \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 <dcopobject.h>
++#include <kdelibs_export.h>
+
+-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<QWidget>(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<QWidget>( 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 <ktoolbar.h>
+ #include <ktoolbarbutton.h>
+
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include <X11/Xdefs.h>
++#include <X11/Xlib.h>
++#include <X11/Xatom.h>
++#include <X11/Intrinsic.h>
++#include <X11/StringDefs.h>
++#include <X11/Shell.h>
++
++#include <X11/Xft/Xft.h>
++
+ /**
+ * 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 <assert.h>
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include <fontconfig/fontconfig.h>
+
+ #include <qcursor.h>
+ #include <qclipboard.h>
+@@ -35,6 +38,7 @@
+ #include <qwhatsthis.h>
+ #include <qtimer.h>
+ #include <qfile.h>
++#include <qregexp.h>
+
+ #include <dcopclient.h>
+ #include <dcopref.h>
+@@ -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 <qfontdatabase.h>
+ #include <qlistbox.h>
+ #include <qpainter.h>
++#include <qregexp.h>
+
+ #include <kcharsets.h>
+ #include <kconfig.h>
+@@ -29,6 +30,18 @@
+ #include "kfontcombo.h"
+ #include "kfontcombo.moc"
+
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include <fontconfig/fontconfig.h>
++#include <X11/Xlib.h>
++#include <X11/Xatom.h>
++#include <X11/Intrinsic.h>
++#include <X11/StringDefs.h>
++#include <X11/Shell.h>
++
++#include <X11/Xft/Xft.h>
++
++
+ 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 :"<<str<<endl;
+ }
++#if 0
+ if ( e.hasAttribute( "inline" ) )
+ {
+ QString str = e.attribute( "inline" );
+@@ -1534,6 +1535,7 @@
+ else
+ kdDebug()<<" Error in parsing inline_alias attribute :"<<str<<endl;
+ }
++#endif
+ if( !option.isEmpty())
+ {
+ option = option.prepend(":O");
diff --git a/opensuse/core/tdelibs/integrate-global-pixmaps-10.1.diff b/opensuse/core/tdelibs/integrate-global-pixmaps-10.1.diff
new file mode 100644
index 000000000..552716400
--- /dev/null
+++ b/opensuse/core/tdelibs/integrate-global-pixmaps-10.1.diff
@@ -0,0 +1,26 @@
+Index: pics/crystalsvg/index.theme
+===================================================================
+--- pics/crystalsvg/index.theme (Revision 505161)
++++ pics/crystalsvg/index.theme (Arbeitskopie)
+@@ -78,7 +78,7 @@
+ Comment[zh_HK]=由 Everaldo.com 提供的圖示主題
+ DisplayDepth=32
+
+-Inherits=hicolor
++Inherits=suseadds,hicolor
+
+ Example=folder
+ LinkOverlay=link_overlay
+Index: kdecore/kicontheme.cpp
+===================================================================
+--- kdecore/kicontheme.cpp (Revision 458165)
++++ kdecore/kicontheme.cpp (Arbeitskopie)
+@@ -146,6 +146,8 @@
+ 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/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<QString,QString> 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 <string.h>
+ 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 <string.h>
+ 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 <kdebug.h>
+
++// 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 dont 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<KZipFileEntry> 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 @@
+ <?xml version="1.01" encoding="UTF-8"?>
+ <!DOCTYPE language SYSTEM "language.dtd">
+-<language name="LaTeX" version="1.25" section="Markup" kateversion="2.3" extensions="*.tex; *.ltx; *.dtx; *.sty; *.cls;" mimetype="text/x-tex" casesensitive="1" author="Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Holger Danielsson (holger.danielsson@versanet.de)+Michel Ludwig (michel.ludwig@kdemail.net)" license="LGPL" >
++<language name="LaTeX" version="1.29" section="Markup" kateversion="2.3" extensions="*.tex; *.ltx; *.dtx; *.sty; *.cls;" mimetype="text/x-tex" casesensitive="1" author="Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Holger Danielsson (holger.danielsson@versanet.de)+Michel Ludwig (michel.ludwig@kdemail.net)+Thomas Braun (braun@physik.fu-berlin.de)" license="LGPL" >
+ <highlighting>
+ <contexts>
+ <!-- Normal text -->
+ <context name="Normal Text" attribute="Normal Text" lineEndContext="#stay">
+ <RegExpr String="\\begin(?=[^a-zA-Z])" attribute="Structure" context="FindEnvironment" beginRegion="block" />
+ <RegExpr String="\\end(?=[^a-zA-Z])" attribute="Structure" context="FindEnvironment" endRegion="block" />
+- <RegExpr String="\\(label|pageref|ref|vpageref|vref|cite)(?=[^a-zA-Z])" attribute="Structure" context="Label"/>
++ <RegExpr String="\\(label|pageref|autoref|ref|vpageref|vref|cite)(?=[^a-zA-Z])" attribute="Structure" context="Label"/>
+ <RegExpr String="\\(part|chapter|section|subsection|subsubsection|paragraph|subparagraph)\*?\s*(?=[\{\[])" attribute="Structure" context="Sectioning"/>
++ <RegExpr String="\\(footnote)\*?\s*(?=[\{\[])" attribute="Footnote" context="Footnoting"/>
+ <RegExpr String="\\(re)?newcommand(?=[^a-zA-Z])" attribute="Keyword" context="NewCommand"/>
+ <RegExpr String="\\(e|g|x)?def(?=[^a-zA-Z])" attribute="Keyword" context="DefCommand"/>
++ <RegExpr String="&lt;&lt;.*&gt;&gt;=" attribute="Normal Text" context="NoWeb" />
+ <StringDetect String="\(" attribute="Math" context="MathMode" beginRegion="mathMode" />
+ <StringDetect String="\[" attribute="Math" context="MathModeEquation" beginRegion="mathMode" />
+ <DetectChar char="\" attribute="Keyword" context="ContrSeq"/>
+@@ -22,6 +24,11 @@
+ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
+ </context>
+
++ <!-- NoWeb -->
++ <context name="NoWeb" attribute="Normal Text" lineEndContext="#stay" >
++ <RegExpr String="^\s*@\s*" attribute="Normal Text" context="#pop" />
++ </context>
++
+ <!-- LaTeX sectioning commands -->
+ <context name="Sectioning" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
+ <RegExpr String="\[[^\]]*\]" attribute="Normal Text" context="#stay"/>
+@@ -59,9 +66,46 @@
+ <RegExpr String="[^a-zA-Z]" attribute="Structure Keyword Mathmode" context="#pop" />
+ </context>
+
++ <!-- LaTeX Footnote commands -->
++ <context name="Footnoting" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
++ <RegExpr String="\[[^\]]*\]" attribute="Normal Text" context="#stay"/>
++ <DetectChar char=" " attribute="Normal Text" context="#stay"/>
++ <DetectChar char="{" attribute="Normal Text" context="FootnotingInside"/>
++ <DetectChar char="}" attribute="Normal Text" context="#pop"/>
++ <DetectChar char="%" attribute="Comment" context="Comment"/>
++ </context>
++ <context name="FootnotingInside" attribute="Footnote Text" lineEndContext="#stay">
++ <DetectChar char="{" attribute="Normal Text" context="FootnotingInside"/>
++ <DetectChar char="}" attribute="Normal Text" context="#pop"/>
++ <StringDetect String="\(" attribute="Footnote Math" context="FootnotingMathMode" beginRegion="mathMode" />
++ <DetectChar char="\" attribute="Footnote Keyword" context="FootnotingContrSeq"/>
++ <DetectChar char="$" attribute="Footnote Math" context="FootnotingMathMode" beginRegion="mathMode" />
++ <DetectChar char="%" attribute="Comment" context="Comment"/>
++ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
++ </context>
++ <context name="FootnotingContrSeq" attribute="Keyword" lineEndContext="#pop">
++ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
++ <RegExpr String="[a-zA-Z]+(\+?|\*{0,3})" attribute="Footnote Keyword" context="#pop"/>
++ <RegExpr String="[^a-zA-Z]" attribute="Footnote Keyword" context="#pop" />
++ </context>
++ <context name="FootnotingMathMode" attribute="Footnote Math" lineEndContext="#stay">
++ <StringDetect String="$$" attribute="Error" context="#stay" />
++ <DetectChar char="$" attribute="Footnote Math" context="#pop" endRegion="mathMode" />
++ <Detect2Chars char="\" char1=")" attribute="Footnote Math" context="#pop" endRegion="mathMode" />
++ <Detect2Chars char="\" char1="]" attribute="Error" context="#stay" />
++ <DetectChar char="\" attribute="Footnote Keyword Mathmode" context="FootnotingMathContrSeq"/>
++ <DetectChar char="%" attribute="Comment" context="Comment"/>
++ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
++ </context>
++ <context name="FootnotingMathContrSeq" attribute="Footnote Keyword Mathmode" lineEndContext="#pop">
++ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
++ <RegExpr String="[a-zA-Z]+\*?" attribute="Footnote Keyword Mathmode" context="#pop"/>
++ <RegExpr String="[^a-zA-Z]" attribute="Footnote Keyword Mathmode" context="#pop" />
++ </context>
++
+ <!-- LaTeX commands \newcommand and \renewcommand -->
+ <context name="NewCommand" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
+- <RegExpr String="\s*\{\s*\\[a-zA-Z]+\s*\}(\[\d\](\[[^\]]+\])?)?\{" attribute="Normal Text" context="CommandParameterStart"/>
++ <RegExpr String="\s*\{\s*\\[a-zA-Z]+\s*\}(\[\d\](\[[^\]]*\])?)?\{" attribute="Normal Text" context="CommandParameterStart"/>
+ <DetectChar char="}" attribute="Error" context="#pop"/>
+ </context>
+
+@@ -137,8 +181,9 @@
+ <context name="Environment" attribute="Environment" lineEndContext="#stay">
+ <RegExpr String="(lstlisting|(B|L)?Verbatim)" attribute="Environment" context="VerbatimEnvParam"/>
+ <RegExpr String="(verbatim|boxedverbatim)" attribute="Environment" context="VerbatimEnv"/>
+- <RegExpr String="(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|flalign)" attribute="Environment" context="MathEnv"/>
+ <RegExpr String="(alignat|xalignat|xxalignat)" attribute="Environment" context="MathEnvParam"/>
++ <RegExpr String="(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|flalign)" attribute="Environment" context="MathEnv"/>
++ <RegExpr String="(tabular|supertabular|mpsupertabular|xtabular|mpxtabular|longtable)" attribute="Environment" context="TabEnv"/>
+ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
+ <RegExpr String="[a-zA-Z]" attribute="Environment" context="LatexEnv"/>
+ <RegExpr String="\s+" attribute="Error" context="#pop"/>
+@@ -228,6 +273,28 @@
+ <DetectChar char="}" attribute="Normal Text" context="#pop#pop#pop#pop#pop" endRegion="block"/>
+ </context>
+
++ <!-- environment type 9: tabular -->
++ <context name="TabEnv" attribute="Environment" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop#pop#pop">
++ <DetectChar char="}" attribute="Normal Text" context="Tab"/>
++ <RegExpr String="[a-zA-Z]" attribute="Environment" lookAhead="true" context="#pop"/>
++ <IncludeRules context="EnvCommon" />
++ </context>
++
++ <!-- parse tabular text -->
++ <context name="Tab" attribute="Tab" lineEndContext="#stay">
++ <DetectChar char="&amp;" attribute="Ampersand" context="#stay"/>
++ <RegExpr String="@\{.*\}" minimal="true" attribute="Column Separator" context="#stay"/>
++ <RegExpr String="\\end(?=\s*\{(tabular|supertabular|mpsupertabular|xtabular|mpxtabular|longtable)\*?\})" attribute="Structure" context="TabFindEnd"/>
++ <IncludeRules context="Normal Text" />
++ </context>
++
++ <!-- end of tabular environment -->
++ <context name="TabFindEnd" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
++ <RegExpr String="\s*\{" attribute="Normal Text" context="#stay"/>
++ <RegExpr String="(tabular|supertabular|mpsupertabular|xtabular|mpxtabular|longtable)\*?" attribute="Environment" context="#stay"/>
++ <DetectChar char="}" attribute="Normal Text" context="#pop#pop#pop#pop#pop" endRegion="block"/>
++ </context>
++
+ <!-- math mode: starting with $ or \( -->
+ <context name="MathMode" attribute="Math" lineEndContext="#stay">
+ <StringDetect String="$$" attribute="Error" context="#stay" />
+@@ -315,11 +382,18 @@
+ <itemData name="Verbatim" defStyleNum="dsNormal" color="#a08000" selColor="#80D0FF" bold="0" italic="0"/>
+ <itemData name="Region Marker" defStyleNum="dsRegionMarker" />
+ <itemData name="Bullet" defStyleNum="dsNormal" color="#FF00C4" bold="1" underline="1"/>
++ <itemData name="Ampersand" defStyleNum="dsNormal" color="#002793" bold="1" />
++ <itemData name="Column Separator" defStyleNum="dsNormal" color="#002793" />
+ <itemData name="Alert" defStyleNum="dsAlert" />
+ <itemData name="Structure Text" defStyleNum="dsNormal" color="#000000" selColor="#FFFFFF" bold="1" italic="0"/>
+ <itemData name="Structure Keyword" defStyleNum="dsNormal" color="#800000" selColor="#60FFFF" bold="1" italic="0"/>
+ <itemData name="Structure Math" defStyleNum="dsNormal" color="#00A000" selColor="#FF40FF" bold="1" italic="0"/>
+ <itemData name="Structure Keyword Mathmode" defStyleNum="dsNormal" color="#606000" selColor="#FFD0FF" bold="1" italic="0"/>
++ <itemData name="Footnote" defStyleNum="dsNormal" color="#800000" selColor="#60FFFF" bold="0" italic="0"/>
++ <itemData name="Footnote Text" defStyleNum="dsNormal" color="#000000" selColor="#FFFFFF" bold="0" italic="0"/>
++ <itemData name="Footnote Keyword" defStyleNum="dsNormal" color="#800000" selColor="#60FFFF" bold="0" italic="0"/>
++ <itemData name="Footnote Math" defStyleNum="dsNormal" color="#00A000" selColor="#FF40FF" bold="0" italic="0"/>
++ <itemData name="Footnote Keyword Mathmode" defStyleNum="dsNormal" color="#606000" selColor="#FFD0FF" bold="0" italic="0"/>
+ </itemDatas>
+ </highlighting>
+
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 <openssl/stack.h>
+ #include <openssl/bn.h>
+ #undef crypt
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++#define STACK _STACK
++#endif
+ #endif
+
+ #include <kstaticdeleter.h>
+@@ -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<STACK*>(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<STACK*>(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<STACK*>(s), reinterpret_cast<char*>(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<KSSLCertificate> &certs) {
+- STACK_OF(X509) *x509 = sk_new(NULL);
++ STACK_OF(X509) *x509 = reinterpret_cast<STACK_OF(X509)*>(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
--- /dev/null
+++ b/opensuse/core/tdelibs/kdelibs-3.5.10.tar.bz2
Binary files 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
--- /dev/null
+++ b/opensuse/core/tdelibs/kdelibs-3.5.12.99.tar.bz2
Binary files 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 <algorithm>
++#include "AlwaysInline.h"
++
++namespace WTF {
++
++ enum PlacementNewAdoptType { PlacementNewAdopt };
++
++ template <typename T> class PassRefPtr;
++
++ enum HashTableDeletedValueType { HashTableDeletedValue };
++
++ template <typename T> 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 <typename U> RefPtr(const PassRefPtr<U>&);
++
++ // 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 <typename U> RefPtr(const RefPtr<U>& 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<T> release() { PassRefPtr<T> 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<T>&);
++ template <typename U> RefPtr& operator=(const RefPtr<U>&);
++ template <typename U> RefPtr& operator=(const PassRefPtr<U>&);
++
++ void swap(RefPtr&);
++
++ private:
++ static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); }
++
++ T* m_ptr;
++ };
++
++ template <typename T> template <typename U> inline RefPtr<T>::RefPtr(const PassRefPtr<U>& o)
++ : m_ptr(o.releaseRef())
++ {
++ }
++
++ template <typename T> inline RefPtr<T>& RefPtr<T>::operator=(const RefPtr<T>& o)
++ {
++ T* optr = o.get();
++ if (optr)
++ optr->ref();
++ T* ptr = m_ptr;
++ m_ptr = optr;
++ if (ptr)
++ ptr->deref();
++ return *this;
++ }
++
++ template <typename T> template <typename U> inline RefPtr<T>& RefPtr<T>::operator=(const RefPtr<U>& o)
++ {
++ T* optr = o.get();
++ if (optr)
++ optr->ref();
++ T* ptr = m_ptr;
++ m_ptr = optr;
++ if (ptr)
++ ptr->deref();
++ return *this;
++ }
++
++ template <typename T> inline RefPtr<T>& RefPtr<T>::operator=(T* optr)
++ {
++ if (optr)
++ optr->ref();
++ T* ptr = m_ptr;
++ m_ptr = optr;
++ if (ptr)
++ ptr->deref();
++ return *this;
++ }
++
++ template <typename T> inline RefPtr<T>& RefPtr<T>::operator=(const PassRefPtr<T>& o)
++ {
++ T* ptr = m_ptr;
++ m_ptr = o.releaseRef();
++ if (ptr)
++ ptr->deref();
++ return *this;
++ }
++
++ template <typename T> template <typename U> inline RefPtr<T>& RefPtr<T>::operator=(const PassRefPtr<U>& o)
++ {
++ T* ptr = m_ptr;
++ m_ptr = o.releaseRef();
++ if (ptr)
++ ptr->deref();
++ return *this;
++ }
++
++ template <class T> inline void RefPtr<T>::swap(RefPtr<T>& o)
++ {
++ std::swap(m_ptr, o.m_ptr);
++ }
++
++ template <class T> inline void swap(RefPtr<T>& a, RefPtr<T>& b)
++ {
++ a.swap(b);
++ }
++
++ template <typename T, typename U> inline bool operator==(const RefPtr<T>& a, const RefPtr<U>& b)
++ {
++ return a.get() == b.get();
++ }
++
++ template <typename T, typename U> inline bool operator==(const RefPtr<T>& a, U* b)
++ {
++ return a.get() == b;
++ }
++
++ template <typename T, typename U> inline bool operator==(T* a, const RefPtr<U>& b)
++ {
++ return a == b.get();
++ }
++
++ template <typename T, typename U> inline bool operator!=(const RefPtr<T>& a, const RefPtr<U>& b)
++ {
++ return a.get() != b.get();
++ }
++
++ template <typename T, typename U> inline bool operator!=(const RefPtr<T>& a, U* b)
++ {
++ return a.get() != b;
++ }
++
++ template <typename T, typename U> inline bool operator!=(T* a, const RefPtr<U>& b)
++ {
++ return a != b.get();
++ }
++
++ template <typename T, typename U> inline RefPtr<T> static_pointer_cast(const RefPtr<U>& p)
++ {
++ return RefPtr<T>(static_cast<T*>(p.get()));
++ }
++
++ template <typename T, typename U> inline RefPtr<T> const_pointer_cast(const RefPtr<U>& p)
++ {
++ return RefPtr<T>(const_cast<T*>(p.get()));
++ }
++
++ template <typename T> inline T* getPtr(const RefPtr<T>& 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 <qdatetime.h>
+ #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 <base> after </head>
+ */
+- DOM::HTMLHeadElementImpl *head;
++ RefPtr<DOM::HTMLHeadElementImpl> head;
+
+ /*
+ * a possible <isindex> 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
--- /dev/null
+++ b/opensuse/core/tdelibs/kdemm-20050330.tar.bz2
Binary files 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 <kmimetype.h>
+ #include <kparts/componentfactory.h>
+
+-#include <kplayobjectfactory.h>
++#include <kdemm/factory.h>
+
+ #include <config-kfile.h>
+
+@@ -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 <bastian@kde.org>
+ 2000-2003 Carsten Pfeiffer <pfeiffer@kde.org>
++ 2004 Allan Sandfeld Jensen <kde@carewolf.com>
+
+ 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 <sys/types.h>
+ #include <sys/stat.h>
+
+-#include <config.h>
+-#ifndef WITHOUT_ARTS
+-// aRts headers
+-#include <connect.h>
+-#include <dispatcher.h>
+-#include <flowsystem.h>
+-#include <qiomanager.h>
+-#include <soundserver.h>
+-#endif
+-
+ // QT headers
+ #include <qfile.h>
+ #include <qfileinfo.h>
+ #include <qstringlist.h>
+ #include <qtextstream.h>
++#include <qtimer.h>
+
+ // KDE headers
+ #include <dcopclient.h>
+@@ -80,15 +72,11 @@ public:
+ QString externalPlayer;
+ KProcess *externalPlayerProc;
+
+-#ifndef WITHOUT_ARTS
+- QPtrList<KDE::PlayObject> playObjects;
+- QMap<KDE::PlayObject*,int> playObjectEventMap;
+- KAudioManagerPlay *audioManager;
+-#endif
++ QMap<KDE::Multimedia::SimplePlayer*,int> 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<KDE::PlayObject*,int>::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<KDE::PlayObject*,int>::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 <knotifyclient.h>
+ #include <dcopobject.h>
+
++#include <kdemm/simpleplayer.h>
++
+ 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 <kguiitem.h>
+ #include <kprocess.h>
+
++#include <stdlib.h>
+ #include <signal.h>
+ #include <cups/cups.h>
+
+@@ -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<KIcon::Group>(
+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 <qapplication.h>
+ #include <qbitmap.h>
++#include <qmetaobject.h>
+ #include <qcleanuphandler.h>
+ #include <qmap.h>
+ #include <qimage.h>
+@@ -79,7 +80,7 @@ namespace
+ QWidget* w1;
+ QWidget* w2;
+ };
+- typedef QMap<const QPopupMenu*,ShadowElements> ShadowMap;
++ typedef QMap<const QWidget*,ShadowElements> ShadowMap;
+ static ShadowMap *_shadowMap = 0;
+ QSingleCleanupHandler<ShadowMap> 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 <mosfet@kde.org>
+
+ // 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<QPopupMenu*>(p))
++ kstyle->renderMenuBlendPixmap( blendPix, cg, ::qt_cast<QPopupMenu*>(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<QPopupMenu*>(p))
++ kstyle->renderMenuBlendPixmap( renderPix, p->colorGroup(),
++ ::qt_cast<QPopupMenu*>(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 <ktrader.h>
++#include <kservice.h>
++#include <kmimetype.h>
++#include <assert.h>
++#include <kstandarddirs.h>
++#include <kservicegroup.h>
++#include <kimageio.h>
++#include <kuserprofile.h>
++#include <kprotocolinfo.h>
++
++#include <kapplication.h>
++
++#include <stdio.h>
++
++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<KMimeType::Ptr> 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<KServiceOffer> 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<KServiceOffer> 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("<img src=\"(.*)\">");
++ 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(
+ "<qt text=\"%1\" bgcolor=\"%2\">%3</qt>")
+ .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("<qt text=\"%1\" bgcolor=\"%2\">%3</qt>")
++ QString currentTip = QString::fromLatin1(
++ "<qt text=\"%1\" bgcolor=\"%2\">%3</qt>")
+ .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 <qintdict.h>
+ #include <qstring.h>
+ #include <qwidget.h>
++#include <qtimer.h>
+ #include <qguardedptr.h>
+ #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<QString,QStringList> _implicitAllowMap, _implicitDenyMap;
+ KTimeout *_timeouts;
++ QTimer _tryOpenBlocked;
+
+ QPtrList<KWalletTransaction> _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 <qtooltip.h>
+ #include <qstylefactory.h>
+ #include <qmetaobject.h>
++#include <qimage.h>
+ #ifndef QT_NO_SQL
+ #include <qsqlpropertymap.h>
+ #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
--- /dev/null
+++ b/opensuse/core/tdelibs/mimetype-icons.tar.bz2
Binary files 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 <wstephenson@kde.org>
++
++ 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 <kapplication.h>
++#include <kdebug.h>
++#include <kstaticdeleter.h>
++
++#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<ConnectionManager> 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 <wstephenson@kde.org>
++
++ 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 <dcopobject.h>
++#include <kdemacros.h>
++
++#include <networkstatuscommon.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <qobject.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <kdebug.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <wstephenson@kde.org>
++
++ 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 <wstephenson@kde.org>
++
++ 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 <qstringlist.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <qmap.h>
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kdebug.h>
++
++#include "network.h"
++#include <kdemacros.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <kdedmodule.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <dcopobject.h>
++#include <qstringlist.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qtooltip.h>
++#include <kiconloader.h>
++#include <klocale.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <qhbox.h>
++#include <kdemacros.h>
++#include <networkstatuscommon.h>
++
++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 @@
++<?xml version = '1.0'?>
++<kdevelop>
++ <general>
++ <author>Will Stephenson</author>
++ <email>wstephenson@suse.de</email>
++ <version>$VERSION$</version>
++ <projectmanagement>KDevKDEAutoProject</projectmanagement>
++ <primarylanguage>C++</primarylanguage>
++ <keywords>
++ <keyword>Qt</keyword>
++ <keyword>KDE</keyword>
++ </keywords>
++ </general>
++ <kdevfileview>
++ <groups>
++ <group pattern="*.cpp;*.cxx;*.h" name="Sources" />
++ <group pattern="*.ui" name="User Interface" />
++ <group pattern="*.png" name="Icons" />
++ <group pattern="*.po;*.ts" name="Translations" />
++ <group pattern="*" name="Others" />
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ <hidenonlocation>false</hidenonlocation>
++ </groups>
++ <tree>
++ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ </tree>
++ </kdevfileview>
++ <kdevdoctreeview>
++ <ignoretocs>
++ <toc>ada</toc>
++ <toc>ada_bugs_gcc</toc>
++ <toc>bash</toc>
++ <toc>bash_bugs</toc>
++ <toc>clanlib</toc>
++ <toc>fortran_bugs_gcc</toc>
++ <toc>gnome1</toc>
++ <toc>gnustep</toc>
++ <toc>gtk</toc>
++ <toc>gtk_bugs</toc>
++ <toc>haskell</toc>
++ <toc>haskell_bugs_ghc</toc>
++ <toc>java_bugs_gcc</toc>
++ <toc>java_bugs_sun</toc>
++ <toc>opengl</toc>
++ <toc>pascal_bugs_fp</toc>
++ <toc>php</toc>
++ <toc>php_bugs</toc>
++ <toc>perl</toc>
++ <toc>perl_bugs</toc>
++ <toc>python</toc>
++ <toc>python_bugs</toc>
++ <toc>ruby</toc>
++ <toc>ruby_bugs</toc>
++ <toc>sdl</toc>
++ <toc>stl</toc>
++ <toc>sw</toc>
++ <toc>w3c-dom-level2-html</toc>
++ <toc>w3c-svg</toc>
++ <toc>w3c-uaag10</toc>
++ <toc>wxwidgets_bugs</toc>
++ </ignoretocs>
++ <ignoreqt_xml>
++ <toc>qmake User Guide</toc>
++ </ignoreqt_xml>
++ </kdevdoctreeview>
++ <kdevdebugger>
++ <general>
++ <dbgshell>libtool</dbgshell>
++ </general>
++ </kdevdebugger>
++ <kdevfilecreate>
++ <useglobaltypes>
++ <type ext="ui" />
++ <type ext="cpp" />
++ <type ext="h" />
++ </useglobaltypes>
++ </kdevfilecreate>
++ <kdevautoproject>
++ <make>
++ <envvars>
++ <envvar value="1" name="WANT_AUTOCONF_2_5" />
++ <envvar value="1" name="WANT_AUTOMAKE_1_6" />
++ </envvars>
++ </make>
++ <run>
++ <directoryradio>executable</directoryradio>
++ </run>
++ <general>
++ <activetarget>kded_networkstatus.la</activetarget>
++ </general>
++ </kdevautoproject>
++ <kdevcppsupport>
++ <references/>
++ <codecompletion>
++ <includeGlobalFunctions>true</includeGlobalFunctions>
++ <includeTypes>true</includeTypes>
++ <includeEnums>true</includeEnums>
++ <includeTypedefs>false</includeTypedefs>
++ <automaticCodeCompletion>true</automaticCodeCompletion>
++ <automaticArgumentsHint>true</automaticArgumentsHint>
++ <automaticHeaderCompletion>true</automaticHeaderCompletion>
++ <codeCompletionDelay>250</codeCompletionDelay>
++ <argumentsHintDelay>400</argumentsHintDelay>
++ <headerCompletionDelay>250</headerCompletionDelay>
++ </codecompletion>
++ </kdevcppsupport>
++</kdevelop>
+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 <wstephenson@kde.org>
++
++ 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 <kapplication.h>
++#include <kdebug.h>
++#include <kstaticdeleter.h>
++
++#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<ConnectionManager> 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 <wstephenson@kde.org>
++
++ 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 <dcopobject.h>
++#include <kdemacros.h>
++
++#include <networkstatuscommon.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <qobject.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <kdebug.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <wstephenson@kde.org>
++
++ 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 <wstephenson@kde.org>
++
++ 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 <qstringlist.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <qmap.h>
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kdebug.h>
++
++#include "network.h"
++#include <kdepimmacros.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <kdedmodule.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <dcopobject.h>
++#include <qstringlist.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qtooltip.h>
++#include <kiconloader.h>
++#include <klocale.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <qhbox.h>
++#include <kdemacros.h>
++#include <networkstatuscommon.h>
++
++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 @@
++<?xml version = '1.0'?>
++<kdevelop>
++ <general>
++ <author>Will Stephenson</author>
++ <email>wstephenson@suse.de</email>
++ <version>$VERSION$</version>
++ <projectmanagement>KDevKDEAutoProject</projectmanagement>
++ <primarylanguage>C++</primarylanguage>
++ <keywords>
++ <keyword>Qt</keyword>
++ <keyword>KDE</keyword>
++ </keywords>
++ </general>
++ <kdevfileview>
++ <groups>
++ <group pattern="*.cpp;*.cxx;*.h" name="Sources" />
++ <group pattern="*.ui" name="User Interface" />
++ <group pattern="*.png" name="Icons" />
++ <group pattern="*.po;*.ts" name="Translations" />
++ <group pattern="*" name="Others" />
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ <hidenonlocation>false</hidenonlocation>
++ </groups>
++ <tree>
++ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ </tree>
++ </kdevfileview>
++ <kdevdoctreeview>
++ <ignoretocs>
++ <toc>ada</toc>
++ <toc>ada_bugs_gcc</toc>
++ <toc>bash</toc>
++ <toc>bash_bugs</toc>
++ <toc>clanlib</toc>
++ <toc>fortran_bugs_gcc</toc>
++ <toc>gnome1</toc>
++ <toc>gnustep</toc>
++ <toc>gtk</toc>
++ <toc>gtk_bugs</toc>
++ <toc>haskell</toc>
++ <toc>haskell_bugs_ghc</toc>
++ <toc>java_bugs_gcc</toc>
++ <toc>java_bugs_sun</toc>
++ <toc>opengl</toc>
++ <toc>pascal_bugs_fp</toc>
++ <toc>php</toc>
++ <toc>php_bugs</toc>
++ <toc>perl</toc>
++ <toc>perl_bugs</toc>
++ <toc>python</toc>
++ <toc>python_bugs</toc>
++ <toc>ruby</toc>
++ <toc>ruby_bugs</toc>
++ <toc>sdl</toc>
++ <toc>stl</toc>
++ <toc>sw</toc>
++ <toc>w3c-dom-level2-html</toc>
++ <toc>w3c-svg</toc>
++ <toc>w3c-uaag10</toc>
++ <toc>wxwidgets_bugs</toc>
++ </ignoretocs>
++ <ignoreqt_xml>
++ <toc>qmake User Guide</toc>
++ </ignoreqt_xml>
++ </kdevdoctreeview>
++ <kdevdebugger>
++ <general>
++ <dbgshell>libtool</dbgshell>
++ </general>
++ </kdevdebugger>
++ <kdevfilecreate>
++ <useglobaltypes>
++ <type ext="ui" />
++ <type ext="cpp" />
++ <type ext="h" />
++ </useglobaltypes>
++ </kdevfilecreate>
++ <kdevautoproject>
++ <make>
++ <envvars>
++ <envvar value="1" name="WANT_AUTOCONF_2_5" />
++ <envvar value="1" name="WANT_AUTOMAKE_1_6" />
++ </envvars>
++ </make>
++ <run>
++ <directoryradio>executable</directoryradio>
++ </run>
++ <general>
++ <activetarget>kded_networkstatus.la</activetarget>
++ </general>
++ </kdevautoproject>
++ <kdevcppsupport>
++ <references/>
++ <codecompletion>
++ <includeGlobalFunctions>true</includeGlobalFunctions>
++ <includeTypes>true</includeTypes>
++ <includeEnums>true</includeEnums>
++ <includeTypedefs>false</includeTypedefs>
++ <automaticCodeCompletion>true</automaticCodeCompletion>
++ <automaticArgumentsHint>true</automaticArgumentsHint>
++ <automaticHeaderCompletion>true</automaticHeaderCompletion>
++ <codeCompletionDelay>250</codeCompletionDelay>
++ <argumentsHintDelay>400</argumentsHintDelay>
++ <headerCompletionDelay>250</headerCompletionDelay>
++ </codecompletion>
++ </kdevcppsupport>
++</kdevelop>
+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 <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qpushbutton.h>
++#include <qvbox.h>
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#include <connectionmanager.h>
++#include <networkstatusindicator.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#include "networkstatusiface_stub.h"
++
++class TestClientView;
++
++/**
++ * Test client that uses a ConnectionManager to change its state
++ *
++ * @short Main window class
++ * @author Will Stephenson <wstephenson@kde.org>
++ * @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 <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qpushbutton.h>
++
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#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 <wstephenson@kde.org>
++ * @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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestClientView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestClientView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>356</width>
++ <height>127</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>5</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Client for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Network status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>netStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1_2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1_2</cstring>
++ </property>
++ <property name="text">
++ <string>App status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>appStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>31</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>connectButton</cstring>
++ </property>
++ <property name="text">
++ <string>Start Connect</string>
++ </property>
++ <property name="toggleButton">
++ <bool>false</bool>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>61</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
+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 <wstephenson@kde.org>
++
++ 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 <qcombobox.h>
++#include <qlabel.h>
++#include <qpushbutton.h>
++#include <qtimer.h>
++
++#include <dcopclient.h>
++#include <kaboutdata.h>
++#include <kapplication.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <klocale.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <kmainwindow.h>
++
++#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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestServiceView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestServiceView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>367</width>
++ <height>132</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Service for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>statusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>StyledPanel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout3</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel3</cstring>
++ </property>
++ <property name="text">
++ <string>Change to:</string>
++ </property>
++ </widget>
++ <widget class="QComboBox">
++ <item>
++ <property name="text">
++ <string>Offline Disconnected</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline Failed</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Shutting Down</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Establishing</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Online</string>
++ </property>
++ </item>
++ <property name="name">
++ <cstring>changeCombo</cstring>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>51</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>changeButton</cstring>
++ </property>
++ <property name="text">
++ <string>Do change</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>41</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
++
+Index: networkstatus/testclient2.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/testclient2.cpp
+@@ -0,0 +1,222 @@
++/* This file is part of kdepim.
++ Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qpushbutton.h>
++#include <qvbox.h>
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#include <connectionmanager.h>
++#include <networkstatusindicator.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#include "networkstatusiface_stub.h"
++
++class TestClientView;
++
++/**
++ * Test client that uses a ConnectionManager to change its state
++ *
++ * @short Main window class
++ * @author Will Stephenson <wstephenson@kde.org>
++ * @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 <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qpushbutton.h>
++
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#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 <wstephenson@kde.org>
++ * @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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestClientView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestClientView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>356</width>
++ <height>127</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>5</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Client for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Network status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>netStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1_2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1_2</cstring>
++ </property>
++ <property name="text">
++ <string>App status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>appStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>31</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>connectButton</cstring>
++ </property>
++ <property name="text">
++ <string>Start Connect</string>
++ </property>
++ <property name="toggleButton">
++ <bool>false</bool>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>61</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
+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 <wstephenson@kde.org>
++
++ 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 <qcombobox.h>
++#include <qlabel.h>
++#include <qpushbutton.h>
++#include <qtimer.h>
++
++#include <dcopclient.h>
++#include <kaboutdata.h>
++#include <kapplication.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <klocale.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <kmainwindow.h>
++
++#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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestServiceView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestServiceView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>367</width>
++ <height>132</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Service for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>statusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>StyledPanel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout3</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel3</cstring>
++ </property>
++ <property name="text">
++ <string>Change to:</string>
++ </property>
++ </widget>
++ <widget class="QComboBox">
++ <item>
++ <property name="text">
++ <string>Offline Disconnected</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline Failed</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Shutting Down</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Establishing</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Online</string>
++ </property>
++ </item>
++ <property name="name">
++ <cstring>changeCombo</cstring>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>51</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>changeButton</cstring>
++ </property>
++ <property name="text">
++ <string>Do change</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>41</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
++
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<kDebugPrivate> pcd
+ static KStaticDeleter<KDebugDCOPIface> 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 <kaboutdialog.h>
+ #include <kaboutdialog_private.h>
+ #include <kdebug.h>
++#include <config.h>
+
+ //MOC_SKIP_BEGIN
+ template class QPtrList<KAboutContributor>;
+@@ -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 <owner>:<group> 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
+ <OnlyUnallocated/>
+
+-------------------------------------------------------------------
+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 <laurivan@eircom.net>)
+- 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 <libpng> to <libpng-devel-packages>
+
+-------------------------------------------------------------------
+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 <META http-equiv="Cache-Control" content="no-cache">
+ * 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 <docbkdsl> to <docbook-dsssl-stylesheets>
+
+-------------------------------------------------------------------
+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 <docbk30> to <docbook_3>
+
+-------------------------------------------------------------------
+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 <kde@kde.org>
+
+%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/<pid>/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 <owner>:<group> 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
+ <OnlyUnallocated/>
+
+-------------------------------------------------------------------
+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 <laurivan@eircom.net>)
+- 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 <libpng> to <libpng-devel-packages>
+
+-------------------------------------------------------------------
+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 <META http-equiv="Cache-Control" content="no-cache">
+ * 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 <docbkdsl> to <docbook-dsssl-stylesheets>
+
+-------------------------------------------------------------------
+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 <docbk30> to <docbook_3>
+
+-------------------------------------------------------------------
+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/a\
+ <group id="%{name}-%{version}">
+/<\/catalog/i\
+ </group>' \
+ %{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 <meissner@suse.de>
+ 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 <<EOF
+%ifarch s390x sparc64 x86_64 ppc64
+/opt/tde/lib64
+%endif
+/opt/tde/lib
+EOF
+
+%post
+ %run_ldconfig
+ %run_permissions
+
+%postun
+ rm -f usr/share/doc/KDE3-API/index.html
+ %run_ldconfig
+
+%post arts
+ %run_ldconfig
+
+%postun arts
+ %run_ldconfig
+
+%post default-style
+ %run_ldconfig
+
+%postun default-style
+ %run_ldconfig
+
+%post doc
+ if [ -x %{regcat} ]; then
+ %{regcat} -a %{_tde_datadir}/ksgmltools2/customization/CATALOG.%{name} >/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 <qlineedit.h>
+ #include <qcombobox.h>
++#include <qvbox.h>
++#include <qlabel.h>
++#include <qlayout.h>
++#include <qtoolbutton.h>
++#include <qheader.h>
+
+ #include <kcompletion.h>
++#include <kdialogbase.h>
++#include <klistview.h>
+
+ 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 <kcursor.h>
+ #include <kiconloader.h>
+ #include <kicontheme.h>
++#include <klistviewsearchline.h>
+ #include <klineedit.h>
+ #include <klocale.h>
+ #include <knotifyclient.h>
+@@ -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 <qvaluelist.h>
+ #include <qregexp.h>
+
++#include <dcopref.h>
+ #include <kshred.h>
+ #include <kdebug.h>
+ #include <kurl.h>
+@@ -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 <QWidget> 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("<qt>Unable to enter <b>%1</b>.\nYou do not have access rights to this location.</qt>").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("<qt>The file <b>%1</b> is an executable program. "
+ "For safety it will not be started.</qt>").arg(u.htmlURL()));
+ return 0;
+ }
+ if ( noAuth )
+ {
+- KMessageBoxWrapper::error( 0L,
++ KMessageBoxWrapper::error( window,
+ i18n("<qt>You do not have permission to run <b>%1</b>.</qt>").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 @@
++<?xml version="1.0"?>
++<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
++"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
++<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"
++ prefer="public">
++<public publicId="-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN"
++ uri="dtd/kdex.dtd" />
++<public publicId="-//KDE//ELEMENTS DocBook XML Hierarchy Redeclarations 2 V1.0//EN"
++ uri="dtd/rdbhier2.elements" />
++<public publicId="-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.1//EN"
++ uri="dtd/rdbpool.elements" />
++<public publicId="-//KDE//ELEMENTS DocBook XML Modifications (Restrictions) V1.1//EN"
++ uri="dtd/modifications.elements" />
++
++<public publicId="-//KDE//ENTITIES DocBook XML General Entity Declarations V1.2//EN"
++ uri="entities/general.entities" />
++<public publicId="-//KDE//ENTITIES DocBook XML General Entity Declarations (Persons) V1.0//EN"
++ uri="entities/contributor.entities" />
++
++<public publicId="-//KDE//ENTITIES DocBook XML Localisation Entity Declarations V1.0//EN"
++ uri="entities/l10n.entities" />
++
++<public publicId="-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN"
++ uri="obsolete/kdex.dtd" />
++<public publicId="-//KDE//ENTITIES DocBook XML General Entity Declarations V1.1//EN"
++ uri="obsolete/general.entities" />
++<public publicId="-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.0//EN"
++ uri="obsolete/rdbpool.elements" />
++<public publicId="-//KDE//ELEMENTS DocBook XML Modifications V1.0//EN"
++ uri="obsolete/modifications.elements" />
++
++
++<public publicId="-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.0//EN"
++ uri="obsolete/kdex-412-10.dtd" />
++
++
++<public publicId="-//KDE//DTD DocBook XML V4.1-Based Variant V1.0//EN"
++ uri="obsolete/kdex-412-10.dtd" />
++</catalog>
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<KJS::DOMDocument *>(obj.imp())->toNode();
+ DOM::DocumentImpl *doc = static_cast<DOM::DocumentImpl *>(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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdemultimedia</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdenetwork</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdepim</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdesdk</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdetoys</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdeutils</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tdewebdev</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.linuxtools.rpm.core.rpmnature</nature>
+ </natures>
+</projectDescription>