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: |
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) |