Merge branch 'peterlvilim-download-quit-confirm'
This commit is contained in:
commit
492f066bd8
@ -127,6 +127,7 @@ Contributors, sorted by the number of commits in descending order:
|
|||||||
* Florian Bruhin
|
* Florian Bruhin
|
||||||
* Claude
|
* Claude
|
||||||
* John ShaggyTwoDope Jenkins
|
* John ShaggyTwoDope Jenkins
|
||||||
|
* Peter Vilim
|
||||||
* rikn00
|
* rikn00
|
||||||
* Martin Zimmermann
|
* Martin Zimmermann
|
||||||
* Joel Torstensson
|
* Joel Torstensson
|
||||||
@ -136,7 +137,6 @@ Contributors, sorted by the number of commits in descending order:
|
|||||||
* Mathias Fussenegger
|
* Mathias Fussenegger
|
||||||
* Larry Hynes
|
* Larry Hynes
|
||||||
* Thiago Barroso Perrotta
|
* Thiago Barroso Perrotta
|
||||||
* Peter Vilim
|
|
||||||
* Matthias Lisin
|
* Matthias Lisin
|
||||||
* Helen Sherwood-Taylor
|
* Helen Sherwood-Taylor
|
||||||
* HalosGhost
|
* HalosGhost
|
||||||
|
@ -390,6 +390,7 @@ Valid values:
|
|||||||
|
|
||||||
* +always+: Always show a confirmation.
|
* +always+: Always show a confirmation.
|
||||||
* +multiple-tabs+: Show a confirmation if multiple tabs are opened.
|
* +multiple-tabs+: Show a confirmation if multiple tabs are opened.
|
||||||
|
* +downloads+: Show a confirmation if downloads are running
|
||||||
* +never+: Never show a confirmation.
|
* +never+: Never show a confirmation.
|
||||||
|
|
||||||
Default: +pass:[never]+
|
Default: +pass:[never]+
|
||||||
|
@ -25,6 +25,7 @@ import base64
|
|||||||
import codecs
|
import codecs
|
||||||
import os.path
|
import os.path
|
||||||
import sre_constants
|
import sre_constants
|
||||||
|
import itertools
|
||||||
|
|
||||||
from PyQt5.QtCore import QUrl
|
from PyQt5.QtCore import QUrl
|
||||||
from PyQt5.QtGui import QColor, QFont
|
from PyQt5.QtGui import QColor, QFont
|
||||||
@ -1223,14 +1224,55 @@ class AcceptCookies(BaseType):
|
|||||||
('never', "Don't accept cookies at all."))
|
('never', "Don't accept cookies at all."))
|
||||||
|
|
||||||
|
|
||||||
class ConfirmQuit(BaseType):
|
class ConfirmQuit(List):
|
||||||
|
|
||||||
"""Whether to display a confirmation when the window is closed."""
|
"""Whether to display a confirmation when the window is closed."""
|
||||||
|
|
||||||
|
typestr = 'string-list'
|
||||||
|
|
||||||
valid_values = ValidValues(('always', "Always show a confirmation."),
|
valid_values = ValidValues(('always', "Always show a confirmation."),
|
||||||
('multiple-tabs', "Show a confirmation if "
|
('multiple-tabs', "Show a confirmation if "
|
||||||
"multiple tabs are opened."),
|
"multiple tabs are opened."),
|
||||||
|
('downloads', "Show a confirmation if "
|
||||||
|
"downloads are running"),
|
||||||
('never', "Never show a confirmation."))
|
('never', "Never show a confirmation."))
|
||||||
|
# Values that can be combined with commas
|
||||||
|
combinable_values = ('multiple-tabs', 'downloads')
|
||||||
|
|
||||||
|
def validate(self, value):
|
||||||
|
values = self.transform(value)
|
||||||
|
# Never can't be set with other options
|
||||||
|
if 'never' in values and len(values) > 1:
|
||||||
|
raise configexc.ValidationError(
|
||||||
|
value, "List cannot contain never!")
|
||||||
|
# Always can't be set with other options
|
||||||
|
elif 'always' in values and len(values) > 1:
|
||||||
|
raise configexc.ValidationError(
|
||||||
|
value, "List cannot contain always!")
|
||||||
|
# Values have to be valid
|
||||||
|
elif not set(values).issubset(set(self.valid_values.values)):
|
||||||
|
raise configexc.ValidationError(
|
||||||
|
value, "List contains invalid values!")
|
||||||
|
# List can't have duplicates
|
||||||
|
elif len(set(values)) != len(values):
|
||||||
|
raise configexc.ValidationError(
|
||||||
|
value, "List contains duplicate values!")
|
||||||
|
|
||||||
|
def complete(self):
|
||||||
|
combinations = []
|
||||||
|
# Generate combinations of the options that can be combined
|
||||||
|
for size in range(2, len(self.combinable_values) + 1):
|
||||||
|
combinations += list(
|
||||||
|
itertools.combinations(self.combinable_values, size))
|
||||||
|
out = []
|
||||||
|
# Add valid single values
|
||||||
|
for val in self.valid_values:
|
||||||
|
out.append((val, self.valid_values.descriptions[val]))
|
||||||
|
# Add combinations to list of options
|
||||||
|
for val in combinations:
|
||||||
|
desc = ''
|
||||||
|
out.append((','.join(val), desc))
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
class ForwardUnboundKeys(BaseType):
|
class ForwardUnboundKeys(BaseType):
|
||||||
|
@ -327,18 +327,32 @@ class MainWindow(QWidget):
|
|||||||
def closeEvent(self, e):
|
def closeEvent(self, e):
|
||||||
"""Override closeEvent to display a confirmation if needed."""
|
"""Override closeEvent to display a confirmation if needed."""
|
||||||
confirm_quit = config.get('ui', 'confirm-quit')
|
confirm_quit = config.get('ui', 'confirm-quit')
|
||||||
count = self._tabbed_browser.count()
|
tab_count = self._tabbed_browser.count()
|
||||||
if confirm_quit == 'never':
|
download_manager = objreg.get('download-manager', scope='window',
|
||||||
|
window=self.win_id)
|
||||||
|
download_count = download_manager.rowCount()
|
||||||
|
quit_texts = []
|
||||||
|
# Close if set to never ask for confirmation
|
||||||
|
if 'never' in confirm_quit:
|
||||||
pass
|
pass
|
||||||
elif confirm_quit == 'multiple-tabs' and count <= 1:
|
# Ask if multiple-tabs are open
|
||||||
pass
|
if 'multiple-tabs' in confirm_quit and tab_count > 1:
|
||||||
else:
|
quit_texts.append("{} {} open.".format(
|
||||||
text = "Close {} {}?".format(
|
tab_count, "tab is" if tab_count == 1 else "tabs are"))
|
||||||
count, "tab" if count == 1 else "tabs")
|
# Ask if multiple downloads running
|
||||||
|
if 'downloads' in confirm_quit and download_count > 0:
|
||||||
|
quit_texts.append("{} {} running.".format(
|
||||||
|
tab_count,
|
||||||
|
"download is" if tab_count == 1 else "downloads are"))
|
||||||
|
# Process all quit messages that user must confirm
|
||||||
|
if quit_texts or 'always' in confirm_quit:
|
||||||
|
text = '\n'.join(['Really quit?'] + quit_texts)
|
||||||
confirmed = message.ask(self.win_id, text,
|
confirmed = message.ask(self.win_id, text,
|
||||||
usertypes.PromptMode.yesno, default=True)
|
usertypes.PromptMode.yesno,
|
||||||
|
default=True)
|
||||||
|
# Stop asking if the user cancels
|
||||||
if not confirmed:
|
if not confirmed:
|
||||||
log.destroy.debug("Cancelling losing of window {}".format(
|
log.destroy.debug("Cancelling closing of window {}".format(
|
||||||
self.win_id))
|
self.win_id))
|
||||||
e.ignore()
|
e.ignore()
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user