Hello community,

here is the log from the commit of package kdebase4-workspace.3011 for 
openSUSE:13.1:Update checked in at 2014-09-25 09:08:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:13.1:Update/kdebase4-workspace.3011 (Old)
 and      /work/SRC/openSUSE:13.1:Update/.kdebase4-workspace.3011.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kdebase4-workspace.3011"

Changes:
--------
New Changes file:

--- /dev/null   2014-09-24 19:41:01.464119138 +0200
+++ 
/work/SRC/openSUSE:13.1:Update/.kdebase4-workspace.3011.new/kdebase4-workspace.changes
      2014-09-25 09:08:44.000000000 +0200
@@ -0,0 +1,2951 @@
+-------------------------------------------------------------------
+Tue Sep 16 20:53:08 UTC 2014 - hrvoje.sen...@gmail.com
+
+- Update to 4.11.12
+  * Bugfix release, includes fixes for: kde#329158, kde#317066,
+    kde#327580, kde#336589 and kde#331761
+
+-------------------------------------------------------------------
+Fri Jul 25 21:33:35 UTC 2014 - hrvoje.sen...@gmail.com
+
+- Update to 4.11.11
+  * Bugfix release, includes fixes for: kde#326279, kde#326941,
+    kde#318061, kde#334309, kde#315346, kde#335023, kde#333275,
+    kde#334273, kde#334391, kde#334152, kde#335043, kde#336128,
+    kde#325944, kde#329537, kde#325707, kde#333012, kde#335617,
+    kde#324728 
+- Drop fix-crash-when-DesktopNames-isnt-set.patch, upstreamed
+
+-------------------------------------------------------------------
+Fri Apr 25 19:54:22 UTC 2014 - tittiatc...@gmail.com
+
+- Update to 4.11.9
+  * Bugfix release, includes fixes for kde#312947, bnc#756198,
+    kde#327947, kde#329076, bnc#864305, kde#224200, bnc#809835
+- Remove upstreamed patches 
+  - screenlocker-always-show-password-dialog-when-needed.patch
+  - screenlocker-dont-leak-screensaver-processes.patch
+  - kdm-fix-resumption-from-console-mode.patch
+- Remove kde-workspace-4.11.0-kdm-logind-multiseat.patch and
+  remove_strigi.patch, these are meant to be used with newer SC and
+  disto versions
+- Added fix-crash-when-DesktopNames-isnt-set.patch, kde#334159
+
+-------------------------------------------------------------------
+Thu Apr 10 12:09:26 UTC 2014 - wba...@tmo.at
+
+- Added kdm-fix-resumption-from-console-mode.patch:
+  * fix resumption from console mode when monotonic clock is in use 
+    (kde#312947, bnc#756198)
+- Added screenlocker-always-show-password-dialog-when-needed.patch:
+  * password input dialog was not shown under certain circumstances
+    (kde#327947, kde#329076, bnc#864305)
+- Added screenlocker-dont-leak-screensaver-processes.patch:
+  * screensaver processes might keep running in background when
+    unlocking the screen (kde#224200, bnc#809835)
+    
+-------------------------------------------------------------------
+Sat Mar 29 08:13:34 UTC 2014 - tittiatc...@gmail.com
+
+- Update to 4.11.8
+   * KDE 4.12.4  release
+   * See http://www.kde.org/announcements/announce-4.12.4.php
+
+- Drop upstreamed patches:
+  - 0001-Add-the-full-name-of-completion-matches-to-history.patch
+  - 0002-Move-focus-to-search-field-upon-typing-from-result-l.patch
+  - 0003-Save-current-dialog-size-on-manual-resize.patch
+
+-------------------------------------------------------------------
+Sun Mar 16 19:50:59 UTC 2014 - stefan.bru...@rwth-aachen.de
+
+- added patch kde-workspace-4.11.0-kdm-logind-multiseat.patch for 
+  servers without VT, i.e. multiseat with sharevts 
+- add support for dynamic multiseat
+
+-------------------------------------------------------------------
+Fri Mar 14 21:15:44 UTC 2014 - hrvoje.sen...@gmail.com
+
+- Added patches from master (due to upstream 'LTS' policy not applied
+  to 4.11 branch)
+  0001-Add-the-full-name-of-completion-matches-to-history.patch and
+  0002-Move-focus-to-search-field-upon-typing-from-result-l.patch and
+  0003-Save-current-dialog-size-on-manual-resize.patch
+
+-------------------------------------------------------------------
+Fri Mar  7 10:26:03 UTC 2014 - tittiatc...@gmail.com
+
+- Update to 4.11.7
+   * KDE 4.13 Beta1  release
+   * See http://www.kde.org/announcements/announce-4.13-beta1.php
+- Drop upstream patches:
+  * 0001-Explicitly-request-a-Window-drawable.patch
+  * 0004-align-zoomed-cursor-to-hotspot.patch
+  * 0005-be-more-aggressive-about-exiting-zoom-effect.patch
+  * 0006-spatial-present-windows-zoom-calculation.patch
+  * 0007-fix-frontbuffer-copying-swap-preference.patch
+  * 0008-fix-sendToScreen-for-QuickTiled-windows.patch
+  * 0009-reset-desktopChangedWhileRotating-on-activation.patch
+  * 0010-ensure-to-show-clients-that-need-sessionInteract.patch
+  * 0011-fix-off-by-1-on-multiscreen-toppanel-strutting.patch
+  * 0012-Perform-the-systemd-version-evaluation-through-a-reg.patch
+
+- Add patch  remove_strigi.patch to remove the dependency on strigi
+
+- Dropped 12.2 related lines in the spec-file as well the 
+  rcksysguard, as that this is since 12.3 a systemd service.
+
+-------------------------------------------------------------------
+Thu Feb 27 02:22:31 UTC 2014 - hrvoje.sen...@gmail.com
+
+- Added various bugfix patches from upstream 4.11 branch:
+  * 0001-Explicitly-request-a-Window-drawable.patch
+  * 0004-align-zoomed-cursor-to-hotspot.patch
+  * 0005-be-more-aggressive-about-exiting-zoom-effect.patch
+  * 0006-spatial-present-windows-zoom-calculation.patch
+  * 0007-fix-frontbuffer-copying-swap-preference.patch
+  * 0008-fix-sendToScreen-for-QuickTiled-windows.patch
+  * 0009-reset-desktopChangedWhileRotating-on-activation.patch
+  * 0010-ensure-to-show-clients-that-need-sessionInteract.patch
+  * 0011-fix-off-by-1-on-multiscreen-toppanel-strutting.patch
+  * 0012-Perform-the-systemd-version-evaluation-through-a-reg.patch
+
+-------------------------------------------------------------------
+Fri Feb  7 08:28:43 UTC 2014 - tittiatc...@gmail.com
+
+- Update to 4.11.6
+  * kde-workspace release only
+
+- Drop upstream patch screenlocker-fix-mousecursor-blanking.diff
+  as it was included upstream
+
+-------------------------------------------------------------------
+Wed Jan  8 08:04:59 UTC 2014 - wba...@tmo.at
+
+- Added screenlocker-fix-mousecursor-blanking.diff:
+  Allow Screensavers to blank the mouse cursor again
+  (kde#311571, kde#316459)
+
+-------------------------------------------------------------------
+Sat Jan  4 09:50:52 UTC 2014 - tittiatc...@gmail.com
+
+- Update to 4.11.5
+   * KDE 4.11.5 maintenance release
+   * See http://www.kde.org/announcements/announce-4.11.5.php
+- Drop kscreensaver-disable-sessionmanagement.diff as it was 
+  included upstream
+
+-------------------------------------------------------------------
+Wed Dec 18 19:13:05 UTC 2013 - hrvoje.sen...@gmail.com
+
+- Anchor external (Build)Requires to %{_kde_platform_version} as 
+  once 4.11.5 is out, we would have issues building e.g. 
+  kde-workspace 4.11.6
+
+-------------------------------------------------------------------
+Sat Dec  7 19:47:13 UTC 2013 - hrvoje.sen...@gmail.com
+
+- Update to 4.11.4
+   * KDE 4.11.4 bugfix release
+   * See http://www.kde.org/announcements/announce-4.11.4.php
+- Drop 0001-introduce-a-locked-property-for-the-qml-lock-screen.patch
+  and adjust-to-upower-0.99.patch, they are included in this release
+
+-------------------------------------------------------------------
+Fri Nov 22 19:15:02 UTC 2013 - hrvoje.sen...@gmail.com
+
+- Disable previous patch, due to bad side-effects (kde#327947)
+
+-------------------------------------------------------------------
+Fri Nov 22 11:51:09 UTC 2013 - hrvoje.sen...@gmail.com
+
+- Added 0001-introduce-a-locked-property-for-the-qml-lock-screen.patch
+  from upstream, for resolving potential security risk where the
+  screenlocker would show it's locked, but infact isn't 
+  (kde#315442, bnc#802959)
+
+-------------------------------------------------------------------
+Sun Nov 10 01:01:29 UTC 2013 - hrvoje.sen...@gmail.com
+
+- Due to upstream chages in kde-workspace release policy (only 4.11.x
+  bugfixes) require kdeartwork4, kdebase4-wallpaper-default and 
+  python-kde4 equal or greater than kde-workspace version
+- Added adjust-to-upower-0.99.patch which ports Powerdevil to new 
+  UPower API/ABI/DBus interface
+
+-------------------------------------------------------------------
+Sat Nov  2 15:01:54 UTC 2013 - tittiatc...@gmail.com
+
+- Update to 4.11.3
+   * KDE 4.11.3 bugfix release
+   * See http://www.kde.org/announcements/announce-4.11.3.php
+- Drop helper_actions_syspath.patch, and create rpmlintrc file during
+  build phase for older openSUSE versions
+
+-------------------------------------------------------------------
+Sat Nov  2 14:58:30 UTC 2013 - tittiatc...@gmail.com
+
+- Drop patches due to upstream inclusion:
+  * 0001-QDeclarativeRepeaterCrashFix_kde#311871.patch
+  * fix-click-on-trash-plasmoid.diff
+
+-------------------------------------------------------------------
+Sun Oct 27 11:15:28 UTC 2013 - hrvoje.sen...@gmail.com
+
+- Added 0001-QDeclarativeRepeaterCrashFix_kde#311871.patch, fixes
+  annoying plasma crash when notifications would get shown, 
+  (kde#311871, bnc#812536, bnc#808656)
++++ 2754 more lines (skipped)
++++ between /dev/null
++++ and 
/work/SRC/openSUSE:13.1:Update/.kdebase4-workspace.3011.new/kdebase4-workspace.changes

New:
----
  add-calculator-hotkey.patch
  baselibs.conf
  kde-workspace-4.11.12.tar.xz
  kde4-migrate.diff
  kdebase4-workspace.changes
  kdebase4-workspace.spec
  kdm
  kdm-all-users-nopass.diff
  kdm-backend-session.patch
  kdm-cope-with-new-grub.diff
  kdm-dont-grab-mouse.diff
  kdm-fix-generic-greeter.diff
  kdm-fix-labelcolors.diff
  kdm-kdmconf.diff
  kdm-logrotate
  kdm-long-xserver-timeout.diff
  kdm-make_it_cool.diff
  kdm-relaxed-auth.diff
  kdm-remove-duplicated-sessions.diff
  kdm-sysconfig-values.diff
  kdm-wordbreak.diff
  kdm_plymouth.patch
  kdm_systemd_shutdown.patch
  klipper.patch
  krunner-no-italics.diff
  ksysguardd.service
  kwin-cubecap.png
  opensuse-homepage.diff
  opensuse-kinfocenter.diff
  plasma-branding-defaults-applets.diff
  plasma-dashboard-leave.diff
  plasma-disable-networkmanager.diff
  plasma-kickoff-newly-collapsing.diff
  plasma-panel-resize-hint.diff
  rotate-wacom-pointers.diff
  same-pam-generic-classic.diff
  startkde.diff
  sysconfig.displaymanager-kdm
  systemsettings-desktop.diff
  titlebar_decor.png

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kdebase4-workspace.spec ++++++
++++ 692 lines (skipped)

++++++ add-calculator-hotkey.patch ++++++
diff -uNrp kde-workspace-4.11.1/khotkeys/data/defaults.khotkeys 
kde-workspace-4.11.1_new/khotkeys/data/defaults.khotkeys
--- kde-workspace-4.11.1/khotkeys/data/defaults.khotkeys        2013-08-28 
10:59:38.071530567 -0600
+++ kde-workspace-4.11.1_new/khotkeys/data/defaults.khotkeys    2013-09-01 
09:22:09.465161689 -0600
@@ -73,7 +73,7 @@ Comment[wa]=Rawete
 Comment[x-test]=xxCommentxx
 Comment[zh_CN]=注释
 Comment[zh_TW]=註解
-DataCount=1
+DataCount=2
 Enabled=true
 Name=KMenuEdit
 Name[ar]=محرّر قوائم كدي
@@ -395,6 +395,32 @@ Key=Search
 Type=SHORTCUT
 Uuid={d03619b6-9b3c-48cc-9d9c-a2aadb485550}
 
+[Data_1_2]
+Comment=Launches KCalc when Calculator key (if present) is pressed.
+Enabled=true
+Name=Calculator
+Type=SIMPLE_ACTION_DATA
+
+[Data_1_2Actions]
+ActionsCount=1
+
+[Data_1_2Actions0]
+CommandURL=kcalc
+Type=COMMAND_URL
+
+[Data_1_2Conditions]
+Comment=
+ConditionsCount=0
+
+[Data_1_2Triggers]
+Comment=Simple_action
+TriggersCount=1
+
+[Data_1_2Triggers0]
+Key=Launch (1)
+Type=SHORTCUT
+Uuid={c8faefad-8d09-4389-8f36-09865d2bb0c2}
+
 [Main]
 Version=2
 ImportId=defaults
++++++ baselibs.conf ++++++
kdebase4-workspace-liboxygenstyle
++++++ kde4-migrate.diff ++++++
Index: startkde.cmake
===================================================================
--- startkde.cmake.orig
+++ startkde.cmake
@@ -64,6 +64,11 @@ fi
 kdehome=$HOME/@KDE_DEFAULT_HOME@
 test -n "$KDEHOME" && kdehome=`echo "$KDEHOME"|sed "s,^~/,$HOME/,"`
 
+# first, migrate settings from kde3, if available
+if test -x /usr/bin/kde4-migrate; then
+    /usr/bin/kde4-migrate || true
+fi
+
 # see kstartupconfig source for usage
 mkdir -m 700 -p $kdehome
 mkdir -m 700 -p $kdehome/share
++++++ kdm ++++++
kdm_start_proc() {
    splashcopy 0 6
    return 0
}
    
kdm_vars() {
    KDM4_BIN=/usr/bin/kdm
    case "${DISPLAYMANAGER##*/}" in
        kdm|kdm4|kde|KDM|KDE)
            export KDEROOTHOME=/root/.kdm
            DISPLAYMANAGER=$KDM4_BIN
            STARTPROC=kdm_start_proc
            ;;
        *) return 1 ;;
    esac
    return 0
}

++++++ kdm-all-users-nopass.diff ++++++
Index: kdm/backend/client.c
===================================================================
--- kdm/backend/client.c.orig
+++ kdm/backend/client.c
@@ -462,6 +462,9 @@ isNoPassAllowed(struct passwd *pw)
     if (cursource != PWSRC_MANUAL)
         return True;
 
+       if (td->noPassAllUsers)
+               return True;
+
 #if defined(USE_PAM) || defined(_AIX)
     /* Give nss_ldap, etc. a chance to normalize (uppercase) the name. */
     if (!(pw = getpwnam(un)) ||
Index: kdm/config.def
===================================================================
--- kdm/config.def.orig
+++ kdm/config.def
@@ -1895,6 +1895,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
++++++ kdm-backend-session.patch ++++++
Index: kde-workspace-4.10.5/kdm/backend/session.c
===================================================================
--- kde-workspace-4.10.5.orig/kdm/backend/session.c
+++ kde-workspace-4.10.5/kdm/backend/session.c
@@ -294,7 +294,7 @@ ctrlGreeterWait(int wreply, time_t *star
                 switch (type & C_TYPE_MASK) {
                 case C_TYPE_INT:
                     /*debug(" -> int %#x (%d)\n", *(int *)avptr, *(int 
*)avptr);*/
-                    gSendInt(*(int *)avptr);
+                    gSendInt((int)(unsigned long)*(char **)avptr);
                     break;
                 case C_TYPE_STR:
                     /*debug(" -> string %\"s\n", *avptr);*/
++++++ kdm-cope-with-new-grub.diff ++++++
Index: kdm/backend/bootman.c
===================================================================
--- kdm/backend/bootman.c.orig
+++ kdm/backend/bootman.c
@@ -84,8 +84,7 @@ getGrub(char ***opts, int *def, int *cur
     int len;
     char line[1000];
 
-    if (!grubSetDefault && !grub &&
-        !(grubSetDefault = locate("grub-set-default")) &&
+    if (!grub &&
         !(grub = locate("grub")))
         return BO_NOMAN;
 
@@ -136,31 +135,10 @@ setGrub(const char *opt, SdRec *sdr)
 static void
 commitGrub(void)
 {
-    if (sdRec.bmstamp != mTime(GRUB_MENU) &&
-            setGrub(sdRec.osname, &sdRec) != BO_OK)
-        return;
-
-    if (grubSetDefault) {
-        /* The grub-set-default command must be used, which is
-         * not so good because there is no way of setting an
-         * entry for the next boot only. */
-        char index[16];
-        const char *args[] = { grubSetDefault, index, 0 };
-        sprintf(index, "%d", sdRec.osindex);
-        runAndWait((char **)args, environ);
-    } else {
-        /* The grub shell can be used with `savedefault'.
-         * That requires a (widely distributed) patch to grub, e.g.
-         * grub-0.97-once.patch. It won't work with a vanilla grub.*/
-        FILE *f;
-        int pid;
-        static const char *args[] = { 0, "--batch", "--no-floppy", 0 };
-        args[0] = grub;
-        if ((f = pOpen((char **)args, 'w', &pid))) {
-            fprintf(f, "savedefault --default=%d --once\n", sdRec.osindex);
-            pClose(f, &pid);
-        }
-    }
+    char buffer[PATH_MAX];
+
+    snprintf(buffer, PATH_MAX, "/usr/sbin/grubonce %d", sdRec.osindex);
+    system(buffer);
 }
 
 #define GRUB2_MAX_MENU_LEVEL 5
++++++ kdm-dont-grab-mouse.diff ++++++
Index: kdm/kfrontend/kdm_greet.c
===================================================================
--- kdm/kfrontend/kdm_greet.c.orig      2010-07-06 08:54:31.000000000 +0200
+++ kdm/kfrontend/kdm_greet.c   2010-11-21 20:47:03.694718280 +0100
@@ -458,7 +458,6 @@ secureInputs(Display *dpy)
 {
     debug("secureInputs %s\n", dname);
     secureKeyboard(dpy);
-    securePointer(dpy);
     XSetInputFocus(dpy, None, None, CurrentTime);
     debug("secureInputs %s done\n", dname);
 }
@@ -469,7 +468,6 @@ unsecureInputs(Display *dpy)
     debug("unsecureInputs %s\n", dname);
     XSetInputFocus(dpy, PointerRoot, PointerRoot, CurrentTime);
     XUngrabKeyboard(dpy, CurrentTime);
-    XUngrabPointer(dpy, CurrentTime);
     XSync(dpy, False);
 }
 
++++++ kdm-fix-generic-greeter.diff ++++++
Index: kdm/kfrontend/kgreeter.cpp
===================================================================
--- kdm/kfrontend/kgreeter.cpp.orig
+++ kdm/kfrontend/kgreeter.cpp
@@ -976,8 +976,6 @@ KThemedGreeter::KThemedGreeter(KdmThemer
     timed_label = themer->findNode("timed-label");
 
     KdmItem *itm;
-    if ((itm = themer->findNode("pam-message"))) // done via msgboxes
-        itm->setVisible(false);
     if ((itm = themer->findNode("language_button"))) // not implemented yet
         itm->setVisible(false);
 
Index: kdm/kfrontend/themes/greeter.dtd
===================================================================
--- kdm/kfrontend/themes/greeter.dtd.orig
+++ kdm/kfrontend/themes/greeter.dtd
@@ -19,9 +19,9 @@ Items with these IDs get special treatme
        caps-lock-warning | xauth-warning | pam-error | timed-label |
        login_button | session_button | system_button
 Items with these IDs might get special treatment by conversation plugins:
-       talker | domain-entry | user-entry | pw-entry
+       talker | domain-entry | user-entry | pw-entry | pam-message | 
pam-prompt | user-pw-entry
 Items with these IDs are always hidden:
-       pam-message | language_button
+       language_button
 -->
 
 <!ATTLIST item
Index: kdm/kfrontend/themes/oxygen-air/oxygen-air.xml
===================================================================
--- kdm/kfrontend/themes/oxygen-air/oxygen-air.xml.orig
+++ kdm/kfrontend/themes/oxygen-air/oxygen-air.xml
@@ -26,7 +26,7 @@
                                <stock type="welcome-label"/>
                        </item>
 
-                       <item type="rect" id="user-field">
+                       <item type="rect" id="talker">
                                <pos anchor="c" x="50%" y="43%" width="400" 
height="144"/>
                                <box orientation="vertical" spacing="0" 
homogeneous="true">
 
@@ -34,6 +34,7 @@
                                                <pos anchor="c" x="50%" y="60%" 
height="box" width="box"/>
                                                <box orientation="horizontal" 
spacing="10">
                                                        <item type="pixmap">
+                                                         <show 
type="!plugin-specific-generic"/>
                                                                <normal 
file="user-entry.png"/>
                                                        </item>
                                                        <item type="entry" 
id="user-entry">
@@ -47,12 +48,31 @@
                                                <pos anchor="c" x="50%" y="40%" 
height="box" width="box"/>
                                                <box orientation="horizontal" 
spacing="10">
                                                        <item type="pixmap">
+                                                               <show 
type="!plugin-specific-generic"/>
                                                                <normal 
file="pw-entry.png"/>
                                                        </item>
                                                        <item type="entry" 
id="pw-entry">
+                                                               <show 
type="!plugin-specific-generic"/>
                                                                <pos 
width="157" height="30"/>
                                                                <style 
frame="true"/>
                                                        </item>
+                                                       <!-- these need 
repositioning for KDE 4.6 -->
+                                                       <item type="label" 
id="pam-message">
+                                                               <show 
type="plugin-specific-generic"/>
+                                                               <pos anchor="n" 
x="50%" y="60%" width="90%" height="30%"/>
+                                                               <text> </text>
+                                                       </item>
+
+                                                       <item type="label" 
id="pam-prompt">
+                                                               <show 
type="plugin-specific-generic"/>
+                                                               <pos anchor="n" 
x="50%" y="30%" width="90%" height="22"/>
+                                                               <text> </text>
+                                                       </item>
+
+                                                       <item type="entry" 
id="user-pw-entry">
+                                                               <show 
type="plugin-specific-generic"/>
+                                                               <pos anchor="c" 
x="50%" y="30%" width="90%" height="22"/>
+                                                       </item>
                                                </box>
                                        </item>
 
Index: libs/kdm/kgreet_generic.cpp
===================================================================
--- libs/kdm/kgreet_generic.cpp.orig
+++ libs/kdm/kgreet_generic.cpp
@@ -41,24 +41,14 @@ extern KDE_EXPORT KGreeterPluginInfo kgr
 
 static int echoMode;
 
-class KDMPasswordEdit : public KLineEdit {
-public:
-    KDMPasswordEdit(QWidget *parent = 0) : KLineEdit(parent)
-    {
-        if (::echoMode == -1)
-            setPasswordMode(true);
-        else
-            setEchoMode(::echoMode ? Password : NoEcho);
-        setContextMenuPolicy(Qt::NoContextMenu);
-    }
-};
-
 KGenericGreeter::KGenericGreeter(KGreeterPluginHandler *_handler,
                                  QWidget *parent,
                                  const QString &_fixedEntity,
                                  Function _func, Context _ctx) :
     QObject(),
     KGreeterPlugin(_handler),
+    m_label( 0 ),
+    m_messageLabel( 0 ),
     m_lineEdit(0),
     fixedUser(_fixedEntity),
     func(_func),
@@ -66,22 +56,56 @@ KGenericGreeter::KGenericGreeter(KGreete
     exp(-1),
     running(false)
 {
-    m_parentWidget = new QWidget(parent);
-    m_parentWidget->setObjectName("talker");
-    // XXX set some minimal size
-    widgetList << m_parentWidget;
-    m_grid = new QGridLayout(m_parentWidget);
-    m_grid->setMargin(0);
+    QGridLayout *grid = 0;
+    if (!_handler->gplugHasNode( "pam-prompt" ) ||
+            !_handler->gplugHasNode( "user-pw-entry" ) ||
+            !_handler->gplugHasNode( "pam-message" )) {
+        parent = new QWidget( parent );
+        parent->setObjectName( "talker" );
+        widgetList << parent;
+        grid = new QGridLayout( parent );
+        grid->setMargin( 0 );
+    }
 
     if (ctx == ExUnlock || ctx == ExChangeTok)
         fixedUser = KUser().loginName();
+
+    m_label = new QLabel( parent );
+    if( grid ) {
+        m_label->setMinimumWidth(
+                m_label->fontMetrics().width( "A username" ) );
+        grid->addWidget( m_label, 0, 0 );
+    } else {
+        m_label->setObjectName( "pam-prompt" );
+        widgetList << m_label;
+
+        m_lineEdit = new KLineEdit( parent );
+        m_label->setBuddy( m_lineEdit );
+        if( grid ) {
+            m_lineEdit->setMinimumWidth(
+                    m_lineEdit->fontMetrics().width( "This is a long password" 
) );
+            grid->addWidget( m_lineEdit, 0, 1 );
+        } else {
+            m_lineEdit->setObjectName( "user-pw-entry" );
+            widgetList << m_lineEdit;
+        }
+        m_messageLabel = new QLabel( parent );
+        if( grid ) {
+            m_messageLabel->setMinimumWidth(
+                    m_messageLabel->fontMetrics().width( "Information text" ) 
);
+            grid->addWidget( m_messageLabel, 1, 0 );
+        } else {
+            m_messageLabel->setObjectName( "pam-message" );
+            widgetList << m_messageLabel;
+        }
+    }
 }
 
 // virtual
 KGenericGreeter::~KGenericGreeter()
 {
     abort();
-    delete m_parentWidget;
+    qDeleteAll( widgetList );
 }
 
 void // virtual
@@ -127,8 +151,7 @@ KGenericGreeter::setEnabled(bool enable)
 {
     // assert(func == Authenticate && ctx == Shutdown);
     // XXX this is likely to bear some bogosity
-    foreach (QWidget *w, m_children)
-        w->setEnabled(enable);
+    m_lineEdit->setEnabled( enable );
     if (enable && m_lineEdit)
         m_lineEdit->setFocus();
 }
@@ -143,9 +166,7 @@ KGenericGreeter::textMessage(const char
         revive();
     QString qtext = QString::fromUtf8(text);
     m_infoMsgs.append(qtext);
-    QLabel *label = new QLabel(qtext, m_parentWidget);
-    m_grid->addWidget(label, m_line++, 0, 1, 2);
-    m_children.append(label);
+    m_messageLabel->setText( m_infoMsgs.join( "\n" ));
 
     return true;
 }
@@ -169,15 +190,20 @@ KGenericGreeter::textPrompt(const char *
         revive();
     else
         m_infoMsgs.clear();
-
-    QLabel *label = new QLabel(QString::fromUtf8(prompt).trimmed());
-    m_grid->addWidget(label, m_line, 0);
-    m_children.append(label);
+    m_children.append(m_label);
     m_echo = echo;
+
+    m_label->setText( QString::fromUtf8( prompt ).trimmed());
+    m_lineEdit->setContextMenuPolicy( Qt::NoContextMenu );
+    m_lineEdit->setCompletionObject( 0 );
+    m_lineEdit->disconnect( this );
+    m_lineEdit->clear();
+    m_lineEdit->setPasswordMode( false );
+    m_lineEdit->setEchoMode( QLineEdit::Normal );
     if (echo) {
-        m_lineEdit = new KLineEdit;
-        m_lineEdit->setContextMenuPolicy(Qt::NoContextMenu);
         if (!exp) {
+            if (m_label->text().isEmpty())
+                m_label->setText( i18n("&Username:"));
             if (!m_users.isEmpty()) {
                 KCompletion *userNamesCompletion = new KCompletion;
                 userNamesCompletion->setItems(m_users);
@@ -188,20 +214,18 @@ KGenericGreeter::textPrompt(const char *
             if (!curUser.isEmpty()) {
                 m_lineEdit->setText(curUser);
                 m_lineEdit->selectAll();
-                connect(m_lineEdit, SIGNAL(selectionChanged()), 
SLOT(slotChanged()));
             }
             connect(m_lineEdit, SIGNAL(editingFinished()), 
SLOT(slotLoginLostFocus()));
         }
         connect(m_lineEdit, SIGNAL(editingFinished()), SLOT(slotChanged()));
         connect(m_lineEdit, SIGNAL(textChanged(QString)), SLOT(slotChanged()));
     } else {
-        m_lineEdit = new KDMPasswordEdit;
+        if (::echoMode == -1)
+            m_lineEdit->setPasswordMode( true );
+        else
+            m_lineEdit->setEchoMode( ::echoMode ? QLineEdit::Password : 
QLineEdit::NoEcho );
+        connect( m_lineEdit, SIGNAL(editingFinished()), SLOT(slotChanged()) );
     }
-    m_lineEdit->setMinimumWidth(
-        m_lineEdit->fontMetrics().width("This is a long password"));
-    m_grid->addWidget(m_lineEdit, m_line, 1);
-    m_children.append(m_lineEdit);
-    m_lineEdit->show();
     m_lineEdit->setFocus();
 }
 
@@ -236,7 +260,6 @@ KGenericGreeter::next()
     if (m_lineEdit) {
         m_lineEdit->setEnabled(false);
         QString text = m_lineEdit->text();
-        m_lineEdit = 0;
         handler->gplugReturnText(text.toLocal8Bit(),
                                  !m_echo ?
                                      KGreeterPluginHandler::IsSecret :
@@ -273,8 +296,7 @@ KGenericGreeter::failed()
         revive();
         handler->gplugMsgBox(QMessageBox::Information, text);
     } else {
-        foreach (QWidget *w, m_children)
-            w->setEnabled(false);
+        m_lineEdit->setEnabled( false );
     }
     exp = -1;
     running = false;
@@ -284,12 +306,9 @@ void // virtual
 KGenericGreeter::revive()
 {
     // assert(!running);
-    foreach (QWidget *w, m_children)
-        w->deleteLater();
-    m_children.clear();
     m_infoMsgs.clear();
-    m_lineEdit = 0;
-    m_line = 0;
+    m_lineEdit->clear();
+    m_lineEdit->setEnabled( true );
 }
 
 void // virtual
Index: libs/kdm/kgreet_generic.h
===================================================================
--- libs/kdm/kgreet_generic.h.orig
+++ libs/kdm/kgreet_generic.h
@@ -33,7 +33,6 @@ Foundation, Inc., 51 Franklin Street, Fi
 
 #include <QObject>
 
-class QGridLayout;
 class QWidget;
 class KLineEdit;
 
@@ -68,11 +67,11 @@ class KGenericGreeter : public QObject,
     void slotChanged();
 
   private:
-    QGridLayout *m_grid;
     QList<QWidget *> m_children;
+    QLabel *m_label;
+    QLabel *m_messageLabel;
     KLineEdit *m_lineEdit;
-    QWidget *m_parentWidget;
-    QList<QString> m_infoMsgs;
+    QStringList m_infoMsgs;
     QString fixedUser, curUser;
     QStringList m_users;
     Function func;
++++++ kdm-fix-labelcolors.diff ++++++
Subject: Fix broken KDM layout with fingerprint support
From: Lubos Lunak
Patch-upstream: yes
Bug: bnc#533189
Relates: kdm-fix-generic-greeter.diff, same-pam-generic-classic.diff

Index: kde-workspace-4.8.5/kdm/kfrontend/themer/kdmlabel.h
===================================================================
--- kde-workspace-4.8.5.orig/kdm/kfrontend/themer/kdmlabel.h
+++ kde-workspace-4.8.5/kdm/kfrontend/themer/kdmlabel.h
@@ -61,6 +61,8 @@ protected:
 
     virtual void doPlugActions(bool plug);
 
+    virtual void updatePalette( QWidget *w );
+
     virtual void setWidget(QWidget *widget);
 
     struct LabelStruct {
Index: kde-workspace-4.8.5/kdm/kfrontend/themer/kdmitem.h
===================================================================
--- kde-workspace-4.8.5.orig/kdm/kfrontend/themer/kdmitem.h
+++ kde-workspace-4.8.5/kdm/kfrontend/themer/kdmitem.h
@@ -199,7 +199,7 @@ protected:
 
     bool eventFilter(QObject *o, QEvent *e);
     void setWidgetAttribs(QWidget *);
-    void updatePalette(QWidget *w);
+    virtual void updatePalette(QWidget *w);
 
     void updateThisVisible();
 
Index: kde-workspace-4.8.5/kdm/kfrontend/themer/kdmlabel.cpp
===================================================================
--- kde-workspace-4.8.5.orig/kdm/kfrontend/themer/kdmlabel.cpp
+++ kde-workspace-4.8.5/kdm/kfrontend/themer/kdmlabel.cpp
@@ -221,6 +221,8 @@ KdmLabel::statusChanged(bool descend)
     if ((state == Sprelight && !label.prelight.present) ||
         (state == Sactive && !label.active.present))
         return;
+    if( myWidget )
+        updatePalette( myWidget );
     updateWidgetAttribs();
     needUpdate();
 }
@@ -362,4 +364,19 @@ KdmLabel::updateWidgetAttribs()
     myWidget->setPalette(p);
 }
 
+void
+KdmLabel::updatePalette( QWidget *w )
+{
+       struct LabelStruct::LabelClass *l = &label.normal;
+       if (state == Sactive && label.active.present)
+               l = &label.active;
+       else if (state == Sprelight && label.prelight.present)
+               l = &label.prelight;
+       w->setFont( l->font.font );
+       QPalette p = w->palette();
+       p.setColor( QPalette::WindowText, l->color );
+       w->setPalette( p );
+       KdmItem::updatePalette( w );
+}
+
 #include "kdmlabel.moc"
++++++ kdm-kdmconf.diff ++++++
Index: kdm/kfrontend/genkdmconf.c
===================================================================
--- kdm/kfrontend/genkdmconf.c.orig
+++ kdm/kfrontend/genkdmconf.c
@@ -1049,6 +1049,26 @@ copyFile(Entry *ce, int mode, int (*proc
 }
 
 static void
+cleanupFile( const char *tname, int mode )
+{
+    char *nname;
+    File file, file2;
+    char bn[PATH_MAX + 4];
+
+    ASPrintf( &nname, "%s/%s", newdir, tname );
+    sprintf( bn, "%s.bak", nname );
+
+    if (readFile( &file, nname ) && readFile( &file2, bn )) {
+        if ((file.eof - file.buf == file2.eof - file2.buf) && !strncmp( 
file.buf, file2.buf, file.eof - file.buf )) {
+            unlink( nname );
+            rename( bn, nname );
+            chmod( nname, mode );
+        }
+    }
+    free( nname );
+}
+
+static void
 doLinkFile(const char *name)
 {
     File file;
@@ -1087,9 +1107,10 @@ writeFile(const char *tname, int mode, c
     fputs_(cont, f);
     fclose_(f);
     addedFile(tname);
+    if (!no_backup)
+        cleanupFile(tname + sizeof(KDMCONF), mode);
 }
 
-
 static void
 handleBgCfg(Entry *ce, Section *cs)
 {
@@ -3179,9 +3200,6 @@ int main(int argc, char **argv)
                 memcmp(oldkde + olen - sizeof(SHR_CONF) + 1,
                        SHR_CONF, sizeof(SHR_CONF)))
             {
-                fprintf(stderr,
-                        "Warning: --old-kde does not end with " SHR_CONF ". "
-                        "Might wreak havoc.\n");
                 oldkdepfx = oldkde;
             } else
                 ASPrintf((char **)&oldkdepfx,
@@ -3293,6 +3311,8 @@ int main(int argc, char **argv)
     f = createFile("kdmrc", kdmrcmode);
     writeKdmrc(f);
     fclose_(f);
+    if (!no_backup)
+        cleanupFile( "kdmrc", kdmrcmode );
 
     f = createFile("README", 0644);
     fprintf_(f,
@@ -3341,6 +3361,8 @@ int main(int argc, char **argv)
 "\nTry 'genkdmconf --help' if you want to generate another configuration.\n"
 "\nYou may delete this README.\n");
     fclose_(f);
+    if (!no_backup)
+        cleanupFile( "README", 0644 );
 
     return 0;
 }
++++++ kdm-logrotate ++++++
/var/log/kdm.log {
    compress
    dateext
    maxage 365
    rotate 99
    size=+4096k
    notifempty
    missingok
    copytruncate
}
++++++ kdm-long-xserver-timeout.diff ++++++
Subject: Increase the time KDM waits for X to start up
From: Lubos Lunak
Patch-upstream: no
Bug: bnc#462478

See the bugreport. In short, some drivers suck.

Index: kdm/config.def
===================================================================
--- kdm/config.def.orig
+++ kdm/config.def
@@ -1364,7 +1364,7 @@ Description:
 
 Key: ServerTimeout
 Type: int
-Default: 30
+Default: 60
 User: core
 Instance: #:*/
 Comment:
++++++ kdm-make_it_cool.diff ++++++
--- kdm/kfrontend/kgreeter.cpp  2011-08-18 18:54:29.000000000 +0200
+++ kdm/kfrontend/kgreeter.cpp  2011-08-19 09:37:02.384127904 +0200
@@ -68,20 +68,20 @@
 
 class UserListView : public QListWidget {
   public:
-    UserListView(QWidget *parent = 0)
+    UserListView( bool _themed, QWidget *parent = 0)
         : QListWidget(parent)
         , cachedSizeHint(-1, 0)
+        , themed (_themed)
     {
         setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Ignored);
         setUniformItemSizes(true);
         setVerticalScrollMode(ScrollPerPixel);
         setIconSize(QSize(48, 48));
-        setAlternatingRowColors(true);
+        setAlternatingRowColors(!themed);
     }
 
     mutable QSize cachedSizeHint;
 
-  protected:
     virtual QSize sizeHint() const
     {
         if (!cachedSizeHint.isValid()) {
@@ -149,6 +149,7 @@
 
   private:
     bool m_suppressClick;
+       bool themed;
 };
 
 class UserListViewItem : public QListWidgetItem {
@@ -185,7 +186,7 @@
                                 "PrevUser");
 
     if (_userList) {
-        userView = new UserListView(this);
+        userView = new UserListView(framed, this);
         connect(userView, SIGNAL(itemClicked(QListWidgetItem*)),
                 SLOT(slotUserClicked(QListWidgetItem*)));
         connect(userView, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
@@ -193,8 +194,6 @@
     }
     if (_userCompletion)
         userList = new QStringList;
-    if (userView || userList)
-        insertUsers();
 
     sessMenu = new QMenu(this);
     connect(sessMenu, SIGNAL(triggered(QAction*)),
@@ -365,8 +364,11 @@
         }
 }
 
+#include <utmp.h>
+#include <utmpx.h>
+
 void
-KGreeter::insertUsers()
+KGreeter::insertUsers( int limit_users )
 {
     struct passwd *ps;
 
@@ -392,6 +394,9 @@
     if (_showUsers == SHOW_ALL) {
         UserList noUsers(_noUsers);
         QSet<QString> dupes;
+                QStringList toinsert;
+
+                int count = 0;
         for (setpwent(); (ps = getpwent()) != 0;) {
             if (*ps->pw_dir && *ps->pw_shell &&
                 (ps->pw_uid >= (unsigned)_lowUserId ||
@@ -403,10 +408,55 @@
                 QString username(QFile::decodeName(ps->pw_name));
                 if (!dupes.contains(username)) {
                     dupes.insert(username);
-                    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.contains( username )) {
+                        dupes.insert( username );
+                        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()) {
@@ -783,6 +833,9 @@
         break; }
     }
 
+        if (userView || userList)
+               insertUsers();
+
     if (userView) {
         if (clock)
             inner_box->addWidget(clock, 0, Qt::AlignCenter);
@@ -895,6 +948,7 @@
     setMouseTracking(true);
 
     adjustGeometry();
+    themer->setTypeVisible( "userlist", true );
 
     themer->setWidget(this);
 
@@ -983,6 +1037,13 @@
     completeMenu();
 #endif
 
+    if (userView || userList)
+    {
+        insertUsers(7);
+        themer->setTypeVisible( "userlist", true );
+    } else
+        themer->setTypeVisible( "userlist", false );
+
     if ((system_button = themer->findNode("system_button"))) {
         if (optMenu)
             addAction(optMenu->menuAction());
@@ -1021,6 +1082,8 @@
     inherited::pluginSetup();
 
     if (userView && verify->entitiesLocal() && verify->entityPresettable() && 
userlist_node) {
+        userView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
+        userView->setMaximumHeight( userView->sizeHint().height() );
         userlist_node->setWidget(userView);
         userlist_rect->setVisible(true);
     } else {
--- kdm/kfrontend/kgreeter.h    2011-08-18 18:54:29.000000000 +0200
+++ kdm/kfrontend/kgreeter.h    2011-08-19 09:36:00.097124913 +0200
@@ -70,7 +70,7 @@
 
   protected:
     void insertUser(const QImage &, const QString &, struct passwd *);
-    void insertUsers();
+    void insertUsers(int limit_users = -1);
     void putSession(const QString &, const QString &, bool, const char *);
     void insertSessions();
     virtual void pluginSetup();
--- kdm/kfrontend/themer/kdmitem.cpp    2011-08-18 18:54:29.000000000 +0200
+++ kdm/kfrontend/themer/kdmitem.cpp    2011-08-19 09:36:00.098124907 +0200
@@ -65,7 +65,6 @@
               !modes.split(",", QString::SkipEmptyParts).contains("console"))))
         {
             m_visible = false;
-            return;
         }
 
         m_showType = sel.attribute("type");
@@ -78,7 +77,6 @@
                 themer()->typeVisible(m_showType) == m_showTypeInvert)
             {
                 m_visible = false;
-                return;
             }
         }
 
--- kdm/kfrontend/themer/kdmlist.cpp    2011-08-18 18:54:29.000000000 +0200
+++ kdm/kfrontend/themer/kdmlist.cpp    2011-08-19 09:36:00.098124907 +0200
@@ -29,8 +29,6 @@
     : KdmItem(parent, node)
 {
     itemType = "list";
-    if (!isVisible())
-        return;
 
     // Read RECT TAGS
     QDomNodeList childList = node.childNodes();
--- kdm/kfrontend/themer/kdmthemer.cpp  2011-08-18 18:54:29.000000000 +0200
+++ kdm/kfrontend/themer/kdmthemer.cpp  2011-08-19 09:38:00.360130704 +0200
@@ -223,10 +223,6 @@
             } else {
                 continue;
             }
-            if (!newItem->isVisible()) {
-                delete newItem;
-                continue;
-            }
             connect(newItem, SIGNAL(needUpdate(int,int,int,int)),
                     SLOT(update(int,int,int,int)));
             connect(newItem, SIGNAL(needPlacement()),
++++++ kdm-relaxed-auth.diff ++++++
Index: kdm/backend/auth.c
===================================================================
--- kdm/backend/auth.c.orig     2010-07-06 08:54:30.000000000 +0200
+++ kdm/backend/auth.c  2010-11-21 20:47:03.478727336 +0100
@@ -610,6 +610,7 @@ defineLocal(FILE *file, Xauth *auth, int
     writeAddr(FamilyLocal, strlen(name.nodename), (CARD8 *)name.nodename,
               file, auth, ok);
 #endif
+    setenv("XAUTHLOCALHOSTNAME", name.nodename, 1);
 
     /*
      * For HP-UX, HP's Xlib expects a fully-qualified domain name, which
@@ -1277,6 +1278,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");
++++++ kdm-remove-duplicated-sessions.diff ++++++
Index: kdm/kfrontend/sessions/CMakeLists.txt
===================================================================
--- kdm/kfrontend/sessions/CMakeLists.txt.orig  2010-11-05 11:47:45.000000000 
+0100
+++ kdm/kfrontend/sessions/CMakeLists.txt       2010-11-21 20:47:03.551842096 
+0100
@@ -12,19 +12,14 @@ install(FILES
        amaterus.desktop
        amiwm.desktop
        asclassic.desktop
-       blackbox.desktop
        cde.desktop
        ctwm.desktop
        cwwm.desktop
        e16.desktop
-        enlightenment.desktop
        evilwm.desktop
        fluxbox.desktop
        flwm.desktop
-       fvwm.desktop
-       fvwm95.desktop
        golem.desktop
-       icewm.desktop
        ion.desktop
        larswm.desktop
        lwm.desktop
@@ -47,9 +42,6 @@ install(FILES
        w9wm.desktop
        waimea.desktop
        wm2.desktop
-       wmaker.desktop
-       xfce.desktop
-       xfce4.desktop
 
        DESTINATION ${DATA_INSTALL_DIR}/kdm/sessions
 )
++++++ kdm-sysconfig-values.diff ++++++
++++ 758 lines (skipped)

++++++ kdm-wordbreak.diff ++++++
Index: kdm/kfrontend/kfdialog.cpp
===================================================================
--- kdm/kfrontend/kfdialog.cpp.orig     2010-08-05 18:55:46.000000000 +0200
+++ kdm/kfrontend/kfdialog.cpp  2010-11-21 20:47:03.524842955 +0100
@@ -28,6 +28,7 @@ Foundation, Inc., 51 Franklin Street, Fi
 
 #include <KGuiItem>
 #include <KPushButton>
+#include <KGlobalSettings>
 
 #include <QApplication>
 #include <QDesktopWidget>
@@ -172,6 +173,9 @@ KFMsgBox::KFMsgBox(QWidget *parent, QMes
     QLabel *label1 = new QLabel(this);
     label1->setPixmap(QMessageBox::standardIcon(type));
     QLabel *label2 = new QLabel(text, this);
+    QRect d = KGlobalSettings::desktopGeometry(this);
+    if ( label2->fontMetrics().size( 0, text).width() > d.width() * 3 / 5)
+        label2->setWordWrap( true );
     KPushButton *button = new KPushButton(KStandardGuiItem::ok(), this);
     button->setDefault(true);
     button->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, 
QSizePolicy::Preferred));
++++++ kdm_plymouth.patch ++++++
diff --git a/kdm/backend/dm.c b/kdm/backend/dm.c
index e0f1366..5a5f8a7 100644
--- a/kdm/backend/dm.c
+++ b/kdm/backend/dm.c
@@ -1347,54 +1347,207 @@ getBusyVTs(void)
     return activeVTs;
 }
 
+static int
+get_active_vt (void)
+{
+        int console_fd;
+        struct vt_stat console_state = { 0 };
+        console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY);
+        if (console_fd < 0) {
+                return 0;
+        }
+        ioctl (console_fd, VT_GETSTATE, &console_state);
+
+        close (console_fd);
+        return console_state.v_active;
+}
+
+static int
+plymouth_is_running (void)
+{
+        static int running = -1;
+        if (running == 0)
+            return 0;
+
+        int status;
+        status = system ("/usr/bin/plymouth --ping");
+
+        running = WIFEXITED (status) && WEXITSTATUS (status) == 0;
+        logWarn ("plymouth is %srunning\n", running?"":"NOT ");
+        return running;
+}
+
+static int
+plymouth_has_active_vt (void)
+{
+        int status;
+        status = system ("/usr/bin/plymouth --has-active-vt");
+
+        return WIFEXITED (status) && WEXITSTATUS (status) == 0;
+}
+
+static int
+plymouth_prepare_for_transition (void)
+{
+        int status;
+        status = system ("/usr/bin/plymouth deactivate");
+
+        return WIFEXITED (status) && WEXITSTATUS (status) == 0;
+}
+
+int
+plymouth_quit_with_transition (void)
+{
+        int status;
+        status = system ("/usr/bin/plymouth --wait quit --retain-splash");
+
+        return WIFEXITED (status) && WEXITSTATUS (status) == 0;
+}
+
+int
+plymouth_quit_without_transition (void)
+{
+        int status;
+        status = system ("/usr/bin/plymouth --wait quit");
+
+        return WIFEXITED (status) && WEXITSTATUS (status) == 0;
+}
+
+static int
+triggered_to_force_display_on_active_vt (void)
+{
+   int should_force_display_on_active_vt;
+   
should_force_display_on_active_vt=open("/var/spool/gdm/force-display-on-active-vt",
 O_RDONLY);
+   if ( should_force_display_on_active_vt >= 0 )
+       close(should_force_display_on_active_vt);
+   unlink("/var/spool/gdm/force-display-on-active-vt");
+   return should_force_display_on_active_vt;
+}
+
 static void
 allocateVT(struct display *d)
 {
     struct display *cd;
-    int i, tvt, volun;
+    int i, tvt;
 
     if ((d->displayType & d_location) == dLocal &&
         d->status == notRunning && !d->serverVT && d->reqSrvVT >= 0)
     {
+        /* Try to find the correct VT.
+         * If ServerVT is specified in the config, use it (if the admin used 
the
+         * same VT for multiple display, it is his/her own fault, no checks 
done).
+         * Otherwise, walk the list of specified VTs. Positive numbers are used
+         * even if the VT is already in use by a tty. Negative numbers and 
+         * unspecified numbers (up to #15) are used if not already in use.
+         * VTs already in use (cd->serverVT) or requested (cd->reqSrvVT)
+         * by any display are skipped.
+         */
+
+        /* some special handling is needed for Plymouth:
+         * if no VT is requested, use the active VT from plymouth for the first
+         * started display.
+         * If the display takes over the VT from plymouth, deactivate plymouth
+         */
+
+        char allowedVTs[16] = { 0 };
         if (d->reqSrvVT && d->reqSrvVT < 16) {
-            d->serverVT = d->reqSrvVT;
+            allowedVTs[d->reqSrvVT] = 1;
         } else {
-            for (i = tvt = 0;;) {
-                if (serverVTs[i]) {
-                    tvt = atoi(serverVTs[i++]);
-                    volun = False;
-                    if (tvt < 0) {
-                        tvt = -tvt;
-                        volun = True;
-                    }
-                    if (!tvt || tvt >= 16)
-                        continue;
-                } else {
-                    if (++tvt >= 16)
-                        break;
-                    volun = True;
+            for (i = 0; serverVTs[i]; i++) {
+                tvt = atoi(serverVTs[i]);
+                if ((tvt >= 0) && (tvt < 16)) {
+                    allowedVTs[tvt] = 1;
+                } else if (tvt > -16) {
+                    allowedVTs[-tvt] = 2;
                 }
-                for (cd = displays; cd; cd = cd->next) {
-                    if (cd->reqSrvVT == tvt && /* protect from lusers */
-                            (cd->status != zombie || cd->zstatus != DS_REMOVE))
-                        goto next;
-                    if (cd->serverVT == tvt) {
-                        if (cd->status != zombie || cd->zstatus == DS_REMOTE)
-                            goto next;
-                        if (!cd->follower) {
-                            d->serverVT = -1;
-                            cd->follower = d;
-                            return;
-                        }
-                    }
+            }
+
+            for (tvt = 15; allowedVTs[tvt] == 0; tvt--) {
+              allowedVTs[tvt] = 2;
+            }
+
+            for (cd = displays; cd; cd = cd->next) {
+                if (cd->status != zombie) {
+                    if (cd->reqSrvVT >= 0) allowedVTs[cd->reqSrvVT] = 0;
+                    if (cd->serverVT >= 0) allowedVTs[cd->serverVT] = 0;
+                } else if (cd->zstatus == DS_REMOTE) {
+                    /* dying, but will spawn new server for remote login */
+                    if (cd->serverVT >= 0) allowedVTs[cd->serverVT] = 0;
+                } else if (cd->zstatus != DS_REMOVE) {
+                    /* dying, but will be restarted or reserved */
+                    if (cd->reqSrvVT >= 0) allowedVTs[cd->reqSrvVT] = 0;
                 }
-                if (!volun || !((1 << tvt) & getBusyVTs())) {
-                    d->serverVT = tvt;
+            }
+        }
+
+        /* check for plymouth using newer methods */
+        d->plymouth_vt = -1;
+        if (plymouth_is_running ()) {
+            if (plymouth_has_active_vt ()) {
+                int vt = get_active_vt ();
+                if (allowedVTs[vt]) {
+                    logWarn ("plymouth is active on VT %d, reusing for %s\n", 
vt, d->name);
+                    d->serverVT = vt;
+                    d->plymouth_vt = vt;
                     return;
                 }
-          next: ;
+            }
+        /* fallback to old/deprecated method */
+        } else if ( triggered_to_force_display_on_active_vt() >= 0 ) {
+            int vt = get_active_vt ();
+            if (allowedVTs[vt]) {
+                d->serverVT = vt;
+                return;
+            }
+        }
+
+        for (tvt = 0; tvt < 16; tvt++) {
+            if ((allowedVTs[tvt] == 1) ||
+                ((allowedVTs[tvt] == 2) && !((1 << tvt) & getBusyVTs()))) {
+                d->serverVT = tvt;
+                return;
             }
         }
+
+        for (cd = displays; cd; cd = cd->next) {
+            if ((cd->status == zombie) && (cd->zstatus != DS_REMOTE) &&
+                (cd->follower == 0) && (cd->reqSrvVT != cd->serverVT)) {
+            /* removed; or restarted/reserved on any VT */
+                    d->serverVT = -1;
+                    cd->follower = d;
+                    return;
+            }
+        }
+    }
+}
+
+static void
+replacePlymouth(void)
+{
+    struct display *cd;
+
+    /* if one display reuses plymouth' VT, plymouth is stopped in the
+     * startServerSuccess/Failed callback (see server.c). In any other
+     * case plymouth is stopped now.
+     */
+    for (cd = displays; cd; cd = cd->next) {
+        if (cd->serverVT == cd->plymouth_vt) {
+            if (cd->status == notRunning) {
+                /* tell plymouth to quit when server has started */
+                logWarn ("plymouth should quit after server startup\n");
+                plymouth_prepare_for_transition ();
+                kickDisplay(cd);
+                return;
+            } else if (cd->status == running) {
+                /* replacing server is starting up, do nothing */
+                return;
+            }
+        }
+    }
+
+    if ( plymouth_is_running ()) {
+        plymouth_prepare_for_transition ();
+        plymouth_quit_without_transition ();
     }
 }
 #endif
@@ -1407,6 +1560,7 @@ startDisplays(void)
 #ifdef HAVE_VTS
     activeVTs = -1;
     forEachDisplayRev(allocateVT);
+    replacePlymouth();
 #endif
     forEachDisplay(kickDisplay);
 }
diff --git a/kdm/backend/dm.h b/kdm/backend/dm.h
index 64e106b..930af0e 100644
--- a/kdm/backend/dm.h
+++ b/kdm/backend/dm.h
@@ -304,6 +304,8 @@ struct display {
     int authNum;                /* number of authorizations */
     char *authFile;             /* file to store authorization in */
     char *greeterAuthFile;      /* file to store authorization for greeter in 
*/
+    
+    int plymouth_vt;            /* Plymouth's VT nr */
 };
 
 #define d_location   1
@@ -428,6 +430,9 @@ int anyDisplaysLeft(void);
 void forEachDisplay(void (*f)(struct display *));
 #ifdef HAVE_VTS
 void forEachDisplayRev(void (*f)(struct display *));
+/* function for plymouth */
+int plymouth_quit_with_transition (void);
+int plymouth_quit_without_transition (void);
 #endif
 void removeDisplay(struct display *old);
 struct display
diff --git a/kdm/backend/server.c b/kdm/backend/server.c
index d8dd6f3..8b4708e 100644
--- a/kdm/backend/server.c
+++ b/kdm/backend/server.c
@@ -80,6 +80,7 @@ startServerOnce(void)
     char **argv;
 
     debug("startServerOnce for %s, try %d\n", d->name, ++d->startTries);
+
     d->serverStatus = starting;
     switch (Fork(&d->serverPid)) {
     case 0:
@@ -137,6 +138,12 @@ startServerSuccess()
     struct display *d = startingServer;
     d->serverStatus = ignore;
     serverTimeout = TO_INF;
+    if ((d->plymouth_vt == d->serverVT)) {
+        int plymouth_running;
+        logWarn ("Quitting Plymouth with transition\n" );
+        plymouth_running = !plymouth_quit_with_transition ();
+        logWarn ("Is Plymouth still running? %s\n", plymouth_running ? "yes" : 
"no");
+    }
     debug("X server ready, starting session\n");
     startDisplayP2(d);
 }
@@ -154,6 +161,10 @@ startServerFailed()
         startingServer = 0;
         logError("X server for display %s cannot be started,"
                  " session disabled\n", d->name);
+        if ((d->plymouth_vt == d->serverVT)) {
+            logWarn ("Quitting Plymouth without transition\n" );
+            plymouth_quit_without_transition ();
+        }
         stopDisplay(d);
     }
 }
++++++ kdm_systemd_shutdown.patch ++++++
per https://bugzilla.redhat.com/show_bug.cgi?id=796969#c23
The process that executes kdm/backend/session.c:manageSession() is the leader
process of the logind session.

manageSession() calls:

    blockTerm();
    clientExited();
    unblockTerm();

where clientExited() ends the PAM session.
With the current systemd-logind, ending the PAM session will cause the leader
process to be delivered SIGHUP and SIGTERM. The process will die and the
remainder of manageSession() will not be executed.

Interestingly, at the end of the function there's a call to sessionExit(),
which calls clientExited() again.

Removing the three lines quoted above makes reboot from KDE work again. I
haven't noticed any bad effects.

diff -up kde-workspace-4.8.0/kdm/backend/session.c.bz796969 
kde-workspace-4.8.0/kdm/backend/session.c
--- kde-workspace-4.8.0/kdm/backend/session.c.bz796969  2012-01-18 
14:08:40.000000000 -0600
+++ kde-workspace-4.8.0/kdm/backend/session.c   2012-02-28 07:17:16.270219932 
-0600
@@ -662,9 +662,9 @@ manageSession(void)
         sessionExit(EX_AL_RESERVER_DPY);
     }
 
-    blockTerm();
-    clientExited();
-    unblockTerm();
+    /* blockTerm(); */
+    /* clientExited(); */
+    /* unblockTerm(); */
 
     gSet(&mstrtalk);
     gSendInt(D_UnUser);
++++++ klipper.patch ++++++
Subject: fix performance issue with Klipper
From: Filip Wieladek <fwi@tribogna.(none)>
Signed-Off-By: <name, optionally email>
Bug: kde#238084
Patch-upstream: no


>From 2d1cd043101b71c102d747c760a78fe85c17488a Mon Sep 17 00:00:00 2001
From: Filip Wieladek <fwi@tribogna.(none)>
Date: Mon, 4 Jun 2012 08:37:24 +0200
Subject: [PATCH 1/2] Fix flickering
---
 klipper/klipperpopup.cpp |   24 +++++++++++-------------
 klipper/popupproxy.cpp   |   12 ++++++++----
 klipper/popupproxy.h     |    2 +-
 3 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/klipper/klipperpopup.cpp b/klipper/klipperpopup.cpp
index bff2c25..ebdfdd6 100644
--- a/klipper/klipperpopup.cpp
+++ b/klipper/klipperpopup.cpp
@@ -163,12 +163,15 @@ void KlipperPopup::buildFromScratch() {
 }
 
 void KlipperPopup::rebuild( const QString& filter ) {
+    setFixedSize(size());
     if (actions().isEmpty()) {
         buildFromScratch();
     } else {
         for ( int i=0; i<m_nHistoryItems; i++ ) {
             Q_ASSERT(TOP_HISTORY_ITEM_INDEX < actions().count());
-            removeAction(actions().at(TOP_HISTORY_ITEM_INDEX));
+            QAction* action= actions().at(TOP_HISTORY_ITEM_INDEX);
+            removeAction(action);
+            delete action;
         }
     }
 
@@ -177,11 +180,7 @@ void KlipperPopup::rebuild( const QString& filter ) {
     QRegExp filterexp( filter, caseSens );
 
     QPalette palette = m_filterWidget->palette();
-    if ( filterexp.isValid() ) {
-        palette.setColor( m_filterWidget->foregroundRole(), 
palette.color(foregroundRole()) );
-    } else {
-        palette.setColor( m_filterWidget->foregroundRole(), Qt::red );
-    }
+    palette.setColor( m_filterWidget->foregroundRole(), filterexp.isValid() ? 
palette.color(foregroundRole()) : Qt::red  );
     m_nHistoryItems = m_popupProxy->buildParent( TOP_HISTORY_ITEM_INDEX, 
filterexp );
     if ( m_nHistoryItems == 0 ) {
         if ( m_history->empty() ) {
@@ -199,6 +198,7 @@ void KlipperPopup::rebuild( const QString& filter ) {
     }
     m_filterWidget->setPalette( palette );
     m_dirty = false;
+    setFixedSize(sizeHint());
 }
 
 void KlipperPopup::plugAction( QAction* action ) {
@@ -269,13 +269,11 @@ void KlipperPopup::keyPressEvent( QKeyEvent* e ) {
         QString lastString = m_filterWidget->text();
         QApplication::sendEvent(m_filterWidget, e);
 
-        if (m_filterWidget->text().isEmpty()) {
-            if (m_filterWidgetAction->isVisible())
-                m_filterWidget->setVisible(false);
-                m_filterWidgetAction->setVisible(false);
-        }
-        else if (!m_filterWidgetAction->isVisible() )
-            m_filterWidgetAction->setVisible(true);
+        bool visible= !m_filterWidget->text().isEmpty();
+        if (m_filterWidgetAction->isVisible() != visible) {
+            m_filterWidget->setVisible(visible);
+            m_filterWidgetAction->setVisible(visible);
+         }
 
         if (m_filterWidget->text() != lastString) {
             m_dirty = true;
diff --git a/klipper/popupproxy.cpp b/klipper/popupproxy.cpp
index 555f383..53042a6 100644
--- a/klipper/popupproxy.cpp
+++ b/klipper/popupproxy.cpp
@@ -48,11 +48,11 @@ PopupProxy::PopupProxy( KlipperPopup* parent, int 
menu_height, int menu_width )
 }
 
 void PopupProxy::slotHistoryChanged() {
-    deleteMoreMenus();
+    deleteMoreMenus(true);
 
 }
 
-void PopupProxy::deleteMoreMenus() {
+void PopupProxy::deleteMoreMenus(bool delayed) {
     const KMenu* myParent = parent();
     if ( myParent != m_proxy_for_menu ) {
         KMenu* delme = m_proxy_for_menu;
@@ -63,12 +63,16 @@ void PopupProxy::deleteMoreMenus() {
         }
         // We are called probably from within the menus event-handler 
(triggered=>slotMoveToTop=>changed=>slotHistoryChanged=>deleteMoreMenus)
         // what can result in a crash if we just delete the menu here (#155196 
and #165154) So, delay the delete.
-        delme->deleteLater();
+        if ( delayed ) {
+            delme->deleteLater();
+        } else {
+            delete delme;
+        }
     }
 }
 
 int PopupProxy::buildParent( int index, const QRegExp& filter ) {
-    deleteMoreMenus();
+    deleteMoreMenus(false);
     // Start from top of  history (again)
     m_spill_uuid = parent()->history()->empty() ? QByteArray() : 
parent()->history()->first()->uuid();
     if ( filter.isValid() ) {
diff --git a/klipper/popupproxy.h b/klipper/popupproxy.h
index 910bd6e..c24bab4 100644
--- a/klipper/popupproxy.h
+++ b/klipper/popupproxy.h
@@ -76,7 +76,7 @@ private:
     /**
      * Delete all "More..." menus current created.
      */
-    void deleteMoreMenus();
+    void deleteMoreMenus(bool delayed = false);
 
 private:
     KMenu* m_proxy_for_menu;
-- 
1.7.9.5


>From bab521d32564a61c50c8ea7722d9ecdf77bfb219 Mon Sep 17 00:00:00 2001
From: Filip Wieladek <fwi@tribogna.(none)>
Date: Mon, 4 Jun 2012 09:08:42 +0200
Subject: [PATCH 2/2] Fix flickering and add delay before rebuilding the popup
 x

---
 klipper/klipperpopup.cpp |   17 +++++++++++++++--
 klipper/klipperpopup.h   |    3 +++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/klipper/klipperpopup.cpp b/klipper/klipperpopup.cpp
index ebdfdd6..b4cad63 100644
--- a/klipper/klipperpopup.cpp
+++ b/klipper/klipperpopup.cpp
@@ -37,6 +37,7 @@
 
 namespace {
     static const int TOP_HISTORY_ITEM_INDEX = 2;
+    static const int REBUILD_DELAY = 350;
 }
 
 // #define DEBUG_EVENTS__
@@ -105,7 +106,10 @@ KlipperPopup::KlipperPopup( History* history )
     int menuWidth = ( screen.width() )  * 1/3;
 
     m_popupProxy = new PopupProxy( this, menuHeight, menuWidth );
-
+    m_delayTimer = new QTimer( this );
+    
+    m_delayTimer->setSingleShot( true );
+    connect( m_delayTimer, SIGNAL(timeout()), SLOT(timedRebuild()) );
     connect( this, SIGNAL(aboutToShow()), SLOT(slotAboutToShow()) );
 }
 
@@ -198,6 +202,7 @@ void KlipperPopup::rebuild( const QString& filter ) {
     }
     m_filterWidget->setPalette( palette );
     m_dirty = false;
+    setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
     setFixedSize(sizeHint());
 }
 
@@ -277,7 +282,10 @@ void KlipperPopup::keyPressEvent( QKeyEvent* e ) {
 
         if (m_filterWidget->text() != lastString) {
             m_dirty = true;
-            rebuild(m_filterWidget->text());
+            QPalette palette = m_filterWidget->palette();
+            palette.setColor(m_filterWidget->foregroundRole(), 
palette.color(QPalette::Disabled, QPalette::WindowText) );
+            m_filterWidget->setPalette(palette);
+            m_delayTimer->start( REBUILD_DELAY );
         }
 
         break;
@@ -285,6 +293,11 @@ void KlipperPopup::keyPressEvent( QKeyEvent* e ) {
     } //case
 }
 
+void KlipperPopup::timedRebuild()
+{
+  rebuild(m_filterWidget->text());
+}
+
 
 void KlipperPopup::slotSetTopActive()
 {
diff --git a/klipper/klipperpopup.h b/klipper/klipperpopup.h
index 31beff2..bdc7548 100644
--- a/klipper/klipperpopup.h
+++ b/klipper/klipperpopup.h
@@ -20,6 +20,7 @@
 #define KLIPPERPOPUP_H
 
 #include <QtCore/QList>
+#include <QTimer>
 
 #include <KMenu>
 
@@ -62,6 +63,7 @@ public Q_SLOTS:
      * set the top history item active, to easy kb navigation
      */
     void slotSetTopActive();
+    void timedRebuild();
 
 private:
     void rebuild( const QString& filter = QString() );
@@ -119,6 +121,7 @@ private:
      */
     int m_nHistoryItems;
 
+    QTimer* m_delayTimer;
 };
 
 #endif
-- 
1.7.9.5

++++++ krunner-no-italics.diff ++++++
commit aed464bdf4ff6ddf81bd5730559a69d4dc7bd446
Author: Will Stephenson <wstephen...@kde.org>
Date:   Fri Jan 18 20:46:43 2013 +0100

    Change italic krunner result subtext to be smaller instead of italic 
(kde#307344)

diff --git a/krunner/interfaces/default/resultitem.cpp 
b/krunner/interfaces/default/resultitem.cpp
index 31fe94c..8d5e7d5 100644
--- a/krunner/interfaces/default/resultitem.cpp
+++ b/krunner/interfaces/default/resultitem.cpp
@@ -383,12 +383,12 @@ void ResultItem::paint(QPainter *painter, const 
QStyleOptionGraphicsItem *option
     p.setPen(textColor);
     //TODO: add subtext, make bold, etc...
     p.drawText(pixmap.rect(), Qt::AlignLeft | Qt::TextWordWrap, name());
-    QFont italics = p.font();
-    QFontMetrics italicMetrics(italics);
-    int fontHeight = italicMetrics.boundingRect(pixmap.rect(), Qt::AlignLeft | 
Qt::TextWordWrap, name()).height();
-    italics.setItalic(true);
-    p.setFont(italics);
-    p.drawText(pixmap.rect().adjusted(0, fontHeight, 0, 0), Qt::AlignLeft | 
Qt::TextWordWrap, description());
+    QFont subtext = p.font();
+    subtext.setPointSize(qMax(subtext.pointSize() - 1, 1));
+    QFontMetrics subtextMetrics(subtext);
+    int fontHeight = subtextMetrics.boundingRect(pixmap.rect(), Qt::AlignLeft 
| Qt::TextWordWrap, name()).height();
+    p.setFont(subtext);
+    p.drawText(pixmap.rect().adjusted(0, pixmap.rect().height() - fontHeight, 
0, 0), Qt::AlignLeft | Qt::TextWordWrap, description());
 
     // Fade the pixmap out at the end
     if (width > pixmap.width()) {
++++++ ksysguardd.service ++++++
[Unit]
Description=KDE ksysguard daemon

[Service]
Type=forking
PIDFile=/var/run/ksysguardd.pid
ExecStart=/usr/bin/ksysguardd -d
PrivateTmp=true

[Install]
WantedBy=multi-user.target++++++ opensuse-homepage.diff ++++++
diff -ur 
kde-workspace-4.8.1.orig/plasma/desktop/applets/kickoff/ui/brandingbutton.cpp 
kde-workspace-4.8.1/plasma/desktop/applets/kickoff/ui/brandingbutton.cpp
--- 
kde-workspace-4.8.1.orig/plasma/desktop/applets/kickoff/ui/brandingbutton.cpp   
    2012-03-20 15:15:39.645598514 +0100
+++ kde-workspace-4.8.1/plasma/desktop/applets/kickoff/ui/brandingbutton.cpp    
2012-03-20 15:17:03.369606255 +0100
@@ -68,7 +68,9 @@
 
 void BrandingButton::openHomepage()
 {
-    new KRun(Plasma::Theme::defaultTheme()->homepage(), topLevelWidget(), 
false, false);
+    KUrl suseurl;
+    suseurl = "http://www.opensuse.org";;
+    new KRun(suseurl, topLevelWidget(), false, false);
 }
 
 void BrandingButton::paintEvent(QPaintEvent *event)
++++++ opensuse-kinfocenter.diff ++++++
diff -urB kde-workspace-4.11.12/kinfocenter/Modules/infosummary/infosum.cpp 
new/kinfocenter/Modules/infosummary/infosum.cpp
--- kde-workspace-4.11.12/kinfocenter/Modules/infosummary/infosum.cpp   
2014-09-12 09:42:16.000000000 +0200
+++ new/kinfocenter/Modules/infosummary/infosum.cpp     2014-09-14 
09:41:12.275783695 +0200
@@ -58,12 +58,12 @@
 void InfoSumPlugin::createOsBox()
 {  
   DefaultBoxWidget *osWidget = new DefaultBoxWidget();
-  osWidget->setIcon(KIcon("kde"));
-  osWidget->setLabelTitles(i18n("OS Version"),i18n("KDE SC Version"), 
i18n("Hostname"));
+  osWidget->setIcon(KIcon("suse"));  
+  osWidget->setLabelTitles(i18n("OS Version"),i18n("KDE Platform Version"), 
i18n("Hostname"));
   
   OsDepInfo *osInfo = new OsDepInfo();
   
-  osWidget->setLabelOne(osInfo->osVersion());
+  osWidget->setLabelOne(osInfo->osVersion()+'\n'+osInfo->distroName());
   osWidget->setLabelTwo(QString(KDE::versionString()));
   osWidget->setLabelThree(osInfo->hostName());
   osWidget->setWhatsThis(i18nc("OS whats this","This shows information about 
your Operating System"));
diff -urB 
kde-workspace-4.11.12/kinfocenter/Modules/infosummary/osdepinfo_unix.cpp 
new/kinfocenter/Modules/infosummary/osdepinfo_unix.cpp
--- kde-workspace-4.11.12/kinfocenter/Modules/infosummary/osdepinfo_unix.cpp    
2014-09-12 09:42:16.000000000 +0200
+++ new/kinfocenter/Modules/infosummary/osdepinfo_unix.cpp      2014-09-14 
09:39:42.238790434 +0200
@@ -23,6 +23,18 @@
 #include "osdepinfo.h"
 
 #include <sys/utsname.h>
+#include <KConfig>
+#include <KConfigGroup>
+#include <QString>
+
+QString getDistro()
+{
+     KConfig osRelease( "/etc/os-release", KConfig::SimpleConfig );
+     KConfigGroup osR( &osRelease, "" );
+     QString pretty = osR.readEntry("PRETTY_NAME");
+     pretty.remove('"');
+     return(pretty);
+}
 
 void OsDepInfo::setDepInfo() 
 {
@@ -31,4 +43,5 @@
   
   m_osVersion = QString(unixInfo.sysname) + ' ' + QString(unixInfo.release);
   m_hostName = QString(unixInfo.nodename);
+  m_distroName = getDistro(); 
 }
diff -urB kde-workspace-4.11.12/kinfocenter/Modules/infosummary/osdepinfo.cpp 
new/kinfocenter/Modules/infosummary/osdepinfo.cpp
--- kde-workspace-4.11.12/kinfocenter/Modules/infosummary/osdepinfo.cpp 
2014-09-12 09:42:16.000000000 +0200
+++ new/kinfocenter/Modules/infosummary/osdepinfo.cpp   2014-09-14 
09:39:42.238790434 +0200
@@ -37,6 +37,12 @@
   return m_osVersion;
 }
 
+const QString OsDepInfo::distroName()
+{
+   return m_distroName;
+}
+
+
 #if defined(Q_OS_UNIX)
   #include "osdepinfo_unix.cpp"
 #else
@@ -50,6 +56,7 @@
 {
   m_osVersion.clear();
   m_hostName.clear();
+  m_distroName.clear();
 }
 
 #endif // Q_OS_UNIX
diff -urB kde-workspace-4.11.12/kinfocenter/Modules/infosummary/osdepinfo.h 
new/kinfocenter/Modules/infosummary/osdepinfo.h
--- kde-workspace-4.11.12/kinfocenter/Modules/infosummary/osdepinfo.h   
2014-09-12 09:42:16.000000000 +0200
+++ new/kinfocenter/Modules/infosummary/osdepinfo.h     2014-09-14 
09:39:42.238790434 +0200
@@ -32,12 +32,14 @@
     
     const QString hostName();
     const QString osVersion();
+    const QString distroName();
     
   private:
     void setDepInfo();
     
     QString m_hostName;
     QString m_osVersion;
+    QString m_distroName;
 };
 
 #endif //OSDEPINFO
++++++ plasma-branding-defaults-applets.diff ++++++
Index: plasma/desktop/applets/kickoff/applet/applet.cpp
===================================================================
--- plasma/desktop/applets/kickoff/applet/applet.cpp.orig
+++ plasma/desktop/applets/kickoff/applet/applet.cpp
@@ -27,6 +27,7 @@
 #include <QtGui/QVBoxLayout>
 #include <QtGui/QLabel>
 #include <QtGui/QGraphicsLinearLayout>
+#include <QFile>
 
 // KDE
 #include <KAuthorized>
@@ -191,7 +192,10 @@ void LauncherApplet::toolTipAboutToShow(
 void LauncherApplet::configChanged()
 {
     KConfigGroup cg = config();
-    setPopupIcon(cg.readEntry("icon", "start-here-kde"));
+    if 
(QFile::exists("/usr/share/icons/oxygen/scalable/places/start-here-branding.svg"))
+      setPopupIcon(cg.readEntry("icon", "start-here-branding"));
+    else
+      setPopupIcon(cg.readEntry("icon", "start-here-kde"));
     constraintsEvent(Plasma::ImmutableConstraint);
 
     if (d->launcher) {
@@ -210,7 +214,12 @@ void LauncherApplet::configAccepted()
     d->createLauncher();
 
     KConfigGroup cg = config();
-    const QString oldIcon = cg.readEntry("icon", "start-here-kde");
+    QString oldIcon;
+    if 
(QFile::exists("/usr/share/icons/oxygen/scalable/places/start-here-branding.svg"))
+      oldIcon = cg.readEntry("icon", "start-here-branding");
+    else
+      oldIcon = cg.readEntry("icon", "start-here-kde");
+    
     if (!iconname.isEmpty() && iconname != oldIcon) {
         cg.writeEntry("icon", iconname);
 
Index: plasma/desktop/applets/kickoff/core/favoritesmodel.cpp
===================================================================
--- plasma/desktop/applets/kickoff/core/favoritesmodel.cpp.orig
+++ plasma/desktop/applets/kickoff/core/favoritesmodel.cpp
@@ -167,6 +167,11 @@ FavoritesModel::~FavoritesModel()
 
 void FavoritesModel::add(const QString& url)
 {
+       KService::Ptr service = KService::serviceByStorageId(url);
+       if (!service) {
+               return;
+       }
+
     Private::globalFavoriteList << url;
     Private::globalFavoriteSet << url;
 
Index: plasma/desktop/applets/kickoff/core/models.cpp
===================================================================
--- plasma/desktop/applets/kickoff/core/models.cpp.orig
+++ plasma/desktop/applets/kickoff/core/models.cpp
@@ -177,7 +177,19 @@ QStringList Kickoff::systemApplicationLi
 {
     KConfigGroup appsGroup = 
componentData().config()->group("SystemApplications");
     QStringList apps;
-    apps << "systemsettings";
+
+       if (QFile::exists("/usr/share/applications/YaST.desktop"))
+       apps << "YaST.desktop";
+
+       if (QFile::exists("/usr/share/applications/package-manager.desktop"))
+       apps << "package-manager.desktop";
+
+       if (QFile::exists("/usr/share/applications/kde4/kinfocenter.desktop"))
+       apps << "kinfocenter.desktop";
+
+       if (KService::serviceByStorageId("YaST2/live-installer.desktop"))
+           apps << "YaST2/live-installer.desktop";
+
     apps = appsGroup.readEntry("DesktopFiles", apps);
     return apps;
 }
Index: plasma/desktop/applets/kickoff/core/systemmodel.cpp
===================================================================
--- plasma/desktop/applets/kickoff/core/systemmodel.cpp.orig
+++ plasma/desktop/applets/kickoff/core/systemmodel.cpp
@@ -71,7 +71,7 @@ public:
         connect(placesModel, SIGNAL(rowsRemoved(QModelIndex,int,int)),
                 q, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
 
-        topLevelSections << i18n("Applications")
+        topLevelSections << i18n("Administration")
         << i18n("Places")
         << i18n("Removable Storage")
         << i18n("Storage");
Index: plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.cpp
===================================================================
--- plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.cpp.orig
+++ plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.cpp
@@ -36,6 +36,7 @@
 #include <QtGui/QSpacerItem>
 #include <QtGui/QListWidget>
 #include <QtGui/QListWidgetItem>
+#include <QFile>
 
 // KDE Libs
 #include <KActionCollection>
@@ -305,7 +306,10 @@ MenuLauncherApplet::MenuLauncherApplet(Q
                 d->viewtypes << "RunCommand";
             }
             d->viewtypes << "Leave";
-            d->iconname = "start-here-kde";
+            if 
(QFile::exists("/usr/share/icons/oxygen/scalable/places/start-here-branding.svg"))
+                d->iconname = "start-here-branding";
+            else
+                d->iconname = "start-here-kde";
         }
     }
     d->formattype = NameDescription;
++++++ plasma-dashboard-leave.diff ++++++
Index: plasma/desktop/shell/dashboardview.cpp
===================================================================
--- plasma/desktop/shell/dashboardview.cpp.orig
+++ plasma/desktop/shell/dashboardview.cpp
@@ -225,6 +225,15 @@ bool DashboardView::eventFilter(QObject
         widgetExplorer->setPos(0, containment()->geometry().height() - 
widgetExplorer->geometry().height());
     }
 
+    if (watched != (QObject*)m_widgetExplorer.data()) {
+        if (event->type() == QEvent::MouseButtonPress) {
+            QMouseEvent *me = static_cast<QMouseEvent *>(event);
+            if (me->button() == Qt::LeftButton) {
+                hideView();
+            }
+        }
+    }
+
     return false;
 }
 
++++++ plasma-disable-networkmanager.diff ++++++
commit dda8f95f9d810cf3f14f7be410bb612b1c6c0744
Author: Stephan Kulow <co...@suse.de>
Date:   Thu Oct 13 15:36:58 2011 +0200

    openSUSE has NetworkManager installed on all installations, but doesn't
    necessarly run it. While checking for some dbus interface might be
    the better solution, it's also the more fragile one because NM might
    still startup or be down just the second we check the default applets.
    
    So simply make it possible to disable it on KDE start depending on sysconfig
    and if the system changes, the user is expected to reconfigure plasma too

Index: kde-workspace-4.8.5/plasma/generic/applets/systemtray/ui/applet.cpp
===================================================================
--- kde-workspace-4.8.5.orig/plasma/generic/applets/systemtray/ui/applet.cpp
+++ kde-workspace-4.8.5/plasma/generic/applets/systemtray/ui/applet.cpp
@@ -706,7 +706,7 @@ void Applet::checkDefaultApplets()
 
 
     QStringList applets = s_manager->applets(this);
-    if (!applets.contains("org.kde.networkmanagement")) {
+    if (!applets.contains("org.kde.networkmanagement") && 
!getenv("KDE_NETWORKMANAGER_DISABLED")) {
         s_manager->addApplet("org.kde.networkmanagement", this);
     }
 
++++++ plasma-kickoff-newly-collapsing.diff ++++++
diff --git a/plasma/desktop/applets/kickoff/applet/applet.cpp 
b/plasma/desktop/applets/kickoff/applet/applet.cpp
index 8de1efe..c597741 100644
--- a/plasma/desktop/applets/kickoff/applet/applet.cpp
+++ b/plasma/desktop/applets/kickoff/applet/applet.cpp
@@ -166,10 +166,12 @@ void 
LauncherApplet::createConfigurationInterface(KConfigDialog *parent)
     d->ui.switchOnHoverCheckBox->setChecked(d->launcher->switchTabsOnHover());
     d->ui.appsByNameCheckBox->setChecked(d->launcher->showAppsByName());
     
d->ui.showRecentlyInstalledCheckBox->setChecked(d->launcher->showRecentlyInstalled());
+    d->ui.reduceMenuDepthCheckBox->setChecked(d->launcher->reduceMenuDepth());
     connect(d->ui.iconButton, SIGNAL(iconChanged(QString)), parent, 
SLOT(settingsModified()));
     connect(d->ui.switchOnHoverCheckBox, SIGNAL(toggled(bool)), parent, 
SLOT(settingsModified()));
     connect(d->ui.appsByNameCheckBox, SIGNAL(toggled(bool)), parent, 
SLOT(settingsModified()));
     connect(d->ui.showRecentlyInstalledCheckBox, SIGNAL(toggled(bool)), 
parent, SLOT(settingsModified()));
+    connect(d->ui.reduceMenuDepthCheckBox, SIGNAL(toggled(bool)), parent, 
SLOT(settingsModified()));
 }
 
 void LauncherApplet::popupEvent(bool show)
@@ -206,6 +208,7 @@ void LauncherApplet::configAccepted()
     bool switchTabsOnHover = d->ui.switchOnHoverCheckBox->isChecked();
     bool showAppsByName = d->ui.appsByNameCheckBox->isChecked();
     bool showRecentlyInstalled = 
d->ui.showRecentlyInstalledCheckBox->isChecked();
+    bool reduceMenuDepth = d->ui.reduceMenuDepthCheckBox->isChecked();
 
     const QString iconname = d->ui.iconButton->icon();
 
@@ -227,6 +230,7 @@ void LauncherApplet::configAccepted()
     d->launcher->setSwitchTabsOnHover(switchTabsOnHover);
     d->launcher->setShowAppsByName(showAppsByName);
     d->launcher->setShowRecentlyInstalled(showRecentlyInstalled);
+    d->launcher->setReduceMenuDepth(reduceMenuDepth);
 }
 
 QList<QAction*> LauncherApplet::contextualActions()
diff --git a/plasma/desktop/applets/kickoff/applet/kickoffConfig.ui 
b/plasma/desktop/applets/kickoff/applet/kickoffConfig.ui
index d5117c8..3e49ea7 100644
--- a/plasma/desktop/applets/kickoff/applet/kickoffConfig.ui
+++ b/plasma/desktop/applets/kickoff/applet/kickoffConfig.ui
@@ -54,7 +54,7 @@
      </property>
     </spacer>
    </item>
-   <item row="4" column="1">
+   <item row="5" column="1">
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
@@ -100,6 +100,26 @@
      </property>
     </widget>
    </item>
+   <item row="4" column="2">
+    <widget class="QCheckBox" name="reduceMenuDepthCheckBox">
+     <property name="text">
+      <string/>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="1">
+    <widget class="QLabel" name="label_4">
+     <property name="text">
+      <string>Reduce menu depth:</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy">
+      <cstring>reduceMenuDepthCheckBox</cstring>
+     </property>
+    </widget>
+   </item>
    <item row="3" column="1">
     <widget class="QLabel" name="label">
      <property name="text">
diff --git a/plasma/desktop/applets/kickoff/core/applicationmodel.cpp 
b/plasma/desktop/applets/kickoff/core/applicationmodel.cpp
index 82edade..6809dbb 100644
--- a/plasma/desktop/applets/kickoff/core/applicationmodel.cpp
+++ b/plasma/desktop/applets/kickoff/core/applicationmodel.cpp
@@ -111,7 +111,8 @@ public:
               primaryNamePolicy(ApplicationModel::GenericNamePrimary),
               displayOrder(NameAfterDescription),
               allowSeparators(_allowSeparators),
-              showRecentlyInstalled(true)
+              showRecentlyInstalled(true),
+              reduceMenuDepth(true)
     {
         systemApplications = Kickoff::systemApplicationList();
         reloadTimer = new QTimer(qq);
@@ -137,12 +138,42 @@ public:
     DisplayOrder displayOrder;
     bool allowSeparators;
     bool showRecentlyInstalled;
+    bool reduceMenuDepth;
     QTimer *reloadTimer;
 
     QStringList newInstalledPrograms;
     QHash<QString, QDate> seenPrograms;
 };
 
+QByteArray nameToKey(const QString &name)
+{
+    // code taken from libkdecore
+    const QByteArray nameStr = name.toLocal8Bit();
+
+    QByteArray key;
+    // strxfrm() crashes on Solaris and strxfrm is not defined under wince
+#if !defined(USE_SOLARIS) && !defined(_WIN32_WCE)
+    // maybe it'd be better to use wcsxfrm() where available
+    key.resize( name.length() * 4 + 1 );
+    size_t ln = strxfrm(key.data(), nameStr.constData(), key.size());
+    if( ln != size_t( -1 ))
+    {
+        key.resize(ln);
+        if( (int)ln >= key.size())
+        { // didn't fit?
+            ln = strxfrm( key.data(), nameStr.constData(), key.size());
+            if( ln == size_t( -1 ))
+                key = nameStr;
+        }
+    }
+    else
+#endif
+    {
+        key = nameStr;
+    }
+    return key;
+}
+
 void ApplicationModelPrivate::fillNode(const QString &_relPath, AppNode *node)
 {
      if (_relPath=="new/") {
@@ -170,17 +201,59 @@ void ApplicationModelPrivate::fillNode(const QString 
&_relPath, AppNode *node)
         return;
     }
 
-    const KServiceGroup::List list = root->entries(true /* sorted */,
+    KServiceGroup::List list = root->entries(true /* sorted */,
                                                    true /* exclude no display 
entries */,
-                                                   allowSeparators /* allow 
separators */,
+                                                   false /* allow separators 
*/,
                                                    primaryNamePolicy == 
ApplicationModel::GenericNamePrimary /* sort by generic name */);
 
     // application name <-> service map for detecting duplicate entries
     QHash<QString, KService::Ptr> existingServices;
+    KSortableList<KSharedPtr<KSycocaEntry>,QByteArray> slist;
+    KSortableList<KSharedPtr<KSycocaEntry>,QByteArray> glist;
 
     // generic name <-> node mapping to determinate duplicate generic names
     QHash<QString,QList<AppNode*> > genericNames;
 
+    for (KServiceGroup::List::ConstIterator it = list.constBegin(); it != 
list.constEnd(); ++it) {
+        const KSycocaEntry::Ptr p = (*it);
+
+        if (p->isType(KST_KService)) {
+            const KService::Ptr service = KService::Ptr::staticCast(p);
+
+            if( primaryNamePolicy == ApplicationModel::GenericNamePrimary )
+                slist.insert( nameToKey( service->genericName() + 
QLatin1Char(' ') + service->name() ), p);
+            else slist.insert( nameToKey( service->name() + QLatin1Char(' ') + 
service->genericName() ), p);
+        }
+        else if (p->isType(KST_KServiceGroup))
+        {
+            KServiceGroup::Ptr serviceGroup = 
KServiceGroup::Ptr::staticCast(p);
+            if ( reduceMenuDepth && serviceGroup->SuSEshortMenu() ){
+                KServiceGroup::List l = serviceGroup->entries(true, true 
/*excludeNoDisplay_*/, false );
+                if ( l.count() == 1 ) {
+
+                    // the special case, we want to short the menu.
+                    // TOFIX? : this works only for one level
+                    KServiceGroup::List::ConstIterator _it=l.begin();
+                    const KSycocaEntry::Ptr _e = (*_it);
+                    if (_e->isType(KST_KService)) {
+                        const KService::Ptr s = KService::Ptr::staticCast(_e);
+                        if( primaryNamePolicy == 
ApplicationModel::GenericNamePrimary )
+                            slist.insert( nameToKey( s->genericName() + 
QLatin1Char(' ') + s->name() ), _e );
+                        else slist.insert( nameToKey( s->name() + 
QLatin1Char(' ') + s->genericName() ), _e );
+                        // and escape from here
+                        continue;
+                    }
+                }
+            }
+            glist.insert( nameToKey( serviceGroup->caption() ), p );
+        }
+        else
+            slist.insert( nameToKey( p->name() ), p);
+    }
+
+    if (reduceMenuDepth) root->addSortOrderEntry(":F"); // add ":F" to the 
sortOrder list if it isn't included (bnc#356553)
+    list = root->SuSEsortEntries( slist, glist, true /*excludeNoDisplay_*/, 
allowSeparators );
+
     for (KServiceGroup::List::ConstIterator it = list.constBegin(); it != 
list.constEnd(); ++it) {
         QString icon;
         QString appName;
@@ -238,7 +251,15 @@ void ApplicationModelPrivate::fillNode(const QString 
&_relPath, AppNode *node)
 
             existingServices[appName] = service;
         } else if (p->isType(KST_KServiceGroup)) {
-            const KServiceGroup::Ptr serviceGroup = 
KServiceGroup::Ptr::staticCast(p);
+            KServiceGroup::Ptr serviceGroup = 
KServiceGroup::Ptr::staticCast(p);
+
+            if ( reduceMenuDepth && serviceGroup->SuSEshortMenu() ) {
+                KServiceGroup::List l = serviceGroup->entries(true, true 
/*excludeNoDisplay_*/ );
+            if ( l.count() == 1 )
+                continue;
+            }
+
+            // standard sub menu
 
             if (serviceGroup->noDisplay() || serviceGroup->childCount() == 0) {
                 continue;
@@ -358,6 +391,19 @@ bool ApplicationModel::showRecentlyInstalled() const
    return d->showRecentlyInstalled;
 }
 
+void ApplicationModel::setReduceMenuDepth(bool reduceMenuDepth)
+{
+    if (d->reduceMenuDepth != reduceMenuDepth) {
+        d->reduceMenuDepth = reduceMenuDepth;
+        reloadMenu();
+    }
+}
+
+bool ApplicationModel::reduceMenuDepth() const
+{
+   return d->reduceMenuDepth;
+}
+
 int ApplicationModel::columnCount(const QModelIndex &parent) const
 {
     Q_UNUSED(parent)
diff --git a/plasma/desktop/applets/kickoff/core/applicationmodel.h 
b/plasma/desktop/applets/kickoff/core/applicationmodel.h
index e3dfead..0b7df1e 100644
--- a/plasma/desktop/applets/kickoff/core/applicationmodel.h
+++ b/plasma/desktop/applets/kickoff/core/applicationmodel.h
@@ -122,6 +122,8 @@ public:
     void setApplet(Plasma::Applet *applet);
     void setShowRecentlyInstalled(bool showRecentlyInstalled);
     bool showRecentlyInstalled() const;
+    void setReduceMenuDepth(bool reduceMenuDepth);
+    bool reduceMenuDepth() const;
 
 public slots:
     void reloadMenu();
diff --git a/plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.cpp 
b/plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.cpp
index c54fc49..0b43a9e 100644
--- a/plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.cpp
+++ b/plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.cpp
@@ -115,6 +115,7 @@ public:
     int maxRecentApps;
     bool showMenuTitles;
     bool showRecentlyInstalled;
+    bool reduceMenuDepth;
 
     QListWidget *view;
     KIconButton *iconButton;
@@ -122,6 +123,7 @@ public:
     QSpinBox *recentApplicationsSpinBox;
     QCheckBox *showMenuTitlesCheckBox;
     QCheckBox *showRecentlyInstalledCheckBox;
+    QCheckBox *reduceMenuDepthCheckBox;
 
     QList<QAction*> actions;
     QAction* switcher;
@@ -140,6 +143,7 @@ public:
               formatComboBox(0),
               showMenuTitlesCheckBox(0),
               showRecentlyInstalledCheckBox(0),
+              reduceMenuDepthCheckBox(0),
               switcher(0),
               contextMenuFactory(0)
     {}
@@ -494,7 +498,13 @@ void 
MenuLauncherApplet::createConfigurationInterface(KConfigDialog *parent)
     d->showRecentlyInstalledCheckBox->setChecked(d->showRecentlyInstalled);
     grid->addWidget(d->showRecentlyInstalledCheckBox, 4, 1);
 
-    grid->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, 
QSizePolicy::Expanding), 5, 0, 1, 3);
+    QLabel *reduceMenuDepthLabel = new QLabel(i18n("Reduce menu depth:"), p);
+    grid->addWidget(reduceMenuDepthLabel, 5, 0, Qt::AlignRight);
+    d->reduceMenuDepthCheckBox = new QCheckBox(p);
+    d->reduceMenuDepthCheckBox->setChecked(d->reduceMenuDepth);
+    grid->addWidget(d->reduceMenuDepthCheckBox, 5, 1);
+
+    grid->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, 
QSizePolicy::Expanding), 6, 0, 1, 3);
     parent->addPage(p, i18n("Options"), "configure");
 
     connect(parent, SIGNAL(applyClicked()), this, SLOT(configAccepted()));
@@ -504,6 +514,7 @@ void 
MenuLauncherApplet::createConfigurationInterface(KConfigDialog *parent)
     connect(d->recentApplicationsSpinBox, SIGNAL(valueChanged(int)), parent, 
SLOT(settingsModified()));
     connect(d->showMenuTitlesCheckBox, SIGNAL(toggled(bool)), parent, 
SLOT(settingsModified()));
     connect(d->showRecentlyInstalledCheckBox, SIGNAL(toggled(bool)), parent, 
SLOT(settingsModified()));
+    connect(d->reduceMenuDepthCheckBox, SIGNAL(toggled(bool)), parent, 
SLOT(settingsModified()));
     connect(d->view, SIGNAL(currentTextChanged(QString)), parent, 
SLOT(settingsModified()));    
 }
 
@@ -568,6 +578,12 @@ void MenuLauncherApplet::configAccepted()
         d->showRecentlyInstalled = showRecentlyInstalled;
         cg.writeEntry("showRecentlyInstalled", showRecentlyInstalled);
     }
+    const bool reduceMenuDepth = d->reduceMenuDepthCheckBox->isChecked();
+    if (reduceMenuDepth != d->reduceMenuDepth) {
+        needssaving = true;
+        d->reduceMenuDepth = reduceMenuDepth;
+        cg.writeEntry("reduceMenuDepth", reduceMenuDepth);
+    }
 
     if (needssaving) {
         d->updateTooltip();
@@ -635,6 +651,7 @@ void MenuLauncherApplet::showMenu(bool pressed)
                 }
                 
appModel->setSystemApplicationPolicy(Kickoff::ApplicationModel::ShowApplicationAndSystemPolicy);
                 appModel->setShowRecentlyInstalled(d->showRecentlyInstalled);
+                appModel->setReduceMenuDepth(d->reduceMenuDepth);
 
                 menuview->addModel(appModel, Kickoff::MenuView::None, 
d->relativePath);
 
@@ -892,6 +909,7 @@ void MenuLauncherApplet::configChanged()
     d->setMaxRecentApps(cg.readEntry("maxRecentApps", qMin(5, 
Kickoff::RecentApplications::self()->maximum())));
     d->showMenuTitles = cg.readEntry("showMenuTitles", false);
     d->showRecentlyInstalled = cg.readEntry("showRecentlyInstalled", true);
+    d->reduceMenuDepth = cg.readEntry("reduceMenuDepth", true);
 
     d->icon->setIcon(KIcon(cg.readEntry("icon", d->iconname)));
 
diff --git a/plasma/desktop/applets/kickoff/ui/launcher.cpp 
b/plasma/desktop/applets/kickoff/ui/launcher.cpp
index 8280509..014e23c 100644
--- a/plasma/desktop/applets/kickoff/ui/launcher.cpp
+++ b/plasma/desktop/applets/kickoff/ui/launcher.cpp
@@ -699,6 +699,18 @@ void Launcher::setShowRecentlyInstalled(bool 
showRecentlyInstalled)
     d->applicationModel->setShowRecentlyInstalled(showRecentlyInstalled);
 }
 
+void Launcher::setReduceMenuDepth(bool showReduceMenuDepth)
+{
+    const bool wasReduceMenuDepth = d->applicationModel->reduceMenuDepth();
+    if (d->applet && showReduceMenuDepth != wasReduceMenuDepth) {
+        KConfigGroup cg = d->applet->config();
+        cg.writeEntry("ReduceMenuDepth", showReduceMenuDepth);
+        emit configNeedsSaving();
+    }
+
+    d->applicationModel->setReduceMenuDepth(showReduceMenuDepth);
+}
+
 bool Launcher::switchTabsOnHover() const
 {
     return d->contentSwitcher->switchTabsOnHover();
@@ -714,6 +726,11 @@ bool Launcher::showRecentlyInstalled() const
   return d->applicationModel->showRecentlyInstalled();
 }
 
+bool Launcher::reduceMenuDepth() const
+{
+  return d->applicationModel->reduceMenuDepth();
+}
+
 void Launcher::setVisibleItemCount(int count)
 {
     d->visibleItemCount = count;
@@ -743,6 +760,7 @@ void Launcher::setApplet(Plasma::Applet *applet)
     setShowAppsByName(cg.readEntry("ShowAppsByName", showAppsByName()));
     setVisibleItemCount(cg.readEntry("VisibleItemsCount", visibleItemCount()));
     setShowRecentlyInstalled(cg.readEntry("ShowRecentlyInstalled", 
showRecentlyInstalled()));
+    setReduceMenuDepth(cg.readEntry("ReduceMenuDepth", reduceMenuDepth()));
 
     d->applet = applet;
     d->contextMenuFactory->setApplet(applet);
diff --git a/plasma/desktop/applets/kickoff/ui/launcher.h 
b/plasma/desktop/applets/kickoff/ui/launcher.h
index 7505c0a..e61327b 100644
--- a/plasma/desktop/applets/kickoff/ui/launcher.h
+++ b/plasma/desktop/applets/kickoff/ui/launcher.h
@@ -83,6 +83,10 @@ public:
     void setShowRecentlyInstalled(bool showRecentlyInstalled);
     bool showRecentlyInstalled() const;
 
+    /** Specifies whether single item sub-menus shall be collapsed to upper 
hierarchy */
+    void setReduceMenuDepth(bool reduceMenuDepth);
+    bool reduceMenuDepth() const;
+
 signals:
     void aboutToHide();
     void configNeedsSaving();
++++++ plasma-panel-resize-hint.diff ++++++
Index: plasma/desktop/shell/panelcontroller.cpp
===================================================================
--- plasma/desktop/shell/panelcontroller.cpp.orig
+++ plasma/desktop/shell/panelcontroller.cpp
@@ -663,6 +663,8 @@ void PanelController::mouseMoveFilter(QM
         newX = qMin(newX, screenGeom.left() + screenGeom.width()/3);
         move(newX, pos().y());
         resizeFrameHeight(geometry().left() - screenGeom.left());
+        m_sizeTool->setText(i18n("Width: %1", geometry().left() - 
screenGeom.left()));
+
         break;
     }
     case Plasma::RightEdge: {
@@ -671,6 +673,8 @@ void PanelController::mouseMoveFilter(QM
         newX = qMax(newX, screenGeom.left() + 2*(screenGeom.width()/3) - 
width());
         move(newX, pos().y());
         resizeFrameHeight(screenGeom.right() - geometry().right());
+        m_sizeTool->setText(i18n("Width: %1", screenGeom.right() - 
geometry().right()));
+
         break;
     }
     case Plasma::TopEdge: {
@@ -679,6 +683,9 @@ void PanelController::mouseMoveFilter(QM
         newY = qMin(newY, screenGeom.top() + screenGeom.height()/3);
         move(pos().x(), newY);
         resizeFrameHeight(geometry().top() - screenGeom.top());
+        m_sizeTool->setText(i18n("Height: %1", geometry().top() - 
screenGeom.top()));
+
+
         break;
     }
     case Plasma::BottomEdge:
@@ -688,6 +695,8 @@ void PanelController::mouseMoveFilter(QM
         newY = qMax(newY, screenGeom.top() + 2*(screenGeom.height()/3) - 
height());
         move(pos().x(), newY);
         resizeFrameHeight(screenGeom.bottom() - geometry().bottom());
+        m_sizeTool->setText(i18n("Height: %1", screenGeom.bottom() - 
geometry().bottom()));
+
         break;
     }
     }
++++++ rotate-wacom-pointers.diff ++++++
Index: kcontrol/randr/randrscreen.cpp
===================================================================
--- kcontrol/randr/randrscreen.cpp.orig
+++ kcontrol/randr/randrscreen.cpp
@@ -543,6 +543,8 @@ bool RandRScreen::applyProposed(bool con
        if (succeed && confirm)
                succeed = RandR::confirm(r);
 
+       RandR::rotateWacom( m_unifiedRotation );
+
        // if we succeeded applying and the user confirmed the changes,
        // just return from here 
        if (succeed)
Index: kcontrol/randr/randr.h
===================================================================
--- kcontrol/randr/randr.h.orig
+++ kcontrol/randr/randr.h
@@ -104,6 +104,7 @@ public:
        static bool confirm(const QRect &rect = QRect());
 
        static SizeList sortSizes(const SizeList &sizes);
+       static void rotateWacom( int rotation );
 };
 
 #endif
Index: kcontrol/randr/legacyrandrscreen.cpp
===================================================================
--- kcontrol/randr/legacyrandrscreen.cpp.orig
+++ kcontrol/randr/legacyrandrscreen.cpp
@@ -104,6 +104,7 @@ bool LegacyRandRScreen::applyProposed()
                m_currentSize = m_proposedSize;
                m_currentRotation = m_proposedRotation;
                m_currentRefreshRate = m_proposedRefreshRate;
+               RandR::rotateWacom( m_currentRotation );        
                return true;
        }
 
Index: kcontrol/randr/randrcrtc.cpp
===================================================================
--- kcontrol/randr/randrcrtc.cpp.orig
+++ kcontrol/randr/randrcrtc.cpp
@@ -317,6 +317,7 @@ bool RandRCrtc::applyProposed()
                m_currentRect = m_proposedRect;
                m_currentRate = mode.refreshRate();
                emit crtcChanged(m_id, RandR::ChangeMode);
+               RandR::rotateWacom( m_currentRotation );
                ret = true;
        }
        else
Index: kcontrol/randr/randr.cpp
===================================================================
--- kcontrol/randr/randr.cpp.orig
+++ kcontrol/randr/randr.cpp
@@ -19,6 +19,8 @@
 
 #include "randr.h"
 #include <KIconLoader>
+#include <kstandarddirs.h>
+#include <qprocess.h>
 
 bool RandR::has_1_2 = false;
 bool RandR::has_1_3 = false;
@@ -179,5 +181,40 @@ SizeList RandR::sortSizes(const SizeList
        return sorted;
 }
 
+void RandR::rotateWacom( int rotation )
+{
+       // search wacom utility and set orientation for available wacom pointers
+       QString xsetwacom = KStandardDirs::findExe("xsetwacom");
+       if (!xsetwacom.isEmpty()) {
+               QProcess proc;
+               proc.start( "xsetwacom", QStringList() << "list" );
+               if (!proc.waitForStarted() || !proc.waitForFinished()) {
+                       kError("Could not ask xsetwacom for available 
pointers.");
+                       return;
+               } else {
+                       while( !proc.atEnd()) {
+                               QString line = QString::fromLocal8Bit( 
proc.readLine());
+                               QString pointer = line.split( ' ' ).first();
+                               QStringList args;
+                               args << "set" << pointer << "Rotate";
+                               switch (rotation) {
+                                       case RR_Rotate_90:
+                                               args << "CW";
+                                               break;
+                                       case RR_Rotate_180:
+                                               args << "HALF";
+                                               break;
+                                       case RR_Rotate_270:
+                                               args << "CCW";
+                                               break;
+                                       default:
+                                               args << "NONE";
+                               }
+                               if( QProcess::execute( "xsetwacom", args ) != 0 
)
+                                       kError("Could not set orientation for 
wacom pointers.");
+                       }
+               }
+       }
+}
 
 
++++++ same-pam-generic-classic.diff ++++++
Subject: Use same pam config with generic plugin, to be used with fingerprint 
auth
From: dmuel...@suse.de
Patch-upstream: no
Index: kcheckpass/checkpass_pam.c
===================================================================
--- kcheckpass/checkpass_pam.c.orig
+++ kcheckpass/checkpass_pam.c
@@ -140,12 +140,14 @@ AuthReturn Authenticate(const char *call
   openlog("kcheckpass", LOG_PID, LOG_AUTH);
 
   PAM_data.conv = conv;
-  if (strcmp(method, "classic")) {
-    sprintf(pservb, "%.31s-%.31s", caller, method);
-    pam_service = pservb;
-  } else {
+  if (strcmp(method, "classic") == 0) {
     /* PAM_data.classic = 1; */
     pam_service = caller;
+  } else if (strcmp(method, "generic") == 0) {
+    pam_service = caller;
+  } else {
+    sprintf(pservb, "%.31s-%.31s", caller, method);
+    pam_service = pservb;
   }
   pam_error = pam_start(pam_service, user, &PAM_conversation, &pamh);
   if (pam_error != PAM_SUCCESS)
Index: kdm/backend/client.c
===================================================================
--- kdm/backend/client.c.orig
+++ kdm/backend/client.c
@@ -540,7 +540,8 @@ verify(GConvFunc gconv, int rootok)
 #ifdef USE_PAM
 
     pnopass = False;
-    if (!strcmp(curtype, "classic")) {
+    pdata.usecur = False;
+    if (!strcmp(curtype, "classic") || !strcmp(curtype, "generic")) {
         if (!gconv(GCONV_USER, 0))
             return False;
         if (isNoPassAllowed(curuser)) {
@@ -555,11 +556,11 @@ verify(GConvFunc gconv, int rootok)
         } else {
             psrv = PAMService;
         }
-        pdata.usecur = True;
+        if (!strcmp(curtype, "classic"))
+            pdata.usecur = True;
     } else {
         sprintf(psrvb, "%.31s-%.31s", PAMService, curtype);
         psrv = psrvb;
-        pdata.usecur = False;
     }
     pdata.gconv = gconv;
     if (!doPAMAuth(psrv, &pdata))
Index: libs/kdm/kgreet_generic.cpp
===================================================================
--- libs/kdm/kgreet_generic.cpp.orig
+++ libs/kdm/kgreet_generic.cpp
@@ -156,6 +156,7 @@ KGenericGreeter::textPrompt(const char *
     exp =
         exp >= 0 ||
         func != Authenticate ||
+               !echo ||
         !(kgreeterplugin_info.flags & KGreeterPluginInfo::Presettable);
 
     if (!exp && !fixedUser.isEmpty()) {
@@ -325,8 +326,7 @@ static bool init(const QString &,
     echoMode = getConf(ctx, "EchoMode", QVariant(-1)).toInt();
     // Fielded entities are not supported per se.
     // This implies that the first field is the presettable entity, if any.
-    if (getConf(ctx, "generic.Presettable", QVariant(false)).toBool())
-        kgreeterplugin_info.flags |= KGreeterPluginInfo::Presettable;
+    kgreeterplugin_info.flags |= KGreeterPluginInfo::Presettable;
     KGlobal::locale()->insertCatalog("kgreet_generic");
     return true;
 }
++++++ startkde.diff ++++++
Index: startkde.cmake
===================================================================
--- startkde.cmake.orig
+++ startkde.cmake
@@ -68,6 +68,9 @@ test -n "$KDEHOME" && kdehome=`echo "$KD
 mkdir -m 700 -p $kdehome
 mkdir -m 700 -p $kdehome/share
 mkdir -m 700 -p $kdehome/share/config
+if test -e /etc/kde4/share/config/startupconfigkeys ; then
+cp /etc/kde4/share/config/startupconfigkeys 
$kdehome/share/config/startupconfigkeys
+else
 cat >$kdehome/share/config/startupconfigkeys <<EOF
 kcminputrc Mouse cursorTheme 'Oxygen_White'
 kcminputrc Mouse cursorSize ''
@@ -82,6 +85,7 @@ krandrrc [Screen3]
 kcmfonts General forceFontDPI 0
 kdeglobals Locale Language '' # trigger requesting languages from KLocale
 EOF
+fi
 kstartupconfig4
 returncode=$?
 if test $returncode -ne 0; then
@@ -160,7 +164,7 @@ fi
 
 libpath=`kde4-config --path lib | tr : '\n'`
 
-for prefix in `echo "$libpath" | sed -n -e 's,/lib[^/]*/,/env/,p'`; do
+for prefix in `echo "$libpath" | sed -n -e 's,/lib[^/]*/,/env/,p'` 
/usr/share/kde4/env/; do
   for file in "$prefix"*.sh; do
     test -r "$file" && . "$file"
   done
++++++ sysconfig.displaymanager-kdm ++++++
## Path:        Desktop/Display manager
## Description: settings to generate a proper displaymanager config
## Config:      kdm

## Type:        string
## Default:
#
# Defines extra Server Arguments given to the kdm display manager when
# starting a local display. Useful to override e.g. the -dpi setting.
#
DISPLAYMANAGER_KDM_LOCALARGS=""

## Type:        yesno
## Default:     yes
#
# Allow local access of the user root to your display manager. Note
# that root can never login if DISPLAYMANAGER_SHUTDOWN is "auto" and
# System/Security/Permissions/PERMISSION_SECURITY is "paranoid".
# This settings currently works only with KDM.
#
DISPLAYMANAGER_ROOT_LOGIN_LOCAL="yes"
++++++ systemsettings-desktop.diff ++++++
Index: systemsettings/app/systemsettings.desktop
===================================================================
--- systemsettings/app/systemsettings.desktop.orig
+++ systemsettings/app/systemsettings.desktop
@@ -6,7 +6,7 @@ X-DocPath=systemsettings/index.html
 X-KDE-StartupNotify=true
 OnlyShowIn=KDE;
 
-GenericName=System Settings
+GenericName=Configure Desktop
 GenericName[ar]=إعدادات النظام
 GenericName[ast]=Preferencies del sistema
 GenericName[be@latin]=Systemnyja nałady
@@ -88,7 +88,7 @@ GenericName[x-test]=xxSystem Settingsxx
 GenericName[zh_CN]=系统设置
 GenericName[zh_TW]=系統設定
 
-Name=System Settings
+Name=Configure Desktop
 Name[ar]=إعدادات النظام
 Name[ast]=Preferencies del sistema
 Name[be]=Сістэмныя настаўленні
@@ -175,4 +175,4 @@ Name[zh_CN]=系统设置
 Name[zh_TW]=系統設定
 
 X-DBUS-StartupType=Unique
-Categories=Qt;KDE;Settings;
+Categories=Qt;KDE;Settings;X-SuSE-core;Qt;Core;
Index: systemsettings/app/kdesystemsettings.desktop
===================================================================
--- systemsettings/app/kdesystemsettings.desktop.orig
+++ systemsettings/app/kdesystemsettings.desktop
@@ -99,4 +99,4 @@ Name[zh_CN]=KDE 系统设置
 Name[zh_TW]=KDE 系統設定
 
 X-DBUS-StartupType=Unique
-Categories=Qt;KDE;Settings;
+Categories=Qt;KDE;Settings;X-SuSE-core;Qt;Core;
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to