mirror of
https://github.com/lutris/lutris
synced 2024-11-02 13:31:16 +00:00
Merge next branch
This commit is contained in:
commit
69215d8e3f
28 changed files with 223 additions and 226 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -12,6 +12,7 @@ build
|
|||
tags
|
||||
.ropeproject
|
||||
*.pyc
|
||||
*.pyo
|
||||
PYSMELLTAGS
|
||||
lutris.e4p
|
||||
.coverage
|
||||
|
|
2
AUTHORS
2
AUTHORS
|
@ -1,4 +1,4 @@
|
|||
Copyright (C) 2010-2015 Mathieu Comandon <strider@strycore.com>
|
||||
Copyright (C) 2010-2016 Mathieu Comandon <strider@strycore.com>
|
||||
|
||||
Contributors:
|
||||
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,4 +1,4 @@
|
|||
VERSION="0.3.7.2"
|
||||
VERSION="0.3.7.3"
|
||||
|
||||
cover:
|
||||
rm tests/fixtures/pga.db -f
|
||||
|
|
84
bin/lutris
84
bin/lutris
|
@ -13,8 +13,6 @@
|
|||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Program entry point"""
|
||||
|
||||
import dbus
|
||||
import dbus.service
|
||||
import os
|
||||
|
@ -26,9 +24,15 @@ import time
|
|||
import json
|
||||
|
||||
# pylint: disable=E0611
|
||||
from gi.repository import Gdk, Gtk, GObject, GLib
|
||||
import gi
|
||||
gi.require_version('Gdk', '3.0')
|
||||
gi.require_version('Gtk', '3.0')
|
||||
|
||||
from dbus.mainloop.glib import DBusGMainLoop
|
||||
DBusGMainLoop(set_as_default=True)
|
||||
|
||||
from gi.repository import Gdk, Gtk, GObject, GLib
|
||||
|
||||
from os.path import realpath, dirname, normpath
|
||||
|
||||
LAUNCH_PATH = dirname(realpath(__file__))
|
||||
|
@ -39,35 +43,13 @@ if LAUNCH_PATH != "/usr/bin":
|
|||
from lutris.gui import dialogs
|
||||
from lutris.migrations import migrate
|
||||
|
||||
try:
|
||||
import yaml as _yaml # noqa
|
||||
except ImportError:
|
||||
q = dialogs.QuestionDialog({'title': "Dependency not available",
|
||||
'question': "PythonYAML is not installed,\n"
|
||||
"do you want to install it now?"})
|
||||
if q.result == Gtk.ResponseType.YES:
|
||||
os.system('software-center python-yaml')
|
||||
else:
|
||||
sys.exit()
|
||||
|
||||
from lutris import pga, runtime
|
||||
from lutris.config import check_config # , register_handler
|
||||
from lutris.util.log import logger
|
||||
from lutris.game import Game
|
||||
from lutris.gui.installgamedialog import InstallerDialog
|
||||
from lutris.gui.lutriswindow import LutrisWindow
|
||||
from lutris.settings import VERSION
|
||||
|
||||
|
||||
DBUS_INTERFACE = 'org.lutris.main'
|
||||
|
||||
# Set the logging level to show debug messages.
|
||||
console = logging.StreamHandler()
|
||||
fmt = '%(levelname)-8s %(asctime)s [%(module)s]:%(message)s'
|
||||
formatter = logging.Formatter(fmt)
|
||||
console.setFormatter(formatter)
|
||||
logger.addHandler(console)
|
||||
logger.setLevel(logging.ERROR)
|
||||
from lutris.util import service
|
||||
|
||||
# Support for command line options.
|
||||
parser = optparse.OptionParser(version="%prog " + VERSION)
|
||||
|
@ -133,49 +115,10 @@ game = None
|
|||
|
||||
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
||||
|
||||
|
||||
class LutrisService(dbus.service.Object):
|
||||
"""Main D-Bus Lutris service."""
|
||||
def __init__(self, bus, path, name):
|
||||
dbus.service.Object.__init__(self, bus, path, name)
|
||||
self.running = False
|
||||
self.lutris_window = None
|
||||
|
||||
@dbus.service.method(DBUS_INTERFACE, out_signature='b')
|
||||
def is_running(self):
|
||||
return self.running
|
||||
|
||||
@dbus.service.method(DBUS_INTERFACE, in_signature='i')
|
||||
def run(self, timestamp):
|
||||
if self.is_running():
|
||||
self.lutris_window.window.present_with_time(timestamp)
|
||||
else:
|
||||
logger.info("Welcome to Lutris")
|
||||
self.running = True
|
||||
self.lutris_window = LutrisWindow()
|
||||
GObject.threads_init()
|
||||
Gtk.main()
|
||||
self.running = False
|
||||
|
||||
@dbus.service.method(DBUS_INTERFACE, in_signature='s')
|
||||
def install_game(self, game_ref):
|
||||
self.lutris_window.on_install_clicked(game_ref=game_ref)
|
||||
|
||||
@dbus.service.method(DBUS_INTERFACE, in_signature='i')
|
||||
def run_game(self, game_id):
|
||||
self.lutris_window.on_game_run(game_id=game_id)
|
||||
|
||||
# D-Bus init
|
||||
DBusGMainLoop(set_as_default=True)
|
||||
bus = dbus.SessionBus()
|
||||
|
||||
# Get lutris service
|
||||
request = bus.request_name(DBUS_INTERFACE, dbus.bus.NAME_FLAG_DO_NOT_QUEUE)
|
||||
if request != dbus.bus.REQUEST_NAME_REPLY_EXISTS:
|
||||
lutris = LutrisService(bus, '/', DBUS_INTERFACE)
|
||||
else:
|
||||
proxy = bus.get_object(DBUS_INTERFACE, "/")
|
||||
lutris = dbus.Interface(proxy, DBUS_INTERFACE)
|
||||
bus = dbus.SessionBus()
|
||||
lutris = service.get_service(bus)
|
||||
|
||||
# Make sure the existing process is not frozen
|
||||
if type(lutris) is dbus.Interface:
|
||||
|
@ -204,7 +147,7 @@ if type(lutris) is dbus.Interface:
|
|||
exit() # Give up :(
|
||||
else:
|
||||
time.sleep(1) # Wait for bus name to be available again
|
||||
lutris = LutrisService(bus, '/', DBUS_INTERFACE)
|
||||
lutris = service.LutrisService(bus, '/', service.DBUS_INTERFACE)
|
||||
|
||||
migrate()
|
||||
|
||||
|
@ -236,7 +179,10 @@ if game_slug or installer:
|
|||
lutris_game = Game(db_game['id'])
|
||||
lutris_game.exit_main_loop = True
|
||||
lutris_game.play()
|
||||
GLib.MainLoop().run()
|
||||
try:
|
||||
GLib.MainLoop().run()
|
||||
except KeyboardInterrupt:
|
||||
lutris_game.stop()
|
||||
else:
|
||||
logger.info("Installing %s", game_slug)
|
||||
if lutris.is_running():
|
||||
|
|
10
debian/changelog
vendored
10
debian/changelog
vendored
|
@ -1,3 +1,13 @@
|
|||
lutris (0.3.7.3) xenial; urgency=medium
|
||||
|
||||
* Add PCSX2 runner
|
||||
* Add PPSSPP runner
|
||||
* Extended kickstart support for Amiga CD32
|
||||
* UI improvements
|
||||
* Regedit fixes
|
||||
|
||||
-- Mathieu Comandon <strycore@gmail.com> Sun, 21 Feb 2016 21:13:39 -0800
|
||||
|
||||
lutris (0.3.7.2) wily; urgency=medium
|
||||
|
||||
* Add button to eject CD-ROMs during installation of Wine games
|
||||
|
|
2
debian/compat
vendored
2
debian/compat
vendored
|
@ -1 +1 @@
|
|||
6
|
||||
9
|
||||
|
|
12
debian/control
vendored
12
debian/control
vendored
|
@ -1,14 +1,13 @@
|
|||
Source: lutris
|
||||
Section: games
|
||||
Priority: optional
|
||||
Build-Depends: cdbs,
|
||||
debhelper,
|
||||
Build-Depends: debhelper,
|
||||
python,
|
||||
dh-python,
|
||||
gir1.2-gtk-3.0,
|
||||
gir1.2-glib-2.0,
|
||||
python-gi,
|
||||
libgirepository1.0-dev,
|
||||
libgirepository1.0-dev
|
||||
Maintainer: Mathieu Comandon <strider@strycore.com>
|
||||
Standards-Version: 3.9.5
|
||||
Vcs-Git: https://github.com/lutris/lutris
|
||||
|
@ -19,7 +18,12 @@ Package: lutris
|
|||
Architecture: any
|
||||
Depends: ${misc:Depends},
|
||||
${python:Depends},
|
||||
python-yaml, python-dbus, gir1.2-gtk-3.0, xdg-user-dirs, libc6-i386 [amd64],
|
||||
python-yaml,
|
||||
python-dbus,
|
||||
gir1.2-gtk-3.0,
|
||||
xdg-user-dirs,
|
||||
python-xdg,
|
||||
libc6-i386 [amd64],
|
||||
lib32gcc1 [amd64]
|
||||
Description: Install and play any video game easily
|
||||
Lutris is a gaming platform for GNU/Linux. Its goal is to make
|
||||
|
|
2
debian/copyright
vendored
2
debian/copyright
vendored
|
@ -4,7 +4,7 @@ Upstream-Maintainer: Mathieu Comandon <strycore@gmail.com>
|
|||
Upstream-Source: https://github.com/lutris
|
||||
|
||||
Files: *
|
||||
Copyright: (C) 2009, 2015 Mathieu Comandon <strycore@gmail.com>
|
||||
Copyright: (C) 2009, 2016 Mathieu Comandon <strycore@gmail.com>
|
||||
License: GPL-3
|
||||
The full text of the GPL is distributed in
|
||||
/usr/share/common-licenses/GPL-3 on Debian systems.
|
||||
|
|
9
debian/rules
vendored
9
debian/rules
vendored
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/make -f
|
||||
|
||||
DEB_PYTHON2_MODULE_PACKAGES=lutris
|
||||
|
||||
include /usr/share/cdbs/1/rules/debhelper.mk
|
||||
include /usr/share/cdbs/1/class/python-distutils.mk
|
||||
# This file was automatically generated by stdeb 0.8.2 at
|
||||
# Fri, 29 Jan 2016 08:11:44 -0500
|
||||
export PYBUILD_NAME=lutris
|
||||
%:
|
||||
dh $@ --with python2 --buildsystem=pybuild
|
||||
|
|
1
debian/source/format
vendored
Normal file
1
debian/source/format
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
3.0 (quilt)
|
|
@ -1,7 +1,7 @@
|
|||
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
|
||||
|
||||
Name: lutris
|
||||
Version: 0.3.7.2
|
||||
Version: 0.3.7.3
|
||||
Release: 2%{?dist}
|
||||
Summary: Install and play any video game easily
|
||||
|
||||
|
@ -18,7 +18,7 @@ BuildRequires: python-devel
|
|||
|
||||
%if 0%{?fedora_version}
|
||||
BuildRequires: pygobject3, python3-gobject
|
||||
Requires: pygobject3, PyYAML, python-xdg
|
||||
Requires: pygobject3, PyYAML, pyxdg
|
||||
%endif
|
||||
%if 0%{?rhel_version} || 0%{?centos_version}
|
||||
BuildRequires: pygobject3
|
||||
|
|
|
@ -303,7 +303,8 @@ class Game(object):
|
|||
self.state = self.STATE_STOPPED
|
||||
if self.runner.system_config.get('xboxdrv'):
|
||||
self.xboxdrv_thread.stop()
|
||||
jobs.AsyncCall(self.game_thread.stop, None, killall=True)
|
||||
if self.game_thread:
|
||||
jobs.AsyncCall(self.game_thread.stop, None, killall=True)
|
||||
|
||||
def on_game_quit(self):
|
||||
"""Restore some settings and cleanup after game quit."""
|
||||
|
|
|
@ -38,7 +38,7 @@ def load_view(view, store):
|
|||
|
||||
class LutrisWindow(object):
|
||||
"""Handler class for main window signals."""
|
||||
def __init__(self):
|
||||
def __init__(self, service=None):
|
||||
|
||||
ui_filename = os.path.join(
|
||||
datapath.get(), 'ui', 'LutrisWindow.ui'
|
||||
|
@ -46,6 +46,7 @@ class LutrisWindow(object):
|
|||
if not os.path.exists(ui_filename):
|
||||
raise IOError('File %s not found' % ui_filename)
|
||||
|
||||
self.service = service
|
||||
self.running_game = None
|
||||
self.threads_stoppers = []
|
||||
|
||||
|
@ -270,12 +271,15 @@ class LutrisWindow(object):
|
|||
def sync_library(self):
|
||||
"""Synchronize games with local stuff and server."""
|
||||
def update_gui(result, error):
|
||||
added, updated, installed, uninstalled = result
|
||||
self.switch_splash_screen()
|
||||
self.game_store.fill_store(added)
|
||||
if result:
|
||||
added, updated, installed, uninstalled = result
|
||||
self.switch_splash_screen()
|
||||
self.game_store.fill_store(added)
|
||||
|
||||
GLib.idle_add(self.update_existing_games,
|
||||
added, updated, installed, uninstalled, True)
|
||||
GLib.idle_add(self.update_existing_games,
|
||||
added, updated, installed, uninstalled, True)
|
||||
else:
|
||||
logger.error("No results returned when syncing the library")
|
||||
|
||||
self.set_status("Syncing library")
|
||||
AsyncCall(Sync().sync_all, update_gui)
|
||||
|
@ -393,7 +397,10 @@ class LutrisWindow(object):
|
|||
or self.running_game.state == Game.STATE_STOPPED):
|
||||
|
||||
def update_gui(result, error):
|
||||
self.update_existing_games(set(), set(), *result)
|
||||
if result:
|
||||
self.update_existing_games(set(), set(), *result)
|
||||
else:
|
||||
logger.error('No results while syncing local Steam database')
|
||||
AsyncCall(Sync().sync_local, update_gui)
|
||||
return True
|
||||
|
||||
|
@ -406,6 +413,12 @@ class LutrisWindow(object):
|
|||
for stopper in self.threads_stoppers:
|
||||
stopper()
|
||||
|
||||
if self.running_game:
|
||||
self.running_game.stop()
|
||||
|
||||
if self.service:
|
||||
self.service.stop()
|
||||
|
||||
# Save settings
|
||||
width, height = self.window_size
|
||||
settings.write_setting('width', width)
|
||||
|
|
|
@ -21,16 +21,26 @@ class RunnerInstallDialog(Dialog):
|
|||
super(RunnerInstallDialog, self).__init__(
|
||||
title, parent, 0, ('_OK', Gtk.ResponseType.OK)
|
||||
)
|
||||
width, height = (340, 380)
|
||||
self.dialog_size = (width, height)
|
||||
self.set_default_size(width, height)
|
||||
|
||||
self.runner = runner
|
||||
self.runner_info = api.get_runners(self.runner)
|
||||
label = Gtk.Label("%s version management" % self.runner_info['name'])
|
||||
self.vbox.add(label)
|
||||
self.runner_store = self.get_store()
|
||||
scrolled_window = Gtk.ScrolledWindow()
|
||||
self.treeview = self.get_treeview(self.runner_store)
|
||||
self.installing = {}
|
||||
self.connect('response', self.on_response)
|
||||
|
||||
self.vbox.add(self.treeview)
|
||||
scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,
|
||||
Gtk.PolicyType.AUTOMATIC)
|
||||
scrolled_window.set_shadow_type(Gtk.ShadowType.ETCHED_OUT)
|
||||
scrolled_window.add_with_viewport(self.treeview)
|
||||
|
||||
self.vbox.pack_start(scrolled_window, True, True, 14)
|
||||
self.show_all()
|
||||
|
||||
def get_treeview(self, model):
|
||||
|
|
|
@ -16,9 +16,12 @@ from lutris.runners import wine, import_task, import_runner, InvalidRunner
|
|||
from lutris.thread import LutrisThread
|
||||
|
||||
|
||||
class Commands(object):
|
||||
class CommandsMixin(object):
|
||||
"""The directives for the `installer:` part of the install script."""
|
||||
|
||||
def __init__(self):
|
||||
raise RuntimeError("Don't instanciate this class, it's a mixin!!!!!!!!!!!!!!!!")
|
||||
|
||||
def _get_wine_version(self):
|
||||
if self.script.get('wine'):
|
||||
return wine.support_legacy_version(self.script['wine'].get('version'))
|
||||
|
@ -269,7 +272,8 @@ class Commands(object):
|
|||
passed to the runner task.
|
||||
"""
|
||||
self._check_required_params('name', data, 'task')
|
||||
GLib.idle_add(self.parent.cancel_button.set_sensitive, False)
|
||||
if self.parent:
|
||||
GLib.idle_add(self.parent.cancel_button.set_sensitive, False)
|
||||
task_name = data.pop('name')
|
||||
if '.' in task_name:
|
||||
# Run a task from a different runner
|
||||
|
@ -282,7 +286,6 @@ class Commands(object):
|
|||
except InvalidRunner:
|
||||
GLib.idle_add(self.parent.cancel_button.set_sensitive, True)
|
||||
raise ScriptingError('Invalid runner provided %s', runner_name)
|
||||
|
||||
runner = runner_class()
|
||||
|
||||
# Check/install Wine runner at version specified in the script
|
||||
|
|
|
@ -10,7 +10,7 @@ import platform
|
|||
from gi.repository import GLib
|
||||
|
||||
from .errors import ScriptingError
|
||||
from .commands import Commands
|
||||
from .commands import CommandsMixin
|
||||
|
||||
from lutris import pga, settings
|
||||
from lutris.util import system
|
||||
|
@ -37,7 +37,7 @@ def fetch_script(game_ref):
|
|||
return yaml.safe_load(script_contents)
|
||||
|
||||
|
||||
class ScriptInterpreter(Commands):
|
||||
class ScriptInterpreter(CommandsMixin):
|
||||
"""Convert raw installer script data into actions."""
|
||||
def __init__(self, script, parent):
|
||||
self.error = None
|
||||
|
@ -354,6 +354,7 @@ class ScriptInterpreter(Commands):
|
|||
status_text = None
|
||||
if status_text:
|
||||
self.parent.set_status(status_text)
|
||||
logger.debug('Installer command: %s', command)
|
||||
AsyncCall(method, self._iter_commands, params)
|
||||
else:
|
||||
self._finish_install()
|
||||
|
|
|
@ -58,6 +58,12 @@ class fsuae(Runner):
|
|||
"replacement ROM which is less compatible with Amiga "
|
||||
"software.")
|
||||
},
|
||||
{
|
||||
'option': 'kickstart_ext_file',
|
||||
'label': 'Extended Kickstart location',
|
||||
'type': 'file',
|
||||
'help': 'Location of extended Kickstart used for CD32'
|
||||
},
|
||||
{
|
||||
"option": "gfx_fullscreen_amiga",
|
||||
"label": "Fullscreen (F12 + s to switch)",
|
||||
|
@ -105,6 +111,9 @@ class fsuae(Runner):
|
|||
kickstart_file = self.runner_config.get('kickstart_file')
|
||||
if kickstart_file:
|
||||
params.append("--kickstart_file=%s" % kickstart_file)
|
||||
kickstart_ext_file = self.runner_config.get('kickstart_ext_file')
|
||||
if kickstart_ext_file:
|
||||
params.append('--kickstart_ext_file=%s' % kickstart_ext_file)
|
||||
if model:
|
||||
params.append('--amiga_model=%s' % model)
|
||||
if self.runner_config.get('gfx_fullscreen_amiga'):
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import os
|
||||
import time
|
||||
import shlex
|
||||
import subprocess
|
||||
|
||||
|
@ -45,12 +46,12 @@ def set_regedit(path, key, value='', type='REG_SZ', wine_path=None,
|
|||
|
||||
def set_regedit_file(filename, wine_path=None, prefix=None, arch='win32'):
|
||||
"""Apply a regedit file to the Windows registry."""
|
||||
wineexec('regedit', args=filename, wine_path=wine_path, prefix=prefix, arch=arch,
|
||||
blocking=True)
|
||||
wineexec('regedit', args="/S " + filename, wine_path=wine_path, prefix=prefix,
|
||||
arch=arch, blocking=True)
|
||||
|
||||
|
||||
def delete_registry_key(key, wine_path=None, prefix=None, arch='win32'):
|
||||
wineexec('regedit', args='/D "%s"' % key, wine_path=wine_path,
|
||||
wineexec('regedit', args='/S /D "%s"' % key, wine_path=wine_path,
|
||||
prefix=prefix, arch=arch, blocking=True)
|
||||
|
||||
|
||||
|
@ -61,13 +62,15 @@ def create_prefix(prefix, wine_dir=None, arch='win32'):
|
|||
wine_dir = os.path.dirname(wine().get_executable())
|
||||
wineboot_path = os.path.join(wine_dir, 'wineboot')
|
||||
|
||||
env = ['WINEARCH=%s' % arch]
|
||||
if prefix:
|
||||
env.append('WINEPREFIX="%s" ' % prefix)
|
||||
env = {
|
||||
'WINEARCH': arch,
|
||||
'WINEPREFIX': prefix
|
||||
}
|
||||
system.execute([wineboot_path], env=env)
|
||||
if not os.path.exists(os.path.join(prefix, 'system.reg')):
|
||||
logger.error('No system.reg found after prefix creation. Prefix might not be valid')
|
||||
logger.info('%s Prefix created in %s', arch, prefix)
|
||||
|
||||
command = " ".join(env) + wineboot_path
|
||||
subprocess.Popen(command, cwd=None, shell=True,
|
||||
stdout=subprocess.PIPE).communicate()
|
||||
if prefix:
|
||||
disable_desktop_integration(prefix)
|
||||
|
||||
|
@ -106,7 +109,10 @@ def wineexec(executable, args="", wine_path=None, prefix=None, arch=None,
|
|||
if settings.RUNNER_DIR in wine_path:
|
||||
env['LD_LIBRARY_PATH'] = ':'.join(runtime.get_paths())
|
||||
|
||||
command = [wine_path, executable] + args.split()
|
||||
command = [wine_path]
|
||||
if executable:
|
||||
command.append(executable)
|
||||
command += args.split()
|
||||
if blocking:
|
||||
return system.execute(command, env=env, cwd=working_dir)
|
||||
else:
|
||||
|
@ -236,6 +242,9 @@ def is_version_installed(version):
|
|||
|
||||
def get_default_version():
|
||||
installed_versions = get_wine_versions()
|
||||
wine32_versions = [version for version in installed_versions if '64' not in version]
|
||||
if wine32_versions:
|
||||
return wine32_versions[0]
|
||||
if installed_versions:
|
||||
return installed_versions[0]
|
||||
|
||||
|
|
|
@ -224,9 +224,9 @@ class winesteam(wine.wine):
|
|||
if path:
|
||||
return path
|
||||
|
||||
def install(self, installer_path=None):
|
||||
def install(self, installer_path=None, version=None):
|
||||
if not self.is_wine_installed():
|
||||
super(winesteam, self).install()
|
||||
wine.wine().install(version=version)
|
||||
prefix = self.get_or_create_default_prefix()
|
||||
if not self.get_steam_path():
|
||||
if not installer_path:
|
||||
|
|
|
@ -5,8 +5,8 @@ from gi.repository import GLib
|
|||
from lutris.util.settings import SettingsIO
|
||||
|
||||
PROJECT = "Lutris"
|
||||
VERSION = "0.3.7.2"
|
||||
COPYRIGHT = "(c) 2010-2015 Lutris Gaming Platform"
|
||||
VERSION = "0.3.7.3"
|
||||
COPYRIGHT = "(c) 2010-2016 Lutris Gaming Platform"
|
||||
AUTHORS = ["Mathieu Comandon <strycore@gmail.com>",
|
||||
"Pascal Reinhard (Xodetaetl) <dev@xod.me"]
|
||||
ARTISTS = ["Ludovic Soulié <contact@ludal.net>"]
|
||||
|
|
|
@ -49,6 +49,7 @@ class LutrisThread(threading.Thread):
|
|||
self.cwd = runner.working_dir
|
||||
else:
|
||||
self.cwd = '/tmp'
|
||||
self.cwd = os.path.expanduser(self.cwd)
|
||||
|
||||
self.env_string = ''
|
||||
for (k, v) in self.env.items():
|
||||
|
@ -165,7 +166,7 @@ class LutrisThread(threading.Thread):
|
|||
'bash', 'control', 'lutris', 'PnkBstrA.exe', 'python', 'regedit',
|
||||
'sh', 'steam', 'Steam.exe', 'steamer', 'steamerrorrepor',
|
||||
'SteamService.ex', 'steamwebhelper', 'steamwebhelper.', 'tee',
|
||||
'tr', 'winecfg.exe', 'winetricks', 'zenity',
|
||||
'tr', 'winecfg.exe', 'zenity',
|
||||
)
|
||||
if child.name in excluded:
|
||||
continue
|
||||
|
|
|
@ -23,3 +23,11 @@ loghandler.setFormatter(logformatter)
|
|||
logger = logging.getLogger(__name__)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.addHandler(loghandler)
|
||||
|
||||
# Set the logging level to show debug messages.
|
||||
console = logging.StreamHandler()
|
||||
fmt = '%(levelname)-8s %(asctime)s [%(module)s]:%(message)s'
|
||||
formatter = logging.Formatter(fmt)
|
||||
console.setFormatter(formatter)
|
||||
logger.addHandler(console)
|
||||
logger.setLevel(logging.ERROR)
|
||||
|
|
56
lutris/util/service.py
Normal file
56
lutris/util/service.py
Normal file
|
@ -0,0 +1,56 @@
|
|||
import dbus
|
||||
from gi.repository import Gtk, GObject
|
||||
from lutris.gui.lutriswindow import LutrisWindow
|
||||
from lutris.util.log import logger
|
||||
|
||||
DBUS_INTERFACE = 'net.lutris.main'
|
||||
|
||||
|
||||
class LutrisService(dbus.service.Object):
|
||||
"""Main D-Bus Lutris service."""
|
||||
def __init__(self, bus_name, object_path, name):
|
||||
dbus.service.Object.__init__(self, bus_name, object_path, name)
|
||||
self.running = False
|
||||
self.lutris_window = None
|
||||
|
||||
def stop(self):
|
||||
""" stop the dbus controller and remove from the bus """
|
||||
self.remove_from_connection()
|
||||
|
||||
@dbus.service.method(DBUS_INTERFACE, out_signature='b')
|
||||
def is_running(self):
|
||||
return self.running
|
||||
|
||||
@dbus.service.method(DBUS_INTERFACE, in_signature='i')
|
||||
def run(self, timestamp):
|
||||
if self.is_running():
|
||||
self.lutris_window.window.present_with_time(timestamp)
|
||||
else:
|
||||
logger.info("Welcome to Lutris")
|
||||
self.running = True
|
||||
self.lutris_window = LutrisWindow(service=self)
|
||||
GObject.threads_init()
|
||||
Gtk.main()
|
||||
self.running = False
|
||||
|
||||
@dbus.service.method(DBUS_INTERFACE, in_signature='s')
|
||||
def install_game(self, game_ref):
|
||||
self.lutris_window.on_install_clicked(game_ref=game_ref)
|
||||
|
||||
@dbus.service.method(DBUS_INTERFACE, in_signature='i')
|
||||
def run_game(self, game_id):
|
||||
self.lutris_window.on_game_run(game_id=game_id)
|
||||
|
||||
|
||||
def get_bus():
|
||||
return dbus.SessionBus()
|
||||
|
||||
|
||||
def get_service(bus):
|
||||
request = bus.request_name(DBUS_INTERFACE, dbus.bus.NAME_FLAG_DO_NOT_QUEUE)
|
||||
if request != dbus.bus.REQUEST_NAME_REPLY_EXISTS:
|
||||
service = LutrisService(bus, '/', DBUS_INTERFACE)
|
||||
else:
|
||||
proxy = bus.get_object(DBUS_INTERFACE, "/")
|
||||
service = dbus.Interface(proxy, DBUS_INTERFACE)
|
||||
return service
|
|
@ -5,6 +5,7 @@ import shutil
|
|||
import string
|
||||
import subprocess
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
from lutris.util.log import logger
|
||||
|
||||
|
@ -12,19 +13,31 @@ from lutris.util.log import logger
|
|||
is_64bit = sys.maxsize > 2**32
|
||||
|
||||
|
||||
def execute(command, shell=False, env=None, cwd=None):
|
||||
def execute(command, env=None, cwd=None, log_errors=False):
|
||||
"""Execute a system command and return its results."""
|
||||
# logger.debug("Executing %s", ' '.join(command))
|
||||
# logger.debug("ENV: %s", env)
|
||||
existing_env = os.environ.copy()
|
||||
if env:
|
||||
existing_env.update(env)
|
||||
logger.debug(' '.join('{}={}'.format(k, v) for k, v in env.iteritems()))
|
||||
logger.debug("Executing %s", ' '.join(command))
|
||||
|
||||
# Piping stderr can cause slowness in the programs, use carefully
|
||||
# (especially when using regedit with wine)
|
||||
if log_errors:
|
||||
stderr_config = subprocess.PIPE
|
||||
else:
|
||||
stderr_config = None
|
||||
try:
|
||||
stdout, stderr = subprocess.Popen(command,
|
||||
shell=shell,
|
||||
shell=False,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
env=env, cwd=cwd).communicate()
|
||||
stderr=stderr_config,
|
||||
env=existing_env, cwd=cwd).communicate()
|
||||
except OSError as ex:
|
||||
logger.error('Could not run command %s: %s', command, ex)
|
||||
return
|
||||
if stderr and log_errors:
|
||||
logger.error(stderr)
|
||||
return stdout.strip()
|
||||
|
||||
|
||||
|
@ -232,3 +245,7 @@ def path_exists(path):
|
|||
if not path:
|
||||
return False
|
||||
return os.path.exists(path)
|
||||
|
||||
|
||||
def stacktrace():
|
||||
traceback.print_stack()
|
||||
|
|
2
setup.py
2
setup.py
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/python
|
||||
#!/usr/bin/python3
|
||||
import os
|
||||
from distutils.core import setup
|
||||
from lutris.settings import VERSION
|
||||
|
|
|
@ -1,101 +0,0 @@
|
|||
# Windows - DINPUT
|
||||
8f0e1200000000000000504944564944,Acme,platform:Windows,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
ffff0000000000000000504944564944,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
6d0416c2000000000000504944564944,Generic DirectInput Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
6d0419c2000000000000504944564944,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
88880803000000000000504944564944,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
|
||||
4c056802000000000000504944564944,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows,
|
||||
25090500000000000000504944564944,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows,
|
||||
4c05c405000000000000504944564944,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
6d0418c2000000000000504944564944,Logitech RumblePad 2 USB,platform:Windows,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
36280100000000000000504944564944,OUYA Controller,platform:Windows,a:b0,b:b3,y:b2,x:b1,start:b14,guide:b15,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b8,dpleft:b10,dpdown:b9,dpright:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b12,righttrigger:b13,
|
||||
4f0400b3000000000000504944564944,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Windows,
|
||||
00f00300000000000000504944564944,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows,
|
||||
00f0f100000000000000504944564944,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows,
|
||||
28040140000000000000504944564944,GamePad Pro USB,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,
|
||||
ff113133000000000000504944564944,SVEN X-PAD,platform:Windows,a:b2,b:b3,y:b1,x:b0,start:b5,back:b4,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b8,righttrigger:b9,
|
||||
8f0e0300000000000000504944564944,Piranha xtreme,platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
8f0e0d31000000000000504944564944,Multilaser JS071 USB,platform:Windows,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
10080300000000000000504944564944,PS2 USB,platform:Windows,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a4,righty:a2,lefttrigger:b4,righttrigger:b5,
|
||||
79000600000000000000504944564944,G-Shark GS-GP702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
4b12014d000000000000504944564944,NYKO AIRFLO,a:b0,b:b1,x:b2,y:b3,back:b8,guide:b10,start:b9,leftstick:a0,rightstick:a2,leftshoulder:a3,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:h0.6,lefty:h0.12,rightx:h0.9,righty:h0.4,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
d6206dca000000000000504944564944,PowerA Pro Ex,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
a3060cff000000000000504944564944,Saitek P2500,a:b2,b:b3,y:b1,x:b0,start:b4,guide:b10,back:b5,leftstick:b8,rightstick:b9,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows,
|
||||
8f0e0300000000000000504944564944,Trust GTX 28,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
|
||||
4f0415b3000000000000504944564944,Thrustmaster Dual Analog 3.2,platform:Windows,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
6f0e1e01000000000000504944564944,Rock Candy Gamepad for PS3,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
83056020000000000000504944564944,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,y:b2,x:b3,start:b7,back:b6,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Windows,
|
||||
|
||||
# OS X
|
||||
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
6d0400000000000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
6d0400000000000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
6d040000000000001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
6d0400000000000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
4c050000000000006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,
|
||||
4c05000000000000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,Platform:Mac OS X,
|
||||
5e040000000000008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
891600000000000000fd000000000000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b8,guide:b10,back:b9,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b11,dpleft:b13,dpdown:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Mac OS X,
|
||||
4f0400000000000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Mac OS X,
|
||||
8f0e0000000000000300000000000000,Piranha xtreme,platform:Mac OS X,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
0d0f0000000000004d00000000000000,HORI Gem Pad 3,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
79000000000000000600000000000000,G-Shark GP-702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
|
||||
4f0400000000000015b3000000000000,Thrustmaster Dual Analog 3.2,platform:Mac OS X,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
AD1B00000000000001F9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,y:b9,x:b10,start:b6,guide:b8,back:b7,dpup:b2,dpleft:b0,dpdown:b3,dpright:b1,leftx:a0,lefty:a1,lefttrigger:b12,righttrigger:,leftshoulder:b11,platform:Mac OS X,
|
||||
|
||||
# Linux
|
||||
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
|
||||
030000004c050000c405000011010000,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000006f0e00003001000001010000,EA Sports PS3 Controller,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
03000000de280000ff11000001000000,Valve Streaming Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,y:b0,x:b3,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux,
|
||||
03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Linux,
|
||||
030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,y:b3,x:b1,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux,
|
||||
030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a5,
|
||||
030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
|
||||
030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
030000006d04000016c2000010010000,Logitech Logitech Dual Action,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
03000000260900008888000000010000,GameCube {WiseGroup USB box},a:b0,b:b2,y:b3,x:b1,start:b7,leftshoulder:,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,rightstick:,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Linux,
|
||||
030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,y:b4,x:b3,start:b8,guide:b5,back:b2,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b9,righttrigger:b10,platform:Linux,
|
||||
030000006d04000018c2000010010000,Logitech Logitech RumblePad 2 USB,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
05000000d6200000ad0d000001000000,Moga Pro,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
|
||||
030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
|
||||
030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,
|
||||
0300000000f000000300000000010000,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux,
|
||||
0300000000f00000f100000000010000,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux,
|
||||
030000006f0e00001f01000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000280400000140000000010000,Gravis GamePad Pro USB ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftx:a0,lefty:a1,
|
||||
030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000006f0e00001e01000011010000,Rock Candy Gamepad for PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,platform:Linux,a:b2,b:b1,y:b0,x:b3,start:b8,back:b9,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,
|
||||
030000008916000000fd000024010000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux,
|
||||
03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
050000004c050000c405000000010000,PS4 Controller (Bluetooth),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
060000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux,
|
||||
03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000666600000488000000010000,Super Joy Box 5 Pro,platform:Linux,a:b2,b:b1,x:b3,y:b0,back:b9,start:b8,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,dpup:b12,dpleft:b15,dpdown:b14,dpright:b13,
|
||||
05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,
|
||||
05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,
|
||||
030000008916000001fd000024010000,Razer Onza Classic Edition,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:b11,dpdown:b14,dpright:b12,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
030000005e040000d102000001010000,Microsoft X-Box One pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
|
||||
03000000790000001100000010010000,RetroLink Saturn Classic Controller,platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,
|
||||
050000007e0500003003000001000000,Nintendo Wii U Pro Controller,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b8,start:b9,guide:b10,leftshoulder:b4,rightshoulder:b5,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:b13,dpleft:b15,dpdown:b14,dpright:b16,
|
||||
030000005e0400008e02000004010000,Microsoft X-Box 360 pad,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
|
||||
030000000d0f00002200000011010000,HORI CO.,LTD. REAL ARCADE Pro.V3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,
|
||||
030000000d0f00001000000011010000,HORI CO.,LTD. FIGHTING STICK 3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7
|
||||
03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
||||
0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b7,back:b6,guide:b8,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,lefttrigger:a5,righttrigger:a4,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a2,righty:a3,
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.16.1 -->
|
||||
<!-- Generated with glade 3.18.3 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.10"/>
|
||||
<!-- interface-local-resource-path ../media -->
|
||||
|
@ -699,11 +699,18 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<child>
|
||||
<object class="GtkViewport" id="sidebar_viewport">
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
<object class="GtkViewport" id="sidebar_viewport">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -793,11 +800,11 @@
|
|||
<object class="GtkLabel" id="status_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="xpad">5</property>
|
||||
<property name="ypad">5</property>
|
||||
<property name="label" translatable="yes">Lutris</property>
|
||||
<property name="lines">1</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
|
@ -809,8 +816,8 @@
|
|||
<object class="GtkLabel" id="connection_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="label" translatable="yes">label</property>
|
||||
<property name="xalign">1</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
|
|
Loading…
Reference in a new issue