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