Use Popen for spawning games again
This commit is contained in:
@@ -18,7 +18,6 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import shlex
|
|
||||||
from time import time
|
from time import time
|
||||||
|
|
||||||
from gi.repository import Adw, Gio, GLib, Gtk
|
from gi.repository import Adw, Gio, GLib, Gtk
|
||||||
@@ -71,7 +70,7 @@ class DetailsWindow(Adw.Window):
|
|||||||
self.name.set_text(self.game.name)
|
self.name.set_text(self.game.name)
|
||||||
if self.game.developer:
|
if self.game.developer:
|
||||||
self.developer.set_text(self.game.developer)
|
self.developer.set_text(self.game.developer)
|
||||||
self.executable.set_text(shlex.join(self.game.executable))
|
self.executable.set_text(" ".join(self.game.executable))
|
||||||
self.apply_button.set_label(_("Apply"))
|
self.apply_button.set_label(_("Apply"))
|
||||||
|
|
||||||
self.game_cover.new_cover(self.game.get_cover_path())
|
self.game_cover.new_cover(self.game.get_cover_path())
|
||||||
@@ -130,21 +129,7 @@ class DetailsWindow(Adw.Window):
|
|||||||
final_name = self.name.get_text()
|
final_name = self.name.get_text()
|
||||||
final_developer = self.developer.get_text()
|
final_developer = self.developer.get_text()
|
||||||
final_executable = self.executable.get_text()
|
final_executable = self.executable.get_text()
|
||||||
|
final_executable_split = final_executable.split()
|
||||||
try:
|
|
||||||
# Attempt to parse using shell parsing rules (doesn't verify executable existence).
|
|
||||||
final_executable_split = shlex.split(
|
|
||||||
final_executable, comments=False, posix=True
|
|
||||||
)
|
|
||||||
except ValueError as exception:
|
|
||||||
create_dialog(
|
|
||||||
self,
|
|
||||||
_("Couldn't Add Game")
|
|
||||||
if not self.game
|
|
||||||
else _("Couldn't Apply Preferences"),
|
|
||||||
f'{_("Executable")}: {exception}.',
|
|
||||||
)
|
|
||||||
return
|
|
||||||
|
|
||||||
if not self.game:
|
if not self.game:
|
||||||
if final_name == "":
|
if final_name == "":
|
||||||
|
|||||||
27
src/game.py
27
src/game.py
@@ -19,10 +19,12 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import shlex
|
||||||
|
import subprocess
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from time import time
|
from time import time
|
||||||
|
|
||||||
from gi.repository import Adw, Gio, GLib, Gtk
|
from gi.repository import Adw, Gio, Gtk
|
||||||
|
|
||||||
from .game_cover import GameCover
|
from .game_cover import GameCover
|
||||||
|
|
||||||
@@ -175,15 +177,28 @@ class Game(Gtk.Box):
|
|||||||
self.last_played = int(time())
|
self.last_played = int(time())
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
argv = (
|
args = " ".join(
|
||||||
("flatpak-spawn", "--host", *self.executable) # Flatpak
|
[
|
||||||
|
"flatpak-spawn",
|
||||||
|
"--host",
|
||||||
|
"/bin/sh",
|
||||||
|
"-c",
|
||||||
|
shlex.quote(" ".join(self.executable)),
|
||||||
|
]
|
||||||
if os.getenv("FLATPAK_ID") == "hu.kramo.Cartridges"
|
if os.getenv("FLATPAK_ID") == "hu.kramo.Cartridges"
|
||||||
else self.executable # Others
|
else self.executable
|
||||||
)
|
)
|
||||||
|
|
||||||
GLib.spawn_async(
|
print(args)
|
||||||
argv, working_directory=str(Path.home()), flags=GLib.SpawnFlags.SEARCH_PATH
|
|
||||||
|
subprocess.Popen(
|
||||||
|
args,
|
||||||
|
cwd=Path.home(),
|
||||||
|
shell=True,
|
||||||
|
start_new_session=True,
|
||||||
|
creationflags=subprocess.CREATE_NEW_PROCESS_GROUP if os.name == "nt" else 0,
|
||||||
)
|
)
|
||||||
|
|
||||||
if Gio.Settings.new("hu.kramo.Cartridges").get_boolean("exit-after-launch"):
|
if Gio.Settings.new("hu.kramo.Cartridges").get_boolean("exit-after-launch"):
|
||||||
self.app.quit()
|
self.app.quit()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user