From 413cebe40f44b1739261aaaaf534cf57af7e36f7 Mon Sep 17 00:00:00 2001 From: Daniel Pavel Date: Sat, 27 Jul 2013 17:59:34 +0200 Subject: [PATCH] delay some UI initialization until necessary --- lib/solaar/ui/icons.py | 60 +++++++++++++++++++++++++++-------------- lib/solaar/ui/tray.py | 10 +++---- lib/solaar/ui/window.py | 6 ++--- 3 files changed, 48 insertions(+), 28 deletions(-) diff --git a/lib/solaar/ui/icons.py b/lib/solaar/ui/icons.py index 275bd30e..fd836fec 100644 --- a/lib/solaar/ui/icons.py +++ b/lib/solaar/ui/icons.py @@ -69,29 +69,41 @@ def _look_for_application_icons(): del _environ # del _path -_default_theme = Gtk.IconTheme.get_default() -for p in _look_for_application_icons(): - _default_theme.prepend_search_path(p) -if _log.isEnabledFor(_DEBUG): - _log.debug("icon theme paths: %s", _default_theme.get_search_path()) -# -# -# +_default_theme = None +_has_gpm_icons = None +_has_oxygen_icons = None +_has_gnome_icons = None +_has_elementary_icons = None -_has_gpm_icons = _default_theme.has_icon('gpm-battery-020-charging') -_has_oxygen_icons = _default_theme.has_icon('battery-charging-caution') and \ - _default_theme.has_icon('battery-charging-040') -_has_gnome_icons = _default_theme.has_icon('battery-caution-charging') and \ - _default_theme.has_icon('battery-full-charged') -_has_elementary_icons = _default_theme.has_icon('battery-020-charging') -if _log.isEnabledFor(_DEBUG): - _log.debug("detected icon sets: gpm %s, oxygen %s, gnome %s, elementary %s", - _has_gpm_icons, _has_oxygen_icons, _has_gnome_icons, _has_elementary_icons) -if (not _has_gpm_icons and not _has_oxygen_icons and - not _has_gnome_icons and not _has_elementary_icons): - _log.warning("failed to detect a known icon set") +def _init_icon_paths(): + global _default_theme + if _default_theme: + return + + _default_theme = Gtk.IconTheme.get_default() + for p in _look_for_application_icons(): + _default_theme.prepend_search_path(p) + if _log.isEnabledFor(_DEBUG): + _log.debug("icon theme paths: %s", _default_theme.get_search_path()) + + global _has_gpm_icons, _has_oxygen_icons, _has_gnome_icons, _has_elementary_icons + + _has_gpm_icons = _default_theme.has_icon('gpm-battery-020-charging') + _has_oxygen_icons = _default_theme.has_icon('battery-charging-caution') and \ + _default_theme.has_icon('battery-charging-040') + _has_gnome_icons = _default_theme.has_icon('battery-caution-charging') and \ + _default_theme.has_icon('battery-full-charged') + _has_elementary_icons = _default_theme.has_icon('battery-020-charging') + + if _log.isEnabledFor(_DEBUG): + _log.debug("detected icon sets: gpm %s, oxygen %s, gnome %s, elementary %s", + _has_gpm_icons, _has_oxygen_icons, _has_gnome_icons, _has_elementary_icons) + + if (not _has_gpm_icons and not _has_oxygen_icons and + not _has_gnome_icons and not _has_elementary_icons): + _log.warning("failed to detect a known icon set") # # @@ -106,6 +118,8 @@ def battery(level=None, charging=False): return icon_name def _battery_icon_name(level, charging): + _init_icon_paths() + if level is None or level < 0: return 'gpm-battery-missing' \ if _has_gpm_icons and _default_theme.has_icon('gpm-battery-missing') \ @@ -186,6 +200,8 @@ def device_icon_set(name='_', kind=None): def device_icon_file(name, kind=None, size=_LARGE_SIZE): + _init_icon_paths() + icon_set = device_icon_set(name, kind) assert icon_set for n in reversed(icon_set.names): @@ -194,6 +210,8 @@ def device_icon_file(name, kind=None, size=_LARGE_SIZE): def device_icon_name(name, kind=None): + _init_icon_paths() + icon_set = device_icon_set(name, kind) assert icon_set for n in reversed(icon_set.names): @@ -202,6 +220,8 @@ def device_icon_name(name, kind=None): def icon_file(name, size=_LARGE_SIZE): + _init_icon_paths() + if _default_theme.has_icon(name): theme_icon = _default_theme.lookup_icon(name, size, 0) file_name = theme_icon.get_filename() diff --git a/lib/solaar/ui/tray.py b/lib/solaar/ui/tray.py index 05149da6..d0b79cbc 100644 --- a/lib/solaar/ui/tray.py +++ b/lib/solaar/ui/tray.py @@ -19,7 +19,7 @@ from __future__ import absolute_import, division, print_function, unicode_literals -from logging import getLogger, DEBUG as _DEBUG, INFO as _INFO +from logging import getLogger, DEBUG as _DEBUG _log = getLogger(__name__) del getLogger @@ -71,8 +71,8 @@ try: # raise ImportError from gi.repository import AppIndicator3 - if _log.isEnabledFor(_INFO): - _log.info("using AppIndicator3") + if _log.isEnabledFor(_DEBUG): + _log.debug("using AppIndicator3") _last_scroll = 0 def _scroll(ind, _ignore, direction): @@ -201,8 +201,8 @@ try: except ImportError: - if _log.isEnabledFor(_INFO): - _log.info("using StatusIcon") + if _log.isEnabledFor(_DEBUG): + _log.debug("using StatusIcon") def _create(menu): icon = Gtk.StatusIcon.new_from_icon_name(_icons.TRAY_INIT) diff --git a/lib/solaar/ui/window.py b/lib/solaar/ui/window.py index 496082e6..44b24dea 100644 --- a/lib/solaar/ui/window.py +++ b/lib/solaar/ui/window.py @@ -76,9 +76,6 @@ _NANO_RECEIVER_TEXT = ( # create UI layout # -Gtk.Window.set_default_icon_name(NAME.lower()) -Gtk.Window.set_default_icon_from_file(_icons.icon_file(NAME.lower())) - def _new_button(label, icon_name=None, icon_size=_NORMAL_BUTTON_ICON_SIZE, tooltip=None, toggle=False, clicked=None): if toggle: b = Gtk.ToggleButton() @@ -734,6 +731,9 @@ _window = None def init(): + Gtk.Window.set_default_icon_name(NAME.lower()) + Gtk.Window.set_default_icon_from_file(_icons.icon_file(NAME.lower())) + global _model, _tree, _details, _info, _empty, _window _model = Gtk.TreeStore(*_COLUMN_TYPES) _tree = _create_tree(_model)