Skip to content
Snippets Groups Projects
Commit f7fd019c authored by Simon McVittie's avatar Simon McVittie
Browse files

Add an experimental UI to launch games with pressure-vessel


Instead of setting the game's launch options every time, you can
configure them once, with:

    env PRESSURE_VESSEL_WRAP_GUI=1 .../bin/pressure-vessel-unruntime -- %command%

and then use the launcher. It is currently hard-coded to look for
runtimes in ../scout and ../spy relative to its own executable, so
you'll want a directory structure like this:

    pressure-vessel-0.x
        bin/
            pressure-vessel-test-ui
            pressure-vessel-unruntime
            ...
        lib/
            i386-linux-gnu/
                ...
            x86_64-linux-gnu/
                ...
        scout/
            files/
                ...
        spy/
            files/
                ...

Signed-off-by: default avatarSimon McVittie <smcv@collabora.com>
parent 22091dc1
No related branches found
No related tags found
No related merge requests found
......@@ -91,6 +91,7 @@ PRIMARY_ARCH_DEPENDENCIES = {
'libselinux1': 'libselinux',
}
SCRIPTS = [
'pressure-vessel-test-ui',
'pressure-vessel-unruntime',
'pressure-vessel-wrap'
]
......
......@@ -40,6 +40,7 @@ endif
scripts = [
'pressure-vessel-wrap',
'pressure-vessel-test-ui',
'pressure-vessel-unruntime',
]
......
#!/usr/bin/env python3
# Copyright © 2019 Collabora Ltd.
#
# SPDX-License-Identifier: MIT
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import logging
import os
import sys
try:
import typing
except ImportError:
pass
else:
typing # silence pyflakes
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
logger = logging.getLogger('pressure-vessel-test-ui')
class Gui:
def __init__(self):
self.window = Gtk.Window()
self.window.set_default_size(600, 300)
self.window.connect('delete-event', Gtk.main_quit)
self.window.set_title('Choose pressure-vessel runtime')
self.grid = Gtk.Grid(
row_spacing=6,
column_spacing=6,
margin_top=12,
margin_bottom=12,
margin_start=12,
margin_end=12,
)
self.window.add(self.grid)
row = 0
runtime_label = Gtk.Label.new('Runtime')
self.grid.attach(runtime_label, 0, row, 1, 1)
self.runtime_combo = Gtk.ComboBoxText.new()
self.runtime_combo.append('/', 'None (use host system)')
self.runtime_combo.append('scout', "SteamRT 1 'scout' (./scout)")
self.runtime_combo.append('spy', "SteamRT 2 'spy' (./spy)")
self.runtime_combo.set_active(1)
self.grid.attach(self.runtime_combo, 1, row, 1, 1)
row += 1
self.native_check = Gtk.CheckButton.new_with_label(
'Use native-code version of pressure-vessel-wrap'
)
self.grid.attach(self.native_check, 1, row, 1, 1)
row += 1
self.share_home_check = Gtk.CheckButton.new_with_label(
'Share real home directory'
)
self.share_home_check.set_active(True)
self.grid.attach(self.share_home_check, 1, row, 1, 1)
row += 1
self.xterm_check = Gtk.CheckButton.new_with_label('Run in an xterm')
self.xterm_check.set_active(True)
self.grid.attach(self.xterm_check, 1, row, 1, 1)
row += 1
buttons_grid = Gtk.Grid(
column_spacing=6,
column_homogeneous=True,
halign=Gtk.Align.END,
)
cancel_button = Gtk.Button.new_with_label('Cancel')
cancel_button.connect('clicked', Gtk.main_quit)
buttons_grid.attach(cancel_button, 0, 0, 1, 1)
run_button = Gtk.Button.new_with_label('Run')
run_button.connect('clicked', self.run_cb)
buttons_grid.attach(run_button, 1, 0, 1, 1)
self.grid.attach(buttons_grid, 0, row, 2, 1)
row += 1
def run_cb(self, _ignored=None):
if self.native_check.get_active():
wrap = 'pressure-vessel-wrap-c'
else:
wrap = 'pressure-vessel-wrap'
argv = [
'env',
'G_MESSAGES_DEBUG=all',
os.path.join(
os.path.dirname(sys.argv[0]),
wrap,
),
]
id = self.runtime_combo.get_active_id()
if id is None:
pass
elif id == '/':
pass
else:
path = os.path.join(
os.path.dirname(sys.argv[0]),
'..',
id,
'files',
)
argv.append('--runtime')
argv.append(path)
if self.share_home_check.get_active():
argv.append('--share-home')
else:
argv.append('--unshare-home')
if self.xterm_check.get_active():
argv.append('--xterm')
argv.append('--verbose')
argv.extend(sys.argv[1:])
os.execvp(argv[0], argv)
def run(self):
self.window.show_all()
Gtk.main()
if __name__ == '__main__':
Gui().run()
......@@ -96,6 +96,10 @@ for word in $ld_preload; do
done
IFS="$old_IFS"
if [ -n "${PRESSURE_VESSEL_WRAP_GUI+set}" ]; then
exec "${here}/pressure-vessel-test-ui" ${options+"${options[@]}"} "$@"
fi
if [ -n "${PRESSURE_VESSEL_WRAP_NATIVE+set}" ]; then
exec "${here}/pressure-vessel-wrap-c" ${options+"${options[@]}"} "$@"
fi
......
......@@ -21,6 +21,7 @@ export MYPYPATH="${PYTHONPATH:="$(pwd)"}"
i=0
for script in \
"${G_TEST_SRCDIR}"/*.py \
"${G_TEST_SRCDIR}"/pressure-vessel-test-ui \
"${G_TEST_SRCDIR}"/sysroot/*.py \
; do
i=$((i + 1))
......
......@@ -24,8 +24,13 @@ fi
echo "1..1"
# Ignore E402: when using GObject-Introspection, not all imports
# can come first
if "${PYCODESTYLE}" \
--ignore=E402 \
"$G_TEST_SRCDIR"/*.py \
"${G_TEST_SRCDIR}"/pressure-vessel-test-ui \
"${G_TEST_SRCDIR}"/sysroot/*.py \
>&2; then
echo "ok 1 - $PYCODESTYLE reported no issues"
......
......@@ -21,6 +21,7 @@ if [ "x${PYFLAKES:=pyflakes3}" = xfalse ] || \
echo "1..0 # SKIP pyflakes3 not found"
elif "${PYFLAKES}" \
"${G_TEST_SRCDIR}"/*.py \
"${G_TEST_SRCDIR}"/pressure-vessel-test-ui \
"${G_TEST_SRCDIR}"/sysroot/*.py \
>&2; then
echo "1..1"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment