def get_shortcuts():
    values = []
    dcm = DConfManager('org.gnome.desktop.wm.keybindings')
    for key in dcm.get_keys():
        for each_element in dcm.get_value(key):
            values.append(each_element)
    dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys')
    for key in dcm.get_keys():
        each_element = dcm.get_value(key)
        if type(each_element) == str:
            values.append(each_element)
    return values
def get_shortcuts():
	values = []
	dcm = DConfManager('org.gnome.desktop.wm.keybindings')
	for key in dcm.get_keys():
		for each_element in dcm.get_value(key):
			values.append(each_element)
	dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys')
	for key in dcm.get_keys():
		each_element = dcm.get_value(key)
		if type(each_element)==str:
			values.append(each_element)	
	return values
    def save_preferences(self):
        configuration = Configuration()
        configuration.set('first-time', False)
        configuration.set('version', comun.VERSION)
        if self.radiobutton1.get_active() is True:
            configuration.set('theme', 'light')
        elif self.radiobutton2.get_active() is True:
            configuration.set('theme', 'dark')
        else:
            configuration.set('theme', 'normal')

        if self.on_start['none'].get_active() is True:
            configuration.set('on_start', 0)
        elif self.on_start['enable'].get_active() is True:
            configuration.set('on_start', 1)
        else:
            configuration.set('on_start', -1)

        if self.on_end['none'].get_active() is True:
            configuration.set('on_end', 0)
        elif self.on_end['enable'].get_active() is True:
            configuration.set('on_end', 1)
        else:
            configuration.set('on_end', -1)

        configuration.set('autostart', self.checkbutton1.get_active())
        set_autostart(self.checkbutton1.get_active())
        configuration.set('on_mouse_plugged', self.checkbutton2.get_active())

        configuration.set('start_hidden', self.checkbutton5.get_active())
        configuration.set('show_notifications', self.checkbutton6.get_active())

        configuration.set('disable_on_typing', self.checkbutton8.get_active())
        configuration.set('interval', self.interval.get_value())

        configuration.set('natural_scrolling', self.checkbutton46.get_active())
        tp = Touchpad()
        if tp.is_there_touchpad():
            tipo = tp.get_driver()
            if tipo == SYNAPTICS:
                configuration.set(
                    'two_finger_scrolling',
                    self.two_finger_scrolling.get_active())
                configuration.set(
                    'edge_scrolling',
                    self.edge_scrolling.get_active())
                configuration.set(
                    'cicular_scrolling',
                    self.cicular_scrolling.get_active())
                configuration.set(
                    'right-top-corner',
                    get_selected_value_in_combo(self.right_top_corner))
                configuration.set(
                    'right-bottom-corner',
                    get_selected_value_in_combo(self.right_bottom_corner))
                configuration.set(
                    'left-top-corner',
                    get_selected_value_in_combo(self.left_top_corner))
                configuration.set(
                    'left-bottom-corner',
                    get_selected_value_in_combo(self.right_bottom_corner))
                configuration.set(
                    'one-finger-tap',
                    get_selected_value_in_combo(self.one_finger_tap))
                if tp.get_capabilities()['two-finger-detection']:
                    configuration.set(
                        'two-finger-tap',
                        get_selected_value_in_combo(self.two_finger_tap))
                if tp.get_capabilities()['three-finger-detection']:
                    configuration.set(
                        'three-finger-tap',
                        get_selected_value_in_combo(self.three_finger_tap))
            elif tipo == LIBINPUT:
                if tp.can_two_finger_scrolling():
                    configuration.set(
                        'two_finger_scrolling',
                        self.two_finger_scrolling.get_active())
                if tp.can_edge_scrolling():
                    configuration.set(
                        'edge_scrolling',
                        self.edge_scrolling.get_active())
                if tp.has_tapping():
                    configuration.set('tapping', self.tapping.get_active())
                configuration.set('speed', self.speed.get_value())
            elif tipo == EVDEV:
                configuration.set('speed', self.speed.get_value())

        import watchdog
        configuration.set('faulty-devices', list(watchdog.faulty_devices))

        configuration.save()
        desktop_environment = get_desktop_environment()

        if desktop_environment in ['gnome', 'unity', 'cinnamon', 'mate']:
            self.ctrl.set_active(True)
            self.alt.set_active(True)

        print(desktop_environment)
        if desktop_environment in ['gnome', 'unity']:
            dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys.\
custom-keybindings.touchpad-indicator')
            if self.checkbutton0.get_active() and\
                    len(self.entry11.get_text()) > 0:
                key1 = ''
                key2 = None
                if self.ctrl.get_active() is True:
                    key1 += '<Control>'
                    key2 = '<Primary>'
                if self.alt.get_active() is True:
                    key1 += '<Alt>'
                    if key2 is not None:
                        key2 += '<Alt>'
                key1 += self.entry11.get_text().lower()
                if key2 is not None:
                    key2 += self.entry11.get_text().lower()
                if key1 not in get_shortcuts() and key2 not in get_shortcuts():
                    dcm = DConfManager('org.gnome.settings-daemon.plugins.\
media-keys')
                    shortcuts = dcm.get_value('custom-keybindings')
                    key = '/org/gnome/settings-daemon/plugins/media-keys/\
custom-keybindings/touchpad-indicator/'
                    if key in shortcuts:
                        shortcuts.pop(shortcuts.index(key))
                        dcm.set_value('custom-keybindings', shortcuts)
                    if key not in shortcuts:
                        shortcuts.append(key)
                        dcm.set_value('custom-keybindings', shortcuts)
                    dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys.\
custom-keybindings.touchpad-indicator')
                    dcm.set_value('name', 'Touchpad-Indicator')
                    dcm.set_value('binding', key1)
                    dcm.set_value('command', '/usr/bin/python3 \
/usr/share/touchpad-indicator/change_touchpad_state.py')
            else:
                dcm.set_value('binding', '')
                dcm = DConfManager('org.gnome.settings-daemon.plugins.\
media-keys')
                shortcuts = dcm.get_value('custom-keybindings')
                key = '/org/gnome/settings-daemon/plugins/media-keys/\
custom-keybindings/touchpad-indicator/'
                if key in shortcuts:
                    shortcuts.pop(shortcuts.index(key))
                    dcm.set_value('custom-keybindings', shortcuts)
        elif desktop_environment == 'cinnamon':
            dcm = DConfManager('org.cinnamon.desktop.keybindings.\
custom-keybindings.touchpad-indicator')
            if self.checkbutton0.get_active() and\
                    len(self.entry11.get_text()) > 0:
                key1 = ''
                key2 = None
                if self.ctrl.get_active() is True:
                    key1 += '<Control>'
                    key2 = '<Primary>'
                if self.alt.get_active() is True:
                    key1 += '<Alt>'
                    if key2 is not None:
                        key2 += '<Alt>'
                key1 += self.entry11.get_text().lower()
                if key2 is not None:
                    key2 += self.entry11.get_text().lower()
                if key1 not in get_shortcuts() and key2 not in get_shortcuts():
                    dcm.set_value('name', 'Touchpad-Indicator')
                    dcm.set_value('binding', [key1])
                    dcm.set_value('command', '/usr/bin/python3 \
/usr/share/touchpad-indicator/change_touchpad_state.py')
                dcm = DConfManager('org.cinnamon.desktop.keybindings')
                shortcuts = dcm.get_value('custom-list')
                if 'touchpad-indicator' in shortcuts:
                    shortcuts.pop(shortcuts.index('touchpad-indicator'))
                    dcm.set_value('custom-list', shortcuts)
                if 'touchpad-indicator' not in shortcuts:
                    shortcuts.append('touchpad-indicator')
                    dcm.set_value('custom-list', shortcuts)
            else:
                dcm.set_value('binding', [])
                dcm = DConfManager('org.cinnamon.desktop.keybindings')
                shortcuts = dcm.get_value('custom-list')
                if 'touchpad-indicator' in shortcuts:
                    shortcuts.pop(shortcuts.index('touchpad-indicator'))
                    dcm.set_value('custom-list', shortcuts)
        elif desktop_environment == 'mate':
            dcm = DConfManager('org.mate.desktop.keybindings.\
touchpad-indicator')
            if self.checkbutton0.get_active() and\
                    len(self.entry11.get_text()) > 0:
                key1 = ''
                key2 = None
                if self.ctrl.get_active() is True:
                    key1 += '<Control>'
                    key2 = '<Primary>'
                if self.alt.get_active() is True:
                    key1 += '<Alt>'
                    if key2 is not None:
                        key2 += '<Alt>'
                key1 += self.entry11.get_text().lower()
                if key2 is not None:
                    key2 += self.entry11.get_text().lower()
                if key1 not in get_shortcuts() and key2 not in get_shortcuts():
                    dcm.set_value('name', 'Touchpad-Indicator')
                    dcm.set_value('binding', key1)
                    dcm.set_value('action', '/usr/bin/python3 \
/usr/share/touchpad-indicator/change_touchpad_state.py')
            else:
                dcm.set_value('binding', '')
        elif desktop_environment == 'xfce':
            if xfconfquery_exists():
                xfceconf = XFCEConfiguration('xfce4-keyboard-shortcuts')
                keys = xfceconf.search_for_value_in_properties_startswith(
                    '/commands/custom/',
                    '/usr/share/\
touchpad-indicator/change_touchpad_state.py')
                if keys:
                    for akey in keys:
                        xfceconf.reset_property(akey['key'])
                if self.checkbutton0.get_active():
                    key = key.replace('<Primary>', '<Control>')
                    xfceconf.set_property(
                        '/commands/custom/' + key,
                        '/usr/share/\
touchpad-indicator/change_touchpad_state.py')
def get_shortcuts():
    values = []
    de = get_desktop_environment()
    if de == 'gnome':
        dcm = DConfManager('org.gnome.desktop.wm.keybindings')
        for key in dcm.get_keys():
            for each_element in dcm.get_value(key):
                if type(each_element) == str:
                    values.append(each_element)
                elif type(each_element) == list:
                    values.extend(each_element)
        dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys')
        for key in dcm.get_keys():
            each_element = dcm.get_value(key)
            if type(each_element) == str:
                values.append(each_element)
            elif type(each_element) == list:
                values.extend(each_element)
    elif de == 'cinnamon':
        dcm = DConfManager('org.cinnamon.desktop.keybindings.media-keys')
        for key in dcm.get_keys():
            for each_element in dcm.get_value(key):
                if type(each_element) == str:
                    values.append(each_element)
                elif type(each_element) == list:
                    values.extend(each_element)
        dcm = DConfManager('org.cinnamon.desktop.keybindings.wm')
        for key in dcm.get_keys():
            for each_element in dcm.get_value(key):
                if type(each_element) == str:
                    values.append(each_element)
                elif type(each_element) == list:
                    values.extend(each_element)
    elif de == 'mate':
        dcm = DConfManager('org.mate.SettingsDaemon.plugins.media-keys')
        for key in dcm.get_keys():
            values.append(dcm.get_value(key))
    return values
    def load_preferences(self):
        configuration = Configuration()
        first_time = configuration.get('first-time')
        version = configuration.get('version')
        if first_time or version != comun.VERSION:
            configuration.set_defaults()
            configuration.read()
        if os.path.exists(comun.FILE_AUTO_START) and\
                not os.path.islink(comun.FILE_AUTO_START):
            os.remove(comun.FILE_AUTO_START)
        self.checkbutton1.set_active(os.path.islink(comun.FILE_AUTO_START))
        print(comun.FILE_AUTO_START)
        print('====', os.path.exists(comun.FILE_AUTO_START))
        self.checkbutton2.set_active(configuration.get('on_mouse_plugged'))

        desktop_environment = get_desktop_environment()
        print(desktop_environment)

        if desktop_environment == 'gnome' or\
                desktop_environment == 'unity':
            dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys.\
custom-keybindings.touchpad-indicator')
            shortcut = dcm.get_value('binding')
            if shortcut is None or len(shortcut) == 0:
                self.checkbutton0.set_active(False)
                self.entry11.set_text('')
            else:
                self.checkbutton0.set_active(True)
                self.ctrl.set_active(shortcut.find('<Control>') > -1)
                self.alt.set_active(shortcut.find('<Alt>') > -1)
                self.entry11.set_text(shortcut[-1:])
        elif desktop_environment == 'cinnamon':
            dcm = DConfManager('org.cinnamon.desktop.keybindings.\
custom-keybindings.touchpad-indicator')
            shortcuts = dcm.get_value('binding')
            if shortcuts is None or len(shortcuts) == 0:
                self.checkbutton0.set_active(False)
                self.entry11.set_text('')
            else:
                shortcut = shortcuts[0]
                self.checkbutton0.set_active(True)
                self.ctrl.set_active(shortcut.find('<Control>') > -1)
                self.alt.set_active(shortcut.find('<Alt>') > -1)
                self.entry11.set_text(shortcut[-1:])
        elif desktop_environment == 'mate':
            dcm = DConfManager('org.mate.desktop.keybindings.\
touchpad-indicator')
            shortcut = dcm.get_value('binding')
            if shortcut is None or len(shortcut) == 0:
                self.checkbutton0.set_active(False)
                self.entry11.set_text('')
            else:
                self.checkbutton0.set_active(True)
                self.ctrl.set_active(shortcut.find('<Control>') > -1)
                self.alt.set_active(shortcut.find('<Alt>') > -1)
                self.entry11.set_text(shortcut[-1:])
        option = configuration.get('on_start')
        if option == 0:
            self.on_start['none'].set_active(True)
        if option == 1:
            self.on_start['enable'].set_active(True)
        elif option == -1:
            self.on_start['disable'].set_active(True)

        option = configuration.get('on_end')
        if option == 0:
            self.on_end['none'].set_active(True)
        elif option == 1:
            self.on_end['enable'].set_active(True)
        elif option == -1:
            self.on_end['disable'].set_active(True)

        self.checkbutton5.set_active(configuration.get('start_hidden'))
        self.checkbutton6.set_active(configuration.get('show_notifications'))

        self.checkbutton8.set_active(configuration.get('disable_on_typing'))
        self.interval.set_value(configuration.get('interval'))
        self.label_interval.set_sensitive(self.checkbutton8.get_active())
        self.interval.set_sensitive(self.checkbutton8.get_active())

        option = configuration.get('theme')
        if option == 'light':
            self.radiobutton1.set_active(True)
        elif option == 'dark':
            self.radiobutton2.set_active(True)
        elif option == 'normal':
            self.radiobutton3.set_active(True)

        self.checkbutton46.set_active(configuration.get('natural_scrolling'))
        tp = Touchpad()
        if tp.is_there_touchpad():
            tipo = tp.get_driver()
            if tipo == SYNAPTICS:
                self.two_finger_scrolling.set_active(
                    configuration.get('two_finger_scrolling'))
                self.edge_scrolling.set_active(
                    configuration.get('edge_scrolling'))
                self.cicular_scrolling.set_active(
                    configuration.get('cicular_scrolling'))
                select_value_in_combo(self.right_top_corner,
                                      configuration.get('right-top-corner'))
                select_value_in_combo(self.right_bottom_corner,
                                      configuration.get('right-bottom-corner'))
                select_value_in_combo(self.left_top_corner,
                                      configuration.get('left-top-corner'))
                select_value_in_combo(self.left_bottom_corner,
                                      configuration.get('left-bottom-corner'))
                select_value_in_combo(self.one_finger_tap,
                                      configuration.get('one-finger-tap'))
                if tp.get_capabilities()['two-finger-detection']:
                    select_value_in_combo(
                        self.two_finger_tap,
                        configuration.get('two-finger-tap'))
                if tp.get_capabilities()['three-finger-detection']:
                    select_value_in_combo(
                        self.three_finger_tap,
                        configuration.get('three-finger-tap'))
            elif tipo == LIBINPUT:
                if tp.can_two_finger_scrolling():
                    self.two_finger_scrolling.set_active(
                        configuration.get('two_finger_scrolling'))
                if tp.can_edge_scrolling():
                    self.edge_scrolling.set_active(
                        configuration.get('edge_scrolling'))
                if tp.has_tapping():
                    self.tapping.set_active(configuration.get('tapping'))
            if self.speed is not None:
                self.speed.set_value(configuration.get('speed'))
	def save_preferences(self):
		configuration = Configuration()
		configuration.set('first-time',False)
		configuration.set('version',comun.VERSION)
		key=''
		if self.ctrl.get_active() == True:
			key+='<Primary>'
		if self.alt.get_active() == True:
			key+='<Alt>'
		key += self.entry11.get_text()		
		if self.radiobutton1.get_active() == True:
			theme = 'light'
		elif self.radiobutton2.get_active() == True:
			theme = 'dark'
		configuration.set('shortcut_enabled',self.checkbutton0.get_active())
		configuration.set('autostart',self.checkbutton1.get_active())
		create_or_remove_autostart(self.checkbutton1.get_active())
		configuration.set('on_mouse_plugged',self.checkbutton2.get_active())
		configuration.set('natural_scrolling',self.checkbutton46.get_active())
		configuration.set('enable_on_exit',self.checkbutton3.get_active())
		configuration.set('disable_on_exit',self.checkbutton4.get_active())
		configuration.set('start_hidden',self.checkbutton5.get_active())
		configuration.set('show_notifications',self.checkbutton6.get_active())
		configuration.set('disable_touchpad_on_start_indicator',self.checkbutton7.get_active())
		configuration.set('disable_on_typing',self.checkbutton8.get_active())
		configuration.set('seconds',self.seconds.get_value())
		configuration.set('shortcut',key)
		configuration.set('theme',theme)
		configuration.save()
		aclient = Synclient()
		aclient.set('VertEdgeScroll',1 if self.checkbutton41.get_active() else 0)
		aclient.set('HorizEdgeScroll',1 if self.checkbutton42.get_active() else 0)
		aclient.set('CircularScrolling',1 if self.checkbutton43.get_active() else 0)
		aclient.set('VertTwoFingerScroll',1 if self.checkbutton44.get_active() else 0)
		aclient.set('HorizTwoFingerScroll',1 if self.checkbutton45.get_active() else 0)
		aclient.set('TapButton1',self.combobox47.get_active())
		aclient.set('TapButton2',self.combobox48.get_active())
		aclient.set('TapButton3',self.combobox49.get_active())		
		if self.checkbutton46.get_active():
			aclient.set('VertScrollDelta',-abs(int(aclient.get('VertScrollDelta'))))
			aclient.set('HorizScrollDelta',-abs(int(aclient.get('HorizScrollDelta'))))
		else:
			aclient.set('VertScrollDelta',abs(int(aclient.get('VertScrollDelta'))))
			aclient.set('HorizScrollDelta',abs(int(aclient.get('HorizScrollDelta'))))
		desktop_environment = get_desktop_environment()
		if desktop_environment == 'gnome':
			print('gnom3')
			dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys')
			values = dcm.get_value('custom-keybindings')
			if self.checkbutton0.get_active():
				if '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/touchpad-indicator/' not in values:
					values.append('/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/touchpad-indicator/')
					dcm.set_value('custom-keybindings',values)			
				dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys.custom-keybindings.touchpad-indicator')
				print(dcm.set_value('binding',key))
				print(dcm.set_value('command','/usr/bin/python3 /opt/extras.ubuntu.com/touchpad-indicator/share/touchpad-indicator/change_touchpad_state.py'))
				print(dcm.set_value('name','Touchpad-Indicator key binding'))
			else:
				if '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/touchpad-indicator/' in values:
					values.remove('/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/touchpad-indicator/')
					dcm.set_value('custom-keybindings',values)
		elif desktop_environment == 'xfce':
			if xfconfquery_exists():
				xfceconf = XFCEConfiguration('xfce4-keyboard-shortcuts')
				keys = xfceconf.search_for_value_in_properties_startswith('/commands/custom/','/opt/extras.ubuntu.com/touchpad-indicator/share/touchpad-indicator/change_touchpad_state.py')
				if keys:
					for akey in keys:
						xfceconf.reset_property(akey['key'])
				if self.checkbutton0.get_active():
					key = key.replace('<Primary>','<Control>')
					xfceconf.set_property('/commands/custom/'+key,'/opt/extras.ubuntu.com/touchpad-indicator/share/touchpad-indicator/change_touchpad_state.py')		
    def save_preferences(self):
        configuration = Configuration()
        configuration.set('first-time', False)
        configuration.set('version', comun.VERSION)
        if self.radiobutton1.get_active() is True:
            configuration.set('theme', 'light')
        elif self.radiobutton2.get_active() is True:
            configuration.set('theme', 'dark')
        else:
            configuration.set('theme', 'normal')

        if self.on_start['none'].get_active() is True:
            configuration.set('on_start', 0)
        elif self.on_start['enable'].get_active() is True:
            configuration.set('on_start', 1)
        else:
            configuration.set('on_start', -1)

        if self.on_end['none'].get_active() is True:
            configuration.set('on_end', 0)
        elif self.on_end['enable'].get_active() is True:
            configuration.set('on_end', 1)
        else:
            configuration.set('on_end', -1)

        configuration.set('autostart', self.checkbutton1.get_active())
        set_autostart(self.checkbutton1.get_active())
        configuration.set('on_mouse_plugged', self.checkbutton2.get_active())

        configuration.set('start_hidden', self.checkbutton5.get_active())
        configuration.set('show_notifications', self.checkbutton6.get_active())

        configuration.set('disable_on_typing', self.checkbutton8.get_active())
        configuration.set('interval', self.interval.get_value())

        configuration.set('natural_scrolling', self.checkbutton46.get_active())
        tp = Touchpad()
        if tp.is_there_touchpad():
            tipo = tp._get_type(tp._get_ids()[0])
            if tipo == SYNAPTICS:
                configuration.set('two_finger_scrolling',
                                  self.two_finger_scrolling.get_active())
                configuration.set('edge_scrolling',
                                  self.edge_scrolling.get_active())
                configuration.set('cicular_scrolling',
                                  self.cicular_scrolling.get_active())

            elif tipo == LIBINPUT:
                if tp.can_two_finger_scrolling():
                    configuration.set('two_finger_scrolling',
                                      self.two_finger_scrolling.get_active())
                if tp.can_edge_scrolling():
                    configuration.set('edge_scrolling',
                                      self.edge_scrolling.get_active())
                if tp.has_tapping():
                    configuration.set('tapping', self.tapping.get_active())
                configuration.set('speed', self.speed.get_value())
            elif tipo == EVDEV:
                configuration.set('speed', self.speed.get_value())

        configuration.save()
        desktop_environment = get_desktop_environment()

        if desktop_environment in ['gnome', 'unity', 'cinnamon', 'mate']:
            self.ctrl.set_active(True)
            self.alt.set_active(True)

        print(desktop_environment)
        if desktop_environment in ['gnome', 'unity']:
            dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys.\
custom-keybindings.touchpad-indicator')
            if self.checkbutton0.get_active() and\
                    len(self.entry11.get_text()) > 0:
                key1 = ''
                key2 = None
                if self.ctrl.get_active() is True:
                    key1 += '<Control>'
                    key2 = '<Primary>'
                if self.alt.get_active() is True:
                    key1 += '<Alt>'
                    if key2 is not None:
                        key2 += '<Alt>'
                key1 += self.entry11.get_text().lower()
                if key2 is not None:
                    key2 += self.entry11.get_text().lower()
                if key1 not in get_shortcuts() and key2 not in get_shortcuts():
                    dcm = DConfManager('org.gnome.settings-daemon.plugins.\
media-keys')
                    shortcuts = dcm.get_value('custom-keybindings')
                    key = '/org/gnome/settings-daemon/plugins/media-keys/\
custom-keybindings/touchpad-indicator/'

                    if key in shortcuts:
                        shortcuts.pop(shortcuts.index(key))
                        dcm.set_value('custom-keybindings', shortcuts)
                    if key not in shortcuts:
                        shortcuts.append(key)
                        dcm.set_value('custom-keybindings', shortcuts)
                    dcm = DConfManager(
                        'org.gnome.settings-daemon.plugins.media-keys.\
custom-keybindings.touchpad-indicator')
                    dcm.set_value('name', 'Touchpad-Indicator')
                    dcm.set_value('binding', key1)
                    dcm.set_value(
                        'command', '/usr/bin/python3 \
/usr/share/touchpad-indicator/change_touchpad_state.py')
            else:
                dcm.set_value('binding', '')
                dcm = DConfManager('org.gnome.settings-daemon.plugins.\
media-keys')
                shortcuts = dcm.get_value('custom-keybindings')
                key = '/org/gnome/settings-daemon/plugins/media-keys/\
custom-keybindings/touchpad-indicator/'

                if key in shortcuts:
                    shortcuts.pop(shortcuts.index(key))
                    dcm.set_value('custom-keybindings', shortcuts)
        elif desktop_environment == 'cinnamon':
            dcm = DConfManager('org.cinnamon.desktop.keybindings.\
custom-keybindings.touchpad-indicator')
            if self.checkbutton0.get_active() and\
                    len(self.entry11.get_text()) > 0:
                key1 = ''
                key2 = None
                if self.ctrl.get_active() is True:
                    key1 += '<Control>'
                    key2 = '<Primary>'
                if self.alt.get_active() is True:
                    key1 += '<Alt>'
                    if key2 is not None:
                        key2 += '<Alt>'
                key1 += self.entry11.get_text().lower()
                if key2 is not None:
                    key2 += self.entry11.get_text().lower()
                if key1 not in get_shortcuts() and key2 not in get_shortcuts():
                    dcm.set_value('name', 'Touchpad-Indicator')
                    dcm.set_value('binding', [key1])
                    dcm.set_value(
                        'command', '/usr/bin/python3 \
/usr/share/touchpad-indicator/change_touchpad_state.py')
                dcm = DConfManager('org.cinnamon.desktop.keybindings')
                shortcuts = dcm.get_value('custom-list')
                if 'touchpad-indicator' in shortcuts:
                    shortcuts.pop(shortcuts.index('touchpad-indicator'))
                    dcm.set_value('custom-list', shortcuts)
                if 'touchpad-indicator' not in shortcuts:
                    shortcuts.append('touchpad-indicator')
                    dcm.set_value('custom-list', shortcuts)
            else:
                dcm.set_value('binding', [])
                dcm = DConfManager('org.cinnamon.desktop.keybindings')
                shortcuts = dcm.get_value('custom-list')
                if 'touchpad-indicator' in shortcuts:
                    shortcuts.pop(shortcuts.index('touchpad-indicator'))
                    dcm.set_value('custom-list', shortcuts)
        elif desktop_environment == 'mate':
            dcm = DConfManager('org.mate.desktop.keybindings.\
touchpad-indicator')
            if self.checkbutton0.get_active() and\
                    len(self.entry11.get_text()) > 0:
                key1 = ''
                key2 = None
                if self.ctrl.get_active() is True:
                    key1 += '<Control>'
                    key2 = '<Primary>'
                if self.alt.get_active() is True:
                    key1 += '<Alt>'
                    if key2 is not None:
                        key2 += '<Alt>'
                key1 += self.entry11.get_text().lower()
                if key2 is not None:
                    key2 += self.entry11.get_text().lower()
                if key1 not in get_shortcuts() and key2 not in get_shortcuts():
                    dcm.set_value('name', 'Touchpad-Indicator')
                    dcm.set_value('binding', key1)
                    dcm.set_value(
                        'action', '/usr/bin/python3 \
/usr/share/touchpad-indicator/change_touchpad_state.py')
            else:
                dcm.set_value('binding', '')
        elif desktop_environment == 'xfce':
            if xfconfquery_exists():
                xfceconf = XFCEConfiguration('xfce4-keyboard-shortcuts')
                keys = xfceconf.search_for_value_in_properties_startswith(
                    '/commands/custom/', '/usr/share/\
touchpad-indicator/change_touchpad_state.py')
                if keys:
                    for akey in keys:
                        xfceconf.reset_property(akey['key'])
                if self.checkbutton0.get_active():
                    key = key.replace('<Primary>', '<Control>')
                    xfceconf.set_property(
                        '/commands/custom/' + key, '/usr/share/\
touchpad-indicator/change_touchpad_state.py')
def get_shortcuts():
    values = []
    de = get_desktop_environment()
    if de == 'gnome':
        dcm = DConfManager('org.gnome.desktop.wm.keybindings')
        for key in dcm.get_keys():
            for each_element in dcm.get_value(key):
                if type(each_element) == str:
                    values.append(each_element)
                elif type(each_element) == list:
                    values.extend(each_element)
        dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys')
        for key in dcm.get_keys():
            each_element = dcm.get_value(key)
            if type(each_element) == str:
                values.append(each_element)
            elif type(each_element) == list:
                values.extend(each_element)
    elif de == 'cinnamon':
        dcm = DConfManager('org.cinnamon.desktop.keybindings.media-keys')
        for key in dcm.get_keys():
            for each_element in dcm.get_value(key):
                if type(each_element) == str:
                    values.append(each_element)
                elif type(each_element) == list:
                    values.extend(each_element)
        dcm = DConfManager('org.cinnamon.desktop.keybindings.wm')
        for key in dcm.get_keys():
            for each_element in dcm.get_value(key):
                if type(each_element) == str:
                    values.append(each_element)
                elif type(each_element) == list:
                    values.extend(each_element)
    elif de == 'mate':
        dcm = DConfManager('org.mate.SettingsDaemon.plugins.media-keys')
        for key in dcm.get_keys():
            values.append(dcm.get_value(key))
    return values
    def load_preferences(self):
        configuration = Configuration()
        first_time = configuration.get('first-time')
        version = configuration.get('version')
        if first_time or version != comun.VERSION:
            configuration.set_defaults()
            configuration.read()
        if os.path.exists(comun.FILE_AUTO_START) and\
                not os.path.islink(comun.FILE_AUTO_START):
            os.remove(comun.FILE_AUTO_START)
        self.checkbutton1.set_active(os.path.islink(comun.FILE_AUTO_START))
        print(comun.FILE_AUTO_START)
        print('====', os.path.exists(comun.FILE_AUTO_START))
        self.checkbutton2.set_active(configuration.get('on_mouse_plugged'))

        desktop_environment = get_desktop_environment()
        print(desktop_environment)

        if desktop_environment == 'gnome' or\
                desktop_environment == 'unity':
            dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys.\
custom-keybindings.touchpad-indicator')
            shortcut = dcm.get_value('binding')
            if shortcut is None or len(shortcut) == 0:
                self.checkbutton0.set_active(False)
                self.entry11.set_text('')
            else:
                self.checkbutton0.set_active(True)
                self.ctrl.set_active(shortcut.find('<Control>') > -1)
                self.alt.set_active(shortcut.find('<Alt>') > -1)
                self.entry11.set_text(shortcut[-1:])
        elif desktop_environment == 'cinnamon':
            dcm = DConfManager('org.cinnamon.desktop.keybindings.\
custom-keybindings.touchpad-indicator')
            shortcuts = dcm.get_value('binding')
            if shortcuts is None or len(shortcuts) == 0:
                self.checkbutton0.set_active(False)
                self.entry11.set_text('')
            else:
                shortcut = shortcuts[0]
                self.checkbutton0.set_active(True)
                self.ctrl.set_active(shortcut.find('<Control>') > -1)
                self.alt.set_active(shortcut.find('<Alt>') > -1)
                self.entry11.set_text(shortcut[-1:])
        elif desktop_environment == 'mate':
            dcm = DConfManager('org.mate.desktop.keybindings.\
touchpad-indicator')
            shortcut = dcm.get_value('binding')
            if shortcut is None or len(shortcut) == 0:
                self.checkbutton0.set_active(False)
                self.entry11.set_text('')
            else:
                self.checkbutton0.set_active(True)
                self.ctrl.set_active(shortcut.find('<Control>') > -1)
                self.alt.set_active(shortcut.find('<Alt>') > -1)
                self.entry11.set_text(shortcut[-1:])
        option = configuration.get('on_start')
        if option == 0:
            self.on_start['none'].set_active(True)
        if option == 1:
            self.on_start['enable'].set_active(True)
        elif option == -1:
            self.on_start['disable'].set_active(True)

        option = configuration.get('on_end')
        if option == 0:
            self.on_end['none'].set_active(True)
        elif option == 1:
            self.on_end['enable'].set_active(True)
        elif option == -1:
            self.on_end['disable'].set_active(True)

        self.checkbutton5.set_active(configuration.get('start_hidden'))
        self.checkbutton6.set_active(configuration.get('show_notifications'))

        self.checkbutton8.set_active(configuration.get('disable_on_typing'))
        self.interval.set_value(configuration.get('interval'))
        self.label_interval.set_sensitive(self.checkbutton8.get_active())
        self.interval.set_sensitive(self.checkbutton8.get_active())

        option = configuration.get('theme')
        if option == 'light':
            self.radiobutton1.set_active(True)
        elif option == 'dark':
            self.radiobutton2.set_active(True)
        elif option == 'normal':
            self.radiobutton3.set_active(True)

        self.checkbutton46.set_active(configuration.get('natural_scrolling'))
        tp = Touchpad()
        if tp.is_there_touchpad():
            tipo = tp._get_type(tp._get_ids()[0])
            if tipo == SYNAPTICS:
                self.two_finger_scrolling.set_active(
                    configuration.get('two_finger_scrolling'))
                self.edge_scrolling.set_active(
                    configuration.get('edge_scrolling'))
                self.cicular_scrolling.set_active(
                    configuration.get('cicular_scrolling'))
            elif tipo == LIBINPUT:
                if tp.can_two_finger_scrolling():
                    self.two_finger_scrolling.set_active(
                        configuration.get('two_finger_scrolling'))
                if tp.can_edge_scrolling():
                    self.edge_scrolling.set_active(
                        configuration.get('edge_scrolling'))
                if tp.has_tapping():
                    self.tapping.set_active(configuration.get('tapping'))
            self.speed.set_value(configuration.get('speed'))
    def save_preferences(self):
        configuration = Configuration()
        configuration.set('first-time', False)
        configuration.set('version', comun.VERSION)
        key = ''
        if self.ctrl.get_active() == True:
            key += '<Primary>'
        if self.alt.get_active() == True:
            key += '<Alt>'
        key += self.entry11.get_text()
        if self.radiobutton1.get_active() == True:
            theme = 'light'
        elif self.radiobutton2.get_active() == True:
            theme = 'dark'
        configuration.set('shortcut_enabled', self.checkbutton0.get_active())
        configuration.set('autostart', self.checkbutton1.get_active())
        create_or_remove_autostart(self.checkbutton1.get_active())
        configuration.set('on_mouse_plugged', self.checkbutton2.get_active())
        configuration.set('natural_scrolling', self.checkbutton46.get_active())
        configuration.set('enable_on_exit', self.checkbutton3.get_active())
        configuration.set('disable_on_exit', self.checkbutton4.get_active())
        configuration.set('start_hidden', self.checkbutton5.get_active())
        configuration.set('show_notifications', self.checkbutton6.get_active())
        configuration.set('disable_touchpad_on_start_indicator',
                          self.checkbutton7.get_active())
        configuration.set('disable_on_typing', self.checkbutton8.get_active())
        configuration.set('seconds', self.seconds.get_value() / 1000)
        configuration.set('shortcut', key)
        configuration.set('theme', theme)
        configuration.set('VertEdgeScroll', self.checkbutton41.get_active())
        configuration.set('HorizEdgeScroll', self.checkbutton42.get_active())
        configuration.set('CircularScrolling', self.checkbutton43.get_active())
        configuration.set('VertTwoFingerScroll',
                          self.checkbutton44.get_active())
        configuration.set('HorizTwoFingerScroll',
                          self.checkbutton45.get_active())
        configuration.set('TapButton1', self.combobox47.get_active())
        configuration.set('TapButton2', self.combobox48.get_active())
        configuration.set('TapButton3', self.combobox49.get_active())
        configuration.save()
        '''
		aclient = Synclient()
		aclient.set('VertEdgeScroll',1 if self.checkbutton41.get_active() else 0)
		aclient.set('HorizEdgeScroll',1 if self.checkbutton42.get_active() else 0)
		aclient.set('CircularScrolling',1 if self.checkbutton43.get_active() else 0)
		aclient.set('VertTwoFingerScroll',1 if self.checkbutton44.get_active() else 0)
		aclient.set('HorizTwoFingerScroll',1 if self.checkbutton45.get_active() else 0)
		aclient.set('TapButton1',self.combobox47.get_active())
		aclient.set('TapButton2',self.combobox48.get_active())
		aclient.set('TapButton3',self.combobox49.get_active())		
		if self.checkbutton46.get_active():
			aclient.set('VertScrollDelta',-abs(int(aclient.get('VertScrollDelta'))))
			aclient.set('HorizScrollDelta',-abs(int(aclient.get('HorizScrollDelta'))))
		else:
			aclient.set('VertScrollDelta',abs(int(aclient.get('VertScrollDelta'))))
			aclient.set('HorizScrollDelta',abs(int(aclient.get('HorizScrollDelta'))))
		'''
        desktop_environment = get_desktop_environment()
        if desktop_environment == 'gnome':
            print('gnom3')
            dcm = DConfManager('org.gnome.settings-daemon.plugins.media-keys')
            values = dcm.get_value('custom-keybindings')
            if self.checkbutton0.get_active():
                if '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/touchpad-indicator/' not in values:
                    values.append(
                        '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/touchpad-indicator/'
                    )
                    dcm.set_value('custom-keybindings', values)
                dcm = DConfManager(
                    'org.gnome.settings-daemon.plugins.media-keys.custom-keybindings.touchpad-indicator'
                )
                print(dcm.set_value('binding', key))
                print(
                    dcm.set_value(
                        'command',
                        '/usr/bin/python3 /opt/extras.ubuntu.com/touchpad-indicator/share/touchpad-indicator/change_touchpad_state.py'
                    ))
                print(dcm.set_value('name', 'Touchpad-Indicator key binding'))
            else:
                if '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/touchpad-indicator/' in values:
                    values.remove(
                        '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/touchpad-indicator/'
                    )
                    dcm.set_value('custom-keybindings', values)
        elif desktop_environment == 'xfce':
            if xfconfquery_exists():
                xfceconf = XFCEConfiguration('xfce4-keyboard-shortcuts')
                keys = xfceconf.search_for_value_in_properties_startswith(
                    '/commands/custom/',
                    '/opt/extras.ubuntu.com/touchpad-indicator/share/touchpad-indicator/change_touchpad_state.py'
                )
                if keys:
                    for akey in keys:
                        xfceconf.reset_property(akey['key'])
                if self.checkbutton0.get_active():
                    key = key.replace('<Primary>', '<Control>')
                    xfceconf.set_property(
                        '/commands/custom/' + key,
                        '/opt/extras.ubuntu.com/touchpad-indicator/share/touchpad-indicator/change_touchpad_state.py'
                    )