src/eric7/WebBrowser/WebBrowserWebSearchWidget.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
6 """ 6 """
7 Module implementing a web search widget for the web browser. 7 Module implementing a web search widget for the web browser.
8 """ 8 """
9 9
10 from PyQt6.QtCore import pyqtSignal, QUrl, QModelIndex, QTimer, Qt 10 from PyQt6.QtCore import pyqtSignal, QUrl, QModelIndex, QTimer, Qt
11 from PyQt6.QtGui import ( 11 from PyQt6.QtGui import QStandardItem, QStandardItemModel, QFont, QIcon, QPixmap
12 QStandardItem, QStandardItemModel, QFont, QIcon, QPixmap
13 )
14 from PyQt6.QtWidgets import QMenu, QCompleter 12 from PyQt6.QtWidgets import QMenu, QCompleter
15 from PyQt6.QtWebEngineCore import QWebEnginePage 13 from PyQt6.QtWebEngineCore import QWebEnginePage
16 14
17 import UI.PixmapCache 15 import UI.PixmapCache
18 16
24 22
25 23
26 class WebBrowserWebSearchWidget(EricClearableLineEdit): 24 class WebBrowserWebSearchWidget(EricClearableLineEdit):
27 """ 25 """
28 Class implementing a web search widget for the web browser. 26 Class implementing a web search widget for the web browser.
29 27
30 @signal search(QUrl) emitted when the search should be done 28 @signal search(QUrl) emitted when the search should be done
31 """ 29 """
30
32 search = pyqtSignal(QUrl) 31 search = pyqtSignal(QUrl)
33 32
34 def __init__(self, mainWindow, parent=None): 33 def __init__(self, mainWindow, parent=None):
35 """ 34 """
36 Constructor 35 Constructor
37 36
38 @param mainWindow reference to the browser main window 37 @param mainWindow reference to the browser main window
39 @type WebBrowserWindow 38 @type WebBrowserWindow
40 @param parent reference to the parent widget 39 @param parent reference to the parent widget
41 @type QWidget 40 @type QWidget
42 """ 41 """
43 super().__init__(parent) 42 super().__init__(parent)
44 43
45 from EricWidgets.EricLineEditButton import EricLineEditButton 44 from EricWidgets.EricLineEditButton import EricLineEditButton
46 from .OpenSearch.OpenSearchManager import OpenSearchManager 45 from .OpenSearch.OpenSearchManager import OpenSearchManager
47 46
48 self.__mw = mainWindow 47 self.__mw = mainWindow
49 48
50 self.__openSearchManager = OpenSearchManager(self) 49 self.__openSearchManager = OpenSearchManager(self)
51 self.__openSearchManager.currentEngineChanged.connect( 50 self.__openSearchManager.currentEngineChanged.connect(
52 self.__currentEngineChanged) 51 self.__currentEngineChanged
52 )
53 self.__currentEngine = "" 53 self.__currentEngine = ""
54 54
55 self.__enginesMenu = QMenu(self) 55 self.__enginesMenu = QMenu(self)
56 self.__enginesMenu.triggered.connect( 56 self.__enginesMenu.triggered.connect(self.__handleEnginesMenuActionTriggered)
57 self.__handleEnginesMenuActionTriggered) 57
58
59 self.__engineButton = EricLineEditButton(self) 58 self.__engineButton = EricLineEditButton(self)
60 self.__engineButton.setMenu(self.__enginesMenu) 59 self.__engineButton.setMenu(self.__enginesMenu)
61 self.addWidget(self.__engineButton, EricLineEditSide.LEFT) 60 self.addWidget(self.__engineButton, EricLineEditSide.LEFT)
62 61
63 self.__searchButton = EricLineEditButton(self) 62 self.__searchButton = EricLineEditButton(self)
64 self.__searchButton.setIcon(UI.PixmapCache.getIcon("webSearch")) 63 self.__searchButton.setIcon(UI.PixmapCache.getIcon("webSearch"))
65 self.addWidget(self.__searchButton, EricLineEditSide.LEFT) 64 self.addWidget(self.__searchButton, EricLineEditSide.LEFT)
66 65
67 self.__model = QStandardItemModel(self) 66 self.__model = QStandardItemModel(self)
68 self.__completer = QCompleter() 67 self.__completer = QCompleter()
69 self.__completer.setModel(self.__model) 68 self.__completer.setModel(self.__model)
70 self.__completer.setCompletionMode( 69 self.__completer.setCompletionMode(
71 QCompleter.CompletionMode.UnfilteredPopupCompletion) 70 QCompleter.CompletionMode.UnfilteredPopupCompletion
71 )
72 self.__completer.setWidget(self) 72 self.__completer.setWidget(self)
73 73
74 self.__searchButton.clicked.connect(self.__searchButtonClicked) 74 self.__searchButton.clicked.connect(self.__searchButtonClicked)
75 self.textEdited.connect(self.__textEdited) 75 self.textEdited.connect(self.__textEdited)
76 self.returnPressed.connect(self.__searchNow) 76 self.returnPressed.connect(self.__searchNow)
77 self.__completer.activated[QModelIndex].connect( 77 self.__completer.activated[QModelIndex].connect(self.__completerActivated)
78 self.__completerActivated) 78 self.__completer.highlighted[QModelIndex].connect(self.__completerHighlighted)
79 self.__completer.highlighted[QModelIndex].connect(
80 self.__completerHighlighted)
81 self.__enginesMenu.aboutToShow.connect(self.__showEnginesMenu) 79 self.__enginesMenu.aboutToShow.connect(self.__showEnginesMenu)
82 80
83 self.__suggestionsItem = None 81 self.__suggestionsItem = None
84 self.__suggestions = [] 82 self.__suggestions = []
85 self.__suggestTimer = None 83 self.__suggestTimer = None
86 self.__suggestionsEnabled = Preferences.getWebBrowser( 84 self.__suggestionsEnabled = Preferences.getWebBrowser("WebSearchSuggestions")
87 "WebSearchSuggestions") 85
88
89 self.__recentSearchesItem = None 86 self.__recentSearchesItem = None
90 self.__recentSearches = [] 87 self.__recentSearches = []
91 self.__maxSavedSearches = 10 88 self.__maxSavedSearches = 10
92 89
93 self.__engine = None 90 self.__engine = None
94 self.__loadSearches() 91 self.__loadSearches()
95 self.__setupCompleterMenu() 92 self.__setupCompleterMenu()
96 self.__currentEngineChanged() 93 self.__currentEngineChanged()
97 94
98 def __searchNow(self): 95 def __searchNow(self):
99 """ 96 """
100 Private slot to perform the web search. 97 Private slot to perform the web search.
101 """ 98 """
102 searchText = self.text() 99 searchText = self.text()
103 if not searchText: 100 if not searchText:
104 return 101 return
105 102
106 import WebBrowser.WebBrowserWindow 103 import WebBrowser.WebBrowserWindow
104
107 if WebBrowser.WebBrowserWindow.WebBrowserWindow.isPrivate(): 105 if WebBrowser.WebBrowserWindow.WebBrowserWindow.isPrivate():
108 return 106 return
109 107
110 if searchText in self.__recentSearches: 108 if searchText in self.__recentSearches:
111 self.__recentSearches.remove(searchText) 109 self.__recentSearches.remove(searchText)
112 self.__recentSearches.insert(0, searchText) 110 self.__recentSearches.insert(0, searchText)
113 if len(self.__recentSearches) > self.__maxSavedSearches: 111 if len(self.__recentSearches) > self.__maxSavedSearches:
114 self.__recentSearches = self.__recentSearches[ 112 self.__recentSearches = self.__recentSearches[: self.__maxSavedSearches]
115 :self.__maxSavedSearches] 113 self.__setupCompleterMenu()
116 self.__setupCompleterMenu() 114
117
118 self.__mw.currentBrowser().setFocus() 115 self.__mw.currentBrowser().setFocus()
119 self.__mw.currentBrowser().load( 116 self.__mw.currentBrowser().load(
120 self.__openSearchManager.currentEngine().searchUrl(searchText)) 117 self.__openSearchManager.currentEngine().searchUrl(searchText)
121 118 )
119
122 def __setupCompleterMenu(self): 120 def __setupCompleterMenu(self):
123 """ 121 """
124 Private method to create the completer menu. 122 Private method to create the completer menu.
125 """ 123 """
126 if ( 124 if not self.__suggestions or (
127 not self.__suggestions or 125 self.__model.rowCount() > 0
128 (self.__model.rowCount() > 0 and 126 and self.__model.item(0) != self.__suggestionsItem
129 self.__model.item(0) != self.__suggestionsItem)
130 ): 127 ):
131 self.__model.clear() 128 self.__model.clear()
132 self.__suggestionsItem = None 129 self.__suggestionsItem = None
133 else: 130 else:
134 self.__model.removeRows(1, self.__model.rowCount() - 1) 131 self.__model.removeRows(1, self.__model.rowCount() - 1)
135 132
136 boldFont = QFont() 133 boldFont = QFont()
137 boldFont.setBold(True) 134 boldFont.setBold(True)
138 135
139 if self.__suggestions: 136 if self.__suggestions:
140 if self.__model.rowCount() == 0: 137 if self.__model.rowCount() == 0:
141 if not self.__suggestionsItem: 138 if not self.__suggestionsItem:
142 self.__suggestionsItem = QStandardItem( 139 self.__suggestionsItem = QStandardItem(self.tr("Suggestions"))
143 self.tr("Suggestions"))
144 self.__suggestionsItem.setFont(boldFont) 140 self.__suggestionsItem.setFont(boldFont)
145 self.__model.appendRow(self.__suggestionsItem) 141 self.__model.appendRow(self.__suggestionsItem)
146 142
147 for suggestion in self.__suggestions: 143 for suggestion in self.__suggestions:
148 self.__model.appendRow(QStandardItem(suggestion)) 144 self.__model.appendRow(QStandardItem(suggestion))
149 145
150 if not self.__recentSearches: 146 if not self.__recentSearches:
151 self.__recentSearchesItem = QStandardItem( 147 self.__recentSearchesItem = QStandardItem(self.tr("No Recent Searches"))
152 self.tr("No Recent Searches"))
153 self.__recentSearchesItem.setFont(boldFont) 148 self.__recentSearchesItem.setFont(boldFont)
154 self.__model.appendRow(self.__recentSearchesItem) 149 self.__model.appendRow(self.__recentSearchesItem)
155 else: 150 else:
156 self.__recentSearchesItem = QStandardItem( 151 self.__recentSearchesItem = QStandardItem(self.tr("Recent Searches"))
157 self.tr("Recent Searches"))
158 self.__recentSearchesItem.setFont(boldFont) 152 self.__recentSearchesItem.setFont(boldFont)
159 self.__model.appendRow(self.__recentSearchesItem) 153 self.__model.appendRow(self.__recentSearchesItem)
160 for recentSearch in self.__recentSearches: 154 for recentSearch in self.__recentSearches:
161 self.__model.appendRow(QStandardItem(recentSearch)) 155 self.__model.appendRow(QStandardItem(recentSearch))
162 156
163 view = self.__completer.popup() 157 view = self.__completer.popup()
164 view.setFixedHeight(view.sizeHintForRow(0) * self.__model.rowCount() + 158 view.setFixedHeight(
165 view.frameWidth() * 2) 159 view.sizeHintForRow(0) * self.__model.rowCount() + view.frameWidth() * 2
166 160 )
161
167 self.__searchButton.setEnabled( 162 self.__searchButton.setEnabled(
168 bool(self.__recentSearches or self.__suggestions)) 163 bool(self.__recentSearches or self.__suggestions)
169 164 )
165
170 def __completerActivated(self, index): 166 def __completerActivated(self, index):
171 """ 167 """
172 Private slot handling the selection of an entry from the completer. 168 Private slot handling the selection of an entry from the completer.
173 169
174 @param index index of the item (QModelIndex) 170 @param index index of the item (QModelIndex)
175 """ 171 """
176 if ( 172 if (
177 self.__suggestionsItem and 173 self.__suggestionsItem
178 self.__suggestionsItem.index().row() == index.row() 174 and self.__suggestionsItem.index().row() == index.row()
179 ): 175 ):
180 return 176 return
181 177
182 if ( 178 if (
183 self.__recentSearchesItem and 179 self.__recentSearchesItem
184 self.__recentSearchesItem.index().row() == index.row() 180 and self.__recentSearchesItem.index().row() == index.row()
185 ): 181 ):
186 return 182 return
187 183
188 self.__searchNow() 184 self.__searchNow()
189 185
190 def __completerHighlighted(self, index): 186 def __completerHighlighted(self, index):
191 """ 187 """
192 Private slot handling the highlighting of an entry of the completer. 188 Private slot handling the highlighting of an entry of the completer.
193 189
194 @param index index of the item (QModelIndex) 190 @param index index of the item (QModelIndex)
195 @return flah indicating a successful highlighting (boolean) 191 @return flah indicating a successful highlighting (boolean)
196 """ 192 """
197 if ( 193 if (
198 self.__suggestionsItem and 194 self.__suggestionsItem
199 self.__suggestionsItem.index().row() == index.row() 195 and self.__suggestionsItem.index().row() == index.row()
200 ): 196 ):
201 return False 197 return False
202 198
203 if ( 199 if (
204 self.__recentSearchesItem and 200 self.__recentSearchesItem
205 self.__recentSearchesItem.index().row() == index.row() 201 and self.__recentSearchesItem.index().row() == index.row()
206 ): 202 ):
207 return False 203 return False
208 204
209 self.setText(index.data()) 205 self.setText(index.data())
210 return True 206 return True
211 207
212 def __textEdited(self, txt): 208 def __textEdited(self, txt):
213 """ 209 """
214 Private slot to handle changes of the search text. 210 Private slot to handle changes of the search text.
215 211
216 @param txt search text (string) 212 @param txt search text (string)
217 """ 213 """
218 if self.__suggestionsEnabled: 214 if self.__suggestionsEnabled:
219 if self.__suggestTimer is None: 215 if self.__suggestTimer is None:
220 self.__suggestTimer = QTimer(self) 216 self.__suggestTimer = QTimer(self)
223 self.__suggestTimer.timeout.connect(self.__getSuggestions) 219 self.__suggestTimer.timeout.connect(self.__getSuggestions)
224 self.__suggestTimer.start() 220 self.__suggestTimer.start()
225 else: 221 else:
226 self.__completer.setCompletionPrefix(txt) 222 self.__completer.setCompletionPrefix(txt)
227 self.__completer.complete() 223 self.__completer.complete()
228 224
229 def __getSuggestions(self): 225 def __getSuggestions(self):
230 """ 226 """
231 Private slot to get search suggestions from the configured search 227 Private slot to get search suggestions from the configured search
232 engine. 228 engine.
233 """ 229 """
234 searchText = self.text() 230 searchText = self.text()
235 if searchText: 231 if searchText:
236 self.__openSearchManager.currentEngine().requestSuggestions( 232 self.__openSearchManager.currentEngine().requestSuggestions(searchText)
237 searchText) 233
238
239 def __newSuggestions(self, suggestions): 234 def __newSuggestions(self, suggestions):
240 """ 235 """
241 Private slot to receive a new list of suggestions. 236 Private slot to receive a new list of suggestions.
242 237
243 @param suggestions list of suggestions (list of strings) 238 @param suggestions list of suggestions (list of strings)
244 """ 239 """
245 self.__suggestions = suggestions 240 self.__suggestions = suggestions
246 self.__setupCompleterMenu() 241 self.__setupCompleterMenu()
247 self.__completer.complete() 242 self.__completer.complete()
248 243
249 def __showEnginesMenu(self): 244 def __showEnginesMenu(self):
250 """ 245 """
251 Private slot to handle the display of the engines menu. 246 Private slot to handle the display of the engines menu.
252 """ 247 """
253 self.__enginesMenu.clear() 248 self.__enginesMenu.clear()
254 249
255 from .OpenSearch.OpenSearchEngineAction import OpenSearchEngineAction 250 from .OpenSearch.OpenSearchEngineAction import OpenSearchEngineAction
251
256 engineNames = self.__openSearchManager.allEnginesNames() 252 engineNames = self.__openSearchManager.allEnginesNames()
257 for engineName in engineNames: 253 for engineName in engineNames:
258 engine = self.__openSearchManager.engine(engineName) 254 engine = self.__openSearchManager.engine(engineName)
259 action = OpenSearchEngineAction(engine, self.__enginesMenu) 255 action = OpenSearchEngineAction(engine, self.__enginesMenu)
260 action.setData(engineName) 256 action.setData(engineName)
261 self.__enginesMenu.addAction(action) 257 self.__enginesMenu.addAction(action)
262 258
263 if self.__openSearchManager.currentEngineName() == engineName: 259 if self.__openSearchManager.currentEngineName() == engineName:
264 action.setCheckable(True) 260 action.setCheckable(True)
265 action.setChecked(True) 261 action.setChecked(True)
266 262
267 cb = self.__mw.currentBrowser() 263 cb = self.__mw.currentBrowser()
268 from .Tools import Scripts 264 from .Tools import Scripts
265
269 script = Scripts.getOpenSearchLinks() 266 script = Scripts.getOpenSearchLinks()
270 cb.page().runJavaScript( 267 cb.page().runJavaScript(
271 script, WebBrowserPage.SafeJsWorld, self.__showEnginesMenuCallback) 268 script, WebBrowserPage.SafeJsWorld, self.__showEnginesMenuCallback
272 269 )
270
273 def __showEnginesMenuCallback(self, res): 271 def __showEnginesMenuCallback(self, res):
274 """ 272 """
275 Private method handling the open search links callback. 273 Private method handling the open search links callback.
276 274
277 @param res result of the JavaScript 275 @param res result of the JavaScript
278 @type list of dict 276 @type list of dict
279 """ 277 """
280 cb = self.__mw.currentBrowser() 278 cb = self.__mw.currentBrowser()
281 if res: 279 if res:
285 title = entry["title"] 283 title = entry["title"]
286 if url.isEmpty(): 284 if url.isEmpty():
287 continue 285 continue
288 if not title: 286 if not title:
289 title = cb.title() 287 title = cb.title()
290 288
291 action = self.__enginesMenu.addAction( 289 action = self.__enginesMenu.addAction(
292 self.tr("Add '{0}'").format(title)) 290 self.tr("Add '{0}'").format(title)
291 )
293 action.setData(url) 292 action.setData(url)
294 action.setIcon(cb.icon()) 293 action.setIcon(cb.icon())
295 294
296 self.__enginesMenu.addSeparator() 295 self.__enginesMenu.addSeparator()
297 self.__enginesMenu.addAction(self.__mw.searchEnginesAction()) 296 self.__enginesMenu.addAction(self.__mw.searchEnginesAction())
298 297
299 if self.__recentSearches: 298 if self.__recentSearches:
300 act = self.__enginesMenu.addAction( 299 act = self.__enginesMenu.addAction(self.tr("Clear Recent Searches"))
301 self.tr("Clear Recent Searches"))
302 act.setData("@@CLEAR@@") 300 act.setData("@@CLEAR@@")
303 301
304 def __handleEnginesMenuActionTriggered(self, action): 302 def __handleEnginesMenuActionTriggered(self, action):
305 """ 303 """
306 Private slot to handle an action of the menu being triggered. 304 Private slot to handle an action of the menu being triggered.
307 305
308 @param action reference to the action that triggered 306 @param action reference to the action that triggered
309 @type QAction 307 @type QAction
310 """ 308 """
311 actData = action.data() 309 actData = action.data()
312 if isinstance(actData, QUrl): 310 if isinstance(actData, QUrl):
316 # engine name or special action 314 # engine name or special action
317 if actData == "@@CLEAR@@": 315 if actData == "@@CLEAR@@":
318 self.clear() 316 self.clear()
319 else: 317 else:
320 self.__openSearchManager.setCurrentEngineName(actData) 318 self.__openSearchManager.setCurrentEngineName(actData)
321 319
322 def __searchButtonClicked(self): 320 def __searchButtonClicked(self):
323 """ 321 """
324 Private slot to show the search menu via the search button. 322 Private slot to show the search menu via the search button.
325 """ 323 """
326 self.__setupCompleterMenu() 324 self.__setupCompleterMenu()
327 self.__completer.complete() 325 self.__completer.complete()
328 326
329 def clear(self): 327 def clear(self):
330 """ 328 """
331 Public method to clear all private data. 329 Public method to clear all private data.
332 """ 330 """
333 self.__recentSearches = [] 331 self.__recentSearches = []
334 self.__setupCompleterMenu() 332 self.__setupCompleterMenu()
335 super().clear() 333 super().clear()
336 self.clearFocus() 334 self.clearFocus()
337 335
338 def preferencesChanged(self): 336 def preferencesChanged(self):
339 """ 337 """
340 Public method to handle the change of preferences. 338 Public method to handle the change of preferences.
341 """ 339 """
342 self.__suggestionsEnabled = Preferences.getWebBrowser( 340 self.__suggestionsEnabled = Preferences.getWebBrowser("WebSearchSuggestions")
343 "WebSearchSuggestions")
344 if not self.__suggestionsEnabled: 341 if not self.__suggestionsEnabled:
345 self.__suggestions = [] 342 self.__suggestions = []
346 self.__setupCompleterMenu() 343 self.__setupCompleterMenu()
347 344
348 def saveSearches(self): 345 def saveSearches(self):
349 """ 346 """
350 Public method to save the recently performed web searches. 347 Public method to save the recently performed web searches.
351 """ 348 """
352 Preferences.getSettings().setValue( 349 Preferences.getSettings().setValue(
353 'WebBrowser/WebSearches', self.__recentSearches) 350 "WebBrowser/WebSearches", self.__recentSearches
354 351 )
352
355 def __loadSearches(self): 353 def __loadSearches(self):
356 """ 354 """
357 Private method to load the recently performed web searches. 355 Private method to load the recently performed web searches.
358 """ 356 """
359 searches = Preferences.getSettings().value('WebBrowser/WebSearches') 357 searches = Preferences.getSettings().value("WebBrowser/WebSearches")
360 if searches is not None: 358 if searches is not None:
361 self.__recentSearches = searches 359 self.__recentSearches = searches
362 360
363 def openSearchManager(self): 361 def openSearchManager(self):
364 """ 362 """
365 Public method to get a reference to the opensearch manager object. 363 Public method to get a reference to the opensearch manager object.
366 364
367 @return reference to the opensearch manager object (OpenSearchManager) 365 @return reference to the opensearch manager object (OpenSearchManager)
368 """ 366 """
369 return self.__openSearchManager 367 return self.__openSearchManager
370 368
371 def __currentEngineChanged(self): 369 def __currentEngineChanged(self):
372 """ 370 """
373 Private slot to track a change of the current search engine. 371 Private slot to track a change of the current search engine.
374 """ 372 """
375 if self.__openSearchManager.engineExists(self.__currentEngine): 373 if self.__openSearchManager.engineExists(self.__currentEngine):
376 oldEngine = self.__openSearchManager.engine(self.__currentEngine) 374 oldEngine = self.__openSearchManager.engine(self.__currentEngine)
377 oldEngine.imageChanged.disconnect(self.__engineImageChanged) 375 oldEngine.imageChanged.disconnect(self.__engineImageChanged)
378 if self.__suggestionsEnabled: 376 if self.__suggestionsEnabled:
379 oldEngine.suggestions.disconnect(self.__newSuggestions) 377 oldEngine.suggestions.disconnect(self.__newSuggestions)
380 378
381 newEngine = self.__openSearchManager.currentEngine() 379 newEngine = self.__openSearchManager.currentEngine()
382 if newEngine.networkAccessManager() is None: 380 if newEngine.networkAccessManager() is None:
383 newEngine.setNetworkAccessManager(self.__mw.networkManager()) 381 newEngine.setNetworkAccessManager(self.__mw.networkManager())
384 newEngine.imageChanged.connect(self.__engineImageChanged) 382 newEngine.imageChanged.connect(self.__engineImageChanged)
385 if self.__suggestionsEnabled: 383 if self.__suggestionsEnabled:
386 newEngine.suggestions.connect(self.__newSuggestions) 384 newEngine.suggestions.connect(self.__newSuggestions)
387 385
388 self.setPlaceholderText(self.__openSearchManager.currentEngineName()) 386 self.setPlaceholderText(self.__openSearchManager.currentEngineName())
389 self.__currentEngine = self.__openSearchManager.currentEngineName() 387 self.__currentEngine = self.__openSearchManager.currentEngineName()
390 self.__engineButton.setIcon(QIcon(QPixmap.fromImage( 388 self.__engineButton.setIcon(
391 self.__openSearchManager.currentEngine().image()))) 389 QIcon(QPixmap.fromImage(self.__openSearchManager.currentEngine().image()))
390 )
392 self.__suggestions = [] 391 self.__suggestions = []
393 self.__setupCompleterMenu() 392 self.__setupCompleterMenu()
394 393
395 def __engineImageChanged(self): 394 def __engineImageChanged(self):
396 """ 395 """
397 Private slot to handle a change of the current search engine icon. 396 Private slot to handle a change of the current search engine icon.
398 """ 397 """
399 self.__engineButton.setIcon(QIcon(QPixmap.fromImage( 398 self.__engineButton.setIcon(
400 self.__openSearchManager.currentEngine().image()))) 399 QIcon(QPixmap.fromImage(self.__openSearchManager.currentEngine().image()))
401 400 )
401
402 def mousePressEvent(self, evt): 402 def mousePressEvent(self, evt):
403 """ 403 """
404 Protected method called by a mouse press event. 404 Protected method called by a mouse press event.
405 405
406 @param evt reference to the mouse event (QMouseEvent) 406 @param evt reference to the mouse event (QMouseEvent)
407 """ 407 """
408 if evt.button() == Qt.MouseButton.XButton1: 408 if evt.button() == Qt.MouseButton.XButton1:
409 self.__mw.currentBrowser().triggerPageAction( 409 self.__mw.currentBrowser().triggerPageAction(QWebEnginePage.WebAction.Back)
410 QWebEnginePage.WebAction.Back)
411 elif evt.button() == Qt.MouseButton.XButton2: 410 elif evt.button() == Qt.MouseButton.XButton2:
412 self.__mw.currentBrowser().triggerPageAction( 411 self.__mw.currentBrowser().triggerPageAction(
413 QWebEnginePage.WebAction.Forward) 412 QWebEnginePage.WebAction.Forward
413 )
414 else: 414 else:
415 super().mousePressEvent(evt) 415 super().mousePressEvent(evt)

eric ide

mercurial