Tue, 31 May 2011 11:25:52 +0200
Refined the Mercurial extensions code a little bit to deal with torn of menus in a better way.
--- a/APIs/Python3/eric5.api Tue May 31 10:31:06 2011 +0200 +++ b/APIs/Python3/eric5.api Tue May 31 11:25:52 2011 +0200 @@ -3605,6 +3605,7 @@ eric5.Plugins.VcsPlugins.vcsMercurial.TransplantExtension.transplant.Transplant.hgTransplantContinue?4(path) eric5.Plugins.VcsPlugins.vcsMercurial.TransplantExtension.transplant.Transplant?1(vcs) eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg._createStatusMonitorThread?5(interval, project) +eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.activeExtensionsChanged?7 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.clearStatusCache?4() eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.committed?7 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.getExtensionObject?4(extensionName)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html Tue May 31 10:31:06 2011 +0200 +++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html Tue May 31 11:25:52 2011 +0200 @@ -46,7 +46,11 @@ Class implementing the version control systems interface to Mercurial. </p><h4>Signals</h4> <dl> -<dt>committed()</dt> +<dt>activeExtensionsChanged()</dt> +<dd> +emitted when the list of active extensions + has changed +</dd><dt>committed()</dt> <dd> emitted after the commit action has completed </dd>
--- a/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py Tue May 31 10:31:06 2011 +0200 +++ b/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py Tue May 31 11:25:52 2011 +0200 @@ -892,13 +892,15 @@ bisectMenu.addAction(self.hgBisectResetAct) self.subMenus.append(bisectMenu) - extensionsMenu = QMenu(self.trUtf8("Extensions"), menu) - extensionsMenu.aboutToShow.connect(self.__showExtensionMenu) + self.__extensionsMenu = QMenu(self.trUtf8("Extensions"), menu) + self.__extensionsMenu.setTearOffEnabled(True) + self.__extensionsMenu.aboutToShow.connect(self.__showExtensionMenu) self.extensionMenus = {} for extensionMenuTitle in sorted(self.__extensionMenuTitles): extensionName = self.__extensionMenuTitles[extensionMenuTitle] - self.extensionMenus[extensionName] = extensionsMenu.addMenu( - self.__extensions[extensionName].initMenu(extensionsMenu)) + self.extensionMenus[extensionName] = self.__extensionsMenu.addMenu( + self.__extensions[extensionName].initMenu(self.__extensionsMenu)) + self.vcs.activeExtensionsChanged.connect(self.__showExtensionMenu) act = menu.addAction( UI.PixmapCache.getIcon( @@ -919,7 +921,7 @@ menu.addSeparator() menu.addMenu(bundleMenu) menu.addSeparator() - menu.addMenu(extensionsMenu) + menu.addMenu(self.__extensionsMenu) menu.addSeparator() menu.addAction(self.vcsNewAct) menu.addAction(self.vcsExportAct) @@ -968,6 +970,8 @@ """ Public method to perform shutdown actions. """ + self.vcs.activeExtensionsChanged.disconnect(self.__showExtensionMenu) + # close torn off sub menus for menu in self.subMenus: if menu.isTearOffMenuVisible(): @@ -978,6 +982,9 @@ menu = self.extensionMenus[extensionName].menu() if menu.isTearOffMenuVisible(): menu.hideTearOffMenu() + + if self.__extensionsMenu.isTearOffMenuVisible(): + self.__extensionsMenu.hideTearOffMenu() def __showExtensionMenu(self): """ @@ -986,6 +993,9 @@ for extensionName in self.extensionMenus: self.extensionMenus[extensionName].setEnabled( self.vcs.isExtensionActive(extensionName)) + if not self.extensionMenus[extensionName].isEnabled() and \ + self.extensionMenus[extensionName].menu().isTearOffMenuVisible(): + self.extensionMenus[extensionName].menu().hideTearOffMenu() def __hgExtendedDiff(self): """
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py Tue May 31 10:31:06 2011 +0200 +++ b/Plugins/VcsPlugins/vcsMercurial/hg.py Tue May 31 11:25:52 2011 +0200 @@ -64,8 +64,11 @@ Class implementing the version control systems interface to Mercurial. @signal committed() emitted after the commit action has completed + @signal activeExtensionsChanged() emitted when the list of active extensions + has changed """ committed = pyqtSignal() + activeExtensionsChanged = pyqtSignal() def __init__(self, plugin, parent=None, name=None): """ @@ -2253,6 +2256,7 @@ """ Private method to get the active extensions from Mercurial. """ + activeExtensions = sorted(self.__activeExtensions) self.__activeExtensions = [] process = QProcess() @@ -2273,6 +2277,9 @@ if self.versionStr >= "1.8": if "bookmarks" not in self.__activeExtensions: self.__activeExtensions.append("bookmarks") + + if activeExtensions != sorted(self.__activeExtensions): + self.activeExtensionsChanged.emit() def isExtensionActive(self, extensionName): """