176 |
177 |
177 if QtUtilities.qVersionTuple() >= (6, 8, 0): |
178 if QtUtilities.qVersionTuple() >= (6, 8, 0): |
178 # Qt 6.8+ |
179 # Qt 6.8+ |
179 self.clipboardList = QTreeWidget() |
180 self.clipboardList = QTreeWidget() |
180 self.clipboardList.setAlternatingRowColors(True) |
181 self.clipboardList.setAlternatingRowColors(True) |
181 self.clipboardList.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) |
182 self.clipboardList.setSelectionMode( |
|
183 QAbstractItemView.SelectionMode.ExtendedSelection |
|
184 ) |
182 self.clipboardList.setRootIsDecorated(False) |
185 self.clipboardList.setRootIsDecorated(False) |
183 self.clipboardList.setItemsExpandable(False) |
186 self.clipboardList.setItemsExpandable(False) |
184 self.clipboardList.setAllColumnsShowFocus(True) |
187 self.clipboardList.setAllColumnsShowFocus(True) |
185 self.clipboardList.setObjectName("camList") |
188 self.clipboardList.setObjectName("camList") |
186 self.clipboardList.setSortingEnabled(True) |
189 self.clipboardList.setSortingEnabled(True) |
187 self.clipboardList.headerItem().setText(0, self.tr("Host")) |
190 self.clipboardList.headerItem().setText(0, self.tr("Host")) |
188 self.clipboardList.headerItem().setText(1, self.tr("Permission")) |
191 self.clipboardList.headerItem().setText(1, self.tr("Permission")) |
189 self.tabWidget.addTab( |
192 self.tabWidget.addTab( |
190 self.clipboardList, EricPixmapCache.getIcon("clipboard"), self.tr("Clipboard") |
193 self.clipboardList, |
|
194 EricPixmapCache.getIcon("clipboard"), |
|
195 self.tr("Clipboard"), |
191 ) |
196 ) |
192 |
197 |
193 self.localFontsList = QTreeWidget() |
198 self.localFontsList = QTreeWidget() |
194 self.localFontsList.setAlternatingRowColors(True) |
199 self.localFontsList.setAlternatingRowColors(True) |
195 self.localFontsList.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) |
200 self.localFontsList.setSelectionMode( |
|
201 QAbstractItemView.SelectionMode.ExtendedSelection |
|
202 ) |
196 self.localFontsList.setRootIsDecorated(False) |
203 self.localFontsList.setRootIsDecorated(False) |
197 self.localFontsList.setItemsExpandable(False) |
204 self.localFontsList.setItemsExpandable(False) |
198 self.localFontsList.setAllColumnsShowFocus(True) |
205 self.localFontsList.setAllColumnsShowFocus(True) |
199 self.localFontsList.setObjectName("camList") |
206 self.localFontsList.setObjectName("camList") |
200 self.localFontsList.setSortingEnabled(True) |
207 self.localFontsList.setSortingEnabled(True) |
201 self.localFontsList.headerItem().setText(0, self.tr("Host")) |
208 self.localFontsList.headerItem().setText(0, self.tr("Host")) |
202 self.localFontsList.headerItem().setText(1, self.tr("Permission")) |
209 self.localFontsList.headerItem().setText(1, self.tr("Permission")) |
203 self.tabWidget.addTab( |
210 self.tabWidget.addTab( |
204 self.localFontsList, EricPixmapCache.getIcon("font"), self.tr("Local Fonts") |
211 self.localFontsList, |
|
212 EricPixmapCache.getIcon("font"), |
|
213 self.tr("Local Fonts"), |
205 ) |
214 ) |
206 |
215 |
207 self.setTabOrder(self.tabWidget, self.notifList) |
216 self.setTabOrder(self.tabWidget, self.notifList) |
208 self.setTabOrder(self.notifList, self.geoList) |
217 self.setTabOrder(self.notifList, self.geoList) |
209 self.setTabOrder(self.geoList, self.micList) |
218 self.setTabOrder(self.geoList, self.micList) |
221 self.setTabOrder(self.deskAudVidList, self.removeButton) |
230 self.setTabOrder(self.deskAudVidList, self.removeButton) |
222 self.setTabOrder(self.removeButton, self.removeAllButton) |
231 self.setTabOrder(self.removeButton, self.removeAllButton) |
223 |
232 |
224 if QtUtilities.qVersionTuple() >= (6, 8, 0): |
233 if QtUtilities.qVersionTuple() >= (6, 8, 0): |
225 # Qt 6.8+ |
234 # Qt 6.8+ |
226 self.__permissionStrings = { |
235 self.__initializePermissionsList_qt68(featurePermissions) |
227 QWebEnginePermission.State.Granted: self.tr("Allow"), |
|
228 QWebEnginePermission.State.Denied: self.tr("Deny"), |
|
229 QWebEnginePermission.State.Ask: self.tr("Always Ask"), |
|
230 QWebEnginePermission.State.Invalid: self.tr("Invalid"), |
|
231 } |
|
232 |
|
233 self.__permissionsLists = { |
|
234 QWebEnginePermission.PermissionType.Geolocation: self.geoList, |
|
235 QWebEnginePermission.PermissionType.MediaAudioCapture: self.micList, |
|
236 QWebEnginePermission.PermissionType.MediaVideoCapture: self.camList, |
|
237 QWebEnginePermission.PermissionType.MediaAudioVideoCapture: self.micCamList, |
|
238 QWebEnginePermission.PermissionType.MouseLock: self.mouseLockList, |
|
239 QWebEnginePermission.PermissionType.DesktopVideoCapture: self.deskVidList, |
|
240 QWebEnginePermission.PermissionType.DesktopAudioVideoCapture: self.deskAudVidList, |
|
241 QWebEnginePermission.PermissionType.Notifications: self.notifList, |
|
242 QWebEnginePermission.PermissionType.ClipboardReadWrite: self.clipboardList, |
|
243 QWebEnginePermission.PermissionType.LocalFontsAccess: self.localFontsList, |
|
244 } |
|
245 |
|
246 for permission in featurePermissions: |
|
247 with contextlib.suppress(KeyError): |
|
248 permissionsList = self.__permissionsLists[permission.permissionType()] |
|
249 itm = QTreeWidgetItem( |
|
250 permissionsList, [ |
|
251 permission.origin().toString(), |
|
252 self.__permissionStrings[permission.state()], |
|
253 ] |
|
254 ) |
|
255 itm.setData(0, Qt.ItemDataRole.UserRole, permission) |
|
256 else: |
236 else: |
257 # Qt <6.8 |
237 # Qt <6.8 |
258 self.__permissionStrings = { |
238 self.__initializePermissionsList_qt67(featurePermissions) |
259 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: self.tr("Allow"), |
|
260 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: self.tr("Deny"), |
|
261 } |
|
262 |
|
263 self.__permissionsLists = { |
|
264 QWebEnginePage.Feature.Geolocation: self.geoList, |
|
265 QWebEnginePage.Feature.MediaAudioCapture: self.micList, |
|
266 QWebEnginePage.Feature.MediaVideoCapture: self.camList, |
|
267 QWebEnginePage.Feature.MediaAudioVideoCapture: self.micCamList, |
|
268 QWebEnginePage.Feature.MouseLock: self.mouseLockList, |
|
269 QWebEnginePage.Feature.DesktopVideoCapture: self.deskVidList, |
|
270 QWebEnginePage.Feature.DesktopAudioVideoCapture: self.deskAudVidList, |
|
271 QWebEnginePage.Feature.Notifications: self.notifList, |
|
272 } |
|
273 |
|
274 for feature, permissionsList in self.__permissionsLists.items(): |
|
275 for permission in featurePermissions[feature]: |
|
276 for host in featurePermissions[feature][permission]: |
|
277 itm = QTreeWidgetItem( |
|
278 permissionsList, [host, self.__permissionStrings[permission]] |
|
279 ) |
|
280 itm.setData(0, Qt.ItemDataRole.UserRole, permission) |
|
281 |
239 |
282 self.__removedPermissions = [] |
240 self.__removedPermissions = [] |
283 self.__previousCurrent = -1 |
241 self.__previousCurrent = -1 |
284 self.tabWidget.currentChanged.connect(self.__currentTabChanged) |
242 self.tabWidget.currentChanged.connect(self.__currentTabChanged) |
285 self.tabWidget.setCurrentIndex(0) |
243 self.tabWidget.setCurrentIndex(0) |
|
244 |
|
245 def __initializePermissionsList_qt68(self, permissions): |
|
246 """ |
|
247 Private method to initialize the permission lists for Qt 6.8+. |
|
248 |
|
249 @param permissions list of permission objects |
|
250 @type list of QWebEnginePermission |
|
251 """ |
|
252 self.__permissionStrings = { |
|
253 QWebEnginePermission.State.Granted: self.tr("Allow"), |
|
254 QWebEnginePermission.State.Denied: self.tr("Deny"), |
|
255 QWebEnginePermission.State.Ask: self.tr("Always Ask"), |
|
256 QWebEnginePermission.State.Invalid: self.tr("Invalid"), |
|
257 } |
|
258 |
|
259 self.__permissionsLists = { |
|
260 QWebEnginePermission.PermissionType.Geolocation: self.geoList, |
|
261 QWebEnginePermission.PermissionType.MediaAudioCapture: self.micList, |
|
262 QWebEnginePermission.PermissionType.MediaVideoCapture: self.camList, |
|
263 QWebEnginePermission.PermissionType.MediaAudioVideoCapture: self.micCamList, |
|
264 QWebEnginePermission.PermissionType.MouseLock: self.mouseLockList, |
|
265 QWebEnginePermission.PermissionType.DesktopVideoCapture: self.deskVidList, |
|
266 QWebEnginePermission.PermissionType.DesktopAudioVideoCapture: ( |
|
267 self.deskAudVidList |
|
268 ), |
|
269 QWebEnginePermission.PermissionType.Notifications: self.notifList, |
|
270 QWebEnginePermission.PermissionType.ClipboardReadWrite: self.clipboardList, |
|
271 QWebEnginePermission.PermissionType.LocalFontsAccess: self.localFontsList, |
|
272 } |
|
273 |
|
274 for permission in permissions: |
|
275 with contextlib.suppress(KeyError): |
|
276 permissionsList = self.__permissionsLists[permission.permissionType()] |
|
277 itm = QTreeWidgetItem( |
|
278 permissionsList, |
|
279 [ |
|
280 permission.origin().toString(), |
|
281 self.__permissionStrings[permission.state()], |
|
282 ], |
|
283 ) |
|
284 itm.setData(0, Qt.ItemDataRole.UserRole, permission) |
|
285 for permissionsList in self.__permissionsLists.values(): |
|
286 permissionsList.resizeColumnToContents(0) |
|
287 |
|
288 def __initializePermissionsList_qt67(self, permissions): |
|
289 """ |
|
290 Private method to initialize the permission lists for Qt <6.8. |
|
291 |
|
292 @param permissions dictionary with remembered feature permissions |
|
293 @type dict of dict of list |
|
294 """ |
|
295 self.__permissionStrings = { |
|
296 QWebEnginePage.PermissionPolicy.PermissionGrantedByUser: self.tr("Allow"), |
|
297 QWebEnginePage.PermissionPolicy.PermissionDeniedByUser: self.tr("Deny"), |
|
298 } |
|
299 |
|
300 self.__permissionsLists = { |
|
301 QWebEnginePage.Feature.Geolocation: self.geoList, |
|
302 QWebEnginePage.Feature.MediaAudioCapture: self.micList, |
|
303 QWebEnginePage.Feature.MediaVideoCapture: self.camList, |
|
304 QWebEnginePage.Feature.MediaAudioVideoCapture: self.micCamList, |
|
305 QWebEnginePage.Feature.MouseLock: self.mouseLockList, |
|
306 QWebEnginePage.Feature.DesktopVideoCapture: self.deskVidList, |
|
307 QWebEnginePage.Feature.DesktopAudioVideoCapture: self.deskAudVidList, |
|
308 QWebEnginePage.Feature.Notifications: self.notifList, |
|
309 } |
|
310 |
|
311 for feature, permissionsList in self.__permissionsLists.items(): |
|
312 for permission in permissions[feature]: |
|
313 for host in permissions[feature][permission]: |
|
314 itm = QTreeWidgetItem( |
|
315 permissionsList, |
|
316 [host, self.__permissionStrings[permission]], |
|
317 ) |
|
318 itm.setData(0, Qt.ItemDataRole.UserRole, permission) |
|
319 permissionsList.resizeColumnToContents(0) |
286 |
320 |
287 @pyqtSlot(int) |
321 @pyqtSlot(int) |
288 def __currentTabChanged(self, index): |
322 def __currentTabChanged(self, index): |
289 """ |
323 """ |
290 Private slot handling changes of the selected tab. |
324 Private slot handling changes of the selected tab. |