--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py Sun Feb 05 13:19:34 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py Sun Feb 05 14:16:53 2017 +0100 @@ -79,8 +79,6 @@ self.diffSplitter.setStretchFactor(0, 1) self.diffSplitter.setStretchFactor(1, 2) - self.__position = QPoint() - if mode == "log": self.setWindowTitle(self.tr("Mercurial Log")) elif mode == "incoming": @@ -368,7 +366,15 @@ QTimer.singleShot(2000, self.process.kill) self.process.waitForFinished(3000) - self.__position = self.pos() + self.vcs.getPlugin().setPreferences( + "LogBrowserGeometry", self.saveGeometry()) + self.vcs.getPlugin().setPreferences( + "LogBrowserSplitterStates", [ + self.mainSplitter.saveState(), + self.detailsSplitter.saveState(), + self.diffSplitter.saveState(), + ] + ) e.accept() @@ -376,11 +382,34 @@ """ Public slot to show the dialog. """ - if not self.__position.isNull(): - self.move(self.__position) + self.__reloadGeometry() + self.__restoreSplitterStates() self.__resetUI() super(HgLogBrowserDialog, self).show() + + def __reloadGeometry(self): + """ + Private method to restore the geometry. + """ + geom = self.vcs.getPlugin().getPreferences("LogBrowserGeometry") + if geom.isEmpty(): + s = QSize(1000, 800) + self.resize(s) + else: + self.restoreGeometry(geom) + + def __restoreSplitterStates(self): + """ + Private method to restore the state of the various splitters. + """ + states = self.vcs.getPlugin().getPreferences( + "LogBrowserSplitterStates") + if len(states) == 3: + # we have three splitters + self.mainSplitter.restoreState(states[0]) + self.detailsSplitter.restoreState(states[1]) + self.diffSplitter.restoreState(states[2]) def __resetUI(self): """