We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
toga-winforms\windows.py openFileDialog needs an "s"
**Describe the bug**
When using multiselect = True in winforms the returned value is a single file because 

   if dialog.ShowDialog() == WinForms.DialogResult.OK:
            return dialog.FileName

should be 

   if dialog.ShowDialog() == WinForms.DialogResult.OK:
            return dialog.FileName**s**

 

**To Reproduce**

            fname = self.main_window.open_file_dialog(
                title="Open the file",
                multiselect=True
            )


**Expected behavior**
returns a list of files (fname) which is true on a Mac.  On Windows it is the name of the first file as a single string .  With suggested fix return selection but it still needs to be coerced into a list.


**Environment:**
 - Operating System:  Mac OS 10.15.6 & Windows 10
 - Python version: 3.8
 - Software versions:
   - Briefcase: 0.3.3
   - Toga: 0.3.0 dev23


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/winforms/toga_winforms/window.py`
Content:
```
1 from toga import GROUP_BREAK, SECTION_BREAK
2 
3 from .libs import Size, WinForms
4 
5 
6 class WinFormsViewport:
7     def __init__(self, native, frame):
8         self.native = native
9         self.frame = frame
10         self.baseline_dpi = 96
11 
12     @property
13     def width(self):
14         # Treat `native=None` as a 0x0 viewport
15         if self.native is None:
16             return 0
17         return self.native.ClientSize.Width
18 
19     @property
20     def height(self):
21         if self.native is None:
22             return 0
23         # Subtract any vertical shift of the frame. This is to allow
24         # for toolbars, or any other viewport-level decoration.
25         return self.native.ClientSize.Height - self.frame.vertical_shift
26 
27     @property
28     def dpi(self):
29         if self.native is None:
30             return self.baseline_dpi
31         return self.native.CreateGraphics().DpiX
32 
33 
34 class Window:
35     def __init__(self, interface):
36         self.interface = interface
37         self.interface._impl = self
38         self.create()
39 
40     def create(self):
41         self.native = WinForms.Form(self)
42         self.native.ClientSize = Size(*self.interface._size)
43         self.native.interface = self.interface
44         self.native.Resize += self.winforms_resize
45         self.toolbar_native = None
46         self.toolbar_items = None
47 
48     def create_toolbar(self):
49         self.toolbar_native = WinForms.ToolStrip()
50         for cmd in self.interface.toolbar:
51             if cmd == GROUP_BREAK:
52                 item = WinForms.ToolStripSeparator()
53             elif cmd == SECTION_BREAK:
54                 item = WinForms.ToolStripSeparator()
55             else:
56                 if cmd.icon is not None:
57                     native_icon = cmd.icon._impl.native
58                     item = WinForms.ToolStripMenuItem(cmd.label, native_icon.ToBitmap())
59                 else:
60                     item = WinForms.ToolStripMenuItem(cmd.label)
61                 item.Click += cmd._impl.as_handler()
62                 cmd._impl.native.append(item)
63             self.toolbar_native.Items.Add(item)
64 
65     def set_position(self, position):
66         pass
67 
68     def set_size(self, size):
69         self.native.ClientSize = Size(*self.interface._size)
70 
71     def set_app(self, app):
72         if app is None:
73             return
74         icon_impl = app.interface.icon._impl
75         if icon_impl is None:
76             return
77         self.native.Icon = icon_impl.native
78 
79     @property
80     def vertical_shift(self):
81         # vertical shift is the toolbar height or 0
82         result = 0
83         try:
84             result += self.native.interface._impl.toolbar_native.Height
85         except AttributeError:
86             pass
87         try:
88             result += self.native.interface._impl.native.MainMenuStrip.Height
89         except AttributeError:
90             pass
91         return result
92 
93     def set_content(self, widget):
94         if self.toolbar_native:
95             self.native.Controls.Add(self.toolbar_native)
96             # Create the lookup table of menu items,
97             # then force the creation of the menus.
98         self.native.Controls.Add(widget.native)
99 
100         # Set the widget's viewport to be based on the window's content.
101         widget.viewport = WinFormsViewport(native=self.native, frame=self)
102         widget.frame = self
103 
104         # Add all children to the content widget.
105         for child in widget.interface.children:
106             child._impl.container = widget
107 
108     def set_title(self, title):
109         self.native.Text = title
110 
111     def show(self):
112         # The first render of the content will establish the
113         # minimum possible content size; use that to enforce
114         # a minimum window size.
115         TITLEBAR_HEIGHT = WinForms.SystemInformation.CaptionHeight
116         # Now that the content is visible, we can do our initial hinting,
117         # and use that as the basis for setting the minimum window size.
118         self.interface.content._impl.rehint()
119         self.interface.content.style.layout(
120             self.interface.content,
121             WinFormsViewport(native=None, frame=None),
122         )
123         self.native.MinimumSize = Size(
124             int(self.interface.content.layout.width),
125             int(self.interface.content.layout.height) + TITLEBAR_HEIGHT
126         )
127         self.interface.content.refresh()
128 
129         self.native.Show()
130 
131     def winforms_FormClosing(self, event, handler):
132         if self.interface.app.on_exit:
133             self.interface.app.on_exit(self.interface.app)
134 
135     def set_full_screen(self, is_full_screen):
136         self.interface.factory.not_implemented('Window.set_full_screen()')
137 
138     def on_close(self):
139         pass
140 
141     def close(self):
142         self.native.Close()
143 
144     def winforms_resize(self, sender, args):
145         if self.interface.content:
146             # Re-layout the content
147             self.interface.content.refresh()
148 
149     def info_dialog(self, title, message):
150         return WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.OK)
151 
152     def question_dialog(self, title, message):
153         result = WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.YesNo)
154         return result
155 
156     def confirm_dialog(self, title, message):
157         result = WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.OKCancel)
158         # this returns 1 (DialogResult.OK enum) for OK and 2 for Cancel
159         return True if result == WinForms.DialogResult.OK else False
160 
161     def error_dialog(self, title, message):
162         return WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.OK,
163                                         WinForms.MessageBoxIcon.Error)
164 
165     def stack_trace_dialog(self, title, message, content, retry=False):
166         pass
167 
168     def save_file_dialog(self, title, suggested_filename, file_types):
169         dialog = WinForms.SaveFileDialog()
170         dialog.Title = title
171         if suggested_filename is not None:
172             dialog.FileName = suggested_filename
173         if file_types is not None:
174             dialog.Filter = self.build_filter(file_types)
175         if dialog.ShowDialog() == WinForms.DialogResult.OK:
176             return dialog.FileName
177         else:
178             raise ValueError("No filename provided in the save file dialog")
179 
180     def open_file_dialog(self, title, initial_directory, file_types, multiselect):
181         dialog = WinForms.OpenFileDialog()
182         dialog.Title = title
183         if initial_directory is not None:
184             dialog.InitialDirectory = initial_directory
185         if file_types is not None:
186             dialog.Filter = self.build_filter(file_types)
187         if multiselect:
188             dialog.Multiselect = True
189         if dialog.ShowDialog() == WinForms.DialogResult.OK:
190             return dialog.FileName
191         else:
192             raise ValueError("No filename provided in the open file dialog")
193 
194     def select_folder_dialog(self, title, initial_directory, multiselect):
195         dialog = WinForms.FolderBrowserDialog()
196         dialog.Title = title
197         if initial_directory is not None:
198             dialog.InitialDirectory = initial_directory
199 
200         if dialog.ShowDialog() == WinForms.DialogResult.OK:
201             return [dialog.SelectedPath]
202         else:
203             raise ValueError("No folder provided in the select folder dialog")
204 
205     def build_filter(self, file_types):
206         file_string = "{0} files (*.{0})|*.{0}"
207         return '|'.join([file_string.format(ext) for ext in file_types]) + \
208             "|All files (*.*)|*.*"
209
```
--- 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/src/winforms/toga_winforms/window.py b/src/winforms/toga_winforms/window.py
--- a/src/winforms/toga_winforms/window.py
+++ b/src/winforms/toga_winforms/window.py
@@ -187,7 +187,7 @@
         if multiselect:
             dialog.Multiselect = True
         if dialog.ShowDialog() == WinForms.DialogResult.OK:
-            return dialog.FileName
+            return dialog.FileNames if multiselect else dialog.FileName
         else:
             raise ValueError("No filename provided in the open file dialog")

{"golden_diff": "diff --git a/src/winforms/toga_winforms/window.py b/src/winforms/toga_winforms/window.py\n--- a/src/winforms/toga_winforms/window.py\n+++ b/src/winforms/toga_winforms/window.py\n@@ -187,7 +187,7 @@\n         if multiselect:\n             dialog.Multiselect = True\n         if dialog.ShowDialog() == WinForms.DialogResult.OK:\n-            return dialog.FileName\n+            return dialog.FileNames if multiselect else dialog.FileName\n         else:\n             raise ValueError(\"No filename provided in the open file dialog\")\n", "issue": "toga-winforms\\windows.py openFileDialog needs an \"s\"\n**Describe the bug**\r\nWhen using multiselect = True in winforms the returned value is a single file because \r\n\r\n   if dialog.ShowDialog() == WinForms.DialogResult.OK:\r\n            return dialog.FileName\r\n\r\nshould be \r\n\r\n   if dialog.ShowDialog() == WinForms.DialogResult.OK:\r\n            return dialog.FileName**s**\r\n\r\n \r\n\r\n**To Reproduce**\r\n\r\n            fname = self.main_window.open_file_dialog(\r\n                title=\"Open the file\",\r\n                multiselect=True\r\n            )\r\n\r\n\r\n**Expected behavior**\r\nreturns a list of files (fname) which is true on a Mac.  On Windows it is the name of the first file as a single string .  With suggested fix return selection but it still needs to be coerced into a list.\r\n\r\n\r\n**Environment:**\r\n - Operating System:  Mac OS 10.15.6 & Windows 10\r\n - Python version: 3.8\r\n - Software versions:\r\n   - Briefcase: 0.3.3\r\n   - Toga: 0.3.0 dev23\r\n\n", "before_files": [{"content": "from toga import GROUP_BREAK, SECTION_BREAK\n\nfrom .libs import Size, WinForms\n\n\nclass WinFormsViewport:\n    def __init__(self, native, frame):\n        self.native = native\n        self.frame = frame\n        self.baseline_dpi = 96\n\n    @property\n    def width(self):\n        # Treat `native=None` as a 0x0 viewport\n        if self.native is None:\n            return 0\n        return self.native.ClientSize.Width\n\n    @property\n    def height(self):\n        if self.native is None:\n            return 0\n        # Subtract any vertical shift of the frame. This is to allow\n        # for toolbars, or any other viewport-level decoration.\n        return self.native.ClientSize.Height - self.frame.vertical_shift\n\n    @property\n    def dpi(self):\n        if self.native is None:\n            return self.baseline_dpi\n        return self.native.CreateGraphics().DpiX\n\n\nclass Window:\n    def __init__(self, interface):\n        self.interface = interface\n        self.interface._impl = self\n        self.create()\n\n    def create(self):\n        self.native = WinForms.Form(self)\n        self.native.ClientSize = Size(*self.interface._size)\n        self.native.interface = self.interface\n        self.native.Resize += self.winforms_resize\n        self.toolbar_native = None\n        self.toolbar_items = None\n\n    def create_toolbar(self):\n        self.toolbar_native = WinForms.ToolStrip()\n        for cmd in self.interface.toolbar:\n            if cmd == GROUP_BREAK:\n                item = WinForms.ToolStripSeparator()\n            elif cmd == SECTION_BREAK:\n                item = WinForms.ToolStripSeparator()\n            else:\n                if cmd.icon is not None:\n                    native_icon = cmd.icon._impl.native\n                    item = WinForms.ToolStripMenuItem(cmd.label, native_icon.ToBitmap())\n                else:\n                    item = WinForms.ToolStripMenuItem(cmd.label)\n                item.Click += cmd._impl.as_handler()\n                cmd._impl.native.append(item)\n            self.toolbar_native.Items.Add(item)\n\n    def set_position(self, position):\n        pass\n\n    def set_size(self, size):\n        self.native.ClientSize = Size(*self.interface._size)\n\n    def set_app(self, app):\n        if app is None:\n            return\n        icon_impl = app.interface.icon._impl\n        if icon_impl is None:\n            return\n        self.native.Icon = icon_impl.native\n\n    @property\n    def vertical_shift(self):\n        # vertical shift is the toolbar height or 0\n        result = 0\n        try:\n            result += self.native.interface._impl.toolbar_native.Height\n        except AttributeError:\n            pass\n        try:\n            result += self.native.interface._impl.native.MainMenuStrip.Height\n        except AttributeError:\n            pass\n        return result\n\n    def set_content(self, widget):\n        if self.toolbar_native:\n            self.native.Controls.Add(self.toolbar_native)\n            # Create the lookup table of menu items,\n            # then force the creation of the menus.\n        self.native.Controls.Add(widget.native)\n\n        # Set the widget's viewport to be based on the window's content.\n        widget.viewport = WinFormsViewport(native=self.native, frame=self)\n        widget.frame = self\n\n        # Add all children to the content widget.\n        for child in widget.interface.children:\n            child._impl.container = widget\n\n    def set_title(self, title):\n        self.native.Text = title\n\n    def show(self):\n        # The first render of the content will establish the\n        # minimum possible content size; use that to enforce\n        # a minimum window size.\n        TITLEBAR_HEIGHT = WinForms.SystemInformation.CaptionHeight\n        # Now that the content is visible, we can do our initial hinting,\n        # and use that as the basis for setting the minimum window size.\n        self.interface.content._impl.rehint()\n        self.interface.content.style.layout(\n            self.interface.content,\n            WinFormsViewport(native=None, frame=None),\n        )\n        self.native.MinimumSize = Size(\n            int(self.interface.content.layout.width),\n            int(self.interface.content.layout.height) + TITLEBAR_HEIGHT\n        )\n        self.interface.content.refresh()\n\n        self.native.Show()\n\n    def winforms_FormClosing(self, event, handler):\n        if self.interface.app.on_exit:\n            self.interface.app.on_exit(self.interface.app)\n\n    def set_full_screen(self, is_full_screen):\n        self.interface.factory.not_implemented('Window.set_full_screen()')\n\n    def on_close(self):\n        pass\n\n    def close(self):\n        self.native.Close()\n\n    def winforms_resize(self, sender, args):\n        if self.interface.content:\n            # Re-layout the content\n            self.interface.content.refresh()\n\n    def info_dialog(self, title, message):\n        return WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.OK)\n\n    def question_dialog(self, title, message):\n        result = WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.YesNo)\n        return result\n\n    def confirm_dialog(self, title, message):\n        result = WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.OKCancel)\n        # this returns 1 (DialogResult.OK enum) for OK and 2 for Cancel\n        return True if result == WinForms.DialogResult.OK else False\n\n    def error_dialog(self, title, message):\n        return WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.OK,\n                                        WinForms.MessageBoxIcon.Error)\n\n    def stack_trace_dialog(self, title, message, content, retry=False):\n        pass\n\n    def save_file_dialog(self, title, suggested_filename, file_types):\n        dialog = WinForms.SaveFileDialog()\n        dialog.Title = title\n        if suggested_filename is not None:\n            dialog.FileName = suggested_filename\n        if file_types is not None:\n            dialog.Filter = self.build_filter(file_types)\n        if dialog.ShowDialog() == WinForms.DialogResult.OK:\n            return dialog.FileName\n        else:\n            raise ValueError(\"No filename provided in the save file dialog\")\n\n    def open_file_dialog(self, title, initial_directory, file_types, multiselect):\n        dialog = WinForms.OpenFileDialog()\n        dialog.Title = title\n        if initial_directory is not None:\n            dialog.InitialDirectory = initial_directory\n        if file_types is not None:\n            dialog.Filter = self.build_filter(file_types)\n        if multiselect:\n            dialog.Multiselect = True\n        if dialog.ShowDialog() == WinForms.DialogResult.OK:\n            return dialog.FileName\n        else:\n            raise ValueError(\"No filename provided in the open file dialog\")\n\n    def select_folder_dialog(self, title, initial_directory, multiselect):\n        dialog = WinForms.FolderBrowserDialog()\n        dialog.Title = title\n        if initial_directory is not None:\n            dialog.InitialDirectory = initial_directory\n\n        if dialog.ShowDialog() == WinForms.DialogResult.OK:\n            return [dialog.SelectedPath]\n        else:\n            raise ValueError(\"No folder provided in the select folder dialog\")\n\n    def build_filter(self, file_types):\n        file_string = \"{0} files (*.{0})|*.{0}\"\n        return '|'.join([file_string.format(ext) for ext in file_types]) + \\\n            \"|All files (*.*)|*.*\"\n", "path": "src/winforms/toga_winforms/window.py"}], "after_files": [{"content": "from toga import GROUP_BREAK, SECTION_BREAK\n\nfrom .libs import Size, WinForms\n\n\nclass WinFormsViewport:\n    def __init__(self, native, frame):\n        self.native = native\n        self.frame = frame\n        self.baseline_dpi = 96\n\n    @property\n    def width(self):\n        # Treat `native=None` as a 0x0 viewport\n        if self.native is None:\n            return 0\n        return self.native.ClientSize.Width\n\n    @property\n    def height(self):\n        if self.native is None:\n            return 0\n        # Subtract any vertical shift of the frame. This is to allow\n        # for toolbars, or any other viewport-level decoration.\n        return self.native.ClientSize.Height - self.frame.vertical_shift\n\n    @property\n    def dpi(self):\n        if self.native is None:\n            return self.baseline_dpi\n        return self.native.CreateGraphics().DpiX\n\n\nclass Window:\n    def __init__(self, interface):\n        self.interface = interface\n        self.interface._impl = self\n        self.create()\n\n    def create(self):\n        self.native = WinForms.Form(self)\n        self.native.ClientSize = Size(*self.interface._size)\n        self.native.interface = self.interface\n        self.native.Resize += self.winforms_resize\n        self.toolbar_native = None\n        self.toolbar_items = None\n\n    def create_toolbar(self):\n        self.toolbar_native = WinForms.ToolStrip()\n        for cmd in self.interface.toolbar:\n            if cmd == GROUP_BREAK:\n                item = WinForms.ToolStripSeparator()\n            elif cmd == SECTION_BREAK:\n                item = WinForms.ToolStripSeparator()\n            else:\n                if cmd.icon is not None:\n                    native_icon = cmd.icon._impl.native\n                    item = WinForms.ToolStripMenuItem(cmd.label, native_icon.ToBitmap())\n                else:\n                    item = WinForms.ToolStripMenuItem(cmd.label)\n                item.Click += cmd._impl.as_handler()\n                cmd._impl.native.append(item)\n            self.toolbar_native.Items.Add(item)\n\n    def set_position(self, position):\n        pass\n\n    def set_size(self, size):\n        self.native.ClientSize = Size(*self.interface._size)\n\n    def set_app(self, app):\n        if app is None:\n            return\n        icon_impl = app.interface.icon._impl\n        if icon_impl is None:\n            return\n        self.native.Icon = icon_impl.native\n\n    @property\n    def vertical_shift(self):\n        # vertical shift is the toolbar height or 0\n        result = 0\n        try:\n            result += self.native.interface._impl.toolbar_native.Height\n        except AttributeError:\n            pass\n        try:\n            result += self.native.interface._impl.native.MainMenuStrip.Height\n        except AttributeError:\n            pass\n        return result\n\n    def set_content(self, widget):\n        if self.toolbar_native:\n            self.native.Controls.Add(self.toolbar_native)\n            # Create the lookup table of menu items,\n            # then force the creation of the menus.\n        self.native.Controls.Add(widget.native)\n\n        # Set the widget's viewport to be based on the window's content.\n        widget.viewport = WinFormsViewport(native=self.native, frame=self)\n        widget.frame = self\n\n        # Add all children to the content widget.\n        for child in widget.interface.children:\n            child._impl.container = widget\n\n    def set_title(self, title):\n        self.native.Text = title\n\n    def show(self):\n        # The first render of the content will establish the\n        # minimum possible content size; use that to enforce\n        # a minimum window size.\n        TITLEBAR_HEIGHT = WinForms.SystemInformation.CaptionHeight\n        # Now that the content is visible, we can do our initial hinting,\n        # and use that as the basis for setting the minimum window size.\n        self.interface.content._impl.rehint()\n        self.interface.content.style.layout(\n            self.interface.content,\n            WinFormsViewport(native=None, frame=None),\n        )\n        self.native.MinimumSize = Size(\n            int(self.interface.content.layout.width),\n            int(self.interface.content.layout.height) + TITLEBAR_HEIGHT\n        )\n        self.interface.content.refresh()\n\n        self.native.Show()\n\n    def winforms_FormClosing(self, event, handler):\n        if self.interface.app.on_exit:\n            self.interface.app.on_exit(self.interface.app)\n\n    def set_full_screen(self, is_full_screen):\n        self.interface.factory.not_implemented('Window.set_full_screen()')\n\n    def on_close(self):\n        pass\n\n    def close(self):\n        self.native.Close()\n\n    def winforms_resize(self, sender, args):\n        if self.interface.content:\n            # Re-layout the content\n            self.interface.content.refresh()\n\n    def info_dialog(self, title, message):\n        return WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.OK)\n\n    def question_dialog(self, title, message):\n        result = WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.YesNo)\n        return result\n\n    def confirm_dialog(self, title, message):\n        result = WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.OKCancel)\n        # this returns 1 (DialogResult.OK enum) for OK and 2 for Cancel\n        return True if result == WinForms.DialogResult.OK else False\n\n    def error_dialog(self, title, message):\n        return WinForms.MessageBox.Show(message, title, WinForms.MessageBoxButtons.OK,\n                                        WinForms.MessageBoxIcon.Error)\n\n    def stack_trace_dialog(self, title, message, content, retry=False):\n        pass\n\n    def save_file_dialog(self, title, suggested_filename, file_types):\n        dialog = WinForms.SaveFileDialog()\n        dialog.Title = title\n        if suggested_filename is not None:\n            dialog.FileName = suggested_filename\n        if file_types is not None:\n            dialog.Filter = self.build_filter(file_types)\n        if dialog.ShowDialog() == WinForms.DialogResult.OK:\n            return dialog.FileName\n        else:\n            raise ValueError(\"No filename provided in the save file dialog\")\n\n    def open_file_dialog(self, title, initial_directory, file_types, multiselect):\n        dialog = WinForms.OpenFileDialog()\n        dialog.Title = title\n        if initial_directory is not None:\n            dialog.InitialDirectory = initial_directory\n        if file_types is not None:\n            dialog.Filter = self.build_filter(file_types)\n        if multiselect:\n            dialog.Multiselect = True\n        if dialog.ShowDialog() == WinForms.DialogResult.OK:\n            return dialog.FileNames if multiselect else dialog.FileName\n        else:\n            raise ValueError(\"No filename provided in the open file dialog\")\n\n    def select_folder_dialog(self, title, initial_directory, multiselect):\n        dialog = WinForms.FolderBrowserDialog()\n        dialog.Title = title\n        if initial_directory is not None:\n            dialog.InitialDirectory = initial_directory\n\n        if dialog.ShowDialog() == WinForms.DialogResult.OK:\n            return [dialog.SelectedPath]\n        else:\n            raise ValueError(\"No folder provided in the select folder dialog\")\n\n    def build_filter(self, file_types):\n        file_string = \"{0} files (*.{0})|*.{0}\"\n        return '|'.join([file_string.format(ext) for ext in file_types]) + \\\n            \"|All files (*.*)|*.*\"\n", "path": "src/winforms/toga_winforms/window.py"}]}