Hello community,

here is the log from the commit of package kblocks for openSUSE:Factory checked 
in at 2016-05-29 03:10:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kblocks (Old)
 and      /work/SRC/openSUSE:Factory/.kblocks.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kblocks"

Changes:
--------
--- /work/SRC/openSUSE:Factory/kblocks/kblocks.changes  2016-04-05 
10:42:57.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.kblocks.new/kblocks.changes     2016-05-29 
03:10:10.000000000 +0200
@@ -1,0 +2,25 @@
+Sat May  7 10:18:02 UTC 2016 - [email protected]
+
+- Update to KDE Applications 16.04.1
+   * KDE Applications 16.04.1
+   * https://www.kde.org/announcements/announce-applications-16.04.1.php
+
+
+-------------------------------------------------------------------
+Sun Apr 17 05:57:08 UTC 2016 - [email protected]
+
+- Update to KDE Applications 16.04.0
+   * KDE Applications 16.04.0
+   * https://www.kde.org/announcements/announce-applications-16.04.0.php
+
+
+-------------------------------------------------------------------
+Mon Apr 11 06:34:37 UTC 2016 - [email protected]
+
+- Update to KDE Applications 16.03.90
+   * KDE Applications 16.04.0 RC
+   * https://www.kde.org/announcements/announce-applications-16.04-rc.php
+
+- Drop upstreamed patches Unbreak-startup.patch and Use-KCrash.patch
+
+-------------------------------------------------------------------

Old:
----
  Unbreak-startup.patch
  Use-KCrash.patch
  kblocks-15.12.3.tar.xz

New:
----
  kblocks-16.04.1.tar.xz

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

Other differences:
------------------
++++++ kblocks.spec ++++++
--- /var/tmp/diff_new_pack.L3YUiN/_old  2016-05-29 03:10:11.000000000 +0200
+++ /var/tmp/diff_new_pack.L3YUiN/_new  2016-05-29 03:10:11.000000000 +0200
@@ -42,13 +42,9 @@
 License:        LGPL-2.1+
 Group:          Amusements/Games/Strategy/Real Time
 Url:            http://www.kde.org
-Version:        15.12.3
+Version:        16.04.1
 Release:        0
 Source0:        kblocks-%{version}.tar.xz
-# PATCH-FIX-UPSTREAM Use-KCrash.patch boo#958086 -- initialize KDE's Crash 
dialog
-Patch0:         Use-KCrash.patch
-# PATCH-FIX-UPSTREAM Unbreak-startup.patch kde#357408 -- fixes desktop 
freezing while kblocks is running and showing an error when it is closed
-Patch1:         Unbreak-startup.patch
 Obsoletes:      %{name}5 < %{version}
 Provides:       %{name}5 = %{version}
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
@@ -58,8 +54,6 @@
 
 %prep
 %setup -q -n kblocks-%{version}
-%patch0 -p1
-%patch1 -p1
 
 %build
   %cmake_kf5 -d build
@@ -84,7 +78,7 @@
 %{_kf5_configkcfgdir}/kblocks.kcfg
 %{_kf5_configdir}/kblocks.knsrc
 %dir %_datadir/appdata
-%_datadir/appdata/kblocks.appdata.xml
+%_datadir/appdata/org.kde.kblocks.appdata.xml
 %_datadir/kxmlgui5/kblocks/
 
 %changelog

++++++ kblocks-15.12.3.tar.xz -> kblocks-16.04.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/AI/KBlocksAILog.cpp 
new/kblocks-16.04.1/AI/KBlocksAILog.cpp
--- old/kblocks-15.12.3/AI/KBlocksAILog.cpp     2016-02-28 20:46:10.000000000 
+0100
+++ new/kblocks-16.04.1/AI/KBlocksAILog.cpp     2016-03-28 14:16:41.000000000 
+0200
@@ -227,7 +227,7 @@
         print(piece->getPosY());
         println(")");
         println("Cells: ");
-        for (int i = 0; i < KBlocksPiece_CellCount; i++) {
+        for (int i = 0; i < KBlocksPiece_CellCount; ++i) {
             if (x != -1) {
                 gotoXY(x, y++);
             }
@@ -249,12 +249,12 @@
 {
     int w = field->getWidth();
     int h = field->getHeight();
-    for (int j = 0; j < h; j++) {
+    for (int j = 0; j < h; ++j) {
         if (x != -1) {
             gotoXY(x, y + j);
         }
         print("|");
-        for (int i = 0; i < w; i++) {
+        for (int i = 0; i < w; ++i) {
             if (field->getCell(i, j)) {
                 print("*");
             } else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/CMakeLists.txt 
new/kblocks-16.04.1/CMakeLists.txt
--- old/kblocks-15.12.3/CMakeLists.txt  2016-02-28 20:46:10.000000000 +0100
+++ new/kblocks-16.04.1/CMakeLists.txt  2016-03-28 14:16:41.000000000 +0200
@@ -2,21 +2,25 @@
 
 cmake_minimum_required (VERSION 2.8.12 FATAL_ERROR)
 set (QT_MIN_VERSION "5.3.0")
+set (KF5_MIN_VERSION "5.15.0")
 
 find_package(ECM 1.7.0 REQUIRED CONFIG)
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} 
${ECM_KDE_MODULE_DIR})
 
-find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Widgets Svg 
Network )
-find_package(KF5 REQUIRED COMPONENTS 
+find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Widgets Svg 
Network)
+find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
+    Config
+    ConfigWidgets
+    CoreAddons
+    Crash
     DocTools
+    DBusAddons
     I18n
+    WidgetsAddons
     XmlGui
-    )
+)
 
 find_package(KF5KDEGames 4.9.0 REQUIRED)
-find_package(Phonon4Qt5 CONFIG REQUIRED)
-
-include_directories(BEFORE ${PHONON_INCLUDES})
 
 include(FeatureSummary)
 include(ECMInstallIcons)
@@ -28,8 +32,9 @@
 add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS)
 
 
-add_subdirectory( themes )
-add_subdirectory( doc )
+add_subdirectory(themes)
+add_subdirectory(sounds)
+add_subdirectory(doc)
 
 
 ########### next target ###############
@@ -74,7 +79,8 @@
    AI/KBlocksAIPlannerExtend.cpp
    AI/KBlocksAIEvaluation.cpp
    AI/KBlocksAIFeature.cpp
-   AI/KBlocksAILog.cpp   )
+   AI/KBlocksAILog.cpp
+)
 
 kconfig_add_kcfg_files(kblocks_SRCS settings.kcfgc )
 
@@ -83,19 +89,28 @@
 
 add_executable(kblocks ${kblocks_SRCS})
 
-target_link_libraries(kblocks KF5KDEGames KF5KDEGamesPrivate  
Phonon::phonon4qt5 Qt5::Network KF5::XmlGui KF5::I18n Qt5::Svg)
+target_link_libraries(kblocks
+    KF5KDEGames
+    KF5KDEGamesPrivate
+    Qt5::Network
+    KF5::Crash
+    KF5::DBusAddons
+    KF5::XmlGui
+    KF5::I18n
+    Qt5::Svg
+)
 
 install(TARGETS kblocks  ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} )
 
 ########### install files ###############
 
-install( PROGRAMS org.kde.kblocks.desktop  DESTINATION  ${KDE_INSTALL_APPDIR} )
-install( FILES kblocks.appdata.xml DESTINATION  ${KDE_INSTALL_METAINFODIR} )
-install( FILES kblocks.kcfg  DESTINATION  ${KDE_INSTALL_KCFGDIR} )
-install( FILES kblocksui.rc  DESTINATION  ${KDE_INSTALL_KXMLGUI5DIR}/kblocks )
-install( FILES kblocks.knsrc  DESTINATION  ${KDE_INSTALL_CONFDIR} )
+install(PROGRAMS org.kde.kblocks.desktop  DESTINATION  ${KDE_INSTALL_APPDIR})
+install(FILES org.kde.kblocks.appdata.xml DESTINATION  
${KDE_INSTALL_METAINFODIR})
+install(FILES kblocks.kcfg  DESTINATION  ${KDE_INSTALL_KCFGDIR})
+install(FILES kblocksui.rc  DESTINATION  ${KDE_INSTALL_KXMLGUI5DIR}/kblocks)
+install(FILES kblocks.knsrc  DESTINATION  ${KDE_INSTALL_CONFDIR})
 
-ecm_install_icons( ICONS 128-apps-kblocks.png  16-apps-kblocks.png  
22-apps-kblocks.png  32-apps-kblocks.png  48-apps-kblocks.png  
64-apps-kblocks.png DESTINATION ${KDE_INSTALL_ICONDIR} THEME hicolor   )
+ecm_install_icons(ICONS 128-apps-kblocks.png  16-apps-kblocks.png  
22-apps-kblocks.png  32-apps-kblocks.png  48-apps-kblocks.png  
64-apps-kblocks.png DESTINATION ${KDE_INSTALL_ICONDIR} THEME hicolor)
 
 
 feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES 
FATAL_ON_MISSING_REQUIRED_PACKAGES)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksGameLogic.cpp 
new/kblocks-16.04.1/KBlocksGameLogic.cpp
--- old/kblocks-15.12.3/KBlocksGameLogic.cpp    2016-02-28 20:46:10.000000000 
+0100
+++ new/kblocks-16.04.1/KBlocksGameLogic.cpp    2016-03-28 14:16:41.000000000 
+0200
@@ -234,7 +234,11 @@
     if (mGameCount == 0) {
         return false;
     }
-    deleteSingleGames();
+
+    for (int i = 0; i < mGameCount; ++i) {
+        maGameList[i]->stopGame();
+    }
+    emit allGamesStopped();
 
     return true;
 }
@@ -284,6 +288,8 @@
 
     for (int i = 0; i < mGameCount; i++) {
         maGameList[i] = new KBlocksSingleGame(i);
+        connect(maGameList[i], &KBlocksSingleGame::gameStopped,
+                 this, &KBlocksGameLogic::stopGame);
         maGameList[i]->setGameStandbyMode(mStandbyMode);
         maGameList[i]->setGameInterval(mGameInterval);
         maGameList[i]->setGameRecorder(mpGameRecorder);
@@ -293,12 +299,18 @@
     delete[] seedList;
 }
 
-void KBlocksGameLogic::deleteSingleGames()
+bool KBlocksGameLogic::deleteSingleGames()
 {
+    if (mGameCount == 0) {
+        return false;
+    }
+
     for (int i = 0; i < mGameCount; i++) {
         maGameList[i]->stopGame();
         delete maGameList[i];
         maGameList[i] = 0;
     }
     mGameCount = 0;
+
+    return true;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksGameLogic.h 
new/kblocks-16.04.1/KBlocksGameLogic.h
--- old/kblocks-15.12.3/KBlocksGameLogic.h      2016-02-28 20:46:10.000000000 
+0100
+++ new/kblocks-16.04.1/KBlocksGameLogic.h      2016-03-28 14:16:41.000000000 
+0200
@@ -11,6 +11,7 @@
 #define KBLOCKSGAMELOGIC_H
 
 #include <stdlib.h>
+#include <QObject>
 
 #include "GameLogicInterface.h"
 #include "SingleGameInterface.h"
@@ -22,8 +23,10 @@
 
 #include "KBlocksSingleGame.h"
 
-class KBlocksGameLogic : public GameLogicInterface
+class KBlocksGameLogic : public QObject, public GameLogicInterface
 {
+    Q_OBJECT
+
 public:
     explicit KBlocksGameLogic(int capacity, bool record = false);
     explicit KBlocksGameLogic(KBlocksGameReplayer *p);
@@ -49,14 +52,20 @@
     void setLevelUpInterval(int interval);
 
     bool startGame(int gameCount);
-    bool stopGame();
 
     void pauseGame(bool pauseFlag);
     void continueGame();
 
+    bool deleteSingleGames();
+
+public slots:
+    bool stopGame();
+
+signals:
+    void allGamesStopped();
+
 private:
     void createSingleGames(int gameCount);
-    void deleteSingleGames();
 
 protected:
     KBlocksSingleGame **maGameList;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksKeyboardPlayer.cpp 
new/kblocks-16.04.1/KBlocksKeyboardPlayer.cpp
--- old/kblocks-15.12.3/KBlocksKeyboardPlayer.cpp       2016-02-28 
20:46:10.000000000 +0100
+++ new/kblocks-16.04.1/KBlocksKeyboardPlayer.cpp       2016-03-28 
14:16:41.000000000 +0200
@@ -122,6 +122,7 @@
     } else {
         mpGame->setCurrentPiece(-1, 0, 0);
     }
+    emit blockMoved();
 }
 
 void KBlocksKeyboardPlayer::moveRight()
@@ -134,6 +135,7 @@
     } else {
         mpGame->setCurrentPiece(1, 0, 0);
     }
+    emit blockMoved();
 }
 
 void KBlocksKeyboardPlayer::moveDown()
@@ -146,6 +148,7 @@
     } else {
         mpGame->setCurrentPiece(0, 1, 0);
     }
+    emit blockMoved();
 }
 
 void KBlocksKeyboardPlayer::pushDown()
@@ -159,6 +162,7 @@
         while (mpGame->setCurrentPiece(0, 1, 0)) ;
         mpGame->forceUpdateGame();
     }
+    emit blockDropped();
 }
 
 void KBlocksKeyboardPlayer::rotateCW()
@@ -171,6 +175,7 @@
     } else {
         mpGame->setCurrentPiece(0, 0, -1);
     }
+    emit blockMoved();
 }
 
 void KBlocksKeyboardPlayer::rotateCCW()
@@ -183,4 +188,5 @@
     } else {
         mpGame->setCurrentPiece(0, 0, 1);
     }
+    emit blockMoved();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksKeyboardPlayer.h 
new/kblocks-16.04.1/KBlocksKeyboardPlayer.h
--- old/kblocks-15.12.3/KBlocksKeyboardPlayer.h 2016-02-28 20:46:10.000000000 
+0100
+++ new/kblocks-16.04.1/KBlocksKeyboardPlayer.h 2016-03-28 14:16:41.000000000 
+0200
@@ -42,6 +42,10 @@
 private:
     void bindKeys();
 
+signals:
+    void blockMoved();
+    void blockDropped();
+
 private slots:
     void moveLeft();
     void moveRight();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksScene.cpp 
new/kblocks-16.04.1/KBlocksScene.cpp
--- old/kblocks-15.12.3/KBlocksScene.cpp        2016-02-28 20:46:10.000000000 
+0100
+++ new/kblocks-16.04.1/KBlocksScene.cpp        2016-03-28 14:16:41.000000000 
+0200
@@ -34,7 +34,7 @@
 
     QString themeFile(Settings::theme());
     mpGrafx = new KBlocksGraphics(themeFile);
-    mpSnd = new KBlocksSound(themeFile);
+    mpSnd = new KBlocksSound();
 
     int width = (capacity >= mSceneGamesPerLine) ? mSceneGamesPerLine : 
(capacity % mSceneGamesPerLine);
     int height = (int)(capacity / (mSceneGamesPerLine + 1)) + 1;
@@ -158,7 +158,6 @@
 {
     if (mpGrafx->theme()->fileName() != Settings::theme()) {
         mpGrafx->loadTheme(Settings::theme());
-        mpSnd->loadTheme(Settings::theme());
         mpGrafx->adjustForSize(viewSize);
         updateDimensions();
     }
@@ -316,6 +315,10 @@
             emit scoreChanged(i, maGameScoreList[i]->getScorePoint(),
                               maGameScoreList[i]->getLineCount(),
                               maGameScoreList[i]->getGameLevel());
+            // Play sound only for human player
+            if (i == 0) {
+                mpSnd->playSound(Sound::BlockRemove);
+            }
         } else if (removedLines[i] == -1) {
             maGroupList[i]->stopGame();
             if (mGroupCount == 1) {
@@ -360,6 +363,16 @@
     }
 }
 
+void KBlocksScene::playMoveSound()
+{
+    mpSnd->playSound(Sound::BlockMove);
+}
+
+void KBlocksScene::playDropSound()
+{
+    mpSnd->playSound(Sound::BlockFall);
+}
+
 void KBlocksScene::drawBackground(QPainter *painter, const QRectF &rect)
 {
     if (mpGrafx->renderer()->isValid()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksScene.h 
new/kblocks-16.04.1/KBlocksScene.h
--- old/kblocks-15.12.3/KBlocksScene.h  2016-02-28 20:46:10.000000000 +0100
+++ new/kblocks-16.04.1/KBlocksScene.h  2016-03-28 14:16:41.000000000 +0200
@@ -75,6 +75,10 @@
     void updateGame();
     void readyForAction(int groupID);
 
+public slots:
+    void playMoveSound();
+    void playDropSound();
+
 protected:
     void drawBackground(QPainter *painter, const QRectF &rect);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksSingleGame.cpp 
new/kblocks-16.04.1/KBlocksSingleGame.cpp
--- old/kblocks-15.12.3/KBlocksSingleGame.cpp   2016-02-28 20:46:10.000000000 
+0100
+++ new/kblocks-16.04.1/KBlocksSingleGame.cpp   2016-03-28 14:16:41.000000000 
+0200
@@ -219,7 +219,10 @@
 
 int KBlocksSingleGame::stopGame()
 {
-    mCurrentGameState = GameState_Stop;
+    if (mCurrentGameState != GameState_Stop) {
+        mCurrentGameState = GameState_Stop;
+        emit gameStopped();
+    }
 
     return mCurrentGameState;
 }
@@ -309,8 +312,8 @@
         prepareNextPiece();
         if (checkPieceTouchGround(mpPieceList[0])) {
             *gameResult = GameResult_Game_Over;
-            mCurrentGameState = GameState_Stop;
             mpGameMessage->putGameResult(-1);
+            stopGame();
         }
 
         if (mpGameRecorder) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksSingleGame.h 
new/kblocks-16.04.1/KBlocksSingleGame.h
--- old/kblocks-15.12.3/KBlocksSingleGame.h     2016-02-28 20:46:10.000000000 
+0100
+++ new/kblocks-16.04.1/KBlocksSingleGame.h     2016-03-28 14:16:41.000000000 
+0200
@@ -11,6 +11,7 @@
 #define KBLOCKSSINGLEGAME_H
 
 #include <sys/time.h>
+#include <QObject>
 
 #include "SingleGameInterface.h"
 
@@ -23,8 +24,10 @@
 
 #include "KBlocksDefine.h"
 
-class KBlocksSingleGame : public SingleGameInterface
+class KBlocksSingleGame : public QObject, public SingleGameInterface
 {
+    Q_OBJECT
+
 public:
     explicit KBlocksSingleGame(int gameIndex, int fieldWidth = 10, int 
fieldHeight = 20, int showPieceCount = 2, int messagePoolSize = 256);
     ~KBlocksSingleGame();
@@ -57,6 +60,9 @@
     bool pickGameResult(int *result);
     bool pickGameAction(int *type, int *action);
 
+signals:
+    void gameStopped();
+
 private:
     int doUpdateGame(bool force);
     bool runGameOneStep(int *gameResult);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksSound.cpp 
new/kblocks-16.04.1/KBlocksSound.cpp
--- old/kblocks-15.12.3/KBlocksSound.cpp        2016-02-28 20:46:10.000000000 
+0100
+++ new/kblocks-16.04.1/KBlocksSound.cpp        2016-03-28 14:16:41.000000000 
+0200
@@ -11,87 +11,53 @@
 //Uses routines from Kapman sound manager (game.cpp)
 
 #include "KBlocksSound.h"
-#include <QDebug>
-#include <QFile>
-#include <QFileInfo>
+#include "settings.h"
 
-#define USE_UNSTABLE_LIBKDEGAMESPRIVATE_API
-#include <libkdegamesprivate/kgametheme.h>
+#include <kgsound.h>
 
-#include "settings.h"
+#include <QDebug>
+#include <QStandardPaths>
 
-KBlocksSound::KBlocksSound(const QString &themeFile)
+KBlocksSound::KBlocksSound()
 {
-    m_media1 = 0;
-    m_media2 = 0;
-    m_theme = new KGameTheme();
-    if (!m_theme->load(themeFile)) {
-        qWarning() << "Error loading KBlocks .desktop theme" << themeFile << 
endl;
-        m_theme->loadDefault();
-        qWarning() << "Load default sound theme." << endl;
-    }
-    readThemeValues();
+    m_blockFallSound = new KgSound(QStandardPaths::locate(
+                    QStandardPaths::DataLocation, "sounds/block-fall.ogg"));
+    m_blockMoveSound = new KgSound(QStandardPaths::locate(
+                    QStandardPaths::DataLocation, "sounds/block-move.ogg"));
+    m_blockRemoveSound = new KgSound(QStandardPaths::locate(
+                    QStandardPaths::DataLocation, "sounds/block-remove.ogg"));
     setSoundsEnabled(Settings::sounds());
 }
 
 KBlocksSound::~KBlocksSound()
 {
-    delete m_theme;
-    delete m_media1;
-    delete m_media2;
-}
-
-bool KBlocksSound::loadTheme(const QString &themeFile)
-{
-    if (!m_theme->load(themeFile)) {
-        qWarning() << "Error loading KBlocks .desktop theme" << themeFile << 
endl;
-        return false;
-    }
-    readThemeValues();
-    return true;
-}
-
-void KBlocksSound::readThemeValues()
-{
-    //Extract sound directory info
-    //This functionality should be exposed by KGameTheme
-    QFile themefile(m_theme->path());
-    sndDirectory = QFileInfo(themefile).absolutePath() + '/';
-    themefile.close();
+    delete m_blockFallSound;
+    delete m_blockMoveSound;
+    delete m_blockRemoveSound;
 }
 
 void KBlocksSound::setSoundsEnabled(bool p_enabled)
 {
     sndActive = p_enabled;
-    if (p_enabled) {
-        if (!m_media1) {
-            m_media1 = Phonon::createPlayer(Phonon::GameCategory);
-        }
-        if (!m_media2) {
-            m_media2 = Phonon::createPlayer(Phonon::GameCategory);
-        }
-    } else {
-        delete m_media1;
-        delete m_media2;
-        m_media1 = 0;
-        m_media2 = 0;
-    }
 }
 
-void KBlocksSound::playSound(const QString &p_soundkey)
+void KBlocksSound::playSound(Sound soundType)
 {
-    Phonon::MediaObject *m_usedMedia;
-    QString p_sound = sndDirectory + m_theme->themeProperty(p_soundkey);
-    //qDebug() << "Playing sound : " << p_sound << endl;
     if (sndActive) {
-        // Choose the media object with the smallest remaining time
-        if (m_media1->remainingTime() <= m_media2->remainingTime()) {
-            m_usedMedia = m_media1;
-        } else {
-            m_usedMedia = m_media2;
+        switch (soundType) {
+        case Sound::BlockFall:
+            m_blockFallSound->start();
+            break;
+        case Sound::BlockMove:
+            m_blockMoveSound->start();
+            break;
+        case Sound::BlockRemove:
+            m_blockRemoveSound->start();
+            break;
+        default:
+            qDebug() << "Unknown Sound requested for playback.";
+            break;
         }
-        m_usedMedia->setCurrentSource(p_sound);
-        m_usedMedia->play();
     }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksSound.h 
new/kblocks-16.04.1/KBlocksSound.h
--- old/kblocks-15.12.3/KBlocksSound.h  2016-02-28 20:46:10.000000000 +0100
+++ new/kblocks-16.04.1/KBlocksSound.h  2016-03-28 14:16:41.000000000 +0200
@@ -11,31 +11,28 @@
 #ifndef KBLOCKSSOUND_H
 #define KBLOCKSSOUND_H
 
-class KGameTheme;
-#include <QHash>
-#include <Phonon/MediaObject>
+class KgSound;
+
+enum class Sound {
+    BlockFall,
+    BlockMove,
+    BlockRemove
+};
 
 class KBlocksSound
 {
 public:
-    explicit KBlocksSound(const QString &themeFile);
-    virtual ~KBlocksSound();
+    KBlocksSound();
+    ~KBlocksSound();
 
 public:
-    bool loadTheme(const QString &themeFile);
-    void readThemeValues();
     void setSoundsEnabled(bool p_enabled);
-    void playSound(const QString &p_sound);
-    KGameTheme *theme()
-    {
-        return m_theme;
-    }
+    void playSound(Sound soundType);
 
 private:
-    KGameTheme *m_theme;
-    QString sndDirectory;
-    Phonon::MediaObject *m_media1;
-    Phonon::MediaObject *m_media2;
+    KgSound *m_blockFallSound;
+    KgSound *m_blockMoveSound;
+    KgSound *m_blockRemoveSound;
     bool sndActive;
 
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksWin.cpp 
new/kblocks-16.04.1/KBlocksWin.cpp
--- old/kblocks-15.12.3/KBlocksWin.cpp  2016-02-28 20:46:10.000000000 +0100
+++ new/kblocks-16.04.1/KBlocksWin.cpp  2016-03-28 14:16:41.000000000 +0200
@@ -44,10 +44,18 @@
     mMaxGameCapacity = capacity;
     mGameCount = gamecount;
     mpGameLogic = p;
+    connect(mpGameLogic, &KBlocksGameLogic::allGamesStopped,
+            this, &KBlocksWin::onAllGamesStopped);
+
     mpPlayManager = pM;
 
     mpGameScene = new KBlocksScene(mpGameLogic, capacity);
 
+    connect(mpKBPlayer, &KBlocksKeyboardPlayer::blockMoved,
+            mpGameScene, &KBlocksScene::playMoveSound);
+    connect(mpKBPlayer, &KBlocksKeyboardPlayer::blockDropped,
+            mpGameScene, &KBlocksScene::playDropSound);
+
     mpGameView = new KBlocksView(mpGameScene, this);
     mpGameView->show();
     setCentralWidget(mpGameView);
@@ -121,17 +129,17 @@
     }
 
     mScore->setText(i18n("Points: %1 - Lines: %2 - Level: %3", 0, 0, 0));
+
+    m_pauseAction->setEnabled(true);
+    m_pauseAction->setChecked(false);
 }
 
 void KBlocksWin::stopGame()
 {
-    if (mpGameLogic->stopGame()) {
-        mpPlayManager->stopGame();
-
+    if (mpGameLogic->deleteSingleGames()) {
+        // Clear the game field
         mpGameScene->stopGame();
         mpGameScene->deleteGameItemGroups();
-
-        Kg::difficulty()->setGameRunning(false);
     }
 }
 
@@ -141,9 +149,19 @@
     mpPlayManager->pauseGame(m_pauseAction->isChecked());
     mpGameScene->pauseGame(m_pauseAction->isChecked());
 
+    mpKBPlayer->pauseGame(m_pauseAction->isChecked());
+    mpAIPlayer->pauseGame(m_pauseAction->isChecked());
+
     Kg::difficulty()->setGameRunning(!m_pauseAction->isChecked());
 }
 
+void KBlocksWin::onAllGamesStopped()
+{
+    mpPlayManager->stopGame();
+    m_pauseAction->setEnabled(false);
+    Kg::difficulty()->setGameRunning(false);
+}
+
 void KBlocksWin::singleGame()
 {
     mpPlayManager->stopGame();
@@ -260,6 +278,7 @@
 
     m_pauseAction = KStandardGameAction::pause(this, SLOT(pauseGame()), 
actionCollection());
     actionCollection()->addAction(QStringLiteral("pauseGame"), m_pauseAction);
+    m_pauseAction->setEnabled(false);
 
     action = KStandardGameAction::highscores(this, SLOT(showHighscore()), 
actionCollection());
     actionCollection()->addAction(QStringLiteral("showHighscores"), action);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/KBlocksWin.h 
new/kblocks-16.04.1/KBlocksWin.h
--- old/kblocks-15.12.3/KBlocksWin.h    2016-02-28 20:46:10.000000000 +0100
+++ new/kblocks-16.04.1/KBlocksWin.h    2016-03-28 14:16:41.000000000 +0200
@@ -52,6 +52,7 @@
     void showHighscore();
     void onScoreChanged(int index, int points, int lines, int level);
     void onIsHighscore(int index, int points, int level);
+    void onAllGamesStopped();
     void levelChanged();
     void setSoundsEnabled(bool enabled);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/kblocks.appdata.xml 
new/kblocks-16.04.1/kblocks.appdata.xml
--- old/kblocks-15.12.3/kblocks.appdata.xml     2016-02-28 20:46:10.000000000 
+0100
+++ new/kblocks-16.04.1/kblocks.appdata.xml     1970-01-01 01:00:00.000000000 
+0100
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<component type="desktop">
-  <id>org.kde.kblocks.desktop</id>
-  <metadata_license>CC0-1.0</metadata_license>
-  <project_license>GPL-2.0+</project_license>
-  <name>KBlocks</name>
-  <name xml:lang="ast">KBlocks</name>
-  <name xml:lang="bs">KBlocks</name>
-  <name xml:lang="ca">KBlocks</name>
-  <name xml:lang="ca-valencia">KBlocks</name>
-  <name xml:lang="cs">KBlocks</name>
-  <name xml:lang="da">KBlocks</name>
-  <name xml:lang="de">KBlocks</name>
-  <name xml:lang="en-GB">KBlocks</name>
-  <name xml:lang="es">KBlock</name>
-  <name xml:lang="et">KBlocks</name>
-  <name xml:lang="fi">KBlocks</name>
-  <name xml:lang="gl">KBlocks</name>
-  <name xml:lang="it">KBlocks</name>
-  <name xml:lang="ko">KBlocks</name>
-  <name xml:lang="nl">KBlocks</name>
-  <name xml:lang="nn">KBlocks</name>
-  <name xml:lang="pl">KBloki</name>
-  <name xml:lang="pt">KBlocks</name>
-  <name xml:lang="pt-BR">KBlocks</name>
-  <name xml:lang="ro">KBlocks</name>
-  <name xml:lang="ru">KBlocks</name>
-  <name xml:lang="sk">KBlocks</name>
-  <name xml:lang="sl">KBlocks</name>
-  <name xml:lang="sr">К‑блокови</name>
-  <name xml:lang="sr-Latn">K‑blokovi</name>
-  <name xml:lang="sr-ijekavian">К‑блокови</name>
-  <name xml:lang="sr-ijekavianlatin">K‑blokovi</name>
-  <name xml:lang="sv">Kblock</name>
-  <name xml:lang="tr">KBlocks</name>
-  <name xml:lang="uk">KBlocks</name>
-  <name xml:lang="x-test">xxKBlocksxx</name>
-  <name xml:lang="zh-CN">KBlocks</name>
-  <name xml:lang="zh-TW">KBlocks</name>
-  <summary>Falling Blocks Game</summary>
-  <summary xml:lang="ast">Xuegu de bloques que cayen</summary>
-  <summary xml:lang="bs">Igra padajući blokovi</summary>
-  <summary xml:lang="ca">Joc de blocs que cauen</summary>
-  <summary xml:lang="ca-valencia">Joc de blocs que cauen</summary>
-  <summary xml:lang="cs">Hra s padajícími bloky</summary>
-  <summary xml:lang="de">„Tetris“-Spiel</summary>
-  <summary xml:lang="en-GB">Falling Blocks Game</summary>
-  <summary xml:lang="es">Juego de caída de bloques</summary>
-  <summary xml:lang="et">Langevate klotside mäng</summary>
-  <summary xml:lang="fi">Putoavien kappaleiden peli</summary>
-  <summary xml:lang="gl">Xogo no que caen bloques</summary>
-  <summary xml:lang="it">Gioco con oggetti che cadono</summary>
-  <summary xml:lang="ko">떨어지는 블록 게임</summary>
-  <summary xml:lang="nl">Vallende blokken-spel</summary>
-  <summary xml:lang="nn">Spel med fallande brikker</summary>
-  <summary xml:lang="pl">Gra w spadające bloki</summary>
-  <summary xml:lang="pt">Jogo de Blocos em Queda</summary>
-  <summary xml:lang="pt-BR">Jogo estilo Tetris</summary>
-  <summary xml:lang="ro">Joc de blocuri căsătoare</summary>
-  <summary xml:lang="ru">Клон игры Тетрис</summary>
-  <summary xml:lang="sk">Hra s padajúcimi blokmi</summary>
-  <summary xml:lang="sl">Igra padajočih kock</summary>
-  <summary xml:lang="sr">Игра падајућих блокова</summary>
-  <summary xml:lang="sr-Latn">Igra padajućih blokova</summary>
-  <summary xml:lang="sr-ijekavian">Игра падајућих блокова</summary>
-  <summary xml:lang="sr-ijekavianlatin">Igra padajućih blokova</summary>
-  <summary xml:lang="sv">Spel med fallande block</summary>
-  <summary xml:lang="tr">Düşen Bloklar Oyunu</summary>
-  <summary xml:lang="uk">Гра з блоками, що падають</summary>
-  <summary xml:lang="x-test">xxFalling Blocks Gamexx</summary>
-  <summary xml:lang="zh-CN">俄罗斯方块游戏</summary>
-  <summary xml:lang="zh-TW">類似俄羅斯方塊遊戲</summary>
-  <description>
-    <p>
-      KBlocks is the classic falling blocks game. The idea is to stack the 
falling blocks to create horizontal
-      lines without any gaps. When a line is completed it is removed, and more 
space is available in the play area.
-      When there is not enough space for blocks to fall, the game is over.
-    </p>
-    <p xml:lang="ast">KBlocks ye'l xuegu clásicu de los bloque que cayen. La 
idea ye amontonar los bloques que cayen pa crear llinies horizontales ensin 
güecos. Cuando una llinia se completa, hai disponible más espaciu nel area de 
xuegu. Cuando nun hai espaciu abondo pa los bloques que cayen, la partida 
fínase.</p>
-    <p xml:lang="ca">El KBlocks és el joc clàssic de blocs que cauen. La idea 
és apilar els blocs que cauen per crear línies horitzontals sense cap forat. 
Quan s'ha completat una línia, aquesta s'elimina i queda més espai disponible a 
l'àrea de joc. Quan no hi ha espai suficient per als blocs que cauen el joc 
finalitza.</p>
-    <p xml:lang="ca-valencia">El KBlocks és el joc clàssic de blocs que cauen. 
La idea és apilar els blocs que cauen per crear línies horitzontals sense cap 
forat. Quan s'ha completat una línia, esta s'elimina i queda més espai 
disponible a l'àrea de joc. Quan no hi ha espai suficient per als blocs que 
cauen el joc finalitza.</p>
-    <p xml:lang="de">KBlocks ist ein klassisches Tetris-Spiel. Die 
herunterfallenden Blöcke müssen so gestapelt werden, dass sie waagerechte 
Zeilen ohne Lücken bilden. Eine solche Zeile verschwindet dann, und im 
Spielfeld ist wieder mehr Platz. Wenn es keinen Platz mehr für herunterfallende 
Blöcke gibt, ist das Spiel zu Ende.</p>
-    <p xml:lang="en-GB">KBlocks is the classic falling blocks game. The idea 
is to stack the falling blocks to create horizontal lines without any gaps. 
When a line is completed it is removed, and more space is available in the play 
area. When there is not enough space for blocks to fall, the game is over.</p>
-    <p xml:lang="es">KBlocks es un juego clásico de caída de bloques. La idea 
es apilar los bloques que van cayendo para crear líneas horizontaes sin huecos. 
Cuando se completa una línea se elimina, y hay más espacio disponible en la 
zona de juego. Cuando no queda más sitio para que los bloques caigan, se 
termina el juego.</p>
-    <p xml:lang="et">KBlocks on klassikaline langevate klotside mäng. Selle 
mõte on asetada langevad klotsid nii, et read saaksid rõhtsuunas täis. Kui rida 
on täis, see eemaldatakse ning mänguväljale tekib ruumi juurde. Kui klotsil ei 
ole enam ruumi langeda, on mäng läbi.</p>
-    <p xml:lang="fi">KBlock on perinteinen putoavien kappaleiden peli. 
Tavoitteena on kasata putoavat kappaleet aukottomiksi vaakariveiksi. Kun rivi 
on valmis, se poistetaan ja pelialue kasvaa. Kun kappaleilla ei ole enää tilaa 
pudota, peli on lopussa.</p>
-    <p xml:lang="gl">KBlocks é o xogo clásico dos bloques que caen A idea é 
amorear os bloques que caen de xeito que se formen liñas horizontais completas, 
sen ocos. Cando se completa unha liña, esta elimínase e amplíase o espazo 
dispoñíbel na área de xogo. Cando non fica espazo abondo para que caian os 
bloques, a partida acaba.</p>
-    <p xml:lang="it">KBlocks è il classico gioco di blocchi in caduta. L'idea 
è impilarli in modo da riempire completamente delle righe. Quando una riga è 
completata viene rimossa, e c'è più spazio a disposizione nell'area di gioco. 
Quando manca lo spazio per far cadere i blocchi, la partita finisce. </p>
-    <p xml:lang="ko">KBlocks는 떨어지는 블록 게임입니다. 떨어지는 블록을 맞추어서 빈틈 없는 수평선을 만드는 것이 
목표입니다. 줄을 맞추면 지워져서 더 많은 공간이 생기며, 더 이상 블록이 내려올 수 없으면 게임이 끝납니다.</p>
-    <p xml:lang="nl">KBlocks is het klassieke spel met vallende blokken Het 
idee is de vallende blokken zo op te stapelen dat horizontale lijnen volledig 
zijn opgevuld. Wanneer een lijn volledig is opgevuld wordt deze verwijderd en 
komt er meer ruimte in het speelgebied. Wanneer er onvoldoende ruimte over is 
om een blok te laten vallen is het spel over.</p>
-    <p xml:lang="nn">KBlocks er eit klassisk spel med fallande brikker. Du må 
stabla brikkene oppå kvarandre slik at det ikkje vert nokon mellomrom mellom 
brikkene bortover. Når ei heil linje er fylt, vert ho fjerna, og du har meir 
plass til nye brikker. Når du ikkje har nok plass til fleire brikker, er spelet 
slutt.</p>
-    <p xml:lang="pl">KBloki jest klasyczną grą w spadające bloki. Celem jest 
takie układanie spadających bloków, aby tworzyły one poziome linie bez przerw. 
Po ułożeniu takiej linii jest ona usuwana zwalniając miejsce w obszarze gry. 
Brak miejsca na spadające bloki oznacza przegraną.</p>
-    <p xml:lang="pt">O KBlocks é o clássico jogo de blocos em queda. A ideia é 
empilhar os blocos em queda para criar linhas horizontais sem lacunas. Quando 
uma linha ficar completa, será removida, ficando mais espaço disponível na área 
de jogo. Quando não existir mais espaço para os blocos caírem, o jogo 
terminou.</p>
-    <p xml:lang="pt-BR">KBlocks é o clássico jogo de encaixar blocos A ideia é 
empilhar os blocos para criar linhas horizontais sem lacunas. Quando 
completa-se uma linha, a mesma é removida, abrindo mais espaço na área de jogo. 
O jogo acaba quando não há mais espaço suficiente para os blocos caírem.</p>
-    <p xml:lang="ru">KBlocks — клон игры Тетрис. Нужно складывать падающий 
блоки так, чтобы получались горизонтальные ряды без пропусков. Когда ряд 
заполнен, он удаляется, освобождая место на игровом поле. Игра заканчивается, 
когда блоку негде упасть.</p>
-    <p xml:lang="sk">KBlocks je klasická hra padajúcich blokov. Cieľom je na 
seba padajúcimi blokmi vytvoriť horizontálne línie bez medzier. Ak je linka 
dokončená, je odstránená, a viac priestoru je k dispozícii na hru. Keď nie je 
dostatok miesta pre bloky na padanie, hra sa končí.</p>
-    <p xml:lang="sl">KBlocks je klasična igra padajočih kock. V igri 
združujete padajoče kocke v vodoravne vrste brez vmesnih praznin. Ko se vrsta 
odstrani, se sprosti tudi igralna površina. Igre je konec, ko zmanjka prostora 
za padajoče kocke.</p>
-    <p xml:lang="sr">К‑блокови је класична игра падајућих блокова. Идеја је да 
се падајући блокови слажу у водоравне редове без процепа. Ред се уклања када се 
доврши, остављајући више простора у зони игре. Када више нема простора за нове 
блокове, партија је готова.</p>
-    <p xml:lang="sr-Latn">K‑blokovi je klasična igra padajućih blokova. Ideja 
je da se padajući blokovi slažu u vodoravne redove bez procepa. Red se uklanja 
kada se dovrši, ostavljajući više prostora u zoni igre. Kada više nema prostora 
za nove blokove, partija je gotova.</p>
-    <p xml:lang="sr-ijekavian">К‑блокови је класична игра падајућих блокова. 
Идеја је да се падајући блокови слажу у водоравне редове без процепа. Ред се 
уклања када се доврши, остављајући више простора у зони игре. Када више нема 
простора за нове блокове, партија је готова.</p>
-    <p xml:lang="sr-ijekavianlatin">K‑blokovi je klasična igra padajućih 
blokova. Ideja je da se padajući blokovi slažu u vodoravne redove bez procepa. 
Red se uklanja kada se dovrši, ostavljajući više prostora u zoni igre. Kada 
više nema prostora za nove blokove, partija je gotova.</p>
-    <p xml:lang="sv">Kblock är det klassiska spelet med fallande block. Idén 
är att lägga de fallande blocken för att skapa horisontella rader utan några 
mellanrum. När en rad är färdig tas den bort, och mer utrymme blir tillgängligt 
i spelområdet. När det inte finns tillräckligt med utrymme för block att falla 
är spelet slut.</p>
-    <p xml:lang="tr">KBlocks klasik bir düşen bloklar oyunudur. Buradaki fikir 
düşen blokları yatay satırlar oluşturacak şekilde dizmektir. Bir satır 
tamamlandığında o kaldırılır ve oyun için daha fazla alan açılmış olur. Düşecek 
bloklar için yer kalmadığında oyun bitmiş olur.</p>
-    <p xml:lang="uk">KBlocks — це класична гра з блоками, що падають. Мета гри 
полягає у тому, щоб розташовувати блоки так, щоб вони повністю заповнювали 
горизонтальні ряди. Після повного заповнення ряду його буде вилучено, і у 
області для гри з’явиться більше простору. Якщо для падіння наступного блоку 
місця вже не буде, гру буде завершено.</p>
-    <p xml:lang="x-test">xxKBlocks is the classic falling blocks game. The 
idea is to stack the falling blocks to create horizontal lines without any 
gaps. When a line is completed it is removed, and more space is available in 
the play area. When there is not enough space for blocks to fall, the game is 
over.xx</p>
-    <p xml:lang="zh-TW">KBlocks 是類似俄羅斯方塊的遊戲。俄羅斯方塊的玩法還需要多做介紹嗎?</p>
-  </description>
-  <url 
type="bugtracker">https://bugs.kde.org/enter_bug.cgi?format=guided&amp;product=kblocks</url>
-  <url 
type="help">http://docs.kde.org/stable/en/kdegames/kblocks/index.html</url>
-  <screenshots>
-    <screenshot type="default">
-      <image>http://kde.org/images/screenshots/kblocks.png</image>
-    </screenshot>
-  </screenshots>
-  <project_group>KDE</project_group>
-</component>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/main.cpp new/kblocks-16.04.1/main.cpp
--- old/kblocks-15.12.3/main.cpp        2016-02-28 20:46:10.000000000 +0100
+++ new/kblocks-16.04.1/main.cpp        2016-03-28 14:16:41.000000000 +0200
@@ -13,13 +13,14 @@
 #include <vector>
 
 #include <KAboutData>
+#include <KCrash>
+#include <KDBusService>
 #include <KLocalizedString>
 
 #include <QString>
 #include <QList>
 #include <QByteArray>
 #include <QApplication>
-#include <KLocalizedString>
 #include <QCommandLineParser>
 #include <QCommandLineOption>
 #include <Kdelibs4ConfigMigrator>
@@ -325,6 +326,7 @@
     // Command line argument options
     QCommandLineParser parser;
     KAboutData::setApplicationData(aboutData);
+    KCrash::initialize();
     parser.addVersionOption();
     parser.addHelpOption();
     parser.addOption(QCommandLineOption(QStringList() << 
QStringLiteral("mode"), i18n("Setup kblocks game running mode.\n\t0 = Desktop 
Mode\t1 = Game Engine Mode\n\t2 = Gui Mode\t3 = Player Mode"), 
QStringLiteral("game mode"), QStringLiteral("0")));
@@ -333,6 +335,7 @@
     aboutData.setupCommandLine(&parser);
     parser.process(app);
     aboutData.processCommandLine(&parser);
+    KDBusService service;
 
     app.setWindowIcon(QIcon::fromTheme(QStringLiteral("kblocks")));
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/org.kde.kblocks.appdata.xml 
new/kblocks-16.04.1/org.kde.kblocks.appdata.xml
--- old/kblocks-15.12.3/org.kde.kblocks.appdata.xml     1970-01-01 
01:00:00.000000000 +0100
+++ new/kblocks-16.04.1/org.kde.kblocks.appdata.xml     2016-03-28 
14:16:41.000000000 +0200
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component type="desktop">
+  <id>org.kde.kblocks.desktop</id>
+  <metadata_license>CC0-1.0</metadata_license>
+  <project_license>GPL-2.0+</project_license>
+  <name>KBlocks</name>
+  <name xml:lang="ast">KBlocks</name>
+  <name xml:lang="bs">KBlocks</name>
+  <name xml:lang="ca">KBlocks</name>
+  <name xml:lang="ca-valencia">KBlocks</name>
+  <name xml:lang="cs">KBlocks</name>
+  <name xml:lang="da">KBlocks</name>
+  <name xml:lang="de">KBlocks</name>
+  <name xml:lang="en-GB">KBlocks</name>
+  <name xml:lang="es">KBlock</name>
+  <name xml:lang="fi">KBlocks</name>
+  <name xml:lang="gl">KBlocks</name>
+  <name xml:lang="it">KBlocks</name>
+  <name xml:lang="ko">KBlocks</name>
+  <name xml:lang="nl">KBlocks</name>
+  <name xml:lang="nn">KBlocks</name>
+  <name xml:lang="pl">KBloki</name>
+  <name xml:lang="pt">KBlocks</name>
+  <name xml:lang="pt-BR">KBlocks</name>
+  <name xml:lang="ro">KBlocks</name>
+  <name xml:lang="ru">KBlocks</name>
+  <name xml:lang="sk">KBlocks</name>
+  <name xml:lang="sl">KBlocks</name>
+  <name xml:lang="sr">К‑блокови</name>
+  <name xml:lang="sr-Latn">K‑blokovi</name>
+  <name xml:lang="sr-ijekavian">К‑блокови</name>
+  <name xml:lang="sr-ijekavianlatin">K‑blokovi</name>
+  <name xml:lang="sv">Kblock</name>
+  <name xml:lang="tr">KBlocks</name>
+  <name xml:lang="uk">KBlocks</name>
+  <name xml:lang="x-test">xxKBlocksxx</name>
+  <name xml:lang="zh-CN">KBlocks</name>
+  <name xml:lang="zh-TW">KBlocks</name>
+  <summary>Falling Blocks Game</summary>
+  <summary xml:lang="ast">Xuegu de bloques que cayen</summary>
+  <summary xml:lang="bs">Igra padajući blokovi</summary>
+  <summary xml:lang="ca">Joc de blocs que cauen</summary>
+  <summary xml:lang="ca-valencia">Joc de blocs que cauen</summary>
+  <summary xml:lang="cs">Hra s padajícími bloky</summary>
+  <summary xml:lang="de">„Tetris“-Spiel</summary>
+  <summary xml:lang="en-GB">Falling Blocks Game</summary>
+  <summary xml:lang="es">Juego de caída de bloques</summary>
+  <summary xml:lang="fi">Putoavien kappaleiden peli</summary>
+  <summary xml:lang="gl">Xogo no que caen bloques</summary>
+  <summary xml:lang="it">Gioco con oggetti che cadono</summary>
+  <summary xml:lang="ko">떨어지는 블록 게임</summary>
+  <summary xml:lang="nl">Vallende blokken-spel</summary>
+  <summary xml:lang="nn">Spel med fallande brikker</summary>
+  <summary xml:lang="pl">Gra w spadające bloki</summary>
+  <summary xml:lang="pt">Jogo de Blocos em Queda</summary>
+  <summary xml:lang="pt-BR">Jogo estilo Tetris</summary>
+  <summary xml:lang="ro">Joc de blocuri căsătoare</summary>
+  <summary xml:lang="ru">Клон игры Тетрис</summary>
+  <summary xml:lang="sk">Hra s padajúcimi blokmi</summary>
+  <summary xml:lang="sl">Igra padajočih kock</summary>
+  <summary xml:lang="sr">Игра падајућих блокова</summary>
+  <summary xml:lang="sr-Latn">Igra padajućih blokova</summary>
+  <summary xml:lang="sr-ijekavian">Игра падајућих блокова</summary>
+  <summary xml:lang="sr-ijekavianlatin">Igra padajućih blokova</summary>
+  <summary xml:lang="sv">Spel med fallande block</summary>
+  <summary xml:lang="tr">Düşen Bloklar Oyunu</summary>
+  <summary xml:lang="uk">Гра з блоками, що падають</summary>
+  <summary xml:lang="x-test">xxFalling Blocks Gamexx</summary>
+  <summary xml:lang="zh-CN">俄罗斯方块游戏</summary>
+  <summary xml:lang="zh-TW">類似俄羅斯方塊遊戲</summary>
+  <description>
+    <p>
+      KBlocks is the classic falling blocks game. The idea is to stack the 
falling blocks to create horizontal
+      lines without any gaps. When a line is completed it is removed, and more 
space is available in the play area.
+      When there is not enough space for blocks to fall, the game is over.
+    </p>
+    <p xml:lang="ast">KBlocks ye'l xuegu clásicu de los bloque que cayen. La 
idea ye amontonar los bloques que cayen pa crear llinies horizontales ensin 
güecos. Cuando una llinia se completa, hai disponible más espaciu nel area de 
xuegu. Cuando nun hai espaciu abondo pa los bloques que cayen, la partida 
fínase.</p>
+    <p xml:lang="ca">El KBlocks és el joc clàssic de blocs que cauen. La idea 
és apilar els blocs que cauen per crear línies horitzontals sense cap forat. 
Quan s'ha completat una línia, aquesta s'elimina i queda més espai disponible a 
l'àrea de joc. Quan no hi ha espai suficient per als blocs que cauen el joc 
finalitza.</p>
+    <p xml:lang="ca-valencia">El KBlocks és el joc clàssic de blocs que cauen. 
La idea és apilar els blocs que cauen per crear línies horitzontals sense cap 
forat. Quan s'ha completat una línia, esta s'elimina i queda més espai 
disponible a l'àrea de joc. Quan no hi ha espai suficient per als blocs que 
cauen el joc finalitza.</p>
+    <p xml:lang="de">KBlocks ist ein klassisches Tetris-Spiel. Die 
herunterfallenden Blöcke müssen so gestapelt werden, dass sie waagerechte 
Zeilen ohne Lücken bilden. Eine solche Zeile verschwindet dann, und im 
Spielfeld ist wieder mehr Platz. Wenn es keinen Platz mehr für herunterfallende 
Blöcke gibt, ist das Spiel zu Ende.</p>
+    <p xml:lang="en-GB">KBlocks is the classic falling blocks game. The idea 
is to stack the falling blocks to create horizontal lines without any gaps. 
When a line is completed it is removed, and more space is available in the play 
area. When there is not enough space for blocks to fall, the game is over.</p>
+    <p xml:lang="es">KBlocks es un juego clásico de caída de bloques. La idea 
es apilar los bloques que van cayendo para crear líneas horizontaes sin huecos. 
Cuando se completa una línea se elimina, y hay más espacio disponible en la 
zona de juego. Cuando no queda más sitio para que los bloques caigan, se 
termina el juego.</p>
+    <p xml:lang="fi">KBlock on perinteinen putoavien kappaleiden peli. 
Tavoitteena on kasata putoavat kappaleet aukottomiksi vaakariveiksi. Kun rivi 
on valmis, se poistetaan ja pelialue kasvaa. Kun kappaleilla ei ole enää tilaa 
pudota, peli on lopussa.</p>
+    <p xml:lang="gl">KBlocks é o xogo clásico dos bloques que caen A idea é 
amorear os bloques que caen de xeito que se formen liñas horizontais completas, 
sen ocos. Cando se completa unha liña, esta elimínase e amplíase o espazo 
dispoñíbel na área de xogo. Cando non fica espazo abondo para que caian os 
bloques, a partida acaba.</p>
+    <p xml:lang="it">KBlocks è il classico gioco di blocchi in caduta. L'idea 
è impilarli in modo da riempire completamente delle righe. Quando una riga è 
completata viene rimossa, e c'è più spazio a disposizione nell'area di gioco. 
Quando manca lo spazio per far cadere i blocchi, la partita finisce. </p>
+    <p xml:lang="ko">KBlocks는 떨어지는 블록 게임입니다. 떨어지는 블록을 맞추어서 빈틈 없는 수평선을 만드는 것이 
목표입니다. 줄을 맞추면 지워져서 더 많은 공간이 생기며, 더 이상 블록이 내려올 수 없으면 게임이 끝납니다.</p>
+    <p xml:lang="nl">KBlocks is het klassieke spel met vallende blokken Het 
idee is de vallende blokken zo op te stapelen dat horizontale lijnen volledig 
zijn opgevuld. Wanneer een lijn volledig is opgevuld wordt deze verwijderd en 
komt er meer ruimte in het speelgebied. Wanneer er onvoldoende ruimte over is 
om een blok te laten vallen is het spel over.</p>
+    <p xml:lang="nn">KBlocks er eit klassisk spel med fallande brikker. Du må 
stabla brikkene oppå kvarandre slik at det ikkje vert nokon mellomrom mellom 
brikkene bortover. Når ei heil linje er fylt, vert ho fjerna, og du har meir 
plass til nye brikker. Når du ikkje har nok plass til fleire brikker, er spelet 
slutt.</p>
+    <p xml:lang="pl">KBloki jest klasyczną grą w spadające bloki. Celem jest 
takie układanie spadających bloków, aby tworzyły one poziome linie bez przerw. 
Po ułożeniu takiej linii jest ona usuwana zwalniając miejsce w obszarze gry. 
Brak miejsca na spadające bloki oznacza przegraną.</p>
+    <p xml:lang="pt">O KBlocks é o clássico jogo de blocos em queda. A ideia é 
empilhar os blocos em queda para criar linhas horizontais sem lacunas. Quando 
uma linha ficar completa, será removida, ficando mais espaço disponível na área 
de jogo. Quando não existir mais espaço para os blocos caírem, o jogo 
terminou.</p>
+    <p xml:lang="pt-BR">KBlocks é o clássico jogo de encaixar blocos A ideia é 
empilhar os blocos para criar linhas horizontais sem lacunas. Quando 
completa-se uma linha, a mesma é removida, abrindo mais espaço na área de jogo. 
O jogo acaba quando não há mais espaço suficiente para os blocos caírem.</p>
+    <p xml:lang="ru">KBlocks — клон игры Тетрис. Нужно складывать падающий 
блоки так, чтобы получались горизонтальные ряды без пропусков. Когда ряд 
заполнен, он удаляется, освобождая место на игровом поле. Игра заканчивается, 
когда блоку негде упасть.</p>
+    <p xml:lang="sk">KBlocks je klasická hra padajúcich blokov. Cieľom je na 
seba padajúcimi blokmi vytvoriť horizontálne línie bez medzier. Ak je linka 
dokončená, je odstránená, a viac priestoru je k dispozícii na hru. Keď nie je 
dostatok miesta pre bloky na padanie, hra sa končí.</p>
+    <p xml:lang="sl">KBlocks je klasična igra padajočih kock. V igri 
združujete padajoče kocke v vodoravne vrste brez vmesnih praznin. Ko se vrsta 
odstrani, se sprosti tudi igralna površina. Igre je konec, ko zmanjka prostora 
za padajoče kocke.</p>
+    <p xml:lang="sr">К‑блокови је класична игра падајућих блокова. Идеја је да 
се падајући блокови слажу у водоравне редове без процепа. Ред се уклања када се 
доврши, остављајући више простора у зони игре. Када више нема простора за нове 
блокове, партија је готова.</p>
+    <p xml:lang="sr-Latn">K‑blokovi je klasična igra padajućih blokova. Ideja 
je da se padajući blokovi slažu u vodoravne redove bez procepa. Red se uklanja 
kada se dovrši, ostavljajući više prostora u zoni igre. Kada više nema prostora 
za nove blokove, partija je gotova.</p>
+    <p xml:lang="sr-ijekavian">К‑блокови је класична игра падајућих блокова. 
Идеја је да се падајући блокови слажу у водоравне редове без процепа. Ред се 
уклања када се доврши, остављајући више простора у зони игре. Када више нема 
простора за нове блокове, партија је готова.</p>
+    <p xml:lang="sr-ijekavianlatin">K‑blokovi je klasična igra padajućih 
blokova. Ideja je da se padajući blokovi slažu u vodoravne redove bez procepa. 
Red se uklanja kada se dovrši, ostavljajući više prostora u zoni igre. Kada 
više nema prostora za nove blokove, partija je gotova.</p>
+    <p xml:lang="sv">Kblock är det klassiska spelet med fallande block. Idén 
är att lägga de fallande blocken för att skapa horisontella rader utan några 
mellanrum. När en rad är färdig tas den bort, och mer utrymme blir tillgängligt 
i spelområdet. När det inte finns tillräckligt med utrymme för block att falla 
är spelet slut.</p>
+    <p xml:lang="tr">KBlocks klasik bir düşen bloklar oyunudur. Buradaki fikir 
düşen blokları yatay satırlar oluşturacak şekilde dizmektir. Bir satır 
tamamlandığında o kaldırılır ve oyun için daha fazla alan açılmış olur. Düşecek 
bloklar için yer kalmadığında oyun bitmiş olur.</p>
+    <p xml:lang="uk">KBlocks — це класична гра з блоками, що падають. Мета гри 
полягає у тому, щоб розташовувати блоки так, щоб вони повністю заповнювали 
горизонтальні ряди. Після повного заповнення ряду його буде вилучено, і у 
області для гри з’явиться більше простору. Якщо для падіння наступного блоку 
місця вже не буде, гру буде завершено.</p>
+    <p xml:lang="x-test">xxKBlocks is the classic falling blocks game. The 
idea is to stack the falling blocks to create horizontal lines without any 
gaps. When a line is completed it is removed, and more space is available in 
the play area. When there is not enough space for blocks to fall, the game is 
over.xx</p>
+    <p xml:lang="zh-TW">KBlocks 是類似俄羅斯方塊的遊戲。俄羅斯方塊的玩法還需要多做介紹嗎?</p>
+  </description>
+  <url 
type="bugtracker">https://bugs.kde.org/enter_bug.cgi?format=guided&amp;product=kblocks</url>
+  <url 
type="help">http://docs.kde.org/stable/en/kdegames/kblocks/index.html</url>
+  <screenshots>
+    <screenshot type="default">
+      <image>http://kde.org/images/screenshots/kblocks.png</image>
+    </screenshot>
+  </screenshots>
+  <project_group>KDE</project_group>
+</component>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kblocks-15.12.3/sounds/CMakeLists.txt 
new/kblocks-16.04.1/sounds/CMakeLists.txt
--- old/kblocks-15.12.3/sounds/CMakeLists.txt   1970-01-01 01:00:00.000000000 
+0100
+++ new/kblocks-16.04.1/sounds/CMakeLists.txt   2016-03-28 14:16:41.000000000 
+0200
@@ -0,0 +1,3 @@
+
+install( FILES block-fall.ogg block-move.ogg block-remove.ogg DESTINATION  
${KDE_INSTALL_DATADIR}/kblocks/sounds )
+


Reply via email to