Hello community,

here is the log from the commit of package kajongg for openSUSE:Factory checked 
in at 2013-09-09 11:09:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kajongg (Old)
 and      /work/SRC/openSUSE:Factory/.kajongg.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kajongg"

Changes:
--------
--- /work/SRC/openSUSE:Factory/kajongg/kajongg.changes  2013-08-16 
13:44:16.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.kajongg.new/kajongg.changes     2013-09-09 
11:09:58.000000000 +0200
@@ -1,0 +2,7 @@
+Sun Sep  1 10:27:13 UTC 2013 - tittiatc...@gmail.com
+
+- Update to 4.11.1
+   * KDE 4.11.1 bugfix release
+   * See http://www.kde.org/announcements/announce-4.11.1.php
+
+-------------------------------------------------------------------

Old:
----
  kajongg-4.11.0.tar.xz

New:
----
  kajongg-4.11.1.tar.xz

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

Other differences:
------------------
++++++ kajongg.spec ++++++
--- /var/tmp/diff_new_pack.fVy4Lq/_old  2013-09-09 11:09:58.000000000 +0200
+++ /var/tmp/diff_new_pack.fVy4Lq/_new  2013-09-09 11:09:58.000000000 +0200
@@ -25,7 +25,7 @@
 License:        GPL-2.0+
 Group:          Amusements/Games/Board/Puzzle
 Url:            http://www.kde.org
-Version:        4.11.0
+Version:        4.11.1
 Release:        0
 Source0:        kajongg-%{version}.tar.xz
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build

++++++ kajongg-4.11.0.tar.xz -> kajongg-4.11.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/doc/index.docbook 
new/kajongg-4.11.1/doc/index.docbook
--- old/kajongg-4.11.0/doc/index.docbook        2013-07-10 01:21:29.000000000 
+0200
+++ new/kajongg-4.11.1/doc/index.docbook        2013-08-28 19:10:33.000000000 
+0200
@@ -3,7 +3,7 @@
 <!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" 
"dtd/kdex.dtd" [
   <!ENTITY kajongg  "<application>Kajongg</application>">
   <!ENTITY kappname "&kajongg;">
-  <!ENTITY kappversion "4.9.0"><!--Application version. Use this variable 
everywhere it is needed.-->
+  <!ENTITY kappversion "4.11.0"><!--Application version. Use this variable 
everywhere it is needed.-->
   <!ENTITY package "kdegames">  <!-- do not change this! -->
   <!ENTITY % English "INCLUDE" > <!-- change language only here -->
   <!ENTITY % addindex "IGNORE"> <!-- do not change this! -->
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/setup.py new/kajongg-4.11.1/setup.py
--- old/kajongg-4.11.0/setup.py 2013-07-10 01:21:29.000000000 +0200
+++ new/kajongg-4.11.1/setup.py 2013-08-28 19:10:33.000000000 +0200
@@ -26,7 +26,7 @@
 FULLAUTHOR = "Wolfgang Rohdewald <wolfg...@rohdewald.de>"
 LICENSE = 'GNU General Public License v2'
 URL = "http://www.kde.org/applications/games/kajongg/";
-VERSION = "4.9.0"
+VERSION = "4.11.0"
 
 # =======================================================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/board.py 
new/kajongg-4.11.1/src/board.py
--- old/kajongg-4.11.0/src/board.py     2013-07-24 00:21:40.000000000 +0200
+++ new/kajongg-4.11.1/src/board.py     2013-08-28 19:10:33.000000000 +0200
@@ -606,6 +606,7 @@
         self.lastReceived = tiles[0]
         for myTile in tiles:
             self.__placeAvailable(myTile)
+            myTile.focusable = True
         senderHand.remove(tile, meld)
         (senderHand if senderHand.tiles else self).hasFocus = True
         self._noPen()
@@ -918,6 +919,20 @@
         self.focusRect.setZValue(ZValues.marker)
         self.focusRect.hide()
 
+    def focusInEvent(self, event):
+        """work around a qt bug. See 
https://bugreports.qt-project.org/browse/QTBUG-32890
+        This can be reproduced as follows:
+           ./kajongg.py --game=whatever --autoplay=SomeRuleset
+               such that the human player is the first one to discard a tile.
+           wait until the main screen has been built
+           click with the mouse into the middle of that window
+           press left arrow key
+           this will violate the assertion in GraphicsTileItem.keyPressEvent 
"""
+        prev = self.focusItem()
+        QGraphicsScene.focusInEvent(self, event)
+        if prev and bool(prev.flags() & QGraphicsItem.ItemIsFocusable) and 
prev != self.focusItem():
+            self.setFocusItem(prev)
+
     def __focusRectVisible(self):
         """should we show it?"""
         game = InternalParameters.field.game
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/common.py 
new/kajongg-4.11.1/src/common.py
--- old/kajongg-4.11.0/src/common.py    2013-07-10 01:21:29.000000000 +0200
+++ new/kajongg-4.11.1/src/common.py    2013-08-28 19:10:33.000000000 +0200
@@ -98,7 +98,7 @@
 class InternalParameters:
     """they are never saved in a config file. Some of them
     can be defined on the command line."""
-    version = '4.9.0'
+    version = '4.11.0'
     scaleScene = True
     reactor = None
     game = None # will only be set by command line --game
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/deferredutil.py 
new/kajongg-4.11.1/src/deferredutil.py
--- old/kajongg-4.11.0/src/deferredutil.py      2013-08-06 14:48:10.000000000 
+0200
+++ new/kajongg-4.11.1/src/deferredutil.py      2013-08-29 20:37:03.000000000 
+0200
@@ -139,7 +139,8 @@
         """we do not want this request anymore"""
         self.requests.remove(request)
         self.outstanding -= 1
-        self.callbackIfDone()
+        if self.outstanding == 0:
+            self.callbackIfDone()
         if Debug.deferredBlock:
             logDebug('removed request %s from DBlock %s' % (request, 
str(self)))
 
@@ -175,6 +176,7 @@
 
     def callbackIfDone(self):
         """if we are done, convert received answers to Answer objects and 
callback"""
+        assert not self.completed, 'DeferredBlock %s already called callback 
%s' % (self, self.callbackMethod)
         if self.outstanding <= 0 and self.callbackMethod:
             if not all(x.answered for x in self.requests):
                 self.logBug('Block %s: Some requests are unanswered' % 
str(self))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/game.py 
new/kajongg-4.11.1/src/game.py
--- old/kajongg-4.11.0/src/game.py      2013-07-10 01:21:29.000000000 +0200
+++ new/kajongg-4.11.1/src/game.py      2013-08-28 19:10:33.000000000 +0200
@@ -165,8 +165,11 @@
         def fset(self, value):
             # pylint: disable=W0212
             if self.__winner != value:
+                if self.__winner:
+                    self.__winner.invalidateHand()
                 self.__winner = value
-                value.invalidateHand()
+                if value:
+                    value.invalidateHand()
         return property(**locals())
 
     def addCsvTag(self, tag, forAllPlayers=False):
@@ -671,6 +674,7 @@
         else:
             game.eastMJCount = 0
         game.handctr += 1
+        game.notRotated += 1
         game.maybeRotateWinds()
         game.sortPlayers()
         game.wall.decorate()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/hand.py 
new/kajongg-4.11.1/src/hand.py
--- old/kajongg-4.11.0/src/hand.py      2013-07-10 01:21:29.000000000 +0200
+++ new/kajongg-4.11.1/src/hand.py      2013-08-28 19:10:33.000000000 +0200
@@ -132,9 +132,9 @@
         self.suits = set(x[0].lower() for x in self.tileNames)
         self.lenOffset = self.__computeLenOffset(tileString)
         self.dragonMelds, self.windMelds = 
self.__computeDragonWindMelds(tileString)
-        self.inHand = []
         self.__separateMelds(tileString)
         self.hiddenMelds = sorted(self.hiddenMelds, key=meldKey)
+        self.inHand = sum((x.pairs for x in self.hiddenMelds), [])
         self.sortedMeldsContent = meldsContent(self.melds)
         if self.bonusMelds:
             self.sortedMeldsContent += ' ' + meldsContent(self.bonusMelds)
@@ -628,7 +628,6 @@
                 self.declaredMelds.append(meld)
         if rest:
             rest = sorted([rest[x:x+2] for x in range(0, len(rest), 2)])
-            self.inHand = rest
             self.__split(rest)
         self.melds = sorted(self.melds, key=meldKey)
         for meld in self.melds:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/handboard.py 
new/kajongg-4.11.1/src/handboard.py
--- old/kajongg-4.11.0/src/handboard.py 2013-07-10 01:21:29.000000000 +0200
+++ new/kajongg-4.11.1/src/handboard.py 2013-08-28 19:10:33.000000000 +0200
@@ -23,7 +23,7 @@
 from PyQt4.QtGui import QMenu, QCursor
 from PyQt4.QtGui import QGraphicsSimpleTextItem
 from tile import Tile, swapTitle
-from meld import Meld, EXPOSED, CONCEALED, REST, tileKey, elementKey, 
shortcuttedMeldName
+from meld import Meld, EXPOSED, CONCEALED, REST, tileKey, elementKey, meldKey, 
shortcuttedMeldName
 from hand import Hand
 from board import Board, rotateCenter
 
@@ -307,7 +307,7 @@
             newLowerMelds = list(self.player.concealedMelds)
         else:
             if self.player.concealedMelds:
-                newLowerMelds = sorted(self.player.concealedMelds)
+                newLowerMelds = sorted(self.player.concealedMelds, key=meldKey)
             else:
                 tileStr = 'R' + ''.join(self.player.concealedTileNames)
                 handStr = ' '.join([tileStr, self.player.mjString()])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/humanclient.py 
new/kajongg-4.11.1/src/humanclient.py
--- old/kajongg-4.11.0/src/humanclient.py       2013-08-06 14:48:10.000000000 
+0200
+++ new/kajongg-4.11.1/src/humanclient.py       2013-08-28 19:10:33.000000000 
+0200
@@ -755,20 +755,25 @@
         except OSError, exc:
             logException(exc)
 
+    def __updateTableList(self):
+        """if it exists"""
+        if self.tableList:
+            self.tableList.loadTables(self.tables)
+
     def remote_tablesChanged(self, tables):
         """update table list"""
         Client.remote_tablesChanged(self, tables)
-        self.tableList.loadTables(self.tables)
+        self.__updateTableList()
 
     def remote_tableClosed(self, tableid, msg):
         """update table list"""
         Client.remote_tableClosed(self, tableid, msg)
-        self.tableList.loadTables(self.tables)
+        self.__updateTableList()
 
     def remote_newTables(self, tables):
         """update table list"""
         Client.remote_newTables(self, tables)
-        self.tableList.loadTables(self.tables)
+        self.__updateTableList()
 
     def remote_replaceTable(self, table):
         """update table list"""
@@ -785,7 +790,7 @@
                         if oldTable.isOnline(name) and not 
newClientTable.isOnline(name):
                             Sorry(m18n('Player %1 has left the table', name), 
self.logout)
         Client.remote_replaceTable(self, table)
-        self.tableList.loadTables(self.tables)
+        self.__updateTableList()
 
     def remote_chat(self, data):
         """others chat to me"""
@@ -934,10 +939,8 @@
 
     def remote_gameOver(self, tableid, message, *args):
         """the game is over"""
-        assert self.table and self.table.tableid == tableid
-        if self.table and self.table.tableid == tableid:
-            if not self.game.autoPlay:
-                logInfo(m18n(message, *args), showDialog=True)
+        def yes(dummy):
+            """now that the user clicked the 'game over' prompt away, clean 
up"""
             if self.game:
                 self.game.rotateWinds()
                 if InternalParameters.csv:
@@ -955,6 +958,15 @@
                     InternalParameters.field.quit()
                 else:
                     self.game.close().addCallback(Client.quitProgram)
+        assert self.table and self.table.tableid == tableid
+        if self.table and self.table.tableid == tableid:
+            if InternalParameters.field:
+                # update the balances in the status bar:
+                InternalParameters.field.updateGUI()
+            if self.game.autoPlay:
+                yes(None)
+            else:
+                logInfo(m18n(message, *args), showDialog=True).addCallback(yes)
 
     def remote_serverDisconnects(self, dummyResult=None):
         """we logged out or or lost connection to the server.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/kde.py 
new/kajongg-4.11.1/src/kde.py
--- old/kajongg-4.11.0/src/kde.py       2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.11.1/src/kde.py       2013-08-28 19:10:33.000000000 +0200
@@ -35,7 +35,7 @@
     KApplication, KToggleFullScreenAction, KXmlGuiWindow, \
     KConfigDialog, KDialog
 
-from twisted.internet.defer import Deferred
+from twisted.internet.defer import Deferred, succeed
 
 from common import InternalParameters
 
@@ -113,3 +113,7 @@
     def accepted(self):
         """or rejected"""
         self.callback(True)
+
+def NoPrompt(dummyMsg):
+    """we just want to be able to add callbacks even if non-interactive"""
+    return succeed(None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/player.py 
new/kajongg-4.11.1/src/player.py
--- old/kajongg-4.11.0/src/player.py    2013-07-24 00:21:40.000000000 +0200
+++ new/kajongg-4.11.1/src/player.py    2013-08-28 19:10:33.000000000 +0200
@@ -35,6 +35,7 @@
 
     allNames = {}
     allIds = {}
+    humanNames = {}
 
     def __init__(self, players=None):
         list.__init__(self)
@@ -78,6 +79,8 @@
         for nameid, name in query.records:
             Players.allIds[name] = nameid
             Players.allNames[nameid] = name
+            if not name.startswith('Robot'):
+                Players.humanNames[nameid] = name
 
     @staticmethod
     def createIfUnknown(name):
@@ -91,15 +94,6 @@
                 Players.load()
         assert name in Players.allNames.values(), '%s not in %s' % (name, 
Players.allNames.values())
 
-    @staticmethod
-    def localPlayers():
-        """return a list of locally defined players like we need them
-        for a scoring game"""
-        return list(x[0] for x in Query('select name, id from player where'
-                ' not name like "ROBOT %" and not name like "Robot %"'
-                ' and not exists(select 1 from'
-                ' server where server.lastname=player.name)').records)
-
     def translatePlayerNames(self, names):
         """for a list of names, translates those names which are english
         player names into the local language"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/playfield.py 
new/kajongg-4.11.1/src/playfield.py
--- old/kajongg-4.11.0/src/playfield.py 2013-07-24 00:21:40.000000000 +0200
+++ new/kajongg-4.11.1/src/playfield.py 2013-08-28 19:10:33.000000000 +0200
@@ -23,7 +23,7 @@
 from util import logError, m18n, m18nc, isAlive, logWarning
 from common import WINDS, LIGHTSOURCES, InternalParameters, Preferences
 import cgitb, tempfile, webbrowser
-from twisted.internet.defer import succeed, fail
+from twisted.internet.defer import succeed
 from twisted.python.failure import Failure
 
 class MyHook(cgitb.Hook):
@@ -220,14 +220,13 @@
         self.setWindowTitle(m18n('Select four players') + ' - Kajongg')
         self.names = None
         self.nameWidgets = []
-        self.allNames = Players.localPlayers()
         for idx, wind in enumerate(WINDS):
             cbName = QComboBox()
             cbName.manualSelect = False
             # increase width, we want to see the full window title
             cbName.setMinimumWidth(350) # is this good for all platforms?
             # add all player names belonging to no host
-            cbName.addItems(self.allNames)
+            cbName.addItems(Players.humanNames.values())
             self.grid.addWidget(cbName, idx+1, 1)
             self.nameWidgets.append(cbName)
             self.grid.addWidget(WindLabel(wind), idx+1, 0)
@@ -237,7 +236,7 @@
         if len(query.records):
             for pidx, playerId in enumerate(query.records[0]):
                 try:
-                    playerName = Players.allNames[playerId]
+                    playerName = Players.humanNames[playerId]
                     cbName = self.nameWidgets[pidx]
                     playerIdx = cbName.findText(playerName)
                     if playerIdx >= 0:
@@ -258,7 +257,7 @@
             changedCombo = self.nameWidgets[0]
         changedCombo.manualSelect = True
         usedNames = set([unicode(x.currentText()) for x in self.nameWidgets if 
x.manualSelect])
-        allNames = set(self.allNames)
+        allNames = set(Players.humanNames.values())
         unusedNames = allNames - usedNames
         for combo in self.nameWidgets:
             combo.blockSignals(True)
@@ -617,7 +616,7 @@
                 return self.abortGame()
             else:
                 self.actionAutoPlay.setChecked(demoMode)
-                return fail(Exception('no abort'))
+                return succeed(None) # just continue
         if not self.game:
             self.startingGame = False
             return succeed(None)
@@ -784,7 +783,8 @@
 
     def selectScoringGame(self):
         """show all games, select an existing game or create a new game"""
-        if len(Players.localPlayers()) < 4:
+        Players.load()
+        if len(Players.humanNames) < 4:
             logWarning(m18n('Please define four players in 
<interface>Settings|Players</interface>'))
             return False
         gameSelector = Games(self)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/predefined.py 
new/kajongg-4.11.1/src/predefined.py
--- old/kajongg-4.11.0/src/predefined.py        2013-07-10 01:21:30.000000000 
+0200
+++ new/kajongg-4.11.1/src/predefined.py        2013-08-29 20:37:03.000000000 
+0200
@@ -75,7 +75,7 @@
                 description=m18n('South, West or North says Mah Jong with the 
first tile discarded by East')))
         # the next rule is never proposed, the program applies it when 
appropriate. Do not change the XEAST9X.
         # XEAST9X is meant to never match a hand, and the program will 
identify this rule by searching for XEAST9X
-        self.winnerRules.add(Rule('East won nine times in a row', 
r'XEAST9X||Oabsolute', limits=1,
+        self.winnerRules.add(Rule('East won nine times in a row', r'XEAST9X', 
limits=1,
                 description=m18n('If that happens, East gets a limit score and 
the winds rotate')))
     def addPenaltyRules(self):
         """as the name says"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/rulecode.py 
new/kajongg-4.11.1/src/rulecode.py
--- old/kajongg-4.11.0/src/rulecode.py  2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.11.1/src/rulecode.py  2013-08-29 20:37:03.000000000 +0200
@@ -21,7 +21,7 @@
 Read the user manual for a description of the interface to this scoring engine
 """
 
-from meld import Meld, CONCEALED, EXPOSED, CLAIMEDKONG, REST
+from meld import Meld, CONCEALED, EXPOSED, CLAIMEDKONG, REST, elementKey
 from common import elements, IntDict
 from message import Message
 
@@ -345,7 +345,7 @@
                 if len(suits) <2:
                     return melds, pairs
                 pair = (suits.pop() + value, suits.pop() + value)
-                melds.append(Meld(pair))
+                melds.append(Meld(sorted(pair, key=elementKey)))
                 pairs.remove(pair[0])
                 pairs.remove(pair[1])
         return melds, pairs
@@ -536,7 +536,7 @@
             return False
         tiles = list(x.lower() for x in hand.tileNames)
         pairCount = kongCount = 0
-        for tile in elements.honors:
+        for tile in elements.majors:
             count = tiles.count(tile)
             if count == 2:
                 pairCount += 1
@@ -550,7 +550,7 @@
     @staticmethod
     def rearrange(dummyHand, pairs):
         melds = []
-        for pair in set(pairs) & elements.hONORS:
+        for pair in set(pairs) & elements.mAJORS:
             while pairs.count(pair) >= 2:
                 melds.append(Meld(pair * 2))
                 pairs.remove(pair)
@@ -762,8 +762,7 @@
             if pairs + isolated > 2:
                 return set()
         if maxChows == 0:
-            resultSet = set(result)
-            return result
+            return set(result)
         melds = []
         for color in hand.suits & set('sbc'):
             values = sorted(int(x[1]) for x in result if x[0] == color)
@@ -845,13 +844,7 @@
                         result.append(color + str(value - 1))
                     if value < 9:
                         result.append(color + str(value + 1))
-        resultSet = set(result)
-        if len(resultSet) > 2:
-            pairTiles = list(x for x in resultSet if inHand.count(x) == 2)
-            if len(pairTiles) == 2:
-                # print('%s has two pairs:%s' % (hand.inHand, pairTiles))
-                return set(pairTiles)
-        return resultSet
+        return set(result)
 
     @staticmethod
     def shouldTry(dummyHand):
@@ -1127,6 +1120,14 @@
 class LongHand(Function):
     @staticmethod
     def appliesToHand(hand):
+        if hand.player:
+            game = hand.player.game
+            if game:
+                if not game.isScoringGame():
+                    # never apply to a real game, the program makes sure that 
we never have
+                    # a long hand. Otherwise we would have to check if the 
player is about
+                    # to disard a tile
+                    return False
         return (not hand.won and hand.lenOffset > 0) or hand.lenOffset > 1
 
 class FalseDiscardForMJ(Function):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/scoring.py 
new/kajongg-4.11.1/src/scoring.py
--- old/kajongg-4.11.0/src/scoring.py   2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.11.1/src/scoring.py   2013-08-28 19:10:33.000000000 +0200
@@ -537,10 +537,10 @@
             for player in self.game.players:
                 pLines = []
                 if player.hand and player.hand.tileNames:
-                    total = player.newHandContent.total()
+                    total = player.hand.total()
                     if total:
                         pLines = ['%s: %s' % (player.localName, total)]
-                        for line in player.newHandContent.explain():
+                        for line in player.hand.explain():
                             pLines.append('- ' + line)
                 elif player.handTotal:
                     pLines.append(m18n('Manual score for %1: %2 points', 
player.localName, player.handTotal))
@@ -869,6 +869,7 @@
                             box.setChecked(True)
         self.prevLastTile = newLastTile
         self.fillLastMeldCombo()
+        self.slotInputChanged()
 
     def computeLastTile(self):
         """returns the currently selected last tile"""
@@ -1146,6 +1147,8 @@
 
     def slotInputChanged(self):
         """some input fields changed: update"""
+        for player in self.game.players:
+            player.invalidateHand()
         self.updateManualRules()
         self.computeScores()
         self.validate()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/scoringtest.py 
new/kajongg-4.11.1/src/scoringtest.py
--- old/kajongg-4.11.0/src/scoringtest.py       2013-07-10 01:21:30.000000000 
+0200
+++ new/kajongg-4.11.1/src/scoringtest.py       2013-08-28 19:10:33.000000000 
+0200
@@ -323,6 +323,7 @@
                         ('RS2B2S3B3S4B4S5B5S6B6S7B7S9 Mwn LB7', ('s9', 'b9')),
                         ('RDbDgDrWeWsWwWnWnB1B9C1S1S9 mwe LWn', ('c9', 'c9')),
                         ('RDbDgDrWsWwWnWnB1B9C1S1S9C9 mwe LDg', ('we', 'we')),
+                        ('c3c3c3 RDbDbDbS5S6S7S7S8B2B2 mwe LS8', ('s6s9', '')),
                         ('RC4C4C5C6C5C7C8 dgdgdg s6s6s6 mnn', ('c4c5', 
'c4c5')),
                         ('RS1S4C5C6C5C7C8 dgdgdg s6s6s6 mnn', ('', '')),
                         ('RB1B2B3B4B5B5B6B6B7B7B8B8B8 mwe LB1', 
('b1b3b4b6b7b9', '')),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/tile.py 
new/kajongg-4.11.1/src/tile.py
--- old/kajongg-4.11.0/src/tile.py      2013-07-24 00:21:40.000000000 +0200
+++ new/kajongg-4.11.1/src/tile.py      2013-08-28 19:10:33.000000000 +0200
@@ -113,12 +113,6 @@
         """define the part of the tile we want to see"""
         return QRectF(QPointF(), self.tileset.tileSize if self.showShadows 
else self.tileset.faceSize)
 
-    def setFocus(self, reason=Qt.OtherFocusReason):
-        """any tile that gets focus should also be focusItem for the scene"""
-        assert self.tile.board
-        QGraphicsItem.setFocus(self, reason)
-        self.scene().setFocusItem(self)
-
     @property
     def showShadows(self):
         """do we need to show shadows?"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/uiwall.py 
new/kajongg-4.11.1/src/uiwall.py
--- old/kajongg-4.11.0/src/uiwall.py    2013-07-24 00:21:40.000000000 +0200
+++ new/kajongg-4.11.1/src/uiwall.py    2013-08-28 19:10:33.000000000 +0200
@@ -112,6 +112,11 @@
             side.nameLabel.hide()
             side.hide()
             del side
+        for tile in self.tiles:
+            if tile.graphics:
+                tile.graphics.hide()
+            del tile
+        self.tiles = []
         InternalParameters.field.centralScene.removeItem(self.__square)
 
     def __shuffleTiles(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.11.0/src/util.py 
new/kajongg-4.11.1/src/util.py
--- old/kajongg-4.11.0/src/util.py      2013-07-24 00:21:40.000000000 +0200
+++ new/kajongg-4.11.1/src/util.py      2013-08-28 19:10:33.000000000 +0200
@@ -44,7 +44,7 @@
 from common import InternalParameters
 
 if InternalParameters.haveKDE:
-    from kde import i18n, i18nc, Sorry, Information
+    from kde import i18n, i18nc, Sorry, Information, NoPrompt
 else:
     # a server might not have KDE4
     def i18n(englishIn, *args):
@@ -191,17 +191,18 @@
                 __logUnicodeMessage(prio, '  ' + line.strip())
     if InternalParameters.hasGUI and showDialog:
         if prio == logging.INFO:
-            Information(msg)
+            return Information(msg)
         else:
-            Sorry(msg)
+            return Sorry(msg)
+    return NoPrompt(msg)
 
 def logInfo(msg, showDialog=False, withGamePrefix=True):
     """log an info message"""
-    logMessage(msg, logging.INFO, showDialog, withGamePrefix=withGamePrefix)
+    return logMessage(msg, logging.INFO, showDialog, 
withGamePrefix=withGamePrefix)
 
 def logError(msg, withGamePrefix=True):
     """log an error message"""
-    logMessage(msg, logging.ERROR, True, showStack=True, 
withGamePrefix=withGamePrefix)
+    return logMessage(msg, logging.ERROR, True, showStack=True, 
withGamePrefix=withGamePrefix)
 
 def logDebug(msg, showStack=False, withGamePrefix=True, btIndent=None):
     """log this message and show it on stdout
@@ -209,11 +210,11 @@
     if btIndent:
         depth = traceback.extract_stack()
         msg = ' ' * (len(depth) - btIndent) + msg
-    logMessage(msg, logging.DEBUG, False, showStack=showStack, 
withGamePrefix=withGamePrefix)
+    return logMessage(msg, logging.DEBUG, False, showStack=showStack, 
withGamePrefix=withGamePrefix)
 
 def logWarning(msg, withGamePrefix=True):
     """log this message and show it on stdout"""
-    logMessage(msg, logging.WARNING, True, withGamePrefix=withGamePrefix)
+    return logMessage(msg, logging.WARNING, True, 
withGamePrefix=withGamePrefix)
 
 def logException(exception, withGamePrefix=True):
     """logs error message and re-raises exception"""

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to