From af9b9f23a7b541816628f497fe949a290fea28c0 Mon Sep 17 00:00:00 2001 From: js Date: Thu, 30 Apr 2026 20:58:43 -0600 Subject: [PATCH 1/8] migrate from pkg_resources to importlib.resources for accessing UI files --- xinput_gui/gui/device_list.py | 16 +++++++++------- xinput_gui/gui/dialog_about.py | 19 +++++++++++-------- xinput_gui/gui/dialog_create_master.py | 16 ++++++++++------ xinput_gui/gui/dialog_device_info.py | 17 ++++++++++------- xinput_gui/gui/dialog_edit.py | 16 +++++++++------- xinput_gui/gui/dialog_reattach.py | 15 +++++++++------ xinput_gui/gui/log.py | 16 +++++++++------- xinput_gui/gui/prop_list.py | 16 +++++++++------- xinput_gui/gui/win_main.py | 18 ++++++++++-------- xinput_gui/gui/win_settings.py | 18 ++++++++++-------- xinput_gui/settings.py | 10 +++++----- 11 files changed, 101 insertions(+), 76 deletions(-) diff --git a/xinput_gui/gui/device_list.py b/xinput_gui/gui/device_list.py index 6d1d24b..35e27af 100644 --- a/xinput_gui/gui/device_list.py +++ b/xinput_gui/gui/device_list.py @@ -23,7 +23,7 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from pkg_resources import resource_filename +from importlib.resources import as_file, files from ..settings import Settings from ..xinput.devices import Device, DeviceType @@ -60,12 +60,14 @@ def __init__(self, controller: 'ViewController', main_window: 'MainWindow', sett def get_builder(self) -> Gtk.Builder: '''Get device list Gtk Builder.''' - - builder = Gtk.Builder() - builder.add_objects_from_file( - resource_filename('xinput_gui', 'res/xinput-gui.ui'), - ['grid_device_list', 'store_devices']) - return builder + ref = files('xinput_gui') / 'res/xinput-gui.ui' + with as_file(ref) as path: + + builder = Gtk.Builder() + builder.add_objects_from_file( + str(path), + ['grid_device_list', 'store_devices']) + return builder def apply_settings(self) -> None: '''Apply current settings.''' diff --git a/xinput_gui/gui/dialog_about.py b/xinput_gui/gui/dialog_about.py index eea9bfb..529bb0a 100644 --- a/xinput_gui/gui/dialog_about.py +++ b/xinput_gui/gui/dialog_about.py @@ -21,10 +21,11 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from pkg_resources import require, resource_filename +from importlib.resources import as_file, files +from importlib.metadata import version -__version__ = require('xinput_gui')[0].version +__version__ = version('xinput_gui') class AboutDialog: @@ -44,12 +45,14 @@ def __init__(self, main_window) -> None: def get_builder(self) -> Gtk.Builder: '''Get about dialog Gtk Builder.''' - - builder = Gtk.Builder() - builder.add_objects_from_file( - resource_filename('xinput_gui', 'res/xinput-gui.ui'), - ['dialog_about']) - return builder + ref = files('xinput_gui') / 'res/xinput-gui.ui' + with as_file(ref) as path: + + builder = Gtk.Builder() + builder.add_objects_from_file( + str(path), + ['dialog_about']) + return builder def show(self) -> None: '''Show the about dialog.''' diff --git a/xinput_gui/gui/dialog_create_master.py b/xinput_gui/gui/dialog_create_master.py index c396819..edc0814 100644 --- a/xinput_gui/gui/dialog_create_master.py +++ b/xinput_gui/gui/dialog_create_master.py @@ -23,7 +23,8 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from pkg_resources import resource_filename + +from importlib.resources import files, as_file if TYPE_CHECKING: from ..view_controller import ViewController @@ -51,11 +52,14 @@ def __init__(self, controller: 'ViewController', main_window: 'MainWindow') -> N def get_builder(self) -> Gtk.Builder: '''Get create master device dialog Gtk Builder.''' - builder = Gtk.Builder() - builder.add_objects_from_file( - resource_filename('xinput_gui', 'res/xinput-gui.ui'), - ['dialog_create_master']) - return builder + ref = files('xinput_gui') / 'res/xinput-gui.ui' + with as_file(ref) as path: + + builder = Gtk.Builder() + builder.add_objects_from_file( + str(path), + ['dialog_create_master']) + return builder def show(self) -> Gtk.ResponseType: '''Show the create master device dialog.''' diff --git a/xinput_gui/gui/dialog_device_info.py b/xinput_gui/gui/dialog_device_info.py index 29b5f8c..7222f0c 100644 --- a/xinput_gui/gui/dialog_device_info.py +++ b/xinput_gui/gui/dialog_device_info.py @@ -23,10 +23,11 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from pkg_resources import resource_filename from ..xinput.devices import Device +from importlib.resources import as_file, files + if TYPE_CHECKING: from ..view_controller import ViewController from .win_main import MainWindow @@ -49,12 +50,14 @@ def __init__(self, controller: 'ViewController', main_window: 'MainWindow') -> N def get_builder(self) -> Gtk.Builder: '''Get device info dialog Gtk Builder.''' - - builder = Gtk.Builder() - builder.add_objects_from_file( - resource_filename('xinput_gui', 'res/xinput-gui.ui'), - ['dialog_device_info', 'buffer_device_info']) - return builder + ref = files('xinput_gui') / 'res/xinput-gui.ui' + with as_file(ref) as path: + + builder = Gtk.Builder() + builder.add_objects_from_file( + str(path), + ['dialog_device_info', 'buffer_device_info']) + return builder def show(self, device: Device) -> None: '''Show the device info dialog. diff --git a/xinput_gui/gui/dialog_edit.py b/xinput_gui/gui/dialog_edit.py index 2871b16..bc010cb 100644 --- a/xinput_gui/gui/dialog_edit.py +++ b/xinput_gui/gui/dialog_edit.py @@ -23,7 +23,7 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from pkg_resources import resource_filename +from importlib.resources import files, as_file from ..xinput.devices import Device, Prop @@ -54,12 +54,14 @@ def __init__(self, controller: 'ViewController', main_window: 'MainWindow') -> N def get_builder(self) -> Gtk.Builder: '''Get edit dialog Gtk Builder.''' - - builder = Gtk.Builder() - builder.add_objects_from_file( - resource_filename('xinput_gui', 'res/xinput-gui.ui'), - ['dialog_edit']) - return builder + ref = files('xinput_gui') / 'res/xinput-gui.ui' + with as_file(ref) as path: + + builder = Gtk.Builder() + builder.add_objects_from_file( + str(path), + ['dialog_edit']) + return builder def show(self, device: Device, diff --git a/xinput_gui/gui/dialog_reattach.py b/xinput_gui/gui/dialog_reattach.py index 984f446..88b53dd 100644 --- a/xinput_gui/gui/dialog_reattach.py +++ b/xinput_gui/gui/dialog_reattach.py @@ -23,7 +23,7 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from pkg_resources import resource_filename +from importlib.resources import as_file, files from ..xinput.devices import Device, DeviceType @@ -53,11 +53,14 @@ def __init__(self, controller: 'ViewController', main_window: 'MainWindow') -> N def get_builder(self) -> Gtk.Builder: '''Get reattach dialog Gtk Builder.''' - builder = Gtk.Builder() - builder.add_objects_from_file( - resource_filename('xinput_gui', 'res/xinput-gui.ui'), - ['dialog_reattach', 'store_reattach']) - return builder + ref = files('xinput_gui') / 'res/xinput-gui.ui' + with as_file(ref) as path: + + builder = Gtk.Builder() + builder.add_objects_from_file( + str(path), + ['dialog_reattach', 'store_reattach']) + return builder def show(self, selected_device: Device, devices: List[Device]) -> Gtk.ResponseType: '''Show the reattach dialog. diff --git a/xinput_gui/gui/log.py b/xinput_gui/gui/log.py index 51657d6..181c43c 100644 --- a/xinput_gui/gui/log.py +++ b/xinput_gui/gui/log.py @@ -23,7 +23,7 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from pkg_resources import resource_filename +from importlib.resources import as_file, files if TYPE_CHECKING: from .win_main import MainWindow @@ -48,12 +48,14 @@ def __init__(self, main_window: 'MainWindow'): def get_builder(self) -> Gtk.Builder: '''Get device list Gtk Builder.''' - - builder = Gtk.Builder() - builder.add_objects_from_file( - resource_filename('xinput_gui', 'res/xinput-gui.ui'), - ['grid_log', 'buffer_log']) - return builder + ref = files('xinput_gui') / 'res/xinput-gui.ui' + with as_file(ref) as path: + + builder = Gtk.Builder() + builder.add_objects_from_file( + str(path), + ['grid_log', 'buffer_log']) + return builder def clear_log(self) -> None: '''Clear the log.''' diff --git a/xinput_gui/gui/prop_list.py b/xinput_gui/gui/prop_list.py index 70ec164..5b33307 100644 --- a/xinput_gui/gui/prop_list.py +++ b/xinput_gui/gui/prop_list.py @@ -23,7 +23,7 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from pkg_resources import resource_filename +from importlib.resources import as_file, files from ..settings import Settings from ..xinput.devices import Device @@ -60,12 +60,14 @@ def __init__(self, controller: 'ViewController', main_window: 'MainWindow', sett def get_builder(self) -> Gtk.Builder: '''Get prop list Gtk Builder.''' - - builder = Gtk.Builder() - builder.add_objects_from_file( - resource_filename('xinput_gui', 'res/xinput-gui.ui'), - ['grid_prop_list', 'store_props']) - return builder + ref = files('xinput_gui') / 'res/xinput-gui.ui' + with as_file(ref) as path: + + builder = Gtk.Builder() + builder.add_objects_from_file( + str(path), + ['grid_prop_list', 'store_props']) + return builder def apply_settings(self) -> None: '''Apply current settings.''' diff --git a/xinput_gui/gui/win_main.py b/xinput_gui/gui/win_main.py index 7b6f2a8..0f1f9c5 100644 --- a/xinput_gui/gui/win_main.py +++ b/xinput_gui/gui/win_main.py @@ -23,7 +23,8 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from pkg_resources import require, resource_filename +from importlib.resources import as_file, files +from importlib.metadata import version from ..settings import Settings from .device_list import DeviceList @@ -36,7 +37,7 @@ from ..view_controller import ViewController -__version__ = require('xinput_gui')[0].version +__version__ = version("xinput_gui") class MainWindow: @@ -77,12 +78,13 @@ def __init__(self, controller: 'ViewController', settings: Settings) -> None: def get_builder(self) -> Gtk.Builder: '''Get main window Gtk Builder.''' - - builder = Gtk.Builder() - builder.add_objects_from_file( - resource_filename('xinput_gui', 'res/xinput-gui.ui'), - ['win_main']) - return builder + ref = files('xinput_gui') / 'res/xinput-gui.ui' + with as_file(ref) as path: + builder = Gtk.Builder() + builder.add_objects_from_file( + str(path), + ['win_main']) + return builder def apply_settings(self) -> None: '''Apply current settings.''' diff --git a/xinput_gui/gui/win_settings.py b/xinput_gui/gui/win_settings.py index 1daf6b5..e7149a7 100644 --- a/xinput_gui/gui/win_settings.py +++ b/xinput_gui/gui/win_settings.py @@ -21,10 +21,10 @@ import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from pkg_resources import resource_filename - from ..settings import Settings +from importlib.resources import files, as_file + class SettingsWindow: '''Settings window.''' @@ -50,12 +50,14 @@ def __init__(self, main_window, settings: Settings) -> None: def get_builder(self) -> Gtk.Builder: '''Get settings window Gtk Builder.''' - - builder = Gtk.Builder() - builder.add_objects_from_file( - resource_filename('xinput_gui', 'res/xinput-gui.ui'), - ['win_settings']) - return builder + ref = files('xinput_gui') / 'res/xinput-gui.ui' + with as_file(ref) as path: + + builder = Gtk.Builder() + builder.add_objects_from_file( + str(path), + ['win_settings']) + return builder def show(self) -> None: '''Show the settings window.''' diff --git a/xinput_gui/settings.py b/xinput_gui/settings.py index 9ab9e6f..7bca02d 100644 --- a/xinput_gui/settings.py +++ b/xinput_gui/settings.py @@ -23,8 +23,7 @@ import json import os -from pkg_resources import resource_filename - +from importlib.resources import as_file, files CONFIG_PATH = Path(os.environ['HOME']).joinpath('.xinput-gui.json') @@ -46,10 +45,11 @@ def __init__(self): def load_config(self): '''Load config file.''' + ref = files('xinput_gui') / 'res/config.json' + with as_file(ref) as path: - # Create config if needed - if not CONFIG_PATH.is_file(): - copyfile(resource_filename('xinput_gui', 'res/config.json'), CONFIG_PATH) + if not CONFIG_PATH.is_file(): + copyfile(path, CONFIG_PATH) with open(CONFIG_PATH) as config_file: self.config = json.load(config_file) From 8b1e91b0ab21211be5b49b86e4ee516bc1d72479 Mon Sep 17 00:00:00 2001 From: js Date: Thu, 30 Apr 2026 20:59:13 -0600 Subject: [PATCH 2/8] add __main__ entry point for module execution --- xinput_gui/__main__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xinput_gui/__main__.py b/xinput_gui/__main__.py index 7433025..58bcdf1 100644 --- a/xinput_gui/__main__.py +++ b/xinput_gui/__main__.py @@ -26,3 +26,7 @@ def main(): view_controller = ViewController() view_controller.start() + + +if __name__ == "__main__": + main() From 4dfad3d5fb794fcf4c8ff5337020adc51f5147e8 Mon Sep 17 00:00:00 2001 From: ej-pj Date: Thu, 9 Jul 2026 11:32:52 -0600 Subject: [PATCH 3/8] update README --- README.md | 33 +++++++-------------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 026304f..e962ec8 100644 --- a/README.md +++ b/README.md @@ -8,35 +8,16 @@ xinput allows you to edit properties of devices like keyboards, mice, and touchp ## Installation -xinput-gui depends on Python 3.5+, GTK+ 3.20+, PyGObject, and xinput. - -### Arch Linux - -Available as a package on the AUR: [xinput-gui](https://aur.archlinux.org/packages/xinput-gui) - -Install it with `makepkg` or your preferred AUR helper. - -### Gentoo - -Available as a Gentoo package thanks to [@filalex77](https://github.com/filalex77): [app-misc/xinput-gui](https://github.com/filalex77/bright/tree/master/app-misc/xinput-gui) - -To install it, run the following commands: - -``` -eselect-repository enable bright -emerge --sync -emerge xinput-gui -``` - -### pip - -Available on PyPI: [xinput-gui](https://pypi.org/project/xinput-gui/) - -Install it with pip: `pip install --user xinput-gui`. +xinput-gui depends on Python 3.12+, GTK+ 3.20+, PyGObject, and xinput. ### Manual install + * #### uv + Install ut whit uv: `uv pip install .` + * #### pip + Install it whit pip: `pip install .` -Download the [latest release](https://github.com/IvanFon/xinput-gui/releases/latest) or clone this repo and run `./setup.py install --user`. +### Other installs +At the moment I dont have any plans to port the installation to other distros or package managers since this branch (or repo) it s just for personal use. But youre totally free to port it or adapt it whatever you like. ## Usage From b370147c85db8a3e7e8ef6531051262cb7824152 Mon Sep 17 00:00:00 2001 From: ej-pj Date: Thu, 9 Jul 2026 11:35:03 -0600 Subject: [PATCH 4/8] updated installation method --- pyproject.toml | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..399fcee --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,37 @@ +[project] +name = "xinput-gui" +version = "0.3.2" +description = "A simple GUI for Xorg's Xinput tool." +readme = "README.md" +authors = [ + {name = "Ivan Fonseca", email = "ivanfon@riseup.net"} +] +requires-python = ">=3.12" +classifiers = [ + "Development Status :: 4 - Beta", + "Environment :: X11 Applications :: GTK", + "Intended Audience :: End Users/Desktop", + "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", + "Natural Language :: English", + "Operating System :: POSIX", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.12", + "Topic :: Desktop Environment", + "Topic :: Utilities", +] +keywords=["'xinput", "keyboard", "mouse", "touchpad"] +dependencies = ["PyGObject" ] +license="GPL-3.0-or-later" + +[project.scripts] +xinput-gui = "xinput_gui.__main__:main" + +[build-system] +requires = ["uv_build>=0.11.28,<0.12.0"] +build-backend = "uv_build" + +[project.urls] +homepage = "https://pypi.org/project/xinput-gui/" +repository = "https://github.com/IvanFon/xinput-gui" +documentation = "https://github.com/IvanFon/xinput-gui/tree/master/docs" From 59a9fd990183274ea2fc7cc01ccba858512005d5 Mon Sep 17 00:00:00 2001 From: ej-pj Date: Thu, 9 Jul 2026 11:39:58 -0600 Subject: [PATCH 5/8] removing old files --- MANIFEST.in | 1 - setup.cfg | 2 -- setup.py | 41 ----------------------------------------- 3 files changed, 44 deletions(-) delete mode 100644 MANIFEST.in delete mode 100644 setup.cfg delete mode 100755 setup.py diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 1aba38f..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1 +0,0 @@ -include LICENSE diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 263befb..0000000 --- a/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[pep8] -ignore = E402 diff --git a/setup.py b/setup.py deleted file mode 100755 index 4a6c1cb..0000000 --- a/setup.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 -from setuptools import setup - -with open('README.md') as f: - long_description = f.read() - -setup( - name='xinput-gui', - version='0.3.1', - description='A simple GUI for Xorg\'s Xinput tool.', - long_description=long_description, - long_description_content_type='text/markdown', - author='Ivan Fonseca', - author_email='ivanfon@riseup.net', - url='https://github.com/IvanFon/xinput-gui', - license='GPLv3+', - classifiers=[ - 'Development Status :: 4 - Beta', - 'Environment :: X11 Applications :: GTK', - 'Intended Audience :: End Users/Desktop', - 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', - 'Natural Language :: English', - 'Operating System :: POSIX', - 'Programming Language :: Python :: 3 :: Only', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Topic :: Desktop Environment', - 'Topic :: Utilities' - ], - keywords='xinput keyboard mouse touchpad', - packages=[ - 'xinput_gui', - 'xinput_gui/gui', - 'xinput_gui/xinput' - ], - install_requires=['PyGObject'], - package_data={'xinput_gui': ['res/*']}, - entry_points={'gui_scripts': ['xinput-gui = xinput_gui.__main__:main']} -) From 8c83cbc0243748ac5966e771a7265ac398258595 Mon Sep 17 00:00:00 2001 From: ej-pj Date: Thu, 9 Jul 2026 11:42:38 -0600 Subject: [PATCH 6/8] fix typo --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e962ec8..8ace7f1 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,12 @@ xinput-gui depends on Python 3.12+, GTK+ 3.20+, PyGObject, and xinput. ### Manual install * #### uv - Install ut whit uv: `uv pip install .` + Install it whit uv: `uv pip install .` * #### pip Install it whit pip: `pip install .` ### Other installs -At the moment I dont have any plans to port the installation to other distros or package managers since this branch (or repo) it s just for personal use. But youre totally free to port it or adapt it whatever you like. +At the moment I dont have any plans to port the installation to other distros or package managers since this branch (or repo) it s just for personal use. But you're totally free to port it or adapt it whatever you like. ## Usage From 547e0922a1e6e5545661a2772e21ba896f1a0cf9 Mon Sep 17 00:00:00 2001 From: ej-pj Date: Thu, 9 Jul 2026 11:48:39 -0600 Subject: [PATCH 7/8] updated README install instructions --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8ace7f1..b11001b 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ xinput allows you to edit properties of devices like keyboards, mice, and touchp xinput-gui depends on Python 3.12+, GTK+ 3.20+, PyGObject, and xinput. ### Manual install +Clone this repository, then use one of the following commands: * #### uv Install it whit uv: `uv pip install .` * #### pip From f1135f494257be5957b0117921da1818116da27f Mon Sep 17 00:00:00 2001 From: ej-pj Date: Thu, 9 Jul 2026 12:22:18 -0600 Subject: [PATCH 8/8] fix file uv structure --- {xinput_gui => src/xinput_gui}/__init__.py | 0 {xinput_gui => src/xinput_gui}/__main__.py | 0 {xinput_gui => src/xinput_gui}/gui/__init__.py | 0 {xinput_gui => src/xinput_gui}/gui/device_list.py | 0 {xinput_gui => src/xinput_gui}/gui/dialog_about.py | 0 {xinput_gui => src/xinput_gui}/gui/dialog_create_master.py | 0 {xinput_gui => src/xinput_gui}/gui/dialog_device_info.py | 0 {xinput_gui => src/xinput_gui}/gui/dialog_edit.py | 0 {xinput_gui => src/xinput_gui}/gui/dialog_reattach.py | 0 {xinput_gui => src/xinput_gui}/gui/log.py | 0 {xinput_gui => src/xinput_gui}/gui/prop_list.py | 0 {xinput_gui => src/xinput_gui}/gui/win_main.py | 0 {xinput_gui => src/xinput_gui}/gui/win_settings.py | 0 {xinput_gui => src/xinput_gui}/res/config.json | 0 {xinput_gui => src/xinput_gui}/res/xinput-gui.ui | 0 {xinput_gui => src/xinput_gui}/settings.py | 0 {xinput_gui => src/xinput_gui}/view_controller.py | 0 {xinput_gui => src/xinput_gui}/view_model.py | 0 {xinput_gui => src/xinput_gui}/xinput/__init__.py | 0 {xinput_gui => src/xinput_gui}/xinput/devices.py | 0 {xinput_gui => src/xinput_gui}/xinput/xinput.py | 0 21 files changed, 0 insertions(+), 0 deletions(-) rename {xinput_gui => src/xinput_gui}/__init__.py (100%) rename {xinput_gui => src/xinput_gui}/__main__.py (100%) rename {xinput_gui => src/xinput_gui}/gui/__init__.py (100%) rename {xinput_gui => src/xinput_gui}/gui/device_list.py (100%) rename {xinput_gui => src/xinput_gui}/gui/dialog_about.py (100%) rename {xinput_gui => src/xinput_gui}/gui/dialog_create_master.py (100%) rename {xinput_gui => src/xinput_gui}/gui/dialog_device_info.py (100%) rename {xinput_gui => src/xinput_gui}/gui/dialog_edit.py (100%) rename {xinput_gui => src/xinput_gui}/gui/dialog_reattach.py (100%) rename {xinput_gui => src/xinput_gui}/gui/log.py (100%) rename {xinput_gui => src/xinput_gui}/gui/prop_list.py (100%) rename {xinput_gui => src/xinput_gui}/gui/win_main.py (100%) rename {xinput_gui => src/xinput_gui}/gui/win_settings.py (100%) rename {xinput_gui => src/xinput_gui}/res/config.json (100%) rename {xinput_gui => src/xinput_gui}/res/xinput-gui.ui (100%) rename {xinput_gui => src/xinput_gui}/settings.py (100%) rename {xinput_gui => src/xinput_gui}/view_controller.py (100%) rename {xinput_gui => src/xinput_gui}/view_model.py (100%) rename {xinput_gui => src/xinput_gui}/xinput/__init__.py (100%) rename {xinput_gui => src/xinput_gui}/xinput/devices.py (100%) rename {xinput_gui => src/xinput_gui}/xinput/xinput.py (100%) diff --git a/xinput_gui/__init__.py b/src/xinput_gui/__init__.py similarity index 100% rename from xinput_gui/__init__.py rename to src/xinput_gui/__init__.py diff --git a/xinput_gui/__main__.py b/src/xinput_gui/__main__.py similarity index 100% rename from xinput_gui/__main__.py rename to src/xinput_gui/__main__.py diff --git a/xinput_gui/gui/__init__.py b/src/xinput_gui/gui/__init__.py similarity index 100% rename from xinput_gui/gui/__init__.py rename to src/xinput_gui/gui/__init__.py diff --git a/xinput_gui/gui/device_list.py b/src/xinput_gui/gui/device_list.py similarity index 100% rename from xinput_gui/gui/device_list.py rename to src/xinput_gui/gui/device_list.py diff --git a/xinput_gui/gui/dialog_about.py b/src/xinput_gui/gui/dialog_about.py similarity index 100% rename from xinput_gui/gui/dialog_about.py rename to src/xinput_gui/gui/dialog_about.py diff --git a/xinput_gui/gui/dialog_create_master.py b/src/xinput_gui/gui/dialog_create_master.py similarity index 100% rename from xinput_gui/gui/dialog_create_master.py rename to src/xinput_gui/gui/dialog_create_master.py diff --git a/xinput_gui/gui/dialog_device_info.py b/src/xinput_gui/gui/dialog_device_info.py similarity index 100% rename from xinput_gui/gui/dialog_device_info.py rename to src/xinput_gui/gui/dialog_device_info.py diff --git a/xinput_gui/gui/dialog_edit.py b/src/xinput_gui/gui/dialog_edit.py similarity index 100% rename from xinput_gui/gui/dialog_edit.py rename to src/xinput_gui/gui/dialog_edit.py diff --git a/xinput_gui/gui/dialog_reattach.py b/src/xinput_gui/gui/dialog_reattach.py similarity index 100% rename from xinput_gui/gui/dialog_reattach.py rename to src/xinput_gui/gui/dialog_reattach.py diff --git a/xinput_gui/gui/log.py b/src/xinput_gui/gui/log.py similarity index 100% rename from xinput_gui/gui/log.py rename to src/xinput_gui/gui/log.py diff --git a/xinput_gui/gui/prop_list.py b/src/xinput_gui/gui/prop_list.py similarity index 100% rename from xinput_gui/gui/prop_list.py rename to src/xinput_gui/gui/prop_list.py diff --git a/xinput_gui/gui/win_main.py b/src/xinput_gui/gui/win_main.py similarity index 100% rename from xinput_gui/gui/win_main.py rename to src/xinput_gui/gui/win_main.py diff --git a/xinput_gui/gui/win_settings.py b/src/xinput_gui/gui/win_settings.py similarity index 100% rename from xinput_gui/gui/win_settings.py rename to src/xinput_gui/gui/win_settings.py diff --git a/xinput_gui/res/config.json b/src/xinput_gui/res/config.json similarity index 100% rename from xinput_gui/res/config.json rename to src/xinput_gui/res/config.json diff --git a/xinput_gui/res/xinput-gui.ui b/src/xinput_gui/res/xinput-gui.ui similarity index 100% rename from xinput_gui/res/xinput-gui.ui rename to src/xinput_gui/res/xinput-gui.ui diff --git a/xinput_gui/settings.py b/src/xinput_gui/settings.py similarity index 100% rename from xinput_gui/settings.py rename to src/xinput_gui/settings.py diff --git a/xinput_gui/view_controller.py b/src/xinput_gui/view_controller.py similarity index 100% rename from xinput_gui/view_controller.py rename to src/xinput_gui/view_controller.py diff --git a/xinput_gui/view_model.py b/src/xinput_gui/view_model.py similarity index 100% rename from xinput_gui/view_model.py rename to src/xinput_gui/view_model.py diff --git a/xinput_gui/xinput/__init__.py b/src/xinput_gui/xinput/__init__.py similarity index 100% rename from xinput_gui/xinput/__init__.py rename to src/xinput_gui/xinput/__init__.py diff --git a/xinput_gui/xinput/devices.py b/src/xinput_gui/xinput/devices.py similarity index 100% rename from xinput_gui/xinput/devices.py rename to src/xinput_gui/xinput/devices.py diff --git a/xinput_gui/xinput/xinput.py b/src/xinput_gui/xinput/xinput.py similarity index 100% rename from xinput_gui/xinput/xinput.py rename to src/xinput_gui/xinput/xinput.py