We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
"Manage Versions` window is too narrow
Recent improvements to Wine version managing are currently a bit pointless due to Manage Versions windows being too narrow and not being able to display the status of the downloading process:
![peek 2018-09-29 11-37](https://user-images.githubusercontent.com/10602045/46243364-21144c80-c3dc-11e8-86b0-5356d707c7d7.gif)



--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `lutris/gui/runnerinstalldialog.py`
Content:
```
1 # pylint: disable=missing-docstring
2 import os
3 import random
4 
5 from gi.repository import GLib, GObject, Gtk
6 from lutris import api, settings
7 from lutris.gui.dialogs import ErrorDialog, QuestionDialog
8 from lutris.gui.widgets.dialogs import Dialog
9 from lutris.util import jobs, system
10 from lutris.util.downloader import Downloader
11 from lutris.util.extract import extract_archive
12 from lutris.util.log import logger
13 
14 
15 class RunnerInstallDialog(Dialog):
16     COL_VER = 0
17     COL_ARCH = 1
18     COL_URL = 2
19     COL_INSTALLED = 3
20     COL_PROGRESS = 4
21 
22     def __init__(self, title, parent, runner):
23         super(RunnerInstallDialog, self).__init__(
24             title, parent, 0, ('_OK', Gtk.ResponseType.OK)
25         )
26         width, height = (340, 380)
27         self.dialog_size = (width, height)
28         self.set_default_size(width, height)
29 
30         self.runner = runner
31         self.runner_info = api.get_runners(self.runner)
32         if not self.runner_info:
33             ErrorDialog('Unable to get runner versions, check your internet connection',
34                         parent=parent)
35             return
36         label = Gtk.Label("%s version management" % self.runner_info['name'])
37         self.vbox.add(label)
38         self.runner_store = self.get_store()
39         scrolled_window = Gtk.ScrolledWindow()
40         self.treeview = self.get_treeview(self.runner_store)
41         self.installing = {}
42         self.connect('response', self.on_response)
43 
44         scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,
45                                    Gtk.PolicyType.AUTOMATIC)
46         scrolled_window.set_shadow_type(Gtk.ShadowType.ETCHED_OUT)
47         scrolled_window.add(self.treeview)
48 
49         self.vbox.pack_start(scrolled_window, True, True, 14)
50         self.show_all()
51 
52     def get_treeview(self, model):
53         treeview = Gtk.TreeView(model=model)
54         treeview.set_headers_visible(False)
55 
56         renderer_toggle = Gtk.CellRendererToggle()
57         renderer_text = Gtk.CellRendererText()
58         self.renderer_progress = Gtk.CellRendererProgress()
59 
60         installed_column = Gtk.TreeViewColumn(None, renderer_toggle, active=3)
61         renderer_toggle.connect("toggled", self.on_installed_toggled)
62         treeview.append_column(installed_column)
63 
64         version_column = Gtk.TreeViewColumn(None, renderer_text)
65         version_column.add_attribute(renderer_text, 'text', self.COL_VER)
66         version_column.set_property('min-width', 80)
67         treeview.append_column(version_column)
68 
69         arch_column = Gtk.TreeViewColumn(None, renderer_text,
70                                          text=self.COL_ARCH)
71         arch_column.set_property('min-width', 50)
72         treeview.append_column(arch_column)
73 
74         progress_column = Gtk.TreeViewColumn(None, self.renderer_progress,
75                                              value=self.COL_PROGRESS,
76                                              visible=self.COL_PROGRESS)
77         progress_column.set_property('fixed-width', 60)
78         progress_column.set_property('min-width', 60)
79         progress_column.set_property('resizable', False)
80         treeview.append_column(progress_column)
81 
82         return treeview
83 
84     def get_store(self):
85         liststore = Gtk.ListStore(str, str, str, bool, int)
86         for version_info in reversed(self.get_versions()):
87             version = version_info['version']
88             architecture = version_info['architecture']
89             progress = 0
90             is_installed = os.path.exists(
91                 self.get_runner_path(version, architecture)
92             )
93             liststore.append(
94                 [version_info['version'],
95                  version_info['architecture'],
96                  version_info['url'],
97                  is_installed,
98                  progress]
99             )
100         return liststore
101 
102     def get_versions(self):
103         return self.runner_info['versions']
104 
105     def get_runner_path(self, version, arch):
106         return os.path.join(settings.RUNNER_DIR, self.runner,
107                             "{}-{}".format(version, arch))
108 
109     def get_dest_path(self, row):
110         url = row[2]
111         filename = os.path.basename(url)
112         return os.path.join(settings.CACHE_DIR, filename)
113 
114     def on_installed_toggled(self, widget, path):
115         row = self.runner_store[path]
116         if row[self.COL_VER] in self.installing:
117             confirm_dlg = QuestionDialog({
118                 "question": "Do you want to cancel the download?",
119                 "title": "Download starting"
120             })
121             if confirm_dlg.result == confirm_dlg.YES:
122                 self.cancel_install(row)
123         elif row[self.COL_INSTALLED]:
124             self.uninstall_runner(row)
125         else:
126             self.install_runner(row)
127 
128     def cancel_install(self, row):
129         self.installing[row[self.COL_VER]].cancel()
130         self.uninstall_runner(row)
131         row[self.COL_PROGRESS] = 0
132         self.installing.pop(row[self.COL_VER])
133 
134     def uninstall_runner(self, row):
135         version = row[self.COL_VER]
136         arch = row[self.COL_ARCH]
137         system.remove_folder(self.get_runner_path(version, arch))
138         row[self.COL_INSTALLED] = False
139 
140     def install_runner(self, row):
141         url = row[2]
142         logger.debug("Downloading %s", url)
143         dest_path = self.get_dest_path(row)
144         downloader = Downloader(url, dest_path, overwrite=True)
145         GLib.timeout_add(100, self.get_progress, downloader, row)
146         self.installing[row[self.COL_VER]] = downloader
147         downloader.start()
148 
149     def get_progress(self, downloader, row):
150         if downloader.state == downloader.CANCELLED:
151             return False
152         if downloader.state == downloader.ERROR:
153             self.cancel_install(row)
154             return False
155         downloader.check_progress()
156         percent_downloaded = downloader.progress_percentage
157         if percent_downloaded >= 1:
158             row[4] = percent_downloaded
159             self.renderer_progress.props.pulse = -1
160             self.renderer_progress.props.text = "%d %%" % int(percent_downloaded)
161         else:
162             row[4] = 1
163             self.renderer_progress.props.pulse = random.randint(1, 100)
164             self.renderer_progress.props.text = "Downloading…"
165         if downloader.state == downloader.COMPLETED:
166             row[4] = 99
167             self.renderer_progress.props.text = "Extracting…"
168             self.on_runner_downloaded(row)
169             return False
170         return True
171 
172     def on_runner_downloaded(self, row):
173         version = row[0]
174         architecture = row[1]
175         src = self.get_dest_path(row)
176         dst = self.get_runner_path(version, architecture)
177         jobs.AsyncCall(self.extract, self.on_extracted, src, dst, row)
178 
179     def extract(self, src, dst, row):
180         extract_archive(src, dst)
181         return src, row
182 
183     def on_extracted(self, xxx_todo_changeme, error):
184         (src, row) = xxx_todo_changeme
185         os.remove(src)
186         row[self.COL_PROGRESS] = 0
187         row[self.COL_INSTALLED] = True
188         self.renderer_progress.props.text = ""
189         self.installing.pop(row[self.COL_VER])
190 
191     def on_response(self, dialog, response):
192         self.destroy()
193 
194 
195 if __name__ == "__main__":
196     import signal
197     signal.signal(signal.SIGINT, signal.SIG_DFL)
198     RunnerInstallDialog("test", None, "wine")
199     GObject.threads_init()
200     Gtk.main()
201
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/lutris/gui/runnerinstalldialog.py b/lutris/gui/runnerinstalldialog.py
--- a/lutris/gui/runnerinstalldialog.py
+++ b/lutris/gui/runnerinstalldialog.py
@@ -23,7 +23,7 @@
         super(RunnerInstallDialog, self).__init__(
             title, parent, 0, ('_OK', Gtk.ResponseType.OK)
         )
-        width, height = (340, 380)
+        width, height = (460, 380)
         self.dialog_size = (width, height)
         self.set_default_size(width, height)

{"golden_diff": "diff --git a/lutris/gui/runnerinstalldialog.py b/lutris/gui/runnerinstalldialog.py\n--- a/lutris/gui/runnerinstalldialog.py\n+++ b/lutris/gui/runnerinstalldialog.py\n@@ -23,7 +23,7 @@\n         super(RunnerInstallDialog, self).__init__(\n             title, parent, 0, ('_OK', Gtk.ResponseType.OK)\n         )\n-        width, height = (340, 380)\n+        width, height = (460, 380)\n         self.dialog_size = (width, height)\n         self.set_default_size(width, height)\n", "issue": "\"Manage Versions` window is too narrow\nRecent improvements to Wine version managing are currently a bit pointless due to Manage Versions windows being too narrow and not being able to display the status of the downloading process:\r\n![peek 2018-09-29 11-37](https://user-images.githubusercontent.com/10602045/46243364-21144c80-c3dc-11e8-86b0-5356d707c7d7.gif)\r\n\r\n\n", "before_files": [{"content": "# pylint: disable=missing-docstring\nimport os\nimport random\n\nfrom gi.repository import GLib, GObject, Gtk\nfrom lutris import api, settings\nfrom lutris.gui.dialogs import ErrorDialog, QuestionDialog\nfrom lutris.gui.widgets.dialogs import Dialog\nfrom lutris.util import jobs, system\nfrom lutris.util.downloader import Downloader\nfrom lutris.util.extract import extract_archive\nfrom lutris.util.log import logger\n\n\nclass RunnerInstallDialog(Dialog):\n    COL_VER = 0\n    COL_ARCH = 1\n    COL_URL = 2\n    COL_INSTALLED = 3\n    COL_PROGRESS = 4\n\n    def __init__(self, title, parent, runner):\n        super(RunnerInstallDialog, self).__init__(\n            title, parent, 0, ('_OK', Gtk.ResponseType.OK)\n        )\n        width, height = (340, 380)\n        self.dialog_size = (width, height)\n        self.set_default_size(width, height)\n\n        self.runner = runner\n        self.runner_info = api.get_runners(self.runner)\n        if not self.runner_info:\n            ErrorDialog('Unable to get runner versions, check your internet connection',\n                        parent=parent)\n            return\n        label = Gtk.Label(\"%s version management\" % self.runner_info['name'])\n        self.vbox.add(label)\n        self.runner_store = self.get_store()\n        scrolled_window = Gtk.ScrolledWindow()\n        self.treeview = self.get_treeview(self.runner_store)\n        self.installing = {}\n        self.connect('response', self.on_response)\n\n        scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,\n                                   Gtk.PolicyType.AUTOMATIC)\n        scrolled_window.set_shadow_type(Gtk.ShadowType.ETCHED_OUT)\n        scrolled_window.add(self.treeview)\n\n        self.vbox.pack_start(scrolled_window, True, True, 14)\n        self.show_all()\n\n    def get_treeview(self, model):\n        treeview = Gtk.TreeView(model=model)\n        treeview.set_headers_visible(False)\n\n        renderer_toggle = Gtk.CellRendererToggle()\n        renderer_text = Gtk.CellRendererText()\n        self.renderer_progress = Gtk.CellRendererProgress()\n\n        installed_column = Gtk.TreeViewColumn(None, renderer_toggle, active=3)\n        renderer_toggle.connect(\"toggled\", self.on_installed_toggled)\n        treeview.append_column(installed_column)\n\n        version_column = Gtk.TreeViewColumn(None, renderer_text)\n        version_column.add_attribute(renderer_text, 'text', self.COL_VER)\n        version_column.set_property('min-width', 80)\n        treeview.append_column(version_column)\n\n        arch_column = Gtk.TreeViewColumn(None, renderer_text,\n                                         text=self.COL_ARCH)\n        arch_column.set_property('min-width', 50)\n        treeview.append_column(arch_column)\n\n        progress_column = Gtk.TreeViewColumn(None, self.renderer_progress,\n                                             value=self.COL_PROGRESS,\n                                             visible=self.COL_PROGRESS)\n        progress_column.set_property('fixed-width', 60)\n        progress_column.set_property('min-width', 60)\n        progress_column.set_property('resizable', False)\n        treeview.append_column(progress_column)\n\n        return treeview\n\n    def get_store(self):\n        liststore = Gtk.ListStore(str, str, str, bool, int)\n        for version_info in reversed(self.get_versions()):\n            version = version_info['version']\n            architecture = version_info['architecture']\n            progress = 0\n            is_installed = os.path.exists(\n                self.get_runner_path(version, architecture)\n            )\n            liststore.append(\n                [version_info['version'],\n                 version_info['architecture'],\n                 version_info['url'],\n                 is_installed,\n                 progress]\n            )\n        return liststore\n\n    def get_versions(self):\n        return self.runner_info['versions']\n\n    def get_runner_path(self, version, arch):\n        return os.path.join(settings.RUNNER_DIR, self.runner,\n                            \"{}-{}\".format(version, arch))\n\n    def get_dest_path(self, row):\n        url = row[2]\n        filename = os.path.basename(url)\n        return os.path.join(settings.CACHE_DIR, filename)\n\n    def on_installed_toggled(self, widget, path):\n        row = self.runner_store[path]\n        if row[self.COL_VER] in self.installing:\n            confirm_dlg = QuestionDialog({\n                \"question\": \"Do you want to cancel the download?\",\n                \"title\": \"Download starting\"\n            })\n            if confirm_dlg.result == confirm_dlg.YES:\n                self.cancel_install(row)\n        elif row[self.COL_INSTALLED]:\n            self.uninstall_runner(row)\n        else:\n            self.install_runner(row)\n\n    def cancel_install(self, row):\n        self.installing[row[self.COL_VER]].cancel()\n        self.uninstall_runner(row)\n        row[self.COL_PROGRESS] = 0\n        self.installing.pop(row[self.COL_VER])\n\n    def uninstall_runner(self, row):\n        version = row[self.COL_VER]\n        arch = row[self.COL_ARCH]\n        system.remove_folder(self.get_runner_path(version, arch))\n        row[self.COL_INSTALLED] = False\n\n    def install_runner(self, row):\n        url = row[2]\n        logger.debug(\"Downloading %s\", url)\n        dest_path = self.get_dest_path(row)\n        downloader = Downloader(url, dest_path, overwrite=True)\n        GLib.timeout_add(100, self.get_progress, downloader, row)\n        self.installing[row[self.COL_VER]] = downloader\n        downloader.start()\n\n    def get_progress(self, downloader, row):\n        if downloader.state == downloader.CANCELLED:\n            return False\n        if downloader.state == downloader.ERROR:\n            self.cancel_install(row)\n            return False\n        downloader.check_progress()\n        percent_downloaded = downloader.progress_percentage\n        if percent_downloaded >= 1:\n            row[4] = percent_downloaded\n            self.renderer_progress.props.pulse = -1\n            self.renderer_progress.props.text = \"%d %%\" % int(percent_downloaded)\n        else:\n            row[4] = 1\n            self.renderer_progress.props.pulse = random.randint(1, 100)\n            self.renderer_progress.props.text = \"Downloading\u2026\"\n        if downloader.state == downloader.COMPLETED:\n            row[4] = 99\n            self.renderer_progress.props.text = \"Extracting\u2026\"\n            self.on_runner_downloaded(row)\n            return False\n        return True\n\n    def on_runner_downloaded(self, row):\n        version = row[0]\n        architecture = row[1]\n        src = self.get_dest_path(row)\n        dst = self.get_runner_path(version, architecture)\n        jobs.AsyncCall(self.extract, self.on_extracted, src, dst, row)\n\n    def extract(self, src, dst, row):\n        extract_archive(src, dst)\n        return src, row\n\n    def on_extracted(self, xxx_todo_changeme, error):\n        (src, row) = xxx_todo_changeme\n        os.remove(src)\n        row[self.COL_PROGRESS] = 0\n        row[self.COL_INSTALLED] = True\n        self.renderer_progress.props.text = \"\"\n        self.installing.pop(row[self.COL_VER])\n\n    def on_response(self, dialog, response):\n        self.destroy()\n\n\nif __name__ == \"__main__\":\n    import signal\n    signal.signal(signal.SIGINT, signal.SIG_DFL)\n    RunnerInstallDialog(\"test\", None, \"wine\")\n    GObject.threads_init()\n    Gtk.main()\n", "path": "lutris/gui/runnerinstalldialog.py"}], "after_files": [{"content": "# pylint: disable=missing-docstring\nimport os\nimport random\n\nfrom gi.repository import GLib, GObject, Gtk\nfrom lutris import api, settings\nfrom lutris.gui.dialogs import ErrorDialog, QuestionDialog\nfrom lutris.gui.widgets.dialogs import Dialog\nfrom lutris.util import jobs, system\nfrom lutris.util.downloader import Downloader\nfrom lutris.util.extract import extract_archive\nfrom lutris.util.log import logger\n\n\nclass RunnerInstallDialog(Dialog):\n    COL_VER = 0\n    COL_ARCH = 1\n    COL_URL = 2\n    COL_INSTALLED = 3\n    COL_PROGRESS = 4\n\n    def __init__(self, title, parent, runner):\n        super(RunnerInstallDialog, self).__init__(\n            title, parent, 0, ('_OK', Gtk.ResponseType.OK)\n        )\n        width, height = (460, 380)\n        self.dialog_size = (width, height)\n        self.set_default_size(width, height)\n\n        self.runner = runner\n        self.runner_info = api.get_runners(self.runner)\n        if not self.runner_info:\n            ErrorDialog('Unable to get runner versions, check your internet connection',\n                        parent=parent)\n            return\n        label = Gtk.Label(\"%s version management\" % self.runner_info['name'])\n        self.vbox.add(label)\n        self.runner_store = self.get_store()\n        scrolled_window = Gtk.ScrolledWindow()\n        self.treeview = self.get_treeview(self.runner_store)\n        self.installing = {}\n        self.connect('response', self.on_response)\n\n        scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,\n                                   Gtk.PolicyType.AUTOMATIC)\n        scrolled_window.set_shadow_type(Gtk.ShadowType.ETCHED_OUT)\n        scrolled_window.add(self.treeview)\n\n        self.vbox.pack_start(scrolled_window, True, True, 14)\n        self.show_all()\n\n    def get_treeview(self, model):\n        treeview = Gtk.TreeView(model=model)\n        treeview.set_headers_visible(False)\n\n        renderer_toggle = Gtk.CellRendererToggle()\n        renderer_text = Gtk.CellRendererText()\n        self.renderer_progress = Gtk.CellRendererProgress()\n\n        installed_column = Gtk.TreeViewColumn(None, renderer_toggle, active=3)\n        renderer_toggle.connect(\"toggled\", self.on_installed_toggled)\n        treeview.append_column(installed_column)\n\n        version_column = Gtk.TreeViewColumn(None, renderer_text)\n        version_column.add_attribute(renderer_text, 'text', self.COL_VER)\n        version_column.set_property('min-width', 80)\n        treeview.append_column(version_column)\n\n        arch_column = Gtk.TreeViewColumn(None, renderer_text,\n                                         text=self.COL_ARCH)\n        arch_column.set_property('min-width', 50)\n        treeview.append_column(arch_column)\n\n        progress_column = Gtk.TreeViewColumn(None, self.renderer_progress,\n                                             value=self.COL_PROGRESS,\n                                             visible=self.COL_PROGRESS)\n        progress_column.set_property('fixed-width', 60)\n        progress_column.set_property('min-width', 60)\n        progress_column.set_property('resizable', False)\n        treeview.append_column(progress_column)\n\n        return treeview\n\n    def get_store(self):\n        liststore = Gtk.ListStore(str, str, str, bool, int)\n        for version_info in reversed(self.get_versions()):\n            version = version_info['version']\n            architecture = version_info['architecture']\n            progress = 0\n            is_installed = os.path.exists(\n                self.get_runner_path(version, architecture)\n            )\n            liststore.append(\n                [version_info['version'],\n                 version_info['architecture'],\n                 version_info['url'],\n                 is_installed,\n                 progress]\n            )\n        return liststore\n\n    def get_versions(self):\n        return self.runner_info['versions']\n\n    def get_runner_path(self, version, arch):\n        return os.path.join(settings.RUNNER_DIR, self.runner,\n                            \"{}-{}\".format(version, arch))\n\n    def get_dest_path(self, row):\n        url = row[2]\n        filename = os.path.basename(url)\n        return os.path.join(settings.CACHE_DIR, filename)\n\n    def on_installed_toggled(self, widget, path):\n        row = self.runner_store[path]\n        if row[self.COL_VER] in self.installing:\n            confirm_dlg = QuestionDialog({\n                \"question\": \"Do you want to cancel the download?\",\n                \"title\": \"Download starting\"\n            })\n            if confirm_dlg.result == confirm_dlg.YES:\n                self.cancel_install(row)\n        elif row[self.COL_INSTALLED]:\n            self.uninstall_runner(row)\n        else:\n            self.install_runner(row)\n\n    def cancel_install(self, row):\n        self.installing[row[self.COL_VER]].cancel()\n        self.uninstall_runner(row)\n        row[self.COL_PROGRESS] = 0\n        self.installing.pop(row[self.COL_VER])\n\n    def uninstall_runner(self, row):\n        version = row[self.COL_VER]\n        arch = row[self.COL_ARCH]\n        system.remove_folder(self.get_runner_path(version, arch))\n        row[self.COL_INSTALLED] = False\n\n    def install_runner(self, row):\n        url = row[2]\n        logger.debug(\"Downloading %s\", url)\n        dest_path = self.get_dest_path(row)\n        downloader = Downloader(url, dest_path, overwrite=True)\n        GLib.timeout_add(100, self.get_progress, downloader, row)\n        self.installing[row[self.COL_VER]] = downloader\n        downloader.start()\n\n    def get_progress(self, downloader, row):\n        if downloader.state == downloader.CANCELLED:\n            return False\n        if downloader.state == downloader.ERROR:\n            self.cancel_install(row)\n            return False\n        downloader.check_progress()\n        percent_downloaded = downloader.progress_percentage\n        if percent_downloaded >= 1:\n            row[4] = percent_downloaded\n            self.renderer_progress.props.pulse = -1\n            self.renderer_progress.props.text = \"%d %%\" % int(percent_downloaded)\n        else:\n            row[4] = 1\n            self.renderer_progress.props.pulse = random.randint(1, 100)\n            self.renderer_progress.props.text = \"Downloading\u2026\"\n        if downloader.state == downloader.COMPLETED:\n            row[4] = 99\n            self.renderer_progress.props.text = \"Extracting\u2026\"\n            self.on_runner_downloaded(row)\n            return False\n        return True\n\n    def on_runner_downloaded(self, row):\n        version = row[0]\n        architecture = row[1]\n        src = self.get_dest_path(row)\n        dst = self.get_runner_path(version, architecture)\n        jobs.AsyncCall(self.extract, self.on_extracted, src, dst, row)\n\n    def extract(self, src, dst, row):\n        extract_archive(src, dst)\n        return src, row\n\n    def on_extracted(self, xxx_todo_changeme, error):\n        (src, row) = xxx_todo_changeme\n        os.remove(src)\n        row[self.COL_PROGRESS] = 0\n        row[self.COL_INSTALLED] = True\n        self.renderer_progress.props.text = \"\"\n        self.installing.pop(row[self.COL_VER])\n\n    def on_response(self, dialog, response):\n        self.destroy()\n\n\nif __name__ == \"__main__\":\n    import signal\n    signal.signal(signal.SIGINT, signal.SIG_DFL)\n    RunnerInstallDialog(\"test\", None, \"wine\")\n    GObject.threads_init()\n    Gtk.main()\n", "path": "lutris/gui/runnerinstalldialog.py"}]}