diff --git a/dangerzone/common.py b/dangerzone/common.py
index 4600316..d4d76b5 100644
--- a/dangerzone/common.py
+++ b/dangerzone/common.py
@@ -269,7 +269,7 @@ class Common(object):
path = self.get_resource_path("logo.png")
return QtGui.QIcon(path)
- def open_find_viewer(self, filename):
+ def open_pdf_viewer(self, filename):
if self.settings.get("open_app") in self.pdf_viewers:
if platform.system() == "Darwin":
# Get the PDF reader bundle command
diff --git a/dangerzone/settings_widget.py b/dangerzone/settings_widget.py
index c44c7b9..18f5c00 100644
--- a/dangerzone/settings_widget.py
+++ b/dangerzone/settings_widget.py
@@ -1,5 +1,6 @@
import os
import subprocess
+import platform
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -20,28 +21,40 @@ class SettingsWidget(QtWidgets.QWidget):
# Save safe version
self.save_checkbox = QtWidgets.QCheckBox("Save safe PDF")
self.save_checkbox.clicked.connect(self.update_ui)
+ self.save_label = QtWidgets.QLabel("Save safe PDF") # For Windows
+ self.save_label.hide()
+ if platform.system() == "Windows":
+ # In Windows, users must save the PDF, since they can't open it
+ self.save_checkbox.setCheckState(QtCore.Qt.Checked)
+ self.save_checkbox.setEnabled(False)
+ self.save_checkbox.hide()
+ self.save_label.show()
self.save_lineedit = QtWidgets.QLineEdit()
self.save_lineedit.setReadOnly(True)
self.save_browse_button = QtWidgets.QPushButton("Save as...")
self.save_browse_button.clicked.connect(self.save_browse_button_clicked)
save_layout = QtWidgets.QHBoxLayout()
save_layout.addWidget(self.save_checkbox)
+ save_layout.addWidget(self.save_label)
save_layout.addWidget(self.save_lineedit)
save_layout.addWidget(self.save_browse_button)
save_layout.addStretch()
- # Open safe document
- self.open_checkbox = QtWidgets.QCheckBox(
- "Open safe document after converting, using"
- )
- self.open_checkbox.clicked.connect(self.update_ui)
- self.open_combobox = QtWidgets.QComboBox()
- for k in self.common.pdf_viewers:
- self.open_combobox.addItem(k, QtCore.QVariant(self.common.pdf_viewers[k]))
- open_layout = QtWidgets.QHBoxLayout()
- open_layout.addWidget(self.open_checkbox)
- open_layout.addWidget(self.open_combobox)
- open_layout.addStretch()
+ if platform.system() != "Windows":
+ # Open safe document
+ self.open_checkbox = QtWidgets.QCheckBox(
+ "Open safe document after converting, using"
+ )
+ self.open_checkbox.clicked.connect(self.update_ui)
+ self.open_combobox = QtWidgets.QComboBox()
+ for k in self.common.pdf_viewers:
+ self.open_combobox.addItem(
+ k, QtCore.QVariant(self.common.pdf_viewers[k])
+ )
+ open_layout = QtWidgets.QHBoxLayout()
+ open_layout.addWidget(self.open_checkbox)
+ open_layout.addWidget(self.open_combobox)
+ open_layout.addStretch()
# OCR document
self.ocr_checkbox = QtWidgets.QCheckBox("OCR document, language")
@@ -75,7 +88,8 @@ class SettingsWidget(QtWidgets.QWidget):
layout.addWidget(self.dangerous_doc_label)
layout.addSpacing(20)
layout.addLayout(save_layout)
- layout.addLayout(open_layout)
+ if platform.system() != "Windows":
+ layout.addLayout(open_layout)
layout.addLayout(ocr_layout)
layout.addLayout(update_layout)
layout.addSpacing(20)
@@ -98,14 +112,15 @@ class SettingsWidget(QtWidgets.QWidget):
if index != -1:
self.ocr_combobox.setCurrentIndex(index)
- if self.common.settings.get("open"):
- self.open_checkbox.setCheckState(QtCore.Qt.Checked)
- else:
- self.open_checkbox.setCheckState(QtCore.Qt.Unchecked)
+ if platform.system() != "Windows":
+ if self.common.settings.get("open"):
+ self.open_checkbox.setCheckState(QtCore.Qt.Checked)
+ else:
+ self.open_checkbox.setCheckState(QtCore.Qt.Unchecked)
- index = self.open_combobox.findText(self.common.settings.get("open_app"))
- if index != -1:
- self.open_combobox.setCurrentIndex(index)
+ index = self.open_combobox.findText(self.common.settings.get("open_app"))
+ if index != -1:
+ self.open_combobox.setCurrentIndex(index)
if self.common.settings.get("update_container"):
self.update_checkbox.setCheckState(QtCore.Qt.Checked)
@@ -122,14 +137,19 @@ class SettingsWidget(QtWidgets.QWidget):
self.update_checkbox.setEnabled(False)
def update_ui(self):
- # Either save or open must be checked
- if (
- self.save_checkbox.checkState() == QtCore.Qt.Checked
- or self.open_checkbox.checkState() == QtCore.Qt.Checked
- ):
+ if platform.system() == "Windows":
+ # Because the save checkbox is always checked in Windows, the
+ # start button can be enabled
self.start_button.setEnabled(True)
else:
- self.start_button.setEnabled(False)
+ # Either save or open must be checked
+ if (
+ self.save_checkbox.checkState() == QtCore.Qt.Checked
+ or self.open_checkbox.checkState() == QtCore.Qt.Checked
+ ):
+ self.start_button.setEnabled(True)
+ else:
+ self.start_button.setEnabled(False)
def document_selected(self):
# Update the danger doc label
@@ -163,10 +183,11 @@ class SettingsWidget(QtWidgets.QWidget):
"ocr", self.ocr_checkbox.checkState() == QtCore.Qt.Checked
)
self.common.settings.set("ocr_language", self.ocr_combobox.currentText())
- self.common.settings.set(
- "open", self.open_checkbox.checkState() == QtCore.Qt.Checked
- )
- self.common.settings.set("open_app", self.open_combobox.currentText())
+ if platform.system() != "Windows":
+ self.common.settings.set(
+ "open", self.open_checkbox.checkState() == QtCore.Qt.Checked
+ )
+ self.common.settings.set("open_app", self.open_combobox.currentText())
self.common.settings.set(
"update_container", self.update_checkbox.checkState() == QtCore.Qt.Checked
)
diff --git a/dangerzone/tasks_widget.py b/dangerzone/tasks_widget.py
index a46d02c..92ce455 100644
--- a/dangerzone/tasks_widget.py
+++ b/dangerzone/tasks_widget.py
@@ -1,6 +1,8 @@
import shutil
import tempfile
import os
+import platform
+import subprocess
from PyQt5 import QtCore, QtGui, QtWidgets
from .tasks import PullImageTask, BuildContainerTask, ConvertToPixels, ConvertToPDF
@@ -97,9 +99,16 @@ class TasksWidget(QtWidgets.QWidget):
dest_filename = tmp[1]
shutil.move(source_filename, dest_filename)
+ # In Windows, open Explorer with the safe PDF in focus
+ if platform.system() == "Windows":
+ dest_filename_windows = dest_filename.replace("/", "\\")
+ subprocess.Popen(
+ f'explorer.exe /select,"{dest_filename_windows}"', shell=True
+ )
+
# Open
if self.common.settings.get("open"):
- self.common.open_find_viewer(dest_filename)
+ self.common.open_pdf_viewer(dest_filename)
# Clean up
self.common.pixel_dir.cleanup()
diff --git a/install/windows/Dangerzone.wxs b/install/windows/Dangerzone.wxs
index 6663ebd..27e4a1f 100644
--- a/install/windows/Dangerzone.wxs
+++ b/install/windows/Dangerzone.wxs
@@ -14,6 +14,9 @@
+
+
+
diff --git a/poetry.lock b/poetry.lock
index cc66fb1..dc53a3d 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -204,7 +204,7 @@ version = "12.7.1"
[[package]]
category = "main"
description = "Python for Window Extensions"
-marker = "sys_platform == \"win32\""
+marker = "sys_platform == \"windows\""
name = "pywin32"
optional = false
python-versions = "*"
@@ -284,7 +284,7 @@ python-versions = "*"
version = "1.4.9"
[metadata]
-content-hash = "28c51f60ace8c8578c21279f8c46ba095d0ec1f1f86bb155c24cba67ac3291ee"
+content-hash = "8a375835b3ed53e46bb4aaf31cb5cca43d33ed03ac217cf247ed65724d3ee3a8"
python-versions = "^3.7"
[metadata.files]
diff --git a/pyproject.toml b/pyproject.toml
index 90b91e2..732798b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -15,13 +15,13 @@ pyxdg = {version = "^0.26", platform = "linux"}
pyobjc-core = {version = "^6.1", platform = "darwin"}
pyobjc-framework-launchservices = {version = "^6.1", platform = "darwin"}
macholib = "^1.14"
-pywin32 = {version = "^227", platform = "win32"}
+pywin32 = {version = "^227", platform = "windows"}
wmi = {version = "^1.4.9", platform = "windows"}
[tool.poetry.dev-dependencies]
black = "^19.10b0"
pyinstaller = {version = "^3.6", platform = "darwin"}
-setuptools = {version = "^45.2.0", platform = "win32"}
+setuptools = {version = "^45.2.0", platform = "windows"}
[build-system]
requires = ["poetry>=0.12"]