def on_properties_initialized(self): ConfigObject.on_properties_initialized(self) # launch mousetweaks on startup if necessary if not self._iface and \ self.dwell_click_enabled: self._launch_daemon(0.5)
def __init__(self): self._click_type_callbacks = [] if not "dbus" in globals(): raise ImportError("python-dbus unavailable") ConfigObject.__init__(self) MouseController.__init__(self) self.launcher = DelayedLauncher() self._daemon_running_notify_callbacks = [] # Check if mousetweaks' schema is installed. # Raises SchemaError if it isn't. self.mousetweaks = ConfigObject(None, self.MOUSETWEAKS_SCHEMA_ID) # connect to session bus self._bus = dbus.SessionBus() self._bus.add_signal_receiver(self._on_name_owner_changed, "NameOwnerChanged", dbus.BUS_DAEMON_IFACE, arg0=self.MT_DBUS_NAME) # Initial state proxy = self._bus.get_object(dbus.BUS_DAEMON_NAME, dbus.BUS_DAEMON_PATH) result = proxy.NameHasOwner(self.MT_DBUS_NAME, dbus_interface=dbus.BUS_DAEMON_IFACE) self._set_connection(bool(result))
def __init__(self): self._click_type_callbacks = [] if not "dbus" in globals(): raise ImportError("python-dbus unavailable") ConfigObject.__init__(self) ClickSimulator.__init__(self) self.launcher = DelayedLauncher() self._daemon_running_notify_callbacks = [] # Check if mousetweaks' schema is installed. # Raises SchemaError if it isn't. self.mousetweaks = ConfigObject(None, self.MOUSETWEAKS_SCHEMA_ID) # connect to session bus try: self._bus = dbus.SessionBus() except dbus.exceptions.DBusException: raise RuntimeError("D-Bus session bus unavailable") self._bus.add_signal_receiver(self._on_name_owner_changed, "NameOwnerChanged", dbus.BUS_DAEMON_IFACE, arg0=self.MT_DBUS_NAME) # Initial state proxy = self._bus.get_object(dbus.BUS_DAEMON_NAME, dbus.BUS_DAEMON_PATH) result = proxy.NameHasOwner(self.MT_DBUS_NAME, dbus_interface=dbus.BUS_DAEMON_IFACE) self._set_connection(bool(result))
def __init__(self): self._click_type_callbacks = [] if not "dbus" in globals(): raise ImportError("pythonx-dbus unavailable") ConfigObject.__init__(self) MouseController.__init__(self) self.launcher = DelayedLauncher() self._daemon_running_notify_callbacks = [] # Check that the mousetweaks schema is installed. # Raises a SchemaError if not. self.mousetweaks = ConfigObject(None, self.MOUSETWEAKS_SCHEMA_ID) # Use D-bus main loop by default DBusGMainLoop(set_as_default=True) # connect to session bus self._bus = dbus.SessionBus() self._bus.add_signal_receiver(self._on_name_owner_changed, "NameOwnerChanged", dbus.BUS_DAEMON_IFACE, arg0=self.MT_DBUS_NAME) # Initial state proxy = self._bus.get_object(dbus.BUS_DAEMON_NAME, dbus.BUS_DAEMON_PATH) result = proxy.NameHasOwner(self.MT_DBUS_NAME, dbus_interface=dbus.BUS_DAEMON_IFACE) self._set_connection(bool(result))
def _convert_sysdef_key(self, gskey, sysdef, value): if sysdef == "resize-handles": return Config._string_to_handles(value) else: return ConfigObject._convert_sysdef_key(self, gskey, sysdef, value)
def init_from_gsettings(self): """ Overloaded to migrate old dconf data to a new gsettings schema """ ConfigObject.init_from_gsettings(self) import osk util = osk.Util() def migrate_dconf_value(dconf_key, config_object, gskey): try: value = util.read_dconf_key(dconf_key) except (ValueError, TypeError) as e: value = None _logger.warning("migrate_dconf_value: {}".format(e)) if not value is None: setattr(config_object, gskey.prop, value) _logger.debug("migrate_dconf_value: {key} -> {path} {gskey}, value={value}" \ .format(key=dconf_key, path=co.schema, gskey=gskey.key, value=value)) def migrate_dconf_key(dconf_key, config_object, key): gskey = config_object.find_key(key) if gskey.is_default(): migrate_dconf_value(dconf_key, config_object, gskey) # --- onboard 0.96 -> 0.97 --------------------------------------------- format = Version.from_string(self.schema_version) if format < SCHEMA_VERSION_0_97: # window rect moves from apps.onboard to # apps.onboard.window.landscape/portrait co = self.window.landscape if co.gskeys["x"].is_default() and \ co.gskeys["y"].is_default() and \ co.gskeys["width"].is_default() and \ co.gskeys["height"].is_default(): co.settings.delay() migrate_dconf_value("/apps/onboard/x", co, co.gskeys["x"]) migrate_dconf_value("/apps/onboard/y", co, co.gskeys["y"]) migrate_dconf_value("/apps/onboard/width", co, co.gskeys["width"]) migrate_dconf_value("/apps/onboard/height", co, co.gskeys["height"]) co.settings.apply() # icon-palette rect moves from apps.onboard.icon-palette to # apps.onboard.icon-palette.landscape/portrait co = self.icp.landscape if co.gskeys["x"].is_default() and \ co.gskeys["y"].is_default() and \ co.gskeys["width"].is_default() and \ co.gskeys["height"].is_default(): co.settings.delay() migrate_dconf_value("/apps/onboard/icon-palette/x", co, co.gskeys["x"]) migrate_dconf_value("/apps/onboard/icon-palette/y", co, co.gskeys["y"]) migrate_dconf_value("/apps/onboard/icon-palette/width", co, co.gskeys["width"]) migrate_dconf_value("/apps/onboard/icon-palette/height", co, co.gskeys["height"]) co.settings.apply() # move keys from root to window co = self.window migrate_dconf_key("/apps/onboard/window-decoration", co, "window-decoration") migrate_dconf_key("/apps/onboard/force-to-top", co, "force-to-top") migrate_dconf_key("/apps/onboard/transparent-background", co, "transparent-background") migrate_dconf_key("/apps/onboard/transparency", co, "transparency") migrate_dconf_key("/apps/onboard/background-transparency", co, "background-transparency") migrate_dconf_key("/apps/onboard/enable-inactive-transparency", co, "enable-inactive-transparency") migrate_dconf_key("/apps/onboard/inactive-transparency", co, "inactive-transparency") migrate_dconf_key("/apps/onboard/inactive-transparency-delay", co, "inactive-transparency-delay") # accessibility keys move from root to universal-access co = self.universal_access migrate_dconf_key("/apps/onboard/hide-click-type-window", co, "hide-click-type-window") migrate_dconf_key("/apps/onboard/enable-click-type-window-on-exit", co, "enable-click-type-window-on-exit") # move keys from root to keyboard co = self.keyboard migrate_dconf_key("/apps/onboard/show-click-buttons", co, "show-click-buttons") self.schema_version = SCHEMA_VERSION.to_string()
def init(self): """ Second initialization stage. Call this after single instance checking on application start. """ # call base class constructor once logging is available try: ConfigObject.__init__(self) except SchemaError as e: _logger.error(unicode_str(e)) sys.exit() # init paths self.install_dir = self._get_install_dir() self.user_dir = self._get_user_dir() # migrate old user dir ".sok" to ".onboard" old_user_dir = os.path.join(os.path.expanduser("~"), ".sok") user_dir = self.user_dir if not os.path.exists(user_dir) and os.path.exists(old_user_dir): _logger.info(_("Migrating user directory '{}' to '{}'.") \ .format(old_user_dir, user_dir)) try: copytree(old_user_dir, user_dir) except OSError as ex: # python >2.5 _logger.error(_("Failed to migrate user directory. ") + \ unicode_str(ex)) # Load system defaults (if there are any, not required). # Used for distribution specific settings, aka branding. paths = [os.path.join(self.install_dir, SYSTEM_DEFAULTS_FILENAME), os.path.join("/etc/onboard", SYSTEM_DEFAULTS_FILENAME)] self.load_system_defaults(paths) # initialize all property values self.init_properties(self.options) # Make sure there is a 'Default' entry when tracking the system theme. # 'Default' is the theme used when encountering an so far unknown # gtk-theme. 'Default' is added on first start and therefore a # corresponding system default is respected. theme_assocs = self.system_theme_associations if not "Default" in theme_assocs: theme_assocs["Default"] = self.theme self.system_theme_associations = theme_assocs # remember command line theme for system theme tracking if self.options.theme: self.remember_theme(self.theme) # load theme global Theme from Onboard.Appearance import Theme self.apply_theme() # give gtk theme a chance to take over self.update_theme_from_system_theme() # misc initializations self._last_snippets = dict(self.snippets) # store a copy # remember state of mousetweaks click-type window if self.mousetweaks: self.mousetweaks.old_click_type_window_visible = \ self.mousetweaks.click_type_window_visible if self.mousetweaks.is_active() and \ self.universal_access.hide_click_type_window: self.mousetweaks.click_type_window_visible = False # remember if we are running under GDM self.running_under_gdm = 'RUNNING_UNDER_GDM' in os.environ # tell config objects that their properties are valid now self.on_properties_initialized() _logger.debug("Leaving init")