toga-iOS 0.5.2__tar.gz → 0.5.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. {toga_ios-0.5.2 → toga_ios-0.5.3}/CONTRIBUTING.md +1 -1
  2. toga_ios-0.5.3/PKG-INFO +65 -0
  3. toga_ios-0.5.3/README.md +29 -0
  4. {toga_ios-0.5.2 → toga_ios-0.5.3}/pyproject.toml +6 -6
  5. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/app.py +1 -0
  6. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/factory.py +1 -1
  7. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/libs/webkit.py +5 -1
  8. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/activityindicator.py +7 -0
  9. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/dateinput.py +10 -2
  10. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/scrollcontainer.py +14 -1
  11. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/timeinput.py +3 -2
  12. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/webview.py +98 -3
  13. toga_ios-0.5.3/src/toga_iOS.egg-info/PKG-INFO +65 -0
  14. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS.egg-info/SOURCES.txt +1 -1
  15. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS.egg-info/requires.txt +1 -1
  16. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/app.py +2 -0
  17. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/activityindicator.py +1 -1
  18. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/base.py +1 -0
  19. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/scrollcontainer.py +14 -2
  20. toga_ios-0.5.2/PKG-INFO +0 -94
  21. toga_ios-0.5.2/README.rst +0 -58
  22. toga_ios-0.5.2/src/toga_iOS.egg-info/PKG-INFO +0 -94
  23. {toga_ios-0.5.2 → toga_ios-0.5.3}/LICENSE +0 -0
  24. {toga_ios-0.5.2 → toga_ios-0.5.3}/setup.cfg +0 -0
  25. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/__init__.py +0 -0
  26. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/colors.py +0 -0
  27. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/command.py +0 -0
  28. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/constraints.py +0 -0
  29. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/container.py +0 -0
  30. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/dialogs.py +0 -0
  31. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/fonts.py +0 -0
  32. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/hardware/__init__.py +0 -0
  33. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/hardware/camera.py +0 -0
  34. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/hardware/location.py +0 -0
  35. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/icons.py +0 -0
  36. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/images.py +0 -0
  37. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/libs/__init__.py +0 -0
  38. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/libs/av_foundation.py +0 -0
  39. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/libs/core_graphics.py +0 -0
  40. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/libs/core_location.py +0 -0
  41. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/libs/core_text.py +0 -0
  42. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/libs/foundation.py +0 -0
  43. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/libs/mapkit.py +0 -0
  44. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/libs/uikit.py +0 -0
  45. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/paths.py +0 -0
  46. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/resources/optioncontainer-tab.png +0 -0
  47. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/resources/toga.icns +0 -0
  48. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/screens.py +0 -0
  49. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/statusicons.py +0 -0
  50. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/__init__.py +0 -0
  51. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/base.py +0 -0
  52. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/box.py +0 -0
  53. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/button.py +0 -0
  54. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/canvas.py +0 -0
  55. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/detailedlist.py +0 -0
  56. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/divider.py +0 -0
  57. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/imageview.py +0 -0
  58. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/label.py +0 -0
  59. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/mapview.py +0 -0
  60. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/multilinetextinput.py +0 -0
  61. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/numberinput.py +0 -0
  62. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/optioncontainer.py +0 -0
  63. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/passwordinput.py +0 -0
  64. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/progressbar.py +0 -0
  65. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/selection.py +0 -0
  66. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/slider.py +0 -0
  67. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/switch.py +0 -0
  68. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/widgets/textinput.py +0 -0
  69. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS/window.py +0 -0
  70. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS.egg-info/dependency_links.txt +0 -0
  71. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS.egg-info/entry_points.txt +0 -0
  72. {toga_ios-0.5.2 → toga_ios-0.5.3}/src/toga_iOS.egg-info/top_level.txt +0 -0
  73. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/__init__.py +0 -0
  74. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/dialogs.py +0 -0
  75. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/fonts.py +0 -0
  76. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/hardware/__init__.py +0 -0
  77. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/hardware/camera.py +0 -0
  78. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/hardware/location.py +0 -0
  79. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/icons.py +0 -0
  80. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/images.py +0 -0
  81. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/probe.py +0 -0
  82. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/screens.py +0 -0
  83. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/__init__.py +0 -0
  84. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/box.py +0 -0
  85. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/button.py +0 -0
  86. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/canvas.py +0 -0
  87. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/dateinput.py +0 -0
  88. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/detailedlist.py +0 -0
  89. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/divider.py +0 -0
  90. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/imageview.py +0 -0
  91. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/label.py +0 -0
  92. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/mapview.py +0 -0
  93. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/multilinetextinput.py +0 -0
  94. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/numberinput.py +0 -0
  95. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/optioncontainer.py +0 -0
  96. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/passwordinput.py +0 -0
  97. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/progressbar.py +0 -0
  98. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/properties.py +0 -0
  99. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/selection.py +0 -0
  100. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/slider.py +0 -0
  101. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/switch.py +0 -0
  102. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/textinput.py +0 -0
  103. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/timeinput.py +0 -0
  104. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/widgets/webview.py +0 -0
  105. {toga_ios-0.5.2 → toga_ios-0.5.3}/tests_backend/window.py +0 -0
@@ -6,6 +6,6 @@ Please be aware that BeeWare operates under a [Code of
6
6
  Conduct](https://beeware.org/community/behavior/code-of-conduct/).
7
7
 
8
8
  If you'd like to contribute to Toga development, our [contribution
9
- guide](https://toga.readthedocs.io/en/latest/how-to/contribute/index.html) details how
9
+ guide](https://toga.beeware.org/en/latest/how-to/contribute/) details how
10
10
  to set up a development environment, and other requirements we have as part of our
11
11
  contribution process.
@@ -0,0 +1,65 @@
1
+ Metadata-Version: 2.4
2
+ Name: toga-iOS
3
+ Version: 0.5.3
4
+ Summary: An iOS backend for the Toga widget toolkit.
5
+ Author-email: Russell Keith-Magee <russell@keith-magee.com>
6
+ Maintainer-email: BeeWare Team <team@beeware.org>
7
+ License-Expression: BSD-3-Clause
8
+ Project-URL: Homepage, https://beeware.org/project/projects/libraries/toga/
9
+ Project-URL: Funding, https://beeware.org/contributing/membership/
10
+ Project-URL: Documentation, https://toga.beeware.org/
11
+ Project-URL: Tracker, https://github.com/beeware/toga/issues
12
+ Project-URL: Source, https://github.com/beeware/toga
13
+ Project-URL: Changelog, https://toga.beeware.org/en/stable/background/project/releases
14
+ Keywords: gui,widget,cross-platform,toga,mobile,iOS
15
+ Classifier: Development Status :: 4 - Beta
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Programming Language :: Python :: 3 :: Only
25
+ Classifier: Topic :: Software Development
26
+ Classifier: Topic :: Software Development :: User Interfaces
27
+ Classifier: Topic :: Software Development :: Widget Sets
28
+ Requires-Python: >=3.10
29
+ Description-Content-Type: text/markdown
30
+ License-File: LICENSE
31
+ Requires-Dist: fonttools<5.0.0,>=4.42.1
32
+ Requires-Dist: rubicon-objc<0.6.0,>=0.5.1
33
+ Requires-Dist: toga-core==0.5.3
34
+ Dynamic: license-file
35
+ Dynamic: requires-dist
36
+
37
+ # toga-iOS
38
+
39
+ [![Python Versions](https://img.shields.io/pypi/pyversions/toga-ios.svg)](https://pypi.python.org/pypi/toga-ios)
40
+ [![BSD-3-Clause License](https://img.shields.io/pypi/l/toga-ios.svg)](https://github.com/beeware/toga-ios/blob/main/LICENSE)
41
+ [![Project status](https://img.shields.io/pypi/status/toga-ios.svg)](https://pypi.python.org/pypi/toga-ios)
42
+
43
+ An iOS backend for the [Toga widget toolkit](https://beeware.org/toga).
44
+
45
+ This package isn't much use by itself; it needs to be combined with [the core Toga library](https://pypi.python.org/pypi/toga-core).
46
+
47
+ For platform requirements, see the [iOS platform documentation](https://toga.beeware.org/en/latest/reference/platforms/iOS#prerequisites).
48
+
49
+ For more details, see [Toga's documentation](https://toga.beeware.org), or the [Toga project on GitHub](https://github.com/beeware/toga).
50
+
51
+ ## Community
52
+
53
+ Toga is part of the [BeeWare suite](https://beeware.org). You can talk to the community through:
54
+
55
+ - [@beeware@fosstodon.org on Mastodon](https://fosstodon.org/@beeware)
56
+ - [Discord](https://beeware.org/bee/chat/)
57
+ - The Toga [GitHub Discussions forum](https://github.com/beeware/toga/discussions)
58
+
59
+ We foster a welcoming and respectful community as described in our [BeeWare Community Code of Conduct](https://beeware.org/community/behavior/).
60
+
61
+ ## Contributing
62
+
63
+ If you experience problems with Toga, [log them on GitHub](https://github.com/beeware/toga/issues).
64
+
65
+ If you'd like to contribute to Toga development, our [contribution guide](https://toga.beeware.org/en/latest/how-to/contribute/) details how to set up a development environment, and other requirements we have as part of our contribution process.
@@ -0,0 +1,29 @@
1
+ # toga-iOS
2
+
3
+ [![Python Versions](https://img.shields.io/pypi/pyversions/toga-ios.svg)](https://pypi.python.org/pypi/toga-ios)
4
+ [![BSD-3-Clause License](https://img.shields.io/pypi/l/toga-ios.svg)](https://github.com/beeware/toga-ios/blob/main/LICENSE)
5
+ [![Project status](https://img.shields.io/pypi/status/toga-ios.svg)](https://pypi.python.org/pypi/toga-ios)
6
+
7
+ An iOS backend for the [Toga widget toolkit](https://beeware.org/toga).
8
+
9
+ This package isn't much use by itself; it needs to be combined with [the core Toga library](https://pypi.python.org/pypi/toga-core).
10
+
11
+ For platform requirements, see the [iOS platform documentation](https://toga.beeware.org/en/latest/reference/platforms/iOS#prerequisites).
12
+
13
+ For more details, see [Toga's documentation](https://toga.beeware.org), or the [Toga project on GitHub](https://github.com/beeware/toga).
14
+
15
+ ## Community
16
+
17
+ Toga is part of the [BeeWare suite](https://beeware.org). You can talk to the community through:
18
+
19
+ - [@beeware@fosstodon.org on Mastodon](https://fosstodon.org/@beeware)
20
+ - [Discord](https://beeware.org/bee/chat/)
21
+ - The Toga [GitHub Discussions forum](https://github.com/beeware/toga/discussions)
22
+
23
+ We foster a welcoming and respectful community as described in our [BeeWare Community Code of Conduct](https://beeware.org/community/behavior/).
24
+
25
+ ## Contributing
26
+
27
+ If you experience problems with Toga, [log them on GitHub](https://github.com/beeware/toga/issues).
28
+
29
+ If you'd like to contribute to Toga development, our [contribution guide](https://toga.beeware.org/en/latest/how-to/contribute/) details how to set up a development environment, and other requirements we have as part of our contribution process.
@@ -1,7 +1,7 @@
1
1
  [build-system]
2
2
  requires = [
3
3
  "setuptools==80.9.0",
4
- "setuptools_scm==8.3.1",
4
+ "setuptools_scm==9.2.2",
5
5
  "setuptools_dynamic_dependencies==1.0.0",
6
6
  ]
7
7
  build-backend = "setuptools.build_meta"
@@ -10,8 +10,8 @@ build-backend = "setuptools.build_meta"
10
10
  dynamic = ["version", "dependencies"]
11
11
  name = "toga-iOS"
12
12
  description = "An iOS backend for the Toga widget toolkit."
13
- readme = "README.rst"
14
- requires-python = ">= 3.9"
13
+ readme = "README.md"
14
+ requires-python = ">= 3.10"
15
15
  license = "BSD-3-Clause"
16
16
  license-files = [
17
17
  "LICENSE"
@@ -35,11 +35,11 @@ classifiers = [
35
35
  "Intended Audience :: Developers",
36
36
  "Operating System :: OS Independent",
37
37
  "Programming Language :: Python :: 3",
38
- "Programming Language :: Python :: 3.9",
39
38
  "Programming Language :: Python :: 3.10",
40
39
  "Programming Language :: Python :: 3.11",
41
40
  "Programming Language :: Python :: 3.12",
42
41
  "Programming Language :: Python :: 3.13",
42
+ "Programming Language :: Python :: 3.14",
43
43
  "Programming Language :: Python :: 3 :: Only",
44
44
  "Topic :: Software Development",
45
45
  "Topic :: Software Development :: User Interfaces",
@@ -49,10 +49,10 @@ classifiers = [
49
49
  [project.urls]
50
50
  Homepage = "https://beeware.org/project/projects/libraries/toga/"
51
51
  Funding = "https://beeware.org/contributing/membership/"
52
- Documentation = "https://toga.readthedocs.io/"
52
+ Documentation = "https://toga.beeware.org/"
53
53
  Tracker = "https://github.com/beeware/toga/issues"
54
54
  Source = "https://github.com/beeware/toga"
55
- Changelog = "https://toga.readthedocs.io/en/stable/background/project/releases.html"
55
+ Changelog = "https://toga.beeware.org/en/stable/background/project/releases"
56
56
 
57
57
  [project.entry-points."toga.backends"]
58
58
  iOS = "toga_iOS"
@@ -48,6 +48,7 @@ class PythonAppDelegate(UIResponder):
48
48
  ) -> None:
49
49
  """This callback is invoked when rotating the device from landscape to portrait
50
50
  and vice versa."""
51
+ App.app.interface.current_window.on_resize()
51
52
  App.app.interface.main_window.content.refresh()
52
53
 
53
54
 
@@ -98,5 +98,5 @@ __all__ = [
98
98
  ]
99
99
 
100
100
 
101
- def __getattr__(name): # pragma: no cover
101
+ def __getattr__(name):
102
102
  raise NotImplementedError(f"Toga's iOS backend doesn't implement {name}")
@@ -3,7 +3,7 @@
3
3
  ##########################################################################
4
4
  from ctypes import cdll, util
5
5
 
6
- from rubicon.objc import ObjCClass
6
+ from rubicon.objc import ObjCClass, ObjCProtocol
7
7
 
8
8
  ######################################################################
9
9
  webkit = cdll.LoadLibrary(util.find_library("WebKit"))
@@ -12,3 +12,7 @@ webkit = cdll.LoadLibrary(util.find_library("WebKit"))
12
12
  ######################################################################
13
13
  # WKWebView.h
14
14
  WKWebView = ObjCClass("WKWebView")
15
+
16
+ ######################################################################
17
+ # WKFrameInfo.h
18
+ WKUIDelegate = ObjCProtocol("WKUIDelegate")
@@ -15,15 +15,22 @@ class ActivityIndicator(Widget):
15
15
 
16
16
  def set_hidden(self, hidden):
17
17
  self.native.setHidden((not self.is_running()) or hidden)
18
+ self._hidden = hidden
18
19
 
19
20
  def is_running(self):
20
21
  return self.native.isAnimating()
21
22
 
22
23
  def start(self):
23
24
  self.native.startAnimating()
25
+ # The above due to using hidesWhenStopped actually shows the
26
+ # indicator even if hidden! So we work around that by explicitly
27
+ # correcting visibility after we start animation.
28
+ self.native.setHidden(self._hidden)
24
29
 
25
30
  def stop(self):
26
31
  self.native.stopAnimating()
32
+ # Even if hidden the above command hides it, so it's at most redundant
33
+ # No other action needed here
27
34
 
28
35
  def rehint(self):
29
36
  fitting_size = self.native.systemLayoutSizeFittingSize(CGSize(0, 0))
@@ -1,4 +1,5 @@
1
1
  import datetime
2
+ from math import ceil
2
3
 
3
4
  from rubicon.objc import SEL, CGSize, objc_method, objc_property
4
5
  from travertino.size import at_least
@@ -24,6 +25,13 @@ class TogaDatePicker(UIDatePicker):
24
25
  @objc_method
25
26
  def dateInputDidChange_(self, dateInput) -> None:
26
27
  self.interface.on_change()
28
+ # The width of the widget is dependent on the date being displayed. If the value
29
+ # changes, we also need to force the iOS widget to lay itself out again to
30
+ # ensure minimum size hints are accurate, and then trigger a Toga refresh to
31
+ # apply the new hints.
32
+ self.setNeedsLayout()
33
+ self.layoutIfNeeded()
34
+ self.interface.refresh()
27
35
 
28
36
 
29
37
  def py_date(native_date):
@@ -77,11 +85,11 @@ class DateInput(Widget):
77
85
 
78
86
  def set_value(self, value):
79
87
  self.native.date = native_date(value)
80
- self.interface.on_change()
88
+ self.native.sendActionsForControlEvents(UIControlEventValueChanged)
81
89
 
82
90
  def rehint(self):
83
91
  fitting_size = self.native.systemLayoutSizeFittingSize(CGSize(0, 0))
84
- self.interface.intrinsic.width = at_least(self.interface._MIN_WIDTH)
92
+ self.interface.intrinsic.width = at_least(ceil(fitting_size.width))
85
93
  self.interface.intrinsic.height = fitting_size.height
86
94
 
87
95
  def get_min_date(self):
@@ -1,4 +1,11 @@
1
- from rubicon.objc import SEL, NSMakePoint, NSMakeSize, objc_method, objc_property
1
+ from rubicon.objc import (
2
+ SEL,
3
+ CGRectMake,
4
+ NSMakePoint,
5
+ NSMakeSize,
6
+ objc_method,
7
+ objc_property,
8
+ )
2
9
  from travertino.size import at_least
3
10
 
4
11
  from toga_iOS.container import Container
@@ -68,6 +75,12 @@ class ScrollContainer(Widget):
68
75
 
69
76
  self.native.contentSize = NSMakeSize(width, height)
70
77
 
78
+ # Update the document container frame to match the content size so that
79
+ # buttons outside the original scroll view frame can receive touch events.
80
+ # Without this, hit testing fails for views outside the original container
81
+ # bounds
82
+ self.document_container.native.frame = CGRectMake(0, 0, width, height)
83
+
71
84
  def rehint(self):
72
85
  self.interface.intrinsic.width = at_least(self.interface._MIN_WIDTH)
73
86
  self.interface.intrinsic.height = at_least(self.interface._MIN_HEIGHT)
@@ -1,4 +1,5 @@
1
1
  import datetime
2
+ from math import ceil
2
3
 
3
4
  from rubicon.objc import SEL, CGSize
4
5
  from travertino.size import at_least
@@ -67,11 +68,11 @@ class TimeInput(Widget):
67
68
 
68
69
  def set_value(self, value):
69
70
  self.native.date = native_time(value.replace(second=0, microsecond=0))
70
- self.interface.on_change()
71
+ self.native.sendActionsForControlEvents(UIControlEventValueChanged)
71
72
 
72
73
  def rehint(self):
73
74
  fitting_size = self.native.systemLayoutSizeFittingSize(CGSize(0, 0))
74
- self.interface.intrinsic.width = at_least(self.interface._MIN_WIDTH)
75
+ self.interface.intrinsic.width = at_least(ceil(fitting_size.width))
75
76
  self.interface.intrinsic.height = fitting_size.height
76
77
 
77
78
  def get_min_time(self):
@@ -1,10 +1,26 @@
1
1
  from http.cookiejar import Cookie, CookieJar
2
2
 
3
- from rubicon.objc import objc_id, objc_method, objc_property, py_from_ns
3
+ from rubicon.objc import (
4
+ Block,
5
+ ObjCBlock,
6
+ objc_id,
7
+ objc_method,
8
+ objc_property,
9
+ py_from_ns,
10
+ )
4
11
  from travertino.size import at_least
5
12
 
6
13
  from toga.widgets.webview import CookiesResult, JavaScriptResult
7
- from toga_iOS.libs import NSURL, NSURLRequest, WKWebView
14
+ from toga_iOS.libs import (
15
+ NSURL,
16
+ NSURLRequest,
17
+ UIAlertAction,
18
+ UIAlertActionStyle,
19
+ UIAlertController,
20
+ UIAlertControllerStyle,
21
+ WKUIDelegate,
22
+ WKWebView,
23
+ )
8
24
  from toga_iOS.widgets.base import Widget
9
25
 
10
26
 
@@ -56,7 +72,7 @@ def cookies_completion_handler(result):
56
72
  return _completion_handler
57
73
 
58
74
 
59
- class TogaWebView(WKWebView):
75
+ class TogaWebView(WKWebView, protocols=[WKUIDelegate]):
60
76
  interface = objc_property(object, weak=True)
61
77
  impl = objc_property(object, weak=True)
62
78
 
@@ -73,6 +89,83 @@ class TogaWebView(WKWebView):
73
89
  self.impl.loaded_future.set_result(None)
74
90
  self.impl.loaded_future = None
75
91
 
92
+ # WKUIDelegate protocol methods required to display dialogs to the user.
93
+ # These are difficult to automatically test because they use
94
+ # completionHandler, which is a method utilized by the underlying WKWebView
95
+ # objective-C codebase. completionHandler cannot be created manually for
96
+ # testing because it is difficult to pull it up from the native codebase.
97
+ @objc_method
98
+ def webView_runJavaScriptAlertPanelWithMessage_initiatedByFrame_completionHandler_(
99
+ self, webView, message, frame, completionHandler
100
+ ) -> None: # pragma: no cover
101
+ alert = UIAlertController.alertControllerWithTitle(
102
+ "Alert!",
103
+ message=message,
104
+ preferredStyle=UIAlertControllerStyle.Alert,
105
+ )
106
+
107
+ # Add OK button
108
+ def _ok(action: objc_id) -> None:
109
+ ObjCBlock(completionHandler, None)()
110
+
111
+ alert.addAction(
112
+ UIAlertAction.actionWithTitle(
113
+ "OK",
114
+ style=UIAlertActionStyle.Default,
115
+ handler=Block(_ok, None, objc_id),
116
+ )
117
+ )
118
+
119
+ # Display dialog
120
+ view_controller = self.interface.window._impl.native.rootViewController
121
+ view_controller.presentViewController(
122
+ alert,
123
+ animated=False,
124
+ completion=None,
125
+ )
126
+
127
+ @objc_method
128
+ def webView_runJavaScriptConfirmPanelWithMessage_initiatedByFrame_completionHandler_( # noqa: E501
129
+ self, webView, message, frame, completionHandler
130
+ ) -> None: # pragma: no cover
131
+ alert = UIAlertController.alertControllerWithTitle(
132
+ "Confirm?",
133
+ message=message,
134
+ preferredStyle=UIAlertControllerStyle.Alert,
135
+ )
136
+
137
+ # Add OK button
138
+ def _ok(action: objc_id) -> None:
139
+ ObjCBlock(completionHandler, None, bool)(True)
140
+
141
+ alert.addAction(
142
+ UIAlertAction.actionWithTitle(
143
+ "OK",
144
+ style=UIAlertActionStyle.Default,
145
+ handler=Block(_ok, None, objc_id),
146
+ )
147
+ )
148
+
149
+ # Add cancel button
150
+ def _cancel(action: objc_id) -> None:
151
+ ObjCBlock(completionHandler, None, bool)(False)
152
+
153
+ alert.addAction(
154
+ UIAlertAction.actionWithTitle(
155
+ "Cancel",
156
+ style=UIAlertActionStyle.Default,
157
+ handler=Block(_cancel, None, objc_id),
158
+ )
159
+ )
160
+
161
+ # Display dialog
162
+ view_controller = self.interface.window._impl.native.rootViewController
163
+ view_controller.presentViewController(
164
+ alert,
165
+ animated=False,
166
+ completion=None,
167
+ )
168
+
76
169
 
77
170
  class WebView(Widget):
78
171
  def create(self):
@@ -84,6 +177,8 @@ class WebView(Widget):
84
177
  # It is a no-op on earlier versions.
85
178
  self.native.inspectable = True
86
179
  self.native.navigationDelegate = self.native
180
+ # Set UIDelegate to self for file dialog support
181
+ self.native.UIDelegate = self.native
87
182
 
88
183
  self.loaded_future = None
89
184
 
@@ -0,0 +1,65 @@
1
+ Metadata-Version: 2.4
2
+ Name: toga-iOS
3
+ Version: 0.5.3
4
+ Summary: An iOS backend for the Toga widget toolkit.
5
+ Author-email: Russell Keith-Magee <russell@keith-magee.com>
6
+ Maintainer-email: BeeWare Team <team@beeware.org>
7
+ License-Expression: BSD-3-Clause
8
+ Project-URL: Homepage, https://beeware.org/project/projects/libraries/toga/
9
+ Project-URL: Funding, https://beeware.org/contributing/membership/
10
+ Project-URL: Documentation, https://toga.beeware.org/
11
+ Project-URL: Tracker, https://github.com/beeware/toga/issues
12
+ Project-URL: Source, https://github.com/beeware/toga
13
+ Project-URL: Changelog, https://toga.beeware.org/en/stable/background/project/releases
14
+ Keywords: gui,widget,cross-platform,toga,mobile,iOS
15
+ Classifier: Development Status :: 4 - Beta
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Programming Language :: Python :: 3 :: Only
25
+ Classifier: Topic :: Software Development
26
+ Classifier: Topic :: Software Development :: User Interfaces
27
+ Classifier: Topic :: Software Development :: Widget Sets
28
+ Requires-Python: >=3.10
29
+ Description-Content-Type: text/markdown
30
+ License-File: LICENSE
31
+ Requires-Dist: fonttools<5.0.0,>=4.42.1
32
+ Requires-Dist: rubicon-objc<0.6.0,>=0.5.1
33
+ Requires-Dist: toga-core==0.5.3
34
+ Dynamic: license-file
35
+ Dynamic: requires-dist
36
+
37
+ # toga-iOS
38
+
39
+ [![Python Versions](https://img.shields.io/pypi/pyversions/toga-ios.svg)](https://pypi.python.org/pypi/toga-ios)
40
+ [![BSD-3-Clause License](https://img.shields.io/pypi/l/toga-ios.svg)](https://github.com/beeware/toga-ios/blob/main/LICENSE)
41
+ [![Project status](https://img.shields.io/pypi/status/toga-ios.svg)](https://pypi.python.org/pypi/toga-ios)
42
+
43
+ An iOS backend for the [Toga widget toolkit](https://beeware.org/toga).
44
+
45
+ This package isn't much use by itself; it needs to be combined with [the core Toga library](https://pypi.python.org/pypi/toga-core).
46
+
47
+ For platform requirements, see the [iOS platform documentation](https://toga.beeware.org/en/latest/reference/platforms/iOS#prerequisites).
48
+
49
+ For more details, see [Toga's documentation](https://toga.beeware.org), or the [Toga project on GitHub](https://github.com/beeware/toga).
50
+
51
+ ## Community
52
+
53
+ Toga is part of the [BeeWare suite](https://beeware.org). You can talk to the community through:
54
+
55
+ - [@beeware@fosstodon.org on Mastodon](https://fosstodon.org/@beeware)
56
+ - [Discord](https://beeware.org/bee/chat/)
57
+ - The Toga [GitHub Discussions forum](https://github.com/beeware/toga/discussions)
58
+
59
+ We foster a welcoming and respectful community as described in our [BeeWare Community Code of Conduct](https://beeware.org/community/behavior/).
60
+
61
+ ## Contributing
62
+
63
+ If you experience problems with Toga, [log them on GitHub](https://github.com/beeware/toga/issues).
64
+
65
+ If you'd like to contribute to Toga development, our [contribution guide](https://toga.beeware.org/en/latest/how-to/contribute/) details how to set up a development environment, and other requirements we have as part of our contribution process.
@@ -1,6 +1,6 @@
1
1
  CONTRIBUTING.md
2
2
  LICENSE
3
- README.rst
3
+ README.md
4
4
  pyproject.toml
5
5
  src/toga_iOS/__init__.py
6
6
  src/toga_iOS/app.py
@@ -1,3 +1,3 @@
1
1
  fonttools<5.0.0,>=4.42.1
2
2
  rubicon-objc<0.6.0,>=0.5.1
3
- toga-core==0.5.2
3
+ toga-core==0.5.3
@@ -15,6 +15,8 @@ from .probe import BaseProbe
15
15
 
16
16
  class AppProbe(BaseProbe, DialogsMixin):
17
17
  supports_key = False
18
+ supports_dark_mode = False
19
+ edit_menu_noop_enabled = False
18
20
 
19
21
  def __init__(self, app):
20
22
  super().__init__()
@@ -6,5 +6,5 @@ from .base import SimpleProbe
6
6
  class ActivityIndicatorProbe(SimpleProbe):
7
7
  native_class = UIActivityIndicatorView
8
8
 
9
- def assert_is_hidden(self, value):
9
+ def assert_spinner_is_hidden(self, value):
10
10
  assert self.native.isHidden() == value
@@ -40,6 +40,7 @@ CATransaction = ObjCClass("CATransaction")
40
40
 
41
41
  class SimpleProbe(BaseProbe, FontMixin):
42
42
  native_attr = "native"
43
+ invalid_size_while_hidden = False
43
44
 
44
45
  def __init__(self, widget):
45
46
  super().__init__()
@@ -17,11 +17,23 @@ class ScrollContainerProbe(SimpleProbe):
17
17
 
18
18
  @property
19
19
  def document_height(self):
20
- return self.native.contentSize.height
20
+ # Assert that the document container and the document itself have the same size.
21
+ # This is necessary to ensure that events propagate; see #2411.
22
+ assert self.impl.document_container.native.frame.size.height == (
23
+ content_height := self.native.contentSize.height
24
+ )
25
+
26
+ return content_height
21
27
 
22
28
  @property
23
29
  def document_width(self):
24
- return self.native.contentSize.width
30
+ # Assert that the document container and the document itself have the same size.
31
+ # This is necessary to ensure that events propagate; see #2411.
32
+ assert self.impl.document_container.native.frame.size.width == (
33
+ content_width := self.native.contentSize.width
34
+ )
35
+
36
+ return content_width
25
37
 
26
38
  async def scroll(self):
27
39
  if self.document_height <= self.height:
toga_ios-0.5.2/PKG-INFO DELETED
@@ -1,94 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: toga-iOS
3
- Version: 0.5.2
4
- Summary: An iOS backend for the Toga widget toolkit.
5
- Author-email: Russell Keith-Magee <russell@keith-magee.com>
6
- Maintainer-email: BeeWare Team <team@beeware.org>
7
- License-Expression: BSD-3-Clause
8
- Project-URL: Homepage, https://beeware.org/project/projects/libraries/toga/
9
- Project-URL: Funding, https://beeware.org/contributing/membership/
10
- Project-URL: Documentation, https://toga.readthedocs.io/
11
- Project-URL: Tracker, https://github.com/beeware/toga/issues
12
- Project-URL: Source, https://github.com/beeware/toga
13
- Project-URL: Changelog, https://toga.readthedocs.io/en/stable/background/project/releases.html
14
- Keywords: gui,widget,cross-platform,toga,mobile,iOS
15
- Classifier: Development Status :: 4 - Beta
16
- Classifier: Intended Audience :: Developers
17
- Classifier: Operating System :: OS Independent
18
- Classifier: Programming Language :: Python :: 3
19
- Classifier: Programming Language :: Python :: 3.9
20
- Classifier: Programming Language :: Python :: 3.10
21
- Classifier: Programming Language :: Python :: 3.11
22
- Classifier: Programming Language :: Python :: 3.12
23
- Classifier: Programming Language :: Python :: 3.13
24
- Classifier: Programming Language :: Python :: 3 :: Only
25
- Classifier: Topic :: Software Development
26
- Classifier: Topic :: Software Development :: User Interfaces
27
- Classifier: Topic :: Software Development :: Widget Sets
28
- Requires-Python: >=3.9
29
- Description-Content-Type: text/x-rst
30
- License-File: LICENSE
31
- Requires-Dist: fonttools<5.0.0,>=4.42.1
32
- Requires-Dist: rubicon-objc<0.6.0,>=0.5.1
33
- Requires-Dist: toga-core==0.5.2
34
- Dynamic: license-file
35
- Dynamic: requires-dist
36
-
37
- .. |pyversions| image:: https://img.shields.io/pypi/pyversions/toga-ios.svg
38
- :target: https://pypi.python.org/pypi/toga-ios
39
- :alt: Python Versions
40
-
41
- .. |license| image:: https://img.shields.io/pypi/l/toga-ios.svg
42
- :target: https://github.com/beeware/toga-ios/blob/main/LICENSE
43
- :alt: BSD-3-Clause License
44
-
45
- .. |maturity| image:: https://img.shields.io/pypi/status/toga-ios.svg
46
- :target: https://pypi.python.org/pypi/toga-ios
47
- :alt: Project status
48
-
49
- toga-iOS
50
- ========
51
-
52
- |pyversions| |license| |maturity|
53
-
54
- An iOS backend for the `Toga widget toolkit`_.
55
-
56
- This package isn't much use by itself; it needs to be combined with `the core Toga library`_.
57
-
58
- For platform requirements, see the `iOS platform documentation
59
- <https://toga.readthedocs.io/en/latest/reference/platforms/iOS.html#prerequisites>`__.
60
-
61
- For more details, see the `Toga project on GitHub`_.
62
-
63
- .. _Toga widget toolkit: https://beeware.org/toga
64
- .. _the core Toga library: https://pypi.python.org/pypi/toga-core
65
- .. _Toga project on GitHub: https://github.com/beeware/toga
66
-
67
- Community
68
- ---------
69
-
70
- Toga is part of the `BeeWare suite`_. You can talk to the community through:
71
-
72
- * `@beeware@fosstodon.org on Mastodon`_
73
- * `Discord`_
74
- * The Toga `GitHub Discussions forum`_
75
-
76
- We foster a welcoming and respectful community as described in our
77
- `BeeWare Community Code of Conduct`_.
78
-
79
- .. _BeeWare suite: https://beeware.org
80
- .. _@beeware@fosstodon.org on Mastodon: https://fosstodon.org/@beeware
81
- .. _Discord: https://beeware.org/bee/chat/
82
- .. _GitHub Discussions forum: https://github.com/beeware/toga/discussions
83
- .. _BeeWare Community Code of Conduct: https://beeware.org/community/behavior/
84
-
85
- Contributing
86
- ------------
87
-
88
- If you experience problems with Toga, `log them on GitHub
89
- <https://github.com/beeware/toga/issues>`__.
90
-
91
- If you'd like to contribute to Toga development, our `contribution guide
92
- <https://toga.readthedocs.io/en/latest/how-to/contribute/index.html>`__
93
- details how to set up a development environment, and other requirements we have
94
- as part of our contribution process.
toga_ios-0.5.2/README.rst DELETED
@@ -1,58 +0,0 @@
1
- .. |pyversions| image:: https://img.shields.io/pypi/pyversions/toga-ios.svg
2
- :target: https://pypi.python.org/pypi/toga-ios
3
- :alt: Python Versions
4
-
5
- .. |license| image:: https://img.shields.io/pypi/l/toga-ios.svg
6
- :target: https://github.com/beeware/toga-ios/blob/main/LICENSE
7
- :alt: BSD-3-Clause License
8
-
9
- .. |maturity| image:: https://img.shields.io/pypi/status/toga-ios.svg
10
- :target: https://pypi.python.org/pypi/toga-ios
11
- :alt: Project status
12
-
13
- toga-iOS
14
- ========
15
-
16
- |pyversions| |license| |maturity|
17
-
18
- An iOS backend for the `Toga widget toolkit`_.
19
-
20
- This package isn't much use by itself; it needs to be combined with `the core Toga library`_.
21
-
22
- For platform requirements, see the `iOS platform documentation
23
- <https://toga.readthedocs.io/en/latest/reference/platforms/iOS.html#prerequisites>`__.
24
-
25
- For more details, see the `Toga project on GitHub`_.
26
-
27
- .. _Toga widget toolkit: https://beeware.org/toga
28
- .. _the core Toga library: https://pypi.python.org/pypi/toga-core
29
- .. _Toga project on GitHub: https://github.com/beeware/toga
30
-
31
- Community
32
- ---------
33
-
34
- Toga is part of the `BeeWare suite`_. You can talk to the community through:
35
-
36
- * `@beeware@fosstodon.org on Mastodon`_
37
- * `Discord`_
38
- * The Toga `GitHub Discussions forum`_
39
-
40
- We foster a welcoming and respectful community as described in our
41
- `BeeWare Community Code of Conduct`_.
42
-
43
- .. _BeeWare suite: https://beeware.org
44
- .. _@beeware@fosstodon.org on Mastodon: https://fosstodon.org/@beeware
45
- .. _Discord: https://beeware.org/bee/chat/
46
- .. _GitHub Discussions forum: https://github.com/beeware/toga/discussions
47
- .. _BeeWare Community Code of Conduct: https://beeware.org/community/behavior/
48
-
49
- Contributing
50
- ------------
51
-
52
- If you experience problems with Toga, `log them on GitHub
53
- <https://github.com/beeware/toga/issues>`__.
54
-
55
- If you'd like to contribute to Toga development, our `contribution guide
56
- <https://toga.readthedocs.io/en/latest/how-to/contribute/index.html>`__
57
- details how to set up a development environment, and other requirements we have
58
- as part of our contribution process.
@@ -1,94 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: toga-iOS
3
- Version: 0.5.2
4
- Summary: An iOS backend for the Toga widget toolkit.
5
- Author-email: Russell Keith-Magee <russell@keith-magee.com>
6
- Maintainer-email: BeeWare Team <team@beeware.org>
7
- License-Expression: BSD-3-Clause
8
- Project-URL: Homepage, https://beeware.org/project/projects/libraries/toga/
9
- Project-URL: Funding, https://beeware.org/contributing/membership/
10
- Project-URL: Documentation, https://toga.readthedocs.io/
11
- Project-URL: Tracker, https://github.com/beeware/toga/issues
12
- Project-URL: Source, https://github.com/beeware/toga
13
- Project-URL: Changelog, https://toga.readthedocs.io/en/stable/background/project/releases.html
14
- Keywords: gui,widget,cross-platform,toga,mobile,iOS
15
- Classifier: Development Status :: 4 - Beta
16
- Classifier: Intended Audience :: Developers
17
- Classifier: Operating System :: OS Independent
18
- Classifier: Programming Language :: Python :: 3
19
- Classifier: Programming Language :: Python :: 3.9
20
- Classifier: Programming Language :: Python :: 3.10
21
- Classifier: Programming Language :: Python :: 3.11
22
- Classifier: Programming Language :: Python :: 3.12
23
- Classifier: Programming Language :: Python :: 3.13
24
- Classifier: Programming Language :: Python :: 3 :: Only
25
- Classifier: Topic :: Software Development
26
- Classifier: Topic :: Software Development :: User Interfaces
27
- Classifier: Topic :: Software Development :: Widget Sets
28
- Requires-Python: >=3.9
29
- Description-Content-Type: text/x-rst
30
- License-File: LICENSE
31
- Requires-Dist: fonttools<5.0.0,>=4.42.1
32
- Requires-Dist: rubicon-objc<0.6.0,>=0.5.1
33
- Requires-Dist: toga-core==0.5.2
34
- Dynamic: license-file
35
- Dynamic: requires-dist
36
-
37
- .. |pyversions| image:: https://img.shields.io/pypi/pyversions/toga-ios.svg
38
- :target: https://pypi.python.org/pypi/toga-ios
39
- :alt: Python Versions
40
-
41
- .. |license| image:: https://img.shields.io/pypi/l/toga-ios.svg
42
- :target: https://github.com/beeware/toga-ios/blob/main/LICENSE
43
- :alt: BSD-3-Clause License
44
-
45
- .. |maturity| image:: https://img.shields.io/pypi/status/toga-ios.svg
46
- :target: https://pypi.python.org/pypi/toga-ios
47
- :alt: Project status
48
-
49
- toga-iOS
50
- ========
51
-
52
- |pyversions| |license| |maturity|
53
-
54
- An iOS backend for the `Toga widget toolkit`_.
55
-
56
- This package isn't much use by itself; it needs to be combined with `the core Toga library`_.
57
-
58
- For platform requirements, see the `iOS platform documentation
59
- <https://toga.readthedocs.io/en/latest/reference/platforms/iOS.html#prerequisites>`__.
60
-
61
- For more details, see the `Toga project on GitHub`_.
62
-
63
- .. _Toga widget toolkit: https://beeware.org/toga
64
- .. _the core Toga library: https://pypi.python.org/pypi/toga-core
65
- .. _Toga project on GitHub: https://github.com/beeware/toga
66
-
67
- Community
68
- ---------
69
-
70
- Toga is part of the `BeeWare suite`_. You can talk to the community through:
71
-
72
- * `@beeware@fosstodon.org on Mastodon`_
73
- * `Discord`_
74
- * The Toga `GitHub Discussions forum`_
75
-
76
- We foster a welcoming and respectful community as described in our
77
- `BeeWare Community Code of Conduct`_.
78
-
79
- .. _BeeWare suite: https://beeware.org
80
- .. _@beeware@fosstodon.org on Mastodon: https://fosstodon.org/@beeware
81
- .. _Discord: https://beeware.org/bee/chat/
82
- .. _GitHub Discussions forum: https://github.com/beeware/toga/discussions
83
- .. _BeeWare Community Code of Conduct: https://beeware.org/community/behavior/
84
-
85
- Contributing
86
- ------------
87
-
88
- If you experience problems with Toga, `log them on GitHub
89
- <https://github.com/beeware/toga/issues>`__.
90
-
91
- If you'd like to contribute to Toga development, our `contribution guide
92
- <https://toga.readthedocs.io/en/latest/how-to/contribute/index.html>`__
93
- details how to set up a development environment, and other requirements we have
94
- as part of our contribution process.
File without changes
File without changes
File without changes
File without changes
File without changes