Commit Graph

12910 Commits

Author SHA1 Message Date
Kamil Jarosz 9163de61b8 desktop: Add ThemeController
ThemeController is responsible for managing Ruffle's theme.
It takes into account the user preference, integrates with D-Bus and
handles platform-specific differences.
2024-07-30 19:09:51 +02:00
Kamil Jarosz 21d7746aec desktop: Use Arc for Window
This allows sending Windows between threads.
2024-07-30 19:09:51 +02:00
Adrian Wielgosik 6f56016079 avm2: Support recursive Vector<Vector<T>> lookups 2024-07-30 18:45:45 +02:00
dependabot[bot] 6f4a9aeafb build(deps-dev): bump stylelint in /web in the npm-minor group
Bumps the npm-minor group in /web with 1 update: [stylelint](https://github.com/stylelint/stylelint).


Updates `stylelint` from 16.7.0 to 16.8.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.7.0...16.8.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 23:43:52 +02:00
dependabot[bot] e4c88c6b10 build(deps-dev): bump typescript-eslint in /web
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.0.0-alpha.57 to 8.0.0-alpha.58.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/HEAD/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 23:31:28 +02:00
dependabot[bot] fef1cba495 build(deps): bump the cargo-minor group with 9 updates
Bumps the cargo-minor group with 9 updates:

| Package | From | To |
| --- | --- | --- |
| [clap](https://github.com/clap-rs/clap) | `4.5.9` | `4.5.11` |
| [tokio](https://github.com/tokio-rs/tokio) | `1.38.1` | `1.39.2` |
| [quick-xml](https://github.com/tafia/quick-xml) | `0.36.0` | `0.36.1` |
| [serde_json](https://github.com/serde-rs/json) | `1.0.120` | `1.0.121` |
| [enumset](https://github.com/Lymia/enumset) | `1.1.4` | `1.1.5` |
| [toml_edit](https://github.com/toml-rs/toml) | `0.22.16` | `0.22.17` |
| [gilrs](https://gitlab.com/gilrs-project/gilrs) | `0.10.8` | `0.10.9` |
| [env_logger](https://github.com/rust-cli/env_logger) | `0.11.3` | `0.11.5` |
| [toml](https://github.com/toml-rs/toml) | `0.8.15` | `0.8.16` |


Updates `clap` from 4.5.9 to 4.5.11
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.9...clap_complete-v4.5.11)

Updates `tokio` from 1.38.1 to 1.39.2
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.38.1...tokio-1.39.2)

Updates `quick-xml` from 0.36.0 to 0.36.1
- [Release notes](https://github.com/tafia/quick-xml/releases)
- [Changelog](https://github.com/tafia/quick-xml/blob/master/Changelog.md)
- [Commits](https://github.com/tafia/quick-xml/compare/v0.36.0...v0.36.1)

Updates `serde_json` from 1.0.120 to 1.0.121
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](https://github.com/serde-rs/json/compare/v1.0.120...v1.0.121)

Updates `enumset` from 1.1.4 to 1.1.5
- [Changelog](https://github.com/Lymia/enumset/blob/main/RELEASES.md)
- [Commits](https://github.com/Lymia/enumset/compare/v1.1.4...v1.1.5)

Updates `toml_edit` from 0.22.16 to 0.22.17
- [Commits](https://github.com/toml-rs/toml/compare/v0.22.16...v0.22.17)

Updates `gilrs` from 0.10.8 to 0.10.9
- [Commits](https://gitlab.com/gilrs-project/gilrs/compare/v0.10.8...v0.10.9)

Updates `env_logger` from 0.11.3 to 0.11.5
- [Release notes](https://github.com/rust-cli/env_logger/releases)
- [Changelog](https://github.com/rust-cli/env_logger/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-cli/env_logger/compare/v0.11.3...v0.11.5)

Updates `toml` from 0.8.15 to 0.8.16
- [Commits](https://github.com/toml-rs/toml/compare/toml-v0.8.15...toml-v0.8.16)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor
- dependency-name: tokio
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor
- dependency-name: quick-xml
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor
- dependency-name: serde_json
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor
- dependency-name: enumset
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor
- dependency-name: toml_edit
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor
- dependency-name: gilrs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor
- dependency-name: env_logger
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor
- dependency-name: toml
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 16:39:55 +02:00
dependabot[bot] 09dfc753f2 build(deps-dev): bump typescript-eslint in /web
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.0.0-alpha.54 to 8.0.0-alpha.57.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/HEAD/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 16:05:47 +02:00
dependabot[bot] 3e21740403 build(deps-dev): bump the npm-minor group in /web with 5 updates
Bumps the npm-minor group in /web with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.7.0` | `9.8.0` |
| [eslint](https://github.com/eslint/eslint) | `9.7.0` | `9.8.0` |
| [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) | `48.8.3` | `48.9.2` |
| [postcss](https://github.com/postcss/postcss) | `8.4.39` | `8.4.40` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `5.3.4` | `5.3.5` |


Updates `@eslint/js` from 9.7.0 to 9.8.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.8.0/packages/js)

Updates `eslint` from 9.7.0 to 9.8.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.7.0...v9.8.0)

Updates `eslint-plugin-jsdoc` from 48.8.3 to 48.9.2
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v48.8.3...v48.9.2)

Updates `postcss` from 8.4.39 to 8.4.40
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.39...8.4.40)

Updates `vite` from 5.3.4 to 5.3.5
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.3.5/packages/vite)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-minor
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-minor
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 15:54:45 +02:00
Nathan Adams 3de0279149 avm2: ByteArray should implement IDataInput2 and IDataOutput2. For some reason. 2024-07-29 10:32:45 +02:00
Nathan Adams 892c39f24d avm2: TouchEvent.getSamples and isToolButtonDown are AIR only 2024-07-29 10:32:45 +02:00
Nathan Adams de8e9b60f6 avm2: IME _private fields should be private 2024-07-29 10:32:45 +02:00
Nathan Adams bcba6250b9 avm2: NetStream.preloadEmbeddedData and setDRMAuthenticationCredentials are AIR only 2024-07-29 10:32:45 +02:00
Nathan Adams f804cf4689 avm2: FocusEvent.direction is AIR only 2024-07-29 10:32:45 +02:00
Nathan Adams dade26e93f avm2: Event.SUSPEND is AIR only 2024-07-29 10:32:45 +02:00
Nathan Adams ce9b2337f2 avm2: TextRenderer _private fields should be private 2024-07-29 10:32:45 +02:00
Nathan Adams 0f91196ad0 avm2: FileReference requestPermission and uploadUnencoded are AIR only 2024-07-29 10:32:45 +02:00
Nathan Adams b7e78f4ca6 avm2: MouseCursorData _private fields should be private 2024-07-29 10:32:45 +02:00
Nathan Adams cc1185182d avm2: FrameLabel should extend EventDispatcher 2024-07-29 10:32:45 +02:00
Nathan Adams c2084dfd7a avm2: Worker should extend EventDispatcher 2024-07-29 10:32:45 +02:00
Nathan Adams 2dec2029e0 avm2: GameInputControl should extend EventDispatcher 2024-07-29 10:32:45 +02:00
Nathan Adams 2e2b7deaa7 avm2: HTTPStatusEvent has AIR-only fields 2024-07-29 10:32:45 +02:00
Nathan Adams 3810ae6a53 avm2: Stage.loaderInfo should not have a setter 2024-07-29 10:32:45 +02:00
Nathan Adams a5096890e0 avm2: LoaderContext.allowLoadBytesCodeExecution is actually an AIR-only wrapper around allowCodeImport 2024-07-29 10:32:45 +02:00
Nathan Adams 4bcff2655e avm2: Security.APPLICATION is AIR only 2024-07-29 10:32:45 +02:00
Nathan Adams c152605cad avm2: TextLine.hasTabs should be a getter, not a function 2024-07-29 10:32:45 +02:00
Nathan Adams 9b01d51b72 avm2: A bunch of Keyboard constants are AIR only 2024-07-29 10:32:45 +02:00
Nathan Adams dcd3949093 avm2: URLRequestDefaults is AIR only 2024-07-29 10:32:45 +02:00
Nathan Adams f6ca9bcdac avm2: Also exclude interface based virtual properties from describeTypeJSON 2024-07-28 23:18:52 +02:00
Nathan Adams 4ae2a73b54 avm2: Check API version in describeTypeJSON 2024-07-28 23:18:52 +02:00
Nathan Adams db0fd879d2 avm2: Don't include interface methods in describeTypeJSON 2024-07-28 23:18:52 +02:00
Crowdin Bot 2ac4e7e62d chore: Update translations from Crowdin 2024-07-28 01:00:18 +02:00
Kamil Jarosz c7e8d3d9d5 desktop: Detect light theme on Linux
The function `start_dbus_theme_watcher` detects system theme on
freedesktop-compliant systems and starts a watcher which
listens for changes.
2024-07-27 22:56:18 +02:00
Kamil Jarosz 496a966c64 desktop: Add D-Bus support
This patch adds D-Bus support, implements the interface
`org.freedesktop.portal.Settings`, and provides `FreedesktopSettings`,
which facilitates access to freedesktop settings and its color-scheme.
2024-07-27 22:56:18 +02:00
Kamil Jarosz 52192fa9ca desktop: Add RuffleEvent::ThemeChanged 2024-07-27 22:56:18 +02:00
Kamil Jarosz 14d5b3ace3 desktop: Make GuiController::new async 2024-07-27 22:56:18 +02:00
Kamil Jarosz 96173b0501 web: Improve virtual keyboard support
This patch integrates the virtual keyboard with the newly added focus
management and removes Android-specific code, instead using generic
logic which takes advantage of improved focus support in SWFs.
2024-07-27 21:32:35 +02:00
Kamil Jarosz 53d2d16162 core: Add UiBackend::close_virtual_keyboard
This method may be used by backends that require explicit virtual
keyboard closing.
2024-07-27 21:32:35 +02:00
Kamil Jarosz e18ae830c1 web: Use browser focus events for focus management
This patch changes how the player focus is managed.

Before this patch, `instance.has_focus` was unrelated
to the current focus managed by the browser.
When the user clicked anywhere on the window, it was set to `false`,
and when the user clicked on the player, it was set to `true`.
This had two major issues.
1. When the user clicked on the player, `has_focus` was set to `false`,
   and then again to `true`. That was problematic when listening
   to focus change events.
2. Not using browser's focus makes it harder to integrate with Ruffle,
   i.e. tab out of Ruffle.

This patch uses browser's focus management to detect focus
and listen to focus events:
1. on `focusin` – FocusGained event is fired,
2. on `focusout` – FocusLost event is fired, and
3. on `pointerdown` – focus is manually set to the canvas.
The container has `tabindex` set to -1 in order to be focusable.

Virtual keyboard on web is represented as an input inside the container.
In order to preserve player focus when virtual keyboard is open,
this patch ensures that the container is focused and not the canvas.
This way, when the input is focused, the container does not lose its focus.
2024-07-27 21:32:35 +02:00
Lord-McSweeney ad4a65eee8 tests: Add test for linking root movie to non-zero id 2024-07-27 16:12:44 +03:00
Lord-McSweeney 6f0e641748 core: Link root movie to first invalid character ID registered, instead of always using character ID #0 2024-07-27 16:12:44 +03:00
Tom Schuster 93e86d977c avm2: Add flash.sensors.Geolocation stub 2024-07-27 14:13:04 +02:00
Tom Schuster 840128d81a avm2: flash.sensors.Accelerometer extends EventDispatcher 2024-07-27 14:13:04 +02:00
Tom Schuster 64c6782249 tests: Test Proxy hasProperty override is called for hasOwnProperty 2024-07-27 12:33:58 +02:00
Tom Schuster 1687739093 avm2: Call the Proxy hasProperty override for Object.hasOwnProperty 2024-07-27 12:33:58 +02:00
sleepycatcoding 61997e2cfb desktop: Do not resize the window while it is maximized 2024-07-27 11:06:37 +02:00
Kamil Jarosz 3f85265bc7 tests: Increase tolerance of image tests failing locally 2024-07-26 18:15:09 -04:00
Lord-McSweeney a4c6c3592b avm2: `StyleSheet` should extend `EventDispatcher` 2024-07-25 22:29:56 +03:00
Kamil Jarosz 8bfb50f3c1 tests: Add avm2/focus_events_mouse_focusable test
This test verifies the behavior of focus-related events when
trying to focus various interactive objects using mouse.
2024-07-25 16:38:06 +02:00
Kamil Jarosz b6ce6523de tests: Add avm2/focus_events_mixed_key_mouse test
This test verifies the behavior of focus-related events when
changing focus using keyboard and mouse interchangeably.
2024-07-25 16:38:06 +02:00
Kamil Jarosz be903d2cd5 tests: Add avm2/focus_events_mouse_same_object test
This test verifies the behavior of focus-related events when
changing focus to the same object using mouse.
2024-07-25 16:38:06 +02:00