summaryrefslogtreecommitdiffstats
path: root/opensuse/core
diff options
context:
space:
mode:
authorRobert Xu <robxu9@gmail.com>2011-11-10 18:04:39 -0500
committerRobert Xu <robxu9@gmail.com>2011-11-10 18:04:39 -0500
commit21fcfa3348213aa87f0e3aef62ca4720c6d31cb7 (patch)
tree2cfb64c59322628e613ed0895e3c3694d3abe6bd /opensuse/core
parent8667643bff14a60d8571c599efd3e48bed3e3b12 (diff)
downloadtde-packaging-21fcfa3348213aa87f0e3aef62ca4720c6d31cb7.tar.gz
tde-packaging-21fcfa3348213aa87f0e3aef62ca4720c6d31cb7.zip
initial commit to suse branch: eclipse integration
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, curse