ui: fixed falling back to Qt's built-in icons

When the WM/DE is not properly configured, Qt does not load the system's
icon theme. In this scenario we try to use Qt's built-in icons.

Due to a bug, this was not working.

On the other hand, in order to display the icons of the system, one can
follow these instructions:
https://github.com/evilsocket/opensnitch/wiki/GUI-known-problems#no-icons-on-the-gui

Closes #998
This commit is contained in:
Gustavo Iñiguez Goia 2023-07-27 00:58:03 +02:00
parent 071f95572d
commit 7c7733483c
Failed to generate hash of commit
8 changed files with 70 additions and 65 deletions

View file

@ -39,9 +39,9 @@ class FirewallDialog(QtWidgets.QDialog, uic.loadUiType(DIALOG_UI_PATH)[0]):
self.comboProfile.setVisible(False)
self.lblProfile.setVisible(False)
self.secHighIcon = Icons.new("security-high")
self.secMediumIcon = Icons.new("security-medium")
self.secLowIcon = Icons.new("security-low")
self.secHighIcon = Icons.new(self, "security-high")
self.secMediumIcon = Icons.new(self, "security-medium")
self.secLowIcon = Icons.new(self, "security-low")
self.lblStatusIcon.setPixmap(self.secHighIcon.pixmap(96, 96))
self._fwrule_dialog = FwRuleDialog(appicon=self.appicon)
@ -76,11 +76,11 @@ class FirewallDialog(QtWidgets.QDialog, uic.loadUiType(DIALOG_UI_PATH)[0]):
if QtGui.QIcon.hasThemeIcon("document-new"):
return
closeIcon = Icons.new("window-close")
excludeIcon = Icons.new("go-up")
allowInIcon = Icons.new("go-down")
newIcon = Icons.new("document-new")
helpIcon = Icons.new("help-browser")
closeIcon = Icons.new(self, "window-close")
excludeIcon = Icons.new(self, "go-up")
allowInIcon = Icons.new(self, "go-down")
newIcon = Icons.new(self, "document-new")
helpIcon = Icons.new(self, "help-browser")
self.cmdClose.setIcon(closeIcon)
self.cmdAllowOUTService.setIcon(excludeIcon)
self.cmdAllowINService.setIcon(allowInIcon)

View file

@ -352,12 +352,12 @@ The value must be in the format: VALUE/UNITS/TIME, for example:
# -----------------------------------------------------------
saveIcon = Icons.new("document-save")
closeIcon = Icons.new("window-close")
delIcon = Icons.new("edit-delete")
addIcon = Icons.new("list-add")
remIcon = Icons.new("list-remove")
helpIcon = Icons.new("help-browser")
saveIcon = Icons.new(self, "document-save")
closeIcon = Icons.new(self, "window-close")
delIcon = Icons.new(self, "edit-delete")
addIcon = Icons.new(self, "list-add")
remIcon = Icons.new(self, "list-remove")
helpIcon = Icons.new(self, "help-browser")
self.cmdSave.setIcon(saveIcon)
self.cmdDelete.setIcon(delIcon)
self.cmdClose.setIcon(closeIcon)
@ -385,7 +385,6 @@ The value must be in the format: VALUE/UNITS/TIME, for example:
self.comboDirection.currentIndexChanged.connect(self._cb_direction_changed)
return True
def _close(self):
self.comboDirection.currentIndexChanged.disconnect(self._cb_direction_changed)
self.hide()

View file

@ -88,17 +88,17 @@ class PreferencesDialog(QtWidgets.QDialog, uic.loadUiType(DIALOG_UI_PATH)[0]):
if QtGui.QIcon.hasThemeIcon("emblem-default"):
return
saveIcon = Icons.new("document-save")
applyIcon = Icons.new("emblem-default")
delIcon = Icons.new("edit-delete")
closeIcon = Icons.new("window-close")
openIcon = Icons.new("document-open")
helpIcon = Icons.new("help-browser")
addIcon = Icons.new("list-add")
delIcon = Icons.new("list-remove")
allowIcon = Icons.new("emblem-default")
denyIcon = Icons.new("emblem-important")
rejectIcon = Icons.new("window-close")
saveIcon = Icons.new(self, "document-save")
applyIcon = Icons.new(self, "emblem-default")
delIcon = Icons.new(self, "edit-delete")
closeIcon = Icons.new(self, "window-close")
openIcon = Icons.new(self, "document-open")
helpIcon = Icons.new(self, "help-browser")
addIcon = Icons.new(self, "list-add")
delIcon = Icons.new(self, "list-remove")
allowIcon = Icons.new(self, "emblem-default")
denyIcon = Icons.new(self, "emblem-important")
rejectIcon = Icons.new(self, "window-close")
self.applyButton.setIcon(applyIcon)
self.cancelButton.setIcon(closeIcon)
self.acceptButton.setIcon(saveIcon)

View file

@ -86,10 +86,10 @@ class ProcessDetailsDialog(QtWidgets.QDialog, uic.loadUiType(DIALOG_UI_PATH)[0])
if QtGui.QIcon.hasThemeIcon("window-close"):
return
closeIcon = Icons.new("window-close")
closeIcon = Icons.new(self, "window-close")
self.cmdClose.setIcon(closeIcon)
self.iconStart = Icons.new("media-playback-start")
self.iconPause = Icons.new("media-playback-pause")
self.iconStart = Icons.new(self, "media-playback-start")
self.iconPause = Icons.new(self, "media-playback-pause")
@QtCore.pyqtSlot(ui_pb2.NotificationReply)
def _cb_notification_callback(self, reply):

View file

@ -105,9 +105,9 @@ class PromptDialog(QtWidgets.QDialog, uic.loadUiType(DIALOG_UI_PATH)[0]):
self.checkDstPort.clicked.connect(self._button_clicked)
self.checkUserID.clicked.connect(self._button_clicked)
self.allowIcon = Icons.new("emblem-default")
denyIcon = Icons.new("emblem-important")
rejectIcon = Icons.new("window-close")
self.allowIcon = Icons.new(self, "emblem-default")
denyIcon = Icons.new(self, "emblem-important")
rejectIcon = Icons.new(self, "window-close")
self._default_action = self._cfg.getInt(self._cfg.DEFAULT_ACTION_KEY)

View file

@ -93,10 +93,10 @@ class RulesEditorDialog(QtWidgets.QDialog, uic.loadUiType(DIALOG_UI_PATH)[0]):
if QtGui.QIcon.hasThemeIcon("emblem-default"):
return
applyIcon = Icons.new("emblem-default")
denyIcon = Icons.new("emblem-important")
rejectIcon = Icons.new("window-close")
openIcon = Icons.new("document-open")
applyIcon = Icons.new(self, "emblem-default")
denyIcon = Icons.new(self, "emblem-important")
rejectIcon = Icons.new(self, "window-close")
openIcon = Icons.new(self, "document-open")
self.actionAllowRadio.setIcon(applyIcon)
self.actionDenyRadio.setIcon(denyIcon)
self.actionRejectRadio.setIcon(rejectIcon)

View file

@ -397,15 +397,15 @@ class StatsDialog(QtWidgets.QDialog, uic.loadUiType(DIALOG_UI_PATH)[0]):
self.comboRulesFilter.setVisible(False)
menu = QtWidgets.QMenu()
menu.addAction(Icons.new("go-up"), QC.translate("stats", "Export rules")).triggered.connect(self._on_menu_node_export_clicked)
menu.addAction(Icons.new("go-down"), QC.translate("stats", "Import rules")).triggered.connect(self._on_menu_node_import_clicked)
menu.addAction(Icons.new(self, "go-up"), QC.translate("stats", "Export rules")).triggered.connect(self._on_menu_node_export_clicked)
menu.addAction(Icons.new(self, "go-down"), QC.translate("stats", "Import rules")).triggered.connect(self._on_menu_node_import_clicked)
self.nodeActionsButton.setMenu(menu)
menuActions = QtWidgets.QMenu()
menuActions.addAction(Icons.new("go-up"), QC.translate("stats", "Export rules")).triggered.connect(self._on_menu_export_clicked)
menuActions.addAction(Icons.new("go-down"), QC.translate("stats", "Import rules")).triggered.connect(self._on_menu_import_clicked)
menuActions.addAction(Icons.new("document-save"), QC.translate("stats", "Export events to CSV")).triggered.connect(self._on_menu_export_csv_clicked)
menuActions.addAction(Icons.new("application-exit"), QC.translate("stats", "Quit")).triggered.connect(self._on_menu_exit_clicked)
menuActions.addAction(Icons.new(self, "go-up"), QC.translate("stats", "Export rules")).triggered.connect(self._on_menu_export_clicked)
menuActions.addAction(Icons.new(self, "go-down"), QC.translate("stats", "Import rules")).triggered.connect(self._on_menu_import_clicked)
menuActions.addAction(Icons.new(self, "document-save"), QC.translate("stats", "Export events to CSV")).triggered.connect(self._on_menu_export_csv_clicked)
menuActions.addAction(Icons.new(self, "application-exit"), QC.translate("stats", "Quit")).triggered.connect(self._on_menu_exit_clicked)
self.actionsButton.setMenu(menuActions)
# translations must be done here, otherwise they don't take effect
@ -605,8 +605,8 @@ class StatsDialog(QtWidgets.QDialog, uic.loadUiType(DIALOG_UI_PATH)[0]):
'users.csv'
)
self.iconStart = Icons.new("media-playback-start")
self.iconPause = Icons.new("media-playback-pause")
self.iconStart = Icons.new(self, "media-playback-start")
self.iconPause = Icons.new(self, "media-playback-pause")
self.fwTreeEdit = QtWidgets.QPushButton()
self.fwTreeEdit.setIcon(QtGui.QIcon().fromTheme("preferences-desktop"))
@ -663,20 +663,20 @@ class StatsDialog(QtWidgets.QDialog, uic.loadUiType(DIALOG_UI_PATH)[0]):
if QtGui.QIcon.hasThemeIcon("document-new"):
return
newRuleIcon = Icons.new("document-new")
delRuleIcon = Icons.new("edit-delete")
editRuleIcon = Icons.new("accessories-text-editor")
saveIcon = Icons.new("document-save")
prefsIcon = Icons.new("preferences-system")
searchIcon = Icons.new("system-search")
clearIcon = Icons.new("edit-clear-all")
leftArrowIcon = Icons.new("go-previous")
fwIcon = Icons.new("security-high")
optsIcon = Icons.new("format-justify-fill")
helpIcon = Icons.new("help-browser")
eventsIcon = Icons.new("view-sort-ascending")
rulesIcon = Icons.new("address-book-new")
procsIcon = Icons.new("system-run")
newRuleIcon = Icons.new(self, "document-new")
delRuleIcon = Icons.new(self, "edit-delete")
editRuleIcon = Icons.new(self, "accessories-text-editor")
saveIcon = Icons.new(self, "document-save")
prefsIcon = Icons.new(self, "preferences-system")
searchIcon = Icons.new(self, "system-search")
clearIcon = Icons.new(self, "edit-clear-all")
leftArrowIcon = Icons.new(self, "go-previous")
fwIcon = Icons.new(self, "security-high")
optsIcon = Icons.new(self, "format-justify-fill")
helpIcon = Icons.new(self, "help-browser")
eventsIcon = Icons.new(self, "view-sort-ascending")
rulesIcon = Icons.new(self, "address-book-new")
procsIcon = Icons.new(self, "system-run")
if QtGui.QIcon().hasThemeIcon("preferences-desktop") == False:
self.fwTreeEdit.setText("+")

View file

@ -441,9 +441,9 @@ class Icons():
'document-save': "SP_DialogSaveButton",
'document-open': "SP_DirOpenIcon",
'format-justify-fill': "SP_FileDialogDetailedView",
'preferences-system': "SP_FileDialogDetailedView",
'preferences-system': "SP_FileDialogListView",
'preferences-desktop': "SP_FileDialogListView",
'security-high': "SP_VistaShield",
'edit-clear-all': "SP_DialogResetButton",
'go-previous': "SP_ArrowLeft",
'go-jump': "SP_CommandLink",
'go-down': "SP_TitleBarUnshadeButton",
@ -461,17 +461,23 @@ class Icons():
'system-search': "SP_FileDialogContentsView",
'application-exit': "SP_TitleBarCloseButton",
'view-sort-ascending': "SP_ToolBarVerticalExtensionButton",
'address-book-new': ""
'address-book-new': "",
'media-playback-start': "SP_MediaPlay",
'media-playback-pause': "SP_MediaPause",
'system-search': "SP_FileDialogContentsView",
'accessories-text-editor': "SP_DialogOpenButton",
'edit-clear-all': "SP_DialogResetButton",
'reload': "SP_DialogResetButton"
}
@staticmethod
def new(icon_name):
def new(widget, icon_name):
icon = QtGui.QIcon.fromTheme(icon_name, QtGui.QIcon.fromTheme(icon_name + "-symbolic"))
if icon.isNull():
try:
return self.style().standardIcon(getattr(QtWidgets.QStyle, NewIcon.defaults[icon_name]))
except:
pass
return widget.style().standardIcon(getattr(QtWidgets.QStyle, Icons.defaults[icon_name]))
except Exception as e:
print("Qt standardIcon exception:", icon_name, ",", e)
return icon