diff -r 683af9c45c5b -r ec86fc991d28 src/eric7/WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py --- a/src/eric7/WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py Wed Dec 18 17:40:14 2024 +0100 +++ b/src/eric7/WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py Wed Dec 18 18:03:07 2024 +0100 @@ -11,6 +11,7 @@ from PyQt6.QtCore import Qt, pyqtSlot from PyQt6.QtWidgets import QAbstractItemView, QDialog, QTreeWidget, QTreeWidgetItem + try: # Qt 6.8+ from PyQt6.QtWebEngineCore import QWebEnginePermission @@ -178,7 +179,9 @@ # Qt 6.8+ self.clipboardList = QTreeWidget() self.clipboardList.setAlternatingRowColors(True) - self.clipboardList.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) + self.clipboardList.setSelectionMode( + QAbstractItemView.SelectionMode.ExtendedSelection + ) self.clipboardList.setRootIsDecorated(False) self.clipboardList.setItemsExpandable(False) self.clipboardList.setAllColumnsShowFocus(True) @@ -187,12 +190,16 @@ self.clipboardList.headerItem().setText(0, self.tr("Host")) self.clipboardList.headerItem().setText(1, self.tr("Permission")) self.tabWidget.addTab( - self.clipboardList, EricPixmapCache.getIcon("clipboard"), self.tr("Clipboard") + self.clipboardList, + EricPixmapCache.getIcon("clipboard"), + self.tr("Clipboard"), ) self.localFontsList = QTreeWidget() self.localFontsList.setAlternatingRowColors(True) - self.localFontsList.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) + self.localFontsList.setSelectionMode( + QAbstractItemView.SelectionMode.ExtendedSelection + ) self.localFontsList.setRootIsDecorated(False) self.localFontsList.setItemsExpandable(False) self.localFontsList.setAllColumnsShowFocus(True) @@ -201,7 +208,9 @@ self.localFontsList.headerItem().setText(0, self.tr("Host")) self.localFontsList.headerItem().setText(1, self.tr("Permission")) self.tabWidget.addTab( - self.localFontsList, EricPixmapCache.getIcon("font"), self.tr("Local Fonts") + self.localFontsList, + EricPixmapCache.getIcon("font"), + self.tr("Local Fonts"), ) self.setTabOrder(self.tabWidget, self.notifList) @@ -223,67 +232,92 @@ if QtUtilities.qVersionTuple() >= (6, 8, 0): # Qt 6.8+ - self.__permissionStrings = { - QWebEnginePermission.State.Granted: self.tr("Allow"), - QWebEnginePermission.State.Denied: self.tr("Deny"), - QWebEnginePermission.State.Ask: self.tr("Always Ask"), - QWebEnginePermission.State.Invalid: self.tr("Invalid"), - } - - self.__permissionsLists = { - QWebEnginePermission.PermissionType.Geolocation: self.geoList, - QWebEnginePermission.PermissionType.MediaAudioCapture: self.micList, - QWebEnginePermission.PermissionType.MediaVideoCapture: self.camList, - QWebEnginePermission.PermissionType.MediaAudioVideoCapture: self.micCamList, - QWebEnginePermission.PermissionType.MouseLock: self.mouseLockList, - QWebEnginePermission.PermissionType.DesktopVideoCapture: self.deskVidList, - QWebEnginePermission.PermissionType.DesktopAudioVideoCapture: self.deskAudVidList, - QWebEnginePermission.PermissionType.Notifications: self.notifList, - QWebEnginePermission.PermissionType.ClipboardReadWrite: self.clipboardList, - QWebEnginePermission.PermissionType.LocalFontsAccess: self.localFontsList, - } - - for permission in featurePermissions: - with contextlib.suppress(KeyError): - permissionsList = self.__permissionsLists[permission.permissionType()] - itm = QTreeWidgetItem( - permissionsList, [ - permission.origin().toString(), - self.__permissionStrings[permission.state()], - ] - ) - itm.setData(0, Qt.ItemDataRole.UserRole, permission) + self.__initializePermissionsList_qt68(featurePermissions) else: # Qt <6.8 - self.__permissionStrings = { - QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: self.tr("Allow"), - QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: self.tr("Deny"), - } - - self.__permissionsLists = { - QWebEnginePage.Feature.Geolocation: self.geoList, - QWebEnginePage.Feature.MediaAudioCapture: self.micList, - QWebEnginePage.Feature.MediaVideoCapture: self.camList, - QWebEnginePage.Feature.MediaAudioVideoCapture: self.micCamList, - QWebEnginePage.Feature.MouseLock: self.mouseLockList, - QWebEnginePage.Feature.DesktopVideoCapture: self.deskVidList, - QWebEnginePage.Feature.DesktopAudioVideoCapture: self.deskAudVidList, - QWebEnginePage.Feature.Notifications: self.notifList, - } - - for feature, permissionsList in self.__permissionsLists.items(): - for permission in featurePermissions[feature]: - for host in featurePermissions[feature][permission]: - itm = QTreeWidgetItem( - permissionsList, [host, self.__permissionStrings[permission]] - ) - itm.setData(0, Qt.ItemDataRole.UserRole, permission) + self.__initializePermissionsList_qt67(featurePermissions) self.__removedPermissions = [] self.__previousCurrent = -1 self.tabWidget.currentChanged.connect(self.__currentTabChanged) self.tabWidget.setCurrentIndex(0) + def __initializePermissionsList_qt68(self, permissions): + """ + Private method to initialize the permission lists for Qt 6.8+. + + @param permissions list of permission objects + @type list of QWebEnginePermission + """ + self.__permissionStrings = { + QWebEnginePermission.State.Granted: self.tr("Allow"), + QWebEnginePermission.State.Denied: self.tr("Deny"), + QWebEnginePermission.State.Ask: self.tr("Always Ask"), + QWebEnginePermission.State.Invalid: self.tr("Invalid"), + } + + self.__permissionsLists = { + QWebEnginePermission.PermissionType.Geolocation: self.geoList, + QWebEnginePermission.PermissionType.MediaAudioCapture: self.micList, + QWebEnginePermission.PermissionType.MediaVideoCapture: self.camList, + QWebEnginePermission.PermissionType.MediaAudioVideoCapture: self.micCamList, + QWebEnginePermission.PermissionType.MouseLock: self.mouseLockList, + QWebEnginePermission.PermissionType.DesktopVideoCapture: self.deskVidList, + QWebEnginePermission.PermissionType.DesktopAudioVideoCapture: ( + self.deskAudVidList + ), + QWebEnginePermission.PermissionType.Notifications: self.notifList, + QWebEnginePermission.PermissionType.ClipboardReadWrite: self.clipboardList, + QWebEnginePermission.PermissionType.LocalFontsAccess: self.localFontsList, + } + + for permission in permissions: + with contextlib.suppress(KeyError): + permissionsList = self.__permissionsLists[permission.permissionType()] + itm = QTreeWidgetItem( + permissionsList, + [ + permission.origin().toString(), + self.__permissionStrings[permission.state()], + ], + ) + itm.setData(0, Qt.ItemDataRole.UserRole, permission) + for permissionsList in self.__permissionsLists.values(): + permissionsList.resizeColumnToContents(0) + + def __initializePermissionsList_qt67(self, permissions): + """ + Private method to initialize the permission lists for Qt <6.8. + + @param permissions dictionary with remembered feature permissions + @type dict of dict of list + """ + self.__permissionStrings = { + QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: self.tr("Allow"), + QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: self.tr("Deny"), + } + + self.__permissionsLists = { + QWebEnginePage.Feature.Geolocation: self.geoList, + QWebEnginePage.Feature.MediaAudioCapture: self.micList, + QWebEnginePage.Feature.MediaVideoCapture: self.camList, + QWebEnginePage.Feature.MediaAudioVideoCapture: self.micCamList, + QWebEnginePage.Feature.MouseLock: self.mouseLockList, + QWebEnginePage.Feature.DesktopVideoCapture: self.deskVidList, + QWebEnginePage.Feature.DesktopAudioVideoCapture: self.deskAudVidList, + QWebEnginePage.Feature.Notifications: self.notifList, + } + + for feature, permissionsList in self.__permissionsLists.items(): + for permission in permissions[feature]: + for host in permissions[feature][permission]: + itm = QTreeWidgetItem( + permissionsList, + [host, self.__permissionStrings[permission]], + ) + itm.setData(0, Qt.ItemDataRole.UserRole, permission) + permissionsList.resizeColumnToContents(0) + @pyqtSlot(int) def __currentTabChanged(self, index): """