Browse Source

chore: Update gtk and related dependencies

merge-requests/1327/merge
Kévin Commaille 3 years ago
parent
commit
fbc9b26d5c
No known key found for this signature in database
GPG Key ID: DD507DAE96E8245C
  1. 2
      CONTRIBUTING.md
  2. 415
      Cargo.lock
  3. 30
      Cargo.toml
  4. 16
      src/account_switcher/avatar_with_selection.rs
  5. 20
      src/account_switcher/mod.rs
  6. 16
      src/account_switcher/user_entry.rs
  7. 20
      src/application.rs
  8. 29
      src/components/action_button.rs
  9. 16
      src/components/audio_player.rs
  10. 36
      src/components/auth_dialog.rs
  11. 23
      src/components/avatar.rs
  12. 21
      src/components/badge.rs
  13. 27
      src/components/button_row.rs
  14. 26
      src/components/context_menu_bin.rs
  15. 2
      src/components/custom_entry.rs
  16. 22
      src/components/drag_overlay.rs
  17. 31
      src/components/editable_avatar.rs
  18. 27
      src/components/image_paintable.rs
  19. 59
      src/components/label_with_widgets.rs
  20. 26
      src/components/loading_listbox_row.rs
  21. 20
      src/components/location_viewer.rs
  22. 18
      src/components/media_content_viewer.rs
  23. 43
      src/components/overlapping_box.rs
  24. 18
      src/components/pill.rs
  25. 6
      src/components/reaction_chooser.rs
  26. 20
      src/components/room_title.rs
  27. 16
      src/components/spinner_button.rs
  28. 16
      src/components/video_player.rs
  29. 12
      src/components/video_player_renderer.rs
  30. 43
      src/contrib/qr_code.rs
  31. 43
      src/contrib/qr_code_scanner/camera.rs
  32. 63
      src/contrib/qr_code_scanner/camera_paintable.rs
  33. 19
      src/contrib/qr_code_scanner/mod.rs
  34. 14
      src/contrib/qr_code_scanner/qr_code_detector.rs
  35. 7
      src/error_page.rs
  36. 7
      src/greeter.rs
  37. 19
      src/login/advanced_dialog.rs
  38. 21
      src/login/homeserver_page.rs
  39. 26
      src/login/idp_button.rs
  40. 17
      src/login/method_page.rs
  41. 25
      src/login/mod.rs
  42. 2
      src/login/sso_page.rs
  43. 15
      src/session/account_settings/devices_page/device.rs
  44. 14
      src/session/account_settings/devices_page/device_item.rs
  45. 26
      src/session/account_settings/devices_page/device_list.rs
  46. 28
      src/session/account_settings/devices_page/device_row.rs
  47. 20
      src/session/account_settings/devices_page/mod.rs
  48. 22
      src/session/account_settings/mod.rs
  49. 16
      src/session/account_settings/notifications_page.rs
  50. 22
      src/session/account_settings/security_page/import_export_keys_subpage.rs
  51. 20
      src/session/account_settings/security_page/mod.rs
  52. 21
      src/session/account_settings/user_page/change_password_subpage.rs
  53. 22
      src/session/account_settings/user_page/deactivate_account_subpage.rs
  54. 25
      src/session/account_settings/user_page/mod.rs
  55. 23
      src/session/avatar.rs
  56. 25
      src/session/content/explore/mod.rs
  57. 25
      src/session/content/explore/public_room.rs
  58. 22
      src/session/content/explore/public_room_list.rs
  59. 35
      src/session/content/explore/public_room_row.rs
  60. 47
      src/session/content/explore/server.rs
  61. 22
      src/session/content/explore/server_list.rs
  62. 20
      src/session/content/explore/server_row.rs
  63. 21
      src/session/content/explore/servers_popover.rs
  64. 29
      src/session/content/invite.rs
  65. 17
      src/session/content/markdown_popover.rs
  66. 33
      src/session/content/mod.rs
  67. 19
      src/session/content/room_details/general_page/mod.rs
  68. 25
      src/session/content/room_details/invite_subpage/invitee.rs
  69. 40
      src/session/content/room_details/invite_subpage/invitee_list.rs
  70. 16
      src/session/content/room_details/invite_subpage/invitee_row.rs
  71. 21
      src/session/content/room_details/invite_subpage/mod.rs
  72. 21
      src/session/content/room_details/member_page/member_menu.rs
  73. 41
      src/session/content/room_details/member_page/members_list_view/extra_lists.rs
  74. 16
      src/session/content/room_details/member_page/members_list_view/item_row.rs
  75. 21
      src/session/content/room_details/member_page/members_list_view/member_row.rs
  76. 20
      src/session/content/room_details/member_page/members_list_view/membership_subpage_item.rs
  77. 21
      src/session/content/room_details/member_page/members_list_view/membership_subpage_row.rs
  78. 16
      src/session/content/room_details/member_page/members_list_view/mod.rs
  79. 22
      src/session/content/room_details/member_page/mod.rs
  80. 20
      src/session/content/room_details/mod.rs
  81. 27
      src/session/content/room_history/attachment_dialog.rs
  82. 25
      src/session/content/room_history/completion/completion_popover.rs
  83. 16
      src/session/content/room_history/completion/completion_row.rs
  84. 21
      src/session/content/room_history/divider_row.rs
  85. 24
      src/session/content/room_history/item_row.rs
  86. 16
      src/session/content/room_history/message_row/audio.rs
  87. 16
      src/session/content/room_history/message_row/content.rs
  88. 16
      src/session/content/room_history/message_row/file.rs
  89. 13
      src/session/content/room_history/message_row/location.rs
  90. 31
      src/session/content/room_history/message_row/media.rs
  91. 22
      src/session/content/room_history/message_row/mod.rs
  92. 16
      src/session/content/room_history/message_row/reaction.rs
  93. 2
      src/session/content/room_history/message_row/reaction_list.rs
  94. 2
      src/session/content/room_history/message_row/reply.rs
  95. 2
      src/session/content/room_history/message_row/text.rs
  96. 39
      src/session/content/room_history/mod.rs
  97. 2
      src/session/content/room_history/state_row/creation.rs
  98. 2
      src/session/content/room_history/state_row/mod.rs
  99. 2
      src/session/content/room_history/state_row/tombstone.rs
  100. 18
      src/session/content/room_history/typing_row.rs
  101. Some files were not shown because too many files have changed in this diff Show More

2
CONTRIBUTING.md

@ -21,7 +21,7 @@ and ask us any questions you might have.
### Prerequisites
Fractal is written in Rust, so you will need to have at least Rust 1.60 and Cargo available on your
Fractal is written in Rust, so you will need to have at least Rust 1.63 and Cargo available on your
system. You will also need to install the Rust nightly toolchain to be able to run our
[pre-commit hook](#pre-commit).

415
Cargo.lock generated

@ -109,22 +109,26 @@ dependencies = [
[[package]]
name = "ashpd"
version = "0.3.2"
version = "0.4.0-alpha.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dcc8ed0b5211687437636d8c95f6a608f4281d142101b3b5d314b38bfadd40f"
checksum = "045dde3c95c8f64855f286504bfb516f4d35f00b717023141b9e13daff2a73d9"
dependencies = [
"async-std",
"enumflags2",
"futures",
"futures-channel",
"futures-util",
"gdk4-wayland",
"gdk4-x11",
"gtk4",
"libc",
"once_cell",
"pipewire",
"rand 0.8.5",
"serde",
"serde_repr",
"tracing",
"zbus",
"url",
"zbus 3.3.0",
]
[[package]]
@ -169,6 +173,21 @@ dependencies = [
"slab",
]
[[package]]
name = "async-global-executor"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0da5b41ee986eed3f524c380e6d64965aea573882a8907682ad100f7859305ca"
dependencies = [
"async-channel",
"async-executor",
"async-io",
"async-lock",
"blocking",
"futures-lite",
"once_cell",
]
[[package]]
name = "async-io"
version = "1.9.0"
@ -215,6 +234,32 @@ dependencies = [
"syn 1.0.99",
]
[[package]]
name = "async-std"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
dependencies = [
"async-channel",
"async-global-executor",
"async-io",
"async-lock",
"crossbeam-utils",
"futures-channel",
"futures-core",
"futures-io",
"futures-lite",
"gloo-timers",
"kv-log-macro",
"log",
"memchr",
"once_cell",
"pin-project-lite",
"pin-utils",
"slab",
"wasm-bindgen-futures",
]
[[package]]
name = "async-stream"
version = "0.3.3"
@ -262,6 +307,18 @@ dependencies = [
"autocfg",
]
[[package]]
name = "atomic-waker"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
[[package]]
name = "atomic_refcell"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73b5e5f48b927f04e952dedc932f31995a65a0bf65ec971c74436e51bf6e970d"
[[package]]
name = "atty"
version = "0.2.14"
@ -387,6 +444,20 @@ dependencies = [
"generic-array",
]
[[package]]
name = "blocking"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc"
dependencies = [
"async-channel",
"async-task",
"atomic-waker",
"fastrand",
"futures-lite",
"once_cell",
]
[[package]]
name = "bumpalo"
version = "3.11.0"
@ -419,22 +490,23 @@ checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
[[package]]
name = "cairo-rs"
version = "0.15.12"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
checksum = "08f9ee4a4ca9239c9a839453dce04b7ddee2f859ec4cd7acd1f5703b68db549c"
dependencies = [
"bitflags",
"cairo-sys-rs",
"glib",
"libc",
"once_cell",
"thiserror",
]
[[package]]
name = "cairo-sys-rs"
version = "0.15.1"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
checksum = "5119ea655ec777b523f0b57279e70f8a4542f61b0e98a48f892b4ef043fd4c5d"
dependencies = [
"glib-sys",
"libc",
@ -697,6 +769,16 @@ dependencies = [
"typenum",
]
[[package]]
name = "ctor"
version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
dependencies = [
"quote 1.0.21",
"syn 1.0.99",
]
[[package]]
name = "ctr"
version = "0.9.1"
@ -1119,9 +1201,9 @@ dependencies = [
[[package]]
name = "fragile"
version = "1.2.1"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab"
checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa"
[[package]]
name = "fs2"
@ -1305,9 +1387,9 @@ checksum = "e837767888fca507f07e89c90e0b350da7bbb89170f67a4655dc9bdc4cca457b"
[[package]]
name = "gdk-pixbuf"
version = "0.15.11"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
checksum = "c0fb526c8c3a075eda15f961820edf3e15fe18576ac4fbabbb324e4cc6c421e6"
dependencies = [
"bitflags",
"gdk-pixbuf-sys",
@ -1318,9 +1400,9 @@ dependencies = [
[[package]]
name = "gdk-pixbuf-sys"
version = "0.15.10"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
checksum = "7df12d15c10c3c5a84d9fb4ba0e27659f6a2bdee4f27f8b17126da15d5ddd3f2"
dependencies = [
"gio-sys",
"glib-sys",
@ -1331,9 +1413,9 @@ dependencies = [
[[package]]
name = "gdk4"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fabb7cf843c26b085a5d68abb95d0c0bf27a9ae2eeff9c4adb503a1eb580876"
checksum = "66fe07f362c977c4684d1136a29f097208b3ccb2013ab6f441a3c60a046fd358"
dependencies = [
"bitflags",
"cairo-rs",
@ -1347,9 +1429,9 @@ dependencies = [
[[package]]
name = "gdk4-sys"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efe7dcb44f5c00aeabff3f69abfc5673de46559070f89bd3fbb7b66485d9cef2"
checksum = "ddcf9e3ab5f237bb641e7f2fccc4b26d5b86f111f0d62e27d452dc24964541c2"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@ -1364,9 +1446,9 @@ dependencies = [
[[package]]
name = "gdk4-wayland"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf81f00824c5f9862764c18ef061efe12b9c4f10614f74d3eaf1f18852c335e2"
checksum = "ca5c2a5b1a115ed6288679b984a1d67fbab57c930b6e75adeff5e15123c28fb7"
dependencies = [
"gdk4",
"gdk4-wayland-sys",
@ -1377,9 +1459,9 @@ dependencies = [
[[package]]
name = "gdk4-wayland-sys"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41f2375ec73e2ec6815cdf1da330ff2e020b46fab9057d1e06f44909f1789898"
checksum = "b809ee567e47b75efdd3591f46ee9bc3b458aeba6e0eee9c3af219bb167cc557"
dependencies = [
"glib-sys",
"libc",
@ -1388,9 +1470,9 @@ dependencies = [
[[package]]
name = "gdk4-x11"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be84e388c6b74cce3f9232904ce87ae1857ee3a41a20d9d8a16ae8792799b27c"
checksum = "7d1355a25b44d5c1b4b416ed4b9fdcf0c0791d4c276c22d68e3d844c2efba46b"
dependencies = [
"gdk4",
"gdk4-x11-sys",
@ -1401,9 +1483,9 @@ dependencies = [
[[package]]
name = "gdk4-x11-sys"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f85f9dabcc847c0733246822bebb476dcbb93f5a964d561b46b69f00fdbbf44"
checksum = "1e4e558577b6971d9121b6e881c22cff9256a4eb32af2c31fd2c5bae3094dbb7"
dependencies = [
"gdk4-sys",
"glib-sys",
@ -1498,26 +1580,29 @@ dependencies = [
[[package]]
name = "gio"
version = "0.15.12"
version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
checksum = "33c1debf8d0315d69be0153aa76249db3c858ef69b7778ad3cc669e6d370c485"
dependencies = [
"bitflags",
"futures-channel",
"futures-core",
"futures-io",
"futures-util",
"gio-sys",
"glib",
"libc",
"once_cell",
"pin-project-lite",
"smallvec",
"thiserror",
]
[[package]]
name = "gio-sys"
version = "0.15.10"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
checksum = "6da1bba9d3f2ab13a6e9932c40f240dc99ebc9f0bdc35cfb130d1a3df36f374c"
dependencies = [
"glib-sys",
"gobject-sys",
@ -1528,15 +1613,17 @@ dependencies = [
[[package]]
name = "glib"
version = "0.15.12"
version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
checksum = "d5abffa711471e015eb93d65d6ea20e7e9f6f7951fc0a1042280439319b2de06"
dependencies = [
"bitflags",
"futures-channel",
"futures-core",
"futures-executor",
"futures-task",
"futures-util",
"gio-sys",
"glib-macros",
"glib-sys",
"gobject-sys",
@ -1548,9 +1635,9 @@ dependencies = [
[[package]]
name = "glib-macros"
version = "0.15.11"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64"
checksum = "e195c1311fa6b04d7b896ea39385f6bd60ef5d25bf74a7c11c8c3f94f6c1a572"
dependencies = [
"anyhow",
"heck",
@ -1563,9 +1650,9 @@ dependencies = [
[[package]]
name = "glib-sys"
version = "0.15.10"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
checksum = "b33357bb421a77bd849f6a0bfcaf3b4b256a2577802971bb5dd522d530f27021"
dependencies = [
"libc",
"system-deps",
@ -1577,11 +1664,23 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
[[package]]
name = "gloo-timers"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9"
dependencies = [
"futures-channel",
"futures-core",
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "gobject-sys"
version = "0.15.10"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
checksum = "63ca11a57400f3d4fda594e002844be47900c9fb8b29e2155c6e37a1f24e51b3"
dependencies = [
"glib-sys",
"libc",
@ -1590,9 +1689,9 @@ dependencies = [
[[package]]
name = "graphene-rs"
version = "0.15.1"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c54f9fbbeefdb62c99f892dfca35f83991e2cb5b46a8dc2a715e58612f85570"
checksum = "95a8de4506a64776d90fedf9c28fdca5a7127f8cc9c78976e8184ac6f42685d8"
dependencies = [
"glib",
"graphene-sys",
@ -1601,9 +1700,9 @@ dependencies = [
[[package]]
name = "graphene-sys"
version = "0.15.10"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa691fc7337ba1df599afb55c3bcb85c04f1b3f17362570e9bb0ff0d1bc3028a"
checksum = "f2c952f764f02f8546fcc5d014bc78aa704c6d453c828c8b429121f704349163"
dependencies = [
"glib-sys",
"libc",
@ -1613,9 +1712,9 @@ dependencies = [
[[package]]
name = "gsk4"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05e9020d333280b3aa38d496495bfa9b50712eebf1ad63f0ec5bcddb5eb61be4"
checksum = "d4fc2b86c751a7fe9aad0fdba85937a6aace3a8453e0e2a08d2a31ce4bb8ae55"
dependencies = [
"bitflags",
"cairo-rs",
@ -1629,9 +1728,9 @@ dependencies = [
[[package]]
name = "gsk4-sys"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7add39ccf60078508c838643a2dcc91f045c46ed63b5ea6ab701b2e25bda3fea"
checksum = "2cb53e25cbbe3fa8e3e9db7c06d65085086fadbec4cd0aa567b2e2a4917db83d"
dependencies = [
"cairo-sys-rs",
"gdk4-sys",
@ -1645,9 +1744,9 @@ dependencies = [
[[package]]
name = "gst-plugin-gtk4"
version = "0.1.1"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e62e047edb1932887c20105c681203d138ebeb61b83b9e0b368cdec1d0fbc0cc"
checksum = "5f137f64f471b14ac7a4a237629d94aa8d084a523fbcd82de5b783aa1086037c"
dependencies = [
"fragile",
"gst-plugin-version-helper",
@ -1669,9 +1768,9 @@ dependencies = [
[[package]]
name = "gstreamer"
version = "0.18.8"
version = "0.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d66363bacf5e4f6eb281564adc2902e44c52ae5c45082423e7439e9012b75456"
checksum = "7e428081934c617115320750b7827f8f13131d9c3ae90b647c14a5d6019f47b4"
dependencies = [
"bitflags",
"cfg-if 1.0.0",
@ -1691,11 +1790,27 @@ dependencies = [
"thiserror",
]
[[package]]
name = "gstreamer-audio"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "affbf8dd22eb301f21a3ae659358a6e069850b35cab6522d40738c9500f85b17"
dependencies = [
"bitflags",
"cfg-if 1.0.0",
"glib",
"gstreamer",
"gstreamer-audio-sys",
"gstreamer-base",
"libc",
"once_cell",
]
[[package]]
name = "gstreamer-audio-sys"
version = "0.18.3"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a34258fb53c558c0f41dad194037cbeaabf49d347570df11b8bd1c4897cf7d7c"
checksum = "f6d6a3ad336150faf2125e29ac025b1fa152dca08b4cb2496f1e7d9c83b51e8b"
dependencies = [
"glib-sys",
"gobject-sys",
@ -1707,10 +1822,11 @@ dependencies = [
[[package]]
name = "gstreamer-base"
version = "0.18.0"
version = "0.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "224f35f36582407caf58ded74854526beeecc23d0cf64b8d1c3e00584ed6863f"
checksum = "326674197c010e91a98d0f55a032abe22b1fd932456dbcdc3415450b4b653817"
dependencies = [
"atomic_refcell",
"bitflags",
"cfg-if 1.0.0",
"glib",
@ -1721,9 +1837,9 @@ dependencies = [
[[package]]
name = "gstreamer-base-sys"
version = "0.18.0"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a083493c3c340e71fa7c66eebda016e9fafc03eb1b4804cf9b2bad61994b078e"
checksum = "cd55d3858fa65a99286c1cbe8db001f4ce5cff6a038f1c1253f5d99f840970de"
dependencies = [
"glib-sys",
"gobject-sys",
@ -1734,23 +1850,25 @@ dependencies = [
[[package]]
name = "gstreamer-pbutils"
version = "0.18.7"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "330684c49f79775d7acce8bef5a7a7475f02374c9c6cead39ced3ad423fc8ea9"
checksum = "2bd82a95f0b83c75a99aba9bf46e4ba7dc9fa4f88fc5b16e00d46d64a2b73726"
dependencies = [
"bitflags",
"glib",
"gstreamer",
"gstreamer-audio",
"gstreamer-pbutils-sys",
"gstreamer-video",
"libc",
"thiserror",
]
[[package]]
name = "gstreamer-pbutils-sys"
version = "0.18.0"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36f79839066fbcc6d1a8690b2f85d5cc5cdc0984f36d4054f5cc67a7ad3ab72d"
checksum = "67e770c4d56ad45f291a0332c475f5a6c9683a1e8c6ba733204fb8f94050d226"
dependencies = [
"glib-sys",
"gobject-sys",
@ -1763,9 +1881,9 @@ dependencies = [
[[package]]
name = "gstreamer-player"
version = "0.18.0"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f14ee02352ba73cadebe640bfb33f12fe8d03cbcad816a102d55a0251fb99bb"
checksum = "796e053b45803544c37a150ae6cbedc8019bc5f410dff78aa6041e7a1a969f2b"
dependencies = [
"bitflags",
"glib",
@ -1778,9 +1896,9 @@ dependencies = [
[[package]]
name = "gstreamer-player-sys"
version = "0.18.0"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f9b674b39a4d0e18710f6e3d2b109f1793d8028ee4e39da3909b55b4529d399"
checksum = "7930b84f995cf393906ee8499d7bf643aba1899ace61e20fee0ea416ad532f32"
dependencies = [
"glib-sys",
"gobject-sys",
@ -1792,9 +1910,9 @@ dependencies = [
[[package]]
name = "gstreamer-sys"
version = "0.18.0"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3517a65d3c2e6f8905b456eba5d53bda158d664863aef960b44f651cb7d33e2"
checksum = "fbaafc66df32b334d4aa28025fd5d83cadc971e1910205e140ea070f4ac4834f"
dependencies = [
"glib-sys",
"gobject-sys",
@ -1804,9 +1922,9 @@ dependencies = [
[[package]]
name = "gstreamer-video"
version = "0.18.7"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9418adfc72dafa1ad9eb106527ce4804887d101027c4528ec28c7d29cc899519"
checksum = "a9b96daff8a3d853588e61207afac81a4879f3972430f6609721601ab757d7fd"
dependencies = [
"bitflags",
"cfg-if 1.0.0",
@ -1821,9 +1939,9 @@ dependencies = [
[[package]]
name = "gstreamer-video-sys"
version = "0.18.3"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33331b1675e73b5b000c796354278eca7fdde9327015971d9f41afe28b96e0dc"
checksum = "066ee44cd8d84f19a18c646128c1890878c034d3fb9f34d8d5f07311bbd9f41f"
dependencies = [
"glib-sys",
"gobject-sys",
@ -1841,9 +1959,9 @@ checksum = "da5bf7748fd4cd0b2490df8debcc911809dbcbee4ece9531b96c29a9c729de5a"
[[package]]
name = "gtk4"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c64f0c2a3d80e899dc3febddad5bac193ffcf74a0fd7e31037f30dd34d6f7396"
checksum = "954e5a318221d69301c80f71cc2d2c15d0d4e259b1b253cad762e93f251bf6d6"
dependencies = [
"bitflags",
"cairo-rs",
@ -1864,24 +1982,23 @@ dependencies = [
[[package]]
name = "gtk4-macros"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fafbcc920af4eb677d7d164853e7040b9de5a22379c596f570190c675d45f7a7"
checksum = "ce5eb86364b216ee8c497b1121831168fb25130d3378495a135f8e5c1972db7b"
dependencies = [
"anyhow",
"proc-macro-crate",
"proc-macro-error",
"proc-macro2 1.0.43",
"quick-xml",
"quote 1.0.21",
"syn 1.0.99",
]
[[package]]
name = "gtk4-sys"
version = "0.4.8"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bc8006eea634b7c72da3ff79e24606e45f21b3b832a3c5a1f543f5f97eb0f63"
checksum = "0f04bd0b63d999a36ae53a916ee4b20ea64a3ef4732ca8a98b1fde4a22c1476c"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@ -2291,6 +2408,15 @@ dependencies = [
"serde",
]
[[package]]
name = "kv-log-macro"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
dependencies = [
"log",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
@ -2311,9 +2437,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
[[package]]
name = "libadwaita"
version = "0.2.0-alpha.3"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73815fa30ca62d1db2713fe87cfd1cea41cad076ccdece6bb8328032db152f47"
checksum = "ed92f031cf7f3d501b84f41e4d05aed6ebfd8eed59a8fc0cccbf51359e92c8e3"
dependencies = [
"bitflags",
"futures-channel",
@ -2330,9 +2456,9 @@ dependencies = [
[[package]]
name = "libadwaita-sys"
version = "0.2.0-alpha.3"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b91960ec236b6fecdace0491ae1e4aac938d1c6adffd5939f811f3ed6592a59e"
checksum = "9ec4243e86fb53d06df2461d543529a640c9a0fba2d4cc850b70e11a85f9d952"
dependencies = [
"gdk4-sys",
"gio-sys",
@ -2362,9 +2488,9 @@ dependencies = [
[[package]]
name = "libshumate"
version = "0.1.1"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98d639cc071d690528a31b989faf3dce5f283914fab6c63c73d374e25ebd3a70"
checksum = "622ecfa23bd46a7d25e41bb8d599b36316beae5eeee335871ce0d3eb969e2fe1"
dependencies = [
"gdk-pixbuf",
"gdk4",
@ -2378,9 +2504,9 @@ dependencies = [
[[package]]
name = "libshumate-sys"
version = "0.1.1"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a96fd7b69b23af97452a1b09ecc3eb012e6585f3ce18dc774a8a20b95ae9e57"
checksum = "110f43f278c5a47cc0d9a6c966a735167a37e5bf781e91e0c4967a0b5fdfb396"
dependencies = [
"gdk-pixbuf-sys",
"gdk4-sys",
@ -2457,6 +2583,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
dependencies = [
"cfg-if 1.0.0",
"value-bag",
]
[[package]]
@ -2860,6 +2987,18 @@ dependencies = [
"memoffset",
]
[[package]]
name = "nix"
version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc"
dependencies = [
"bitflags",
"cfg-if 1.0.0",
"libc",
"memoffset",
]
[[package]]
name = "nom"
version = "7.1.1"
@ -3045,7 +3184,7 @@ dependencies = [
"serde",
"sha2 0.10.5",
"tokio",
"zbus",
"zbus 2.3.2",
"zeroize",
]
@ -3102,9 +3241,9 @@ dependencies = [
[[package]]
name = "option-operations"
version = "0.4.1"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42b01597916c91a493b1e8a2fde64fec1764be3259abc1f06efc99c274f150a2"
checksum = "7c26d27bb1aeab65138e4bf7666045169d1717febcc9ff870166be8348b223d0"
dependencies = [
"paste",
]
@ -3121,11 +3260,12 @@ dependencies = [
[[package]]
name = "pango"
version = "0.15.10"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
checksum = "7208c60f224cf6e44c551df5ee2ef38f9da0fd29d7c5a0402000b8ab0520e798"
dependencies = [
"bitflags",
"gio",
"glib",
"libc",
"once_cell",
@ -3134,9 +3274,9 @@ dependencies = [
[[package]]
name = "pango-sys"
version = "0.15.10"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
checksum = "922441c228366ed98d3534b87bc7c987c50564094c3abbc3513717786419252d"
dependencies = [
"glib-sys",
"gobject-sys",
@ -3577,15 +3717,6 @@ dependencies = [
"image 0.23.14",
]
[[package]]
name = "quick-xml"
version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8533f14c8382aaad0d592c812ac3b826162128b65662331e1127b45c3d18536b"
dependencies = [
"memchr",
]
[[package]]
name = "quote"
version = "0.6.13"
@ -4211,9 +4342,9 @@ dependencies = [
[[package]]
name = "sourceview5"
version = "0.4.2"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c467112d482de39e310fa7ec5537325d13b4744d8ab9a069b7e51f6eb719364"
checksum = "922cc28db6bec169868319262dd932f6403e5ce95dad0d2bb6fcc9ac03be7f10"
dependencies = [
"bitflags",
"futures-channel",
@ -4230,9 +4361,9 @@ dependencies = [
[[package]]
name = "sourceview5-sys"
version = "0.4.2"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "304ab50228500689437d5a722af97ff5b77376866d655e5326a34069e1bf8d01"
checksum = "73277b2a53923aeecd212a89379dce7e6c687fe35fe6dd41d9b0d7b3d4c2eb0b"
dependencies = [
"gdk-pixbuf-sys",
"gdk4-sys",
@ -4721,6 +4852,7 @@ dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
"serde",
]
[[package]]
@ -4759,6 +4891,16 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
[[package]]
name = "value-bag"
version = "1.0.0-alpha.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
dependencies = [
"ctor",
"version_check",
]
[[package]]
name = "vcpkg"
version = "0.2.15"
@ -5135,7 +5277,46 @@ dependencies = [
"tracing",
"uds_windows",
"winapi",
"zbus_macros",
"zbus_macros 2.3.2",
"zbus_names",
"zvariant",
]
[[package]]
name = "zbus"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41ce2de393c874ba871292e881bf3c13a0d5eb38170ebab2e50b4c410eaa222b"
dependencies = [
"async-broadcast",
"async-channel",
"async-executor",
"async-io",
"async-lock",
"async-recursion",
"async-task",
"async-trait",
"byteorder",
"derivative",
"dirs",
"enumflags2",
"event-listener",
"futures-core",
"futures-sink",
"futures-util",
"hex",
"nix 0.24.2",
"once_cell",
"ordered-stream",
"rand 0.8.5",
"serde",
"serde_repr",
"sha1 0.6.1",
"static_assertions",
"tracing",
"uds_windows",
"winapi",
"zbus_macros 3.3.0",
"zbus_names",
"zvariant",
]
@ -5153,6 +5334,19 @@ dependencies = [
"syn 1.0.99",
]
[[package]]
name = "zbus_macros"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a13d08f5dc6cf725b693cb6ceacd43cd430ec0664a879188f29e7d7dcd98f96d"
dependencies = [
"proc-macro-crate",
"proc-macro2 1.0.43",
"quote 1.0.21",
"regex",
"syn 1.0.99",
]
[[package]]
name = "zbus_names"
version = "2.2.0"
@ -5187,23 +5381,24 @@ dependencies = [
[[package]]
name = "zvariant"
version = "3.6.0"
version = "3.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bd68e4e6432ef19df47d7e90e2e72b5e7e3d778e0ae3baddf12b951265cc758"
checksum = "b794fb7f59af4105697b0449ba31731ee5dbb3e773a17dbdf3d36206ea1b1644"
dependencies = [
"byteorder",
"enumflags2",
"libc",
"serde",
"static_assertions",
"url",
"zvariant_derive",
]
[[package]]
name = "zvariant_derive"
version = "3.6.0"
version = "3.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08e977eaa3af652f63d479ce50d924254ad76722a6289ec1a1eac3231ca30430"
checksum = "dd58d4b6c8e26d3dd2149c8c40c6613ef6451b9885ff1296d1ac86c388351a54"
dependencies = [
"proc-macro-crate",
"proc-macro2 1.0.43",

30
Cargo.toml

@ -3,7 +3,7 @@ name = "fractal"
version = "5.0.0-alpha1"
authors = ["Julian Sparber <julian@sparber.net>"]
edition = "2021"
rust-version = "1.60"
rust-version = "1.63"
[profile.release]
debug = true
@ -36,17 +36,17 @@ futures = "0.3"
rand = "0.8"
indexmap = "1.6.2"
qrcode = "0.12.0"
ashpd = { version = "0.3", features = [
"feature_gtk4",
"feature_pipewire",
"log",
ashpd = { version = "0.4.0-alpha.1", features = [
"gtk4",
"pipewire",
"tracing",
] }
gst = { version = "0.18", package = "gstreamer" }
gst_base = { version = "0.18", package = "gstreamer-base" }
gst_video = { version = "0.18", package = "gstreamer-video" }
gst_player = { version = "0.18", package = "gstreamer-player" }
gst_gtk = { version = "0.1.0", package = "gst-plugin-gtk4" }
gst_pbutils = { version = "0.18", package = "gstreamer-pbutils" }
gst = { version = "0.19.1", package = "gstreamer" }
gst_base = { version = "0.19.1", package = "gstreamer-base" }
gst_video = { version = "0.19.0", package = "gstreamer-video" }
gst_player = { version = "0.19.0", package = "gstreamer-player" }
gst_gtk = { version = "0.9.0", package = "gst-plugin-gtk4" }
gst_pbutils = { version = "0.19.0", package = "gstreamer-pbutils" }
image = "0.24"
regex = "1.5.4"
mime_guess = "2.0.3"
@ -61,21 +61,21 @@ djb_hash = "0.1.3"
[dependencies.sourceview]
package = "sourceview5"
version = "0.4.1"
version = "0.5.0"
[dependencies.gtk]
package = "gtk4"
version = "0.4.6"
version = "0.5.0"
features = ["v4_6"]
[dependencies.adw]
package = "libadwaita"
version = "0.2.0-alpha.3"
version = "0.2.0"
features = ["v1_2"]
[dependencies.shumate]
package = "libshumate"
version = "0.1.1"
version = "0.2.0"
[dependencies.matrix-sdk]
version = "0.6.0"

16
src/account_switcher/avatar_with_selection.rs

@ -66,26 +66,20 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"item" => self.child_avatar.set_item(value.get().unwrap()),
"size" => self.child_avatar.set_size(value.get().unwrap()),
"selected" => obj.set_selected(value.get().unwrap()),
"selected" => self.obj().set_selected(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"item" => self.child_avatar.item().to_value(),
"size" => self.child_avatar.size().to_value(),
"selected" => obj.is_selected().to_value(),
"selected" => self.obj().is_selected().to_value(),
_ => unimplemented!(),
}
}
@ -103,7 +97,7 @@ glib::wrapper! {
impl AvatarWithSelection {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create AvatarWithSelection")
glib::Object::new(&[])
}
pub fn set_selected(&self, selected: bool) {

20
src/account_switcher/mod.rs

@ -64,28 +64,22 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"pages" => obj.set_pages(value.get().unwrap()),
"pages" => self.obj().set_pages(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"pages" => obj.pages().to_value(),
"pages" => self.obj().pages().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
self.entries.connect_row_activated(move |_, row| {
row.activate_action("account-switcher.close", None).unwrap();
@ -116,7 +110,7 @@ glib::wrapper! {
impl AccountSwitcher {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create UserEntryRow")
glib::Object::new(&[])
}
pub fn set_pages(&self, pages: Option<gtk::SelectionModel>) {

16
src/account_switcher/user_entry.rs

@ -62,13 +62,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"selected" => obj.set_selected(value.get().unwrap()),
@ -76,7 +72,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"session" => obj.session().to_value(),
"selected" => obj.is_selected().to_value(),
@ -98,7 +96,7 @@ glib::wrapper! {
#[gtk::template_callbacks]
impl UserEntryRow {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)]).expect("Failed to create UserEntryRow")
glib::Object::builder().property("session", session).build()
}
pub fn set_selected(&self, selected: bool) {

20
src/application.rs

@ -40,8 +40,9 @@ mod imp {
impl ObjectImpl for Application {}
impl ApplicationImpl for Application {
fn activate(&self, app: &Self::Type) {
fn activate(&self) {
debug!("GtkApplication<Application>::activate");
let app = self.obj();
if let Some(window) = self.window.upgrade() {
window.show();
@ -49,7 +50,7 @@ mod imp {
return;
}
let window = Window::new(app);
let window = Window::new(&app);
self.window.set(Some(&window));
app.setup_gactions();
@ -73,9 +74,9 @@ mod imp {
app.get_main_window().present();
}
fn startup(&self, app: &Self::Type) {
fn startup(&self) {
debug!("GtkApplication<Application>::startup");
self.parent_startup(app);
self.parent_startup();
}
}
@ -90,12 +91,11 @@ glib::wrapper! {
impl Application {
pub fn new() -> Self {
glib::Object::new(&[
("application-id", &Some(config::APP_ID)),
("flags", &ApplicationFlags::default()),
("resource-base-path", &Some("/org/gnome/Fractal/")),
])
.expect("Application initialization failed")
glib::Object::builder()
.property("application-id", &Some(config::APP_ID))
.property("flags", &ApplicationFlags::default())
.property("resource-base-path", &Some("/org/gnome/Fractal/"))
.build()
}
fn get_main_window(&self) -> Window {

29
src/components/action_button.rs

@ -81,9 +81,8 @@ mod imp {
impl ObjectImpl for ActionButton {
fn signals() -> &'static [Signal] {
static SIGNALS: Lazy<Vec<Signal>> = Lazy::new(|| {
vec![Signal::builder("clicked", &[], <()>::static_type().into()).build()]
});
static SIGNALS: Lazy<Vec<Signal>> =
Lazy::new(|| vec![Signal::builder("clicked").build()]);
SIGNALS.as_ref()
}
@ -113,13 +112,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"icon-name" => obj.set_icon_name(value.get().unwrap()),
"state" => obj.set_state(value.get().unwrap()),
@ -129,7 +124,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"icon-name" => obj.icon_name().to_value(),
"state" => obj.state().to_value(),
@ -144,19 +141,19 @@ mod imp {
impl BinImpl for ActionButton {}
impl ActionableImpl for ActionButton {
fn action_name(&self, _obj: &Self::Type) -> Option<glib::GString> {
fn action_name(&self) -> Option<glib::GString> {
self.action_name.borrow().clone()
}
fn action_target_value(&self, _obj: &Self::Type) -> Option<glib::Variant> {
fn action_target_value(&self) -> Option<glib::Variant> {
self.action_target_value.borrow().clone()
}
fn set_action_name(&self, _obj: &Self::Type, name: Option<&str>) {
fn set_action_name(&self, name: Option<&str>) {
self.action_name.replace(name.map(Into::into));
}
fn set_action_target_value(&self, _obj: &Self::Type, value: Option<&glib::Variant>) {
fn set_action_target_value(&self, value: Option<&glib::Variant>) {
self.action_target_value
.replace(value.map(ToOwned::to_owned));
}
@ -172,7 +169,7 @@ glib::wrapper! {
#[gtk::template_callbacks]
impl ActionButton {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create ActionButton")
glib::Object::new(&[])
}
pub fn icon_name(&self) -> String {

16
src/components/audio_player.rs

@ -58,13 +58,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"media-file" => {
obj.set_media_file(value.get().unwrap());
@ -74,7 +70,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"media-file" => obj.media_file().to_value(),
"autoplay" => obj.autoplay().to_value(),
@ -97,7 +95,7 @@ glib::wrapper! {
impl AudioPlayer {
/// Create a new audio player.
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create AudioPlayer")
glib::Object::new(&[])
}
/// The media file that is playing.

36
src/components/auth_dialog.rs

@ -147,28 +147,23 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
_obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => self.session.set(value.get().ok().as_ref()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"session" => obj.session().to_value(),
"session" => self.obj().session().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.button_cancel
.connect_clicked(clone!(@weak obj => move |_| {
@ -190,13 +185,10 @@ mod imp {
fn signals() -> &'static [Signal] {
static SIGNALS: Lazy<Vec<Signal>> = Lazy::new(|| {
vec![Signal::builder(
"response",
&[bool::static_type().into()],
<()>::static_type().into(),
)
.action()
.build()]
vec![Signal::builder("response")
.param_types([bool::static_type()])
.action()
.build()]
});
SIGNALS.as_ref()
}
@ -214,8 +206,10 @@ glib::wrapper! {
impl AuthDialog {
pub fn new(transient_for: Option<&impl IsA<gtk::Window>>, session: &Session) -> Self {
glib::Object::new(&[("transient-for", &transient_for), ("session", session)])
.expect("Failed to create AuthDialog")
glib::Object::builder()
.property("transient-for", &transient_for)
.property("session", session)
.build()
}
pub fn session(&self) -> Session {
@ -353,7 +347,7 @@ impl AuthDialog {
self.disconnect(handler_id);
self.close();
result.then(|| ()).ok_or(AuthError::UserCancelled)
result.then_some(()).ok_or(AuthError::UserCancelled)
}
fn show_auth_error(&self, auth_error: &Option<ErrorBody>) {

23
src/components/avatar.rs

@ -61,13 +61,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"item" => obj.set_item(value.get().unwrap()),
"size" => obj.set_size(value.get().unwrap()),
@ -75,7 +71,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"item" => obj.item().to_value(),
"size" => obj.size().to_value(),
@ -83,9 +81,10 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
obj.connect_map(|avatar| {
fn constructed(&self) {
self.parent_constructed();
self.obj().connect_map(|avatar| {
avatar.request_custom_avatar();
});
}
@ -104,7 +103,7 @@ glib::wrapper! {
impl Avatar {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create Avatar")
glib::Object::new(&[])
}
pub fn set_size(&self, size: i32) {

21
src/components/badge.rs

@ -38,28 +38,23 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"power-level" => obj.set_power_level(value.get().unwrap()),
"power-level" => self.obj().set_power_level(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"power-level" => obj.power_level().to_value(),
"power-level" => self.obj().power_level().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
obj.add_css_class("badge");
let label = gtk::Label::new(Some("default"));
@ -82,7 +77,7 @@ glib::wrapper! {
impl Badge {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create Badge")
glib::Object::new(&[])
}
pub fn power_level(&self) -> PowerLevel {

27
src/components/button_row.rs

@ -38,9 +38,8 @@ mod imp {
impl ObjectImpl for ButtonRow {
fn signals() -> &'static [Signal] {
static SIGNALS: Lazy<Vec<Signal>> = Lazy::new(|| {
vec![Signal::builder("activated", &[], <()>::static_type().into()).build()]
});
static SIGNALS: Lazy<Vec<Signal>> =
Lazy::new(|| vec![Signal::builder("activated").build()]);
SIGNALS.as_ref()
}
@ -58,30 +57,24 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"to-subpage" => obj.set_to_subpage(value.get().unwrap()),
"to-subpage" => self.obj().set_to_subpage(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"to-subpage" => obj.to_subpage().to_value(),
"to-subpage" => self.obj().to_subpage().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
obj.connect_parent_notify(|obj| {
self.obj().connect_parent_notify(|obj| {
if let Some(listbox) = obj
.parent()
.as_ref()
@ -109,7 +102,7 @@ glib::wrapper! {
impl ButtonRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create ButtonRow")
glib::Object::new(&[])
}
pub fn to_subpage(&self) -> bool {

26
src/components/context_menu_bin.rs

@ -90,27 +90,23 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"popover" => obj.set_popover(value.get().unwrap()),
"popover" => self.obj().set_popover(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"popover" => obj.popover().to_value(),
"popover" => self.obj().popover().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
fn constructed(&self) {
let obj = self.obj();
self.long_press_gesture
.connect_pressed(clone!(@weak obj => move |gesture, x, y| {
gesture.set_state(gtk::EventSequenceState::Claimed);
@ -128,10 +124,10 @@ mod imp {
obj.open_menu_at(x as i32, y as i32);
}),
);
self.parent_constructed(obj);
self.parent_constructed();
}
fn dispose(&self, _obj: &Self::Type) {
fn dispose(&self) {
if let Some(popover) = self.popover.take() {
popover.unparent()
}
@ -224,7 +220,7 @@ pub trait ContextMenuBinImpl: BinImpl {
/// Called when the menu was requested to open but before the menu is shown.
///
/// This method should be used to set the popover dynamically.
fn menu_opened(&self, _obj: &Self::Type) {}
fn menu_opened(&self) {}
}
unsafe impl<T> IsSubclassable<T> for ContextMenuBin
@ -248,5 +244,5 @@ where
T::Type: IsA<ContextMenuBin>,
{
let this = this.downcast_ref::<T::Type>().unwrap();
this.imp().menu_opened(this)
this.imp().menu_opened()
}

2
src/components/custom_entry.rs

@ -34,7 +34,7 @@ glib::wrapper! {
impl CustomEntry {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create CustomEntry")
glib::Object::new(&[])
}
}

22
src/components/drag_overlay.rs

@ -58,7 +58,7 @@ mod imp {
PROPERTIES.as_ref()
}
fn property(&self, _obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"title" => self.status.title().to_value(),
"child" => self.overlay.child().to_value(),
@ -67,25 +67,21 @@ mod imp {
}
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"title" => self.status.set_title(value.get().unwrap()),
"child" => self
.overlay
.set_child(value.get::<gtk::Widget>().ok().as_ref()),
"drop-target" => obj.set_drop_target(&value.get().unwrap()),
"drop-target" => self.obj().set_drop_target(&value.get().unwrap()),
_ => unimplemented!(),
};
}
fn constructed(&self, obj: &Self::Type) {
self.overlay.set_parent(obj);
fn constructed(&self) {
let obj = self.obj();
self.overlay.set_parent(&*obj);
self.overlay.add_overlay(&self.revealer);
self.revealer.set_can_target(false);
@ -98,7 +94,7 @@ mod imp {
self.revealer.set_child(Some(&self.status));
}
fn dispose(&self, _obj: &Self::Type) {
fn dispose(&self) {
self.overlay.unparent();
}
}
@ -113,7 +109,7 @@ glib::wrapper! {
impl Default for DragOverlay {
fn default() -> Self {
glib::Object::new(&[]).unwrap()
glib::Object::new(&[])
}
}

31
src/components/editable_avatar.rs

@ -72,13 +72,10 @@ mod imp {
fn signals() -> &'static [Signal] {
static SIGNALS: Lazy<Vec<Signal>> = Lazy::new(|| {
vec![
Signal::builder(
"edit-avatar",
&[gio::File::static_type().into()],
<()>::static_type().into(),
)
.build(),
Signal::builder("remove-avatar", &[], <()>::static_type().into()).build(),
Signal::builder("edit-avatar")
.param_types([gio::File::static_type()])
.build(),
Signal::builder("remove-avatar").build(),
]
});
SIGNALS.as_ref()
@ -155,13 +152,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"avatar" => obj.set_avatar(value.get().unwrap()),
"editable" => obj.set_editable(value.get().unwrap()),
@ -174,7 +167,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"avatar" => obj.avatar().to_value(),
"editable" => obj.editable().to_value(),
@ -188,8 +183,8 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
self.button_remove.set_extra_classes(&["error"]);
}
@ -208,7 +203,7 @@ glib::wrapper! {
impl EditableAvatar {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create EditableAvatar")
glib::Object::new(&[])
}
pub fn avatar(&self) -> Option<Avatar> {

27
src/components/image_paintable.rs

@ -102,7 +102,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"is-animation" => obj.is_animation().to_value(),
"width" => obj.intrinsic_width().to_value(),
@ -113,7 +115,7 @@ mod imp {
}
impl PaintableImpl for ImagePaintable {
fn intrinsic_height(&self, _paintable: &Self::Type) -> i32 {
fn intrinsic_height(&self) -> i32 {
self.frame
.borrow()
.as_ref()
@ -121,7 +123,7 @@ mod imp {
.unwrap_or(-1)
}
fn intrinsic_width(&self, _paintable: &Self::Type) -> i32 {
fn intrinsic_width(&self) -> i32 {
self.frame
.borrow()
.as_ref()
@ -129,13 +131,7 @@ mod imp {
.unwrap_or(-1)
}
fn snapshot(
&self,
_paintable: &Self::Type,
snapshot: &gdk::Snapshot,
width: f64,
height: f64,
) {
fn snapshot(&self, snapshot: &gdk::Snapshot, width: f64, height: f64) {
if let Some(texture) = &*self.frame.borrow() {
texture.snapshot(snapshot, width, height);
} else {
@ -147,22 +143,22 @@ mod imp {
}
}
fn flags(&self, paintable: &Self::Type) -> gdk::PaintableFlags {
if paintable.is_animation() {
fn flags(&self) -> gdk::PaintableFlags {
if self.obj().is_animation() {
gdk::PaintableFlags::SIZE
} else {
gdk::PaintableFlags::SIZE | gdk::PaintableFlags::CONTENTS
}
}
fn current_image(&self, paintable: &Self::Type) -> gdk::Paintable {
fn current_image(&self) -> gdk::Paintable {
self.frame
.borrow()
.clone()
.map(|frame| frame.upcast())
.or_else(|| {
let snapshot = gtk::Snapshot::new();
paintable.snapshot(snapshot.upcast_ref(), 1.0, 1.0);
self.obj().snapshot(&snapshot, 1.0, 1.0);
snapshot.to_paintable(None)
})
@ -188,8 +184,7 @@ impl ImagePaintable {
reader: R,
format: Option<ImageFormat>,
) -> Result<Self, Box<dyn std::error::Error>> {
let obj =
glib::Object::new::<Self>(&[]).expect("Failed to create object of type ImagePaintable");
let obj = glib::Object::new::<Self>(&[]);
let mut reader = image::io::Reader::new(reader);

59
src/components/label_with_widgets.rs

@ -71,13 +71,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"label" => obj.set_label(value.get().unwrap()),
"placeholder" => obj.set_placeholder(value.get().unwrap()),
@ -87,7 +83,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"label" => obj.label().to_value(),
"placeholder" => obj.placeholder().to_value(),
@ -97,11 +95,12 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
let label = &self.label;
label.set_parent(obj);
label.set_parent(&*obj);
label.set_wrap(true);
label.set_wrap_mode(pango::WrapMode::WordChar);
label.set_xalign(0.0);
@ -115,7 +114,7 @@ mod imp {
);
}
fn dispose(&self, _obj: &Self::Type) {
fn dispose(&self) {
self.label.unparent();
for widget in self.widgets.borrow().iter() {
widget.unparent();
@ -124,12 +123,7 @@ mod imp {
}
impl WidgetImpl for LabelWithWidgets {
fn measure(
&self,
_widget: &Self::Type,
orientation: gtk::Orientation,
for_size: i32,
) -> (i32, i32, i32, i32) {
fn measure(&self, orientation: gtk::Orientation, for_size: i32) -> (i32, i32, i32, i32) {
let (mut minimum, mut natural, mut minimum_baseline, mut natural_baseline) =
if self.label.should_layout() {
self.label.measure(orientation, for_size)
@ -156,30 +150,26 @@ mod imp {
(minimum, natural, minimum_baseline, natural_baseline)
}
fn size_allocate(&self, widget: &Self::Type, width: i32, height: i32, baseline: i32) {
fn size_allocate(&self, width: i32, height: i32, baseline: i32) {
let obj = self.obj();
// The order of the widget allocation is important.
widget.allocate_shapes();
obj.allocate_shapes();
self.label.allocate(width, height, baseline, None);
widget.allocate_children();
obj.allocate_children();
}
fn request_mode(&self, _widget: &Self::Type) -> gtk::SizeRequestMode {
fn request_mode(&self) -> gtk::SizeRequestMode {
self.label.request_mode()
}
}
impl BuildableImpl for LabelWithWidgets {
fn add_child(
&self,
buildable: &Self::Type,
builder: &gtk::Builder,
child: &glib::Object,
type_: Option<&str>,
) {
fn add_child(&self, builder: &gtk::Builder, child: &glib::Object, type_: Option<&str>) {
if let Some(child) = child.downcast_ref::<gtk::Widget>() {
buildable.append_child(child);
self.obj().append_child(child);
} else {
self.parent_add_child(buildable, builder, child, type_)
self.parent_add_child(builder, child, type_)
}
}
}
@ -197,13 +187,12 @@ glib::wrapper! {
impl LabelWithWidgets {
/// Create an empty `LabelWithWidget`.
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create LabelWithWidgets")
glib::Object::new(&[])
}
/// Create a `LabelWithWidget` with the given label and widgets.
pub fn with_label_and_widgets<P: IsA<gtk::Widget>>(label: &str, widgets: Vec<P>) -> Self {
let obj: Self =
glib::Object::new(&[("label", &label)]).expect("Failed to create LabelWithWidgets");
let obj: Self = glib::Object::builder().property("label", &label).build();
// FIXME: use a property for widgets
obj.set_widgets(widgets);
obj
@ -330,7 +319,7 @@ impl LabelWithWidgets {
let widgets = priv_.widgets.borrow();
let widgets_sizes = priv_.widgets_sizes.borrow();
let mut run_iter = priv_.label.layout().iter().unwrap();
let mut run_iter = priv_.label.layout().iter();
let mut i = 0;
loop {
if let Some(run) = run_iter.run_readonly() {

26
src/components/loading_listbox_row.rs

@ -64,13 +64,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"loading" => {
obj.set_loading(value.get().unwrap());
@ -82,7 +78,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"loading" => obj.is_loading().to_value(),
"error" => obj.error().to_value(),
@ -91,14 +89,14 @@ mod imp {
}
fn signals() -> &'static [Signal] {
static SIGNALS: Lazy<Vec<Signal>> = Lazy::new(|| {
vec![Signal::builder("retry", &[], <()>::static_type().into()).build()]
});
static SIGNALS: Lazy<Vec<Signal>> =
Lazy::new(|| vec![Signal::builder("retry").build()]);
SIGNALS.as_ref()
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.retry_button
.connect_clicked(clone!(@weak obj => move |_| {
@ -126,7 +124,7 @@ impl Default for LoadingListBoxRow {
impl LoadingListBoxRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create LoadingListBoxRow")
glib::Object::new(&[])
}
pub fn is_loading(&self) -> bool {

20
src/components/location_viewer.rs

@ -55,27 +55,21 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"compact" => obj.set_compact(value.get().unwrap()),
"compact" => self.obj().set_compact(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"compact" => obj.compact().to_value(),
"compact" => self.obj().compact().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
fn constructed(&self) {
self.marker.set_child(Some(&*self.marker_img));
let registry = shumate::MapSourceRegistry::with_defaults();
@ -90,7 +84,7 @@ mod imp {
// Hide the scale
self.map.scale().unwrap().hide();
self.parent_constructed(obj);
self.parent_constructed();
}
}
@ -108,7 +102,7 @@ impl LocationViewer {
/// Create a new location message.
#[allow(clippy::new_without_default)]
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create LocationViewer")
glib::Object::new(&[])
}
/// Whether to display this location in a compact format.

18
src/components/media_content_viewer.rs

@ -94,22 +94,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"autoplay" => obj.set_autoplay(value.get().unwrap()),
"autoplay" => self.obj().set_autoplay(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"autoplay" => obj.autoplay().to_value(),
"autoplay" => self.obj().autoplay().to_value(),
_ => unimplemented!(),
}
}
@ -127,7 +121,9 @@ glib::wrapper! {
impl MediaContentViewer {
pub fn new(autoplay: bool) -> Self {
glib::Object::new(&[("autoplay", &autoplay)]).expect("Failed to create MediaContentViewer")
glib::Object::builder()
.property("autoplay", &autoplay)
.build()
}
pub fn stop_playback(&self) {

43
src/components/overlapping_box.rs

@ -60,13 +60,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"overlap" => obj.set_overlap(value.get().unwrap()),
"orientation" => obj.set_orientation(value.get().unwrap()),
@ -74,7 +70,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"overlap" => obj.overlap().to_value(),
"orientation" => obj.orientation().to_value(),
@ -82,7 +80,7 @@ mod imp {
}
}
fn dispose(&self, _obj: &Self::Type) {
fn dispose(&self) {
for widget in self.widgets.borrow().iter() {
widget.unparent();
}
@ -90,15 +88,10 @@ mod imp {
}
impl WidgetImpl for OverlappingBox {
fn measure(
&self,
widget: &Self::Type,
orientation: gtk::Orientation,
_for_size: i32,
) -> (i32, i32, i32, i32) {
fn measure(&self, orientation: gtk::Orientation, _for_size: i32) -> (i32, i32, i32, i32) {
let mut size = 0;
let overlap = self.overlap.get() as i32;
let self_orientation = widget.orientation();
let self_orientation = self.obj().orientation();
for child in self.widgets.borrow().iter() {
if !child.should_layout() {
@ -124,9 +117,9 @@ mod imp {
(size, size, -1, -1)
}
fn size_allocate(&self, widget: &Self::Type, width: i32, height: i32, _baseline: i32) {
fn size_allocate(&self, width: i32, height: i32, _baseline: i32) {
let overlap = self.overlap.get() as i32;
let self_orientation = widget.orientation();
let self_orientation = self.obj().orientation();
let mut pos = 0;
for child in self.widgets.borrow().iter() {
@ -162,17 +155,11 @@ mod imp {
}
impl BuildableImpl for OverlappingBox {
fn add_child(
&self,
buildable: &Self::Type,
builder: &gtk::Builder,
child: &glib::Object,
type_: Option<&str>,
) {
fn add_child(&self, builder: &gtk::Builder, child: &glib::Object, type_: Option<&str>) {
if let Some(child) = child.downcast_ref::<gtk::Widget>() {
buildable.append(child);
self.obj().append(child);
} else {
self.parent_add_child(buildable, builder, child, type_)
self.parent_add_child(builder, child, type_)
}
}
}
@ -192,7 +179,7 @@ glib::wrapper! {
impl OverlappingBox {
/// Create an empty `OverlappingBox`.
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create OverlappingBox")
glib::Object::new(&[])
}
/// The size by which the widgets overlap.

18
src/components/pill.rs

@ -68,13 +68,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"user" => obj.set_user(value.get().unwrap()),
"room" => obj.set_room(value.get().unwrap()),
@ -82,7 +78,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"user" => obj.user().to_value(),
"room" => obj.room().to_value(),
@ -104,11 +102,11 @@ glib::wrapper! {
impl Pill {
pub fn for_user(user: &User) -> Self {
glib::Object::new(&[("user", user)]).expect("Failed to create Pill")
glib::Object::builder().property("user", user).build()
}
pub fn for_room(room: &Room) -> Self {
glib::Object::new(&[("room", room)]).expect("Failed to create Pill")
glib::Object::builder().property("room", room).build()
}
pub fn set_user(&self, user: Option<User>) {

6
src/components/reaction_chooser.rs

@ -82,8 +82,8 @@ mod imp {
}
impl ObjectImpl for ReactionChooser {
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let grid = &self.reaction_grid;
for reaction_item in QUICK_REACTIONS {
@ -114,7 +114,7 @@ glib::wrapper! {
impl ReactionChooser {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create ReactionChooser")
glib::Object::new(&[])
}
pub fn reactions(&self) -> Option<ReactionList> {

20
src/components/room_title.rs

@ -62,7 +62,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"title" => obj.title().to_value(),
"subtitle" => obj.subtitle().to_value(),
@ -70,13 +72,9 @@ mod imp {
}
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"title" => obj.set_title(value.get().unwrap()),
"subtitle" => obj.set_subtitle(value.get().unwrap()),
@ -84,8 +82,8 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
}
}
@ -100,7 +98,7 @@ glib::wrapper! {
impl RoomTitle {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create RoomTitle")
glib::Object::new(&[])
}
pub fn set_title(&self, title: Option<String>) {

16
src/components/spinner_button.rs

@ -51,13 +51,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"label" => obj.set_label(value.get().unwrap()),
"loading" => obj.set_loading(value.get().unwrap()),
@ -65,7 +61,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"label" => obj.label().to_value(),
"loading" => obj.loading().to_value(),
@ -87,7 +85,7 @@ glib::wrapper! {
impl SpinnerButton {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create SpinnerButton")
glib::Object::new(&[])
}
pub fn set_label(&self, label: &str) {

16
src/components/video_player.rs

@ -69,20 +69,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"compact" => obj.set_compact(value.get().unwrap()),
"compact" => self.obj().set_compact(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"compact" => obj.compact().to_value(),
"player" => obj.player().to_value(),
@ -107,7 +103,7 @@ impl VideoPlayer {
/// Create a new video player.
#[allow(clippy::new_without_default)]
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create VideoPlayer")
glib::Object::new(&[])
}
pub fn player(&self) -> &Player {

12
src/components/video_player_renderer.rs

@ -36,20 +36,20 @@ mod imp {
PROPERTIES.as_ref()
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"paintable" => obj.paintable().to_value(),
"paintable" => self.obj().paintable().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
obj.imp().sink.set(PaintableSink::new(None)).unwrap();
fn constructed(&self) {
self.sink.set(PaintableSink::new(None)).unwrap();
}
}
impl PlayerVideoRendererImpl for VideoPlayerRenderer {
fn create_video_sink(&self, _obj: &Self::Type, _player: &Player) -> gst::Element {
fn create_video_sink(&self, _player: &Player) -> gst::Element {
self.sink.get().unwrap().to_owned().upcast()
}
}
@ -63,7 +63,7 @@ glib::wrapper! {
impl VideoPlayerRenderer {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create VideoPlayerRenderer")
glib::Object::new(&[])
}
pub fn paintable(&self) -> gdk::Paintable {

43
src/contrib/qr_code.rs

@ -33,9 +33,9 @@ pub(crate) mod imp {
}
impl ObjectImpl for QRCode {
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
obj.add_css_class("qrcode");
fn constructed(&self) {
self.parent_constructed();
self.obj().add_css_class("qrcode");
}
fn properties() -> &'static [glib::ParamSpec] {
@ -53,30 +53,25 @@ pub(crate) mod imp {
PROPERTIES.as_ref()
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"block-size" => obj.block_size().to_value(),
"block-size" => self.obj().block_size().to_value(),
_ => unreachable!(),
}
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"block-size" => obj.set_block_size(value.get().unwrap()),
"block-size" => self.obj().set_block_size(value.get().unwrap()),
_ => unreachable!(),
}
}
}
impl WidgetImpl for QRCode {
fn snapshot(&self, widget: &Self::Type, snapshot: &gtk::Snapshot) {
let square_width = widget.width() as f32 / self.data.borrow().width as f32;
let square_height = widget.height() as f32 / self.data.borrow().height as f32;
fn snapshot(&self, snapshot: &gtk::Snapshot) {
let obj = self.obj();
let square_width = obj.width() as f32 / self.data.borrow().width as f32;
let square_height = obj.height() as f32 / self.data.borrow().height as f32;
self.data
.borrow()
@ -86,10 +81,9 @@ pub(crate) mod imp {
.for_each(|(y, line)| {
line.iter().enumerate().for_each(|(x, is_dark)| {
let color = if *is_dark {
widget.style_context().color()
obj.style_context().color()
} else {
widget
.style_context()
obj.style_context()
.lookup_color("background")
.unwrap_or_else(|| gdk::RGBA::new(0.0, 0.0, 0.0, 0.0))
};
@ -105,13 +99,8 @@ pub(crate) mod imp {
});
}
fn measure(
&self,
widget: &Self::Type,
orientation: gtk::Orientation,
for_size: i32,
) -> (i32, i32, i32, i32) {
let stride = widget.block_size() as i32;
fn measure(&self, orientation: gtk::Orientation, for_size: i32) -> (i32, i32, i32, i32) {
let stride = self.obj().block_size() as i32;
let minimum = match orientation {
gtk::Orientation::Horizontal => self.data.borrow().width * stride,
@ -150,7 +139,7 @@ glib::wrapper! {
impl Default for QRCode {
fn default() -> Self {
glib::Object::new(&[]).unwrap()
glib::Object::new(&[])
}
}

43
src/contrib/qr_code_scanner/camera.rs

@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
use std::{os::unix::prelude::RawFd, time::Duration};
use std::time::Duration;
use ashpd::{desktop::camera, zbus};
use ashpd::desktop::camera;
use gtk::{glib, subclass::prelude::*};
use once_cell::sync::Lazy;
use tokio::time::timeout;
@ -9,15 +9,10 @@ use tokio::time::timeout;
use super::camera_paintable::CameraPaintable;
mod imp {
use std::sync::Arc;
use tokio::sync::OnceCell;
use super::*;
#[derive(Debug, Default)]
pub struct Camera {
pub connection: Arc<OnceCell<zbus::Connection>>,
pub paintable: glib::WeakRef<CameraPaintable>,
}
@ -38,40 +33,23 @@ impl Camera {
/// Create a new `Camera`. You should consider using `Camera::default()` to
/// get a shared Object
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create a Camera")
}
async fn connection(&self) -> Result<zbus::Connection, ashpd::Error> {
let connection = self.imp().connection.clone();
Ok(connection
.get_or_try_init(zbus::Connection::session)
.await?
.clone())
}
async fn file_descriptor(&self) -> Result<(RawFd, Option<u32>), ashpd::Error> {
let proxy = camera::CameraProxy::new(&self.connection().await?).await?;
proxy.access_camera().await?;
let stream_fd = proxy.open_pipe_wire_remote().await?;
let node_id = camera::pipewire_node_id(stream_fd).await.ok().flatten();
Ok((stream_fd, node_id))
glib::Object::new(&[])
}
pub async fn has_camera(&self) -> Result<bool, ashpd::Error> {
let proxy = camera::CameraProxy::new(&self.connection().await?).await?;
let camera = camera::Camera::new().await?;
if proxy.is_camera_present().await? {
if camera.is_present().await? {
// Apparently is-camera-present doesn't report the correct value: https://github.com/flatpak/xdg-desktop-portal/issues/486#issuecomment-897636589
// We need to use the proper timeout based on the executer
if glib::MainContext::default().is_owner() {
Ok(
crate::utils::timeout_future(Duration::from_secs(1), self.file_descriptor())
crate::utils::timeout_future(Duration::from_secs(1), camera::request())
.await
.is_ok(),
)
} else {
Ok(timeout(Duration::from_secs(1), self.file_descriptor())
Ok(timeout(Duration::from_secs(1), camera::request())
.await
.is_ok())
}
@ -94,8 +72,8 @@ impl Camera {
async fn paintable_internal(&self) -> Option<CameraPaintable> {
if let Some(paintable) = self.imp().paintable.upgrade() {
Some(paintable)
} else if let Ok((stream_fd, node_id)) = self.file_descriptor().await {
let paintable = CameraPaintable::new(stream_fd, node_id).await;
} else if let Ok(Some((stream_fd, streams))) = camera::request().await {
let paintable = CameraPaintable::new(stream_fd, streams).await;
self.imp().paintable.set(Some(&paintable));
Some(paintable)
} else {
@ -106,8 +84,7 @@ impl Camera {
impl Default for Camera {
fn default() -> Self {
static CAMERA: Lazy<Camera> =
Lazy::new(|| glib::Object::new(&[]).expect("Failed to create a Camera"));
static CAMERA: Lazy<Camera> = Lazy::new(Camera::new);
CAMERA.to_owned()
}

63
src/contrib/qr_code_scanner/camera_paintable.rs

@ -15,6 +15,7 @@ use std::{
sync::{Arc, Mutex},
};
use ashpd::desktop::camera;
use gst::prelude::*;
use gtk::{
gdk, glib,
@ -53,26 +54,23 @@ mod imp {
}
impl ObjectImpl for CameraPaintable {
fn dispose(&self, paintable: &Self::Type) {
paintable.set_pipeline(None);
fn dispose(&self) {
self.obj().set_pipeline(None);
}
fn signals() -> &'static [subclass::Signal] {
static SIGNALS: Lazy<Vec<subclass::Signal>> = Lazy::new(|| {
vec![subclass::Signal::builder(
"code-detected",
&[QrVerificationDataBoxed::static_type().into()],
glib::Type::UNIT.into(),
)
.flags(glib::SignalFlags::RUN_FIRST)
.build()]
vec![subclass::Signal::builder("code-detected")
.param_types([QrVerificationDataBoxed::static_type()])
.run_first()
.build()]
});
SIGNALS.as_ref()
}
}
impl PaintableImpl for CameraPaintable {
fn intrinsic_height(&self, _paintable: &Self::Type) -> i32 {
fn intrinsic_height(&self) -> i32 {
if let Some(paintable) = self.sink_paintable.borrow().as_ref() {
paintable.intrinsic_height()
} else {
@ -80,7 +78,7 @@ mod imp {
}
}
fn intrinsic_width(&self, _paintable: &Self::Type) -> i32 {
fn intrinsic_width(&self) -> i32 {
if let Some(paintable) = self.sink_paintable.borrow().as_ref() {
paintable.intrinsic_width()
} else {
@ -88,13 +86,7 @@ mod imp {
}
}
fn snapshot(
&self,
_paintable: &Self::Type,
snapshot: &gdk::Snapshot,
width: f64,
height: f64,
) {
fn snapshot(&self, snapshot: &gdk::Snapshot, width: f64, height: f64) {
let snapshot = snapshot.downcast_ref::<gtk::Snapshot>().unwrap();
if let Some(image) = self.sink_paintable.borrow().as_ref() {
@ -104,7 +96,7 @@ mod imp {
let image_aspect = image.intrinsic_aspect_ratio();
if image_aspect == 0.0 {
image.snapshot(snapshot.upcast_ref(), width, height);
image.snapshot(snapshot, width, height);
return;
};
@ -119,7 +111,7 @@ mod imp {
);
snapshot.translate(&p);
image.snapshot(snapshot.upcast_ref(), new_width, new_height);
image.snapshot(snapshot, new_width, new_height);
}
}
}
@ -130,31 +122,32 @@ glib::wrapper! {
}
impl CameraPaintable {
pub async fn new<F: AsRawFd>(fd: F, node_id: Option<u32>) -> Self {
let self_: Self = glib::Object::new(&[]).expect("Failed to create a CameraPaintable");
pub async fn new<F: AsRawFd>(fd: F, streams: Vec<camera::Stream>) -> Self {
let self_: Self = glib::Object::new(&[]);
self_.set_pipewire_fd(fd, node_id).await;
self_.set_pipewire_fd(fd, streams).await;
self_
}
async fn set_pipewire_fd<F: AsRawFd>(&self, fd: F, node_id: Option<u32>) {
async fn set_pipewire_fd<F: AsRawFd>(&self, fd: F, streams: Vec<camera::Stream>) {
// Make sure that the previous pipeline is closed so that we can be sure that it
// doesn't use the webcam
self.set_pipeline(None);
let pipewire_src = gst::ElementFactory::make("pipewiresrc", None).unwrap();
pipewire_src.set_property("fd", &fd.as_raw_fd());
if let Some(node_id) = node_id {
pipewire_src.set_property("path", &node_id.to_string());
let mut src_builder =
gst::ElementFactory::make("pipewiresrc").property("fd", fd.as_raw_fd());
if let Some(node_id) = streams.get(0).map(|s| s.node_id()) {
src_builder = src_builder.property("path", node_id);
}
let pipewire_src = src_builder.build().unwrap();
let pipeline = gst::Pipeline::new(None);
let detector = QrCodeDetector::new(self.create_sender()).upcast();
let tee = gst::ElementFactory::make("tee", None).unwrap();
let queue = gst::ElementFactory::make("queue", None).unwrap();
let videoconvert1 = gst::ElementFactory::make("videoconvert", None).unwrap();
let videoconvert2 = gst::ElementFactory::make("videoconvert", None).unwrap();
let tee = gst::ElementFactory::make("tee").build().unwrap();
let queue = gst::ElementFactory::make("queue").build().unwrap();
let videoconvert1 = gst::ElementFactory::make("videoconvert").build().unwrap();
let videoconvert2 = gst::ElementFactory::make("videoconvert").build().unwrap();
let src_pad = queue.static_pad("src").unwrap();
// Reduce the number of frames we use to get the qrcode from
@ -169,8 +162,10 @@ impl CameraPaintable {
}
});
let queue2 = gst::ElementFactory::make("queue", None).unwrap();
let sink = gst::ElementFactory::make("gtk4paintablesink", None).unwrap();
let queue2 = gst::ElementFactory::make("queue").build().unwrap();
let sink = gst::ElementFactory::make("gtk4paintablesink")
.build()
.unwrap();
pipeline
.add_many(&[

19
src/contrib/qr_code_scanner/mod.rs

@ -44,21 +44,18 @@ mod imp {
impl ObjectImpl for QrCodeScanner {
fn signals() -> &'static [subclass::Signal] {
static SIGNALS: Lazy<Vec<subclass::Signal>> = Lazy::new(|| {
vec![subclass::Signal::builder(
"code-detected",
&[QrVerificationDataBoxed::static_type().into()],
glib::Type::UNIT.into(),
)
.flags(glib::SignalFlags::RUN_FIRST)
.build()]
vec![subclass::Signal::builder("code-detected")
.param_types([QrVerificationDataBoxed::static_type()])
.run_first()
.build()]
});
SIGNALS.as_ref()
}
}
impl WidgetImpl for QrCodeScanner {
fn unmap(&self, widget: &Self::Type) {
self.parent_unmap(widget);
widget.stop();
fn unmap(&self) {
self.parent_unmap();
self.obj().stop();
}
}
impl BinImpl for QrCodeScanner {}
@ -71,7 +68,7 @@ glib::wrapper! {
impl QrCodeScanner {
#[allow(clippy::new_without_default)]
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create a QrCodeScanner")
glib::Object::new(&[])
}
pub fn stop(&self) {

14
src/contrib/qr_code_scanner/qr_code_detector.rs

@ -70,11 +70,7 @@ mod imp {
}
}
impl BaseSinkImpl for QrCodeDetector {
fn set_caps(
&self,
_element: &Self::Type,
caps: &gst::Caps,
) -> Result<(), gst::LoggableError> {
fn set_caps(&self, caps: &gst::Caps) -> Result<(), gst::LoggableError> {
let video_info = gst_video::VideoInfo::from_caps(caps).unwrap();
let mut info = self.info.lock().unwrap();
info.replace(video_info);
@ -83,11 +79,7 @@ mod imp {
}
}
impl VideoSinkImpl for QrCodeDetector {
fn show_frame(
&self,
_element: &Self::Type,
buffer: &gst::Buffer,
) -> Result<gst::FlowSuccess, gst::FlowError> {
fn show_frame(&self, buffer: &gst::Buffer) -> Result<gst::FlowSuccess, gst::FlowError> {
let now = std::time::Instant::now();
if let Some(info) = &*self.info.lock().unwrap() {
@ -137,7 +129,7 @@ unsafe impl Sync for QrCodeDetector {}
impl QrCodeDetector {
pub fn new(sender: Sender<Action>) -> Self {
let sink = glib::Object::new::<Self>(&[]).expect("Failed to create a QrCodeDetector");
let sink = glib::Object::new::<Self>(&[]);
sink.imp().sender.lock().unwrap().replace(sender);
sink
}

7
src/error_page.rs

@ -62,8 +62,9 @@ mod imp {
}
impl ObjectImpl for ErrorPage {
fn constructed(&self, obj: &Self::Type) {
obj.action_set_enabled("error-page.remove-secret-error-session", false);
fn constructed(&self) {
self.obj()
.action_set_enabled("error-page.remove-secret-error-session", false);
}
}
@ -79,7 +80,7 @@ glib::wrapper! {
impl ErrorPage {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create ErrorPage")
glib::Object::new(&[])
}
pub fn display_secret_error(&self, message: &str, item: Option<oo7::Item>) {

7
src/greeter.rs

@ -40,8 +40,9 @@ mod imp {
}
impl ObjectImpl for Greeter {
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
let monitor = gio::NetworkMonitor::default();
monitor.connect_network_changed(clone!(@weak obj => move |_, _| {
@ -64,7 +65,7 @@ glib::wrapper! {
impl Greeter {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create Greeter")
glib::Object::new(&[])
}
pub fn default_widget(&self) -> gtk::Widget {

19
src/login/advanced_dialog.rs

@ -52,22 +52,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"autodiscovery" => obj.autodiscovery().to_value(),
"autodiscovery" => self.obj().autodiscovery().to_value(),
_ => unimplemented!(),
}
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"autodiscovery" => obj.set_autodiscovery(value.get().unwrap()),
"autodiscovery" => self.obj().set_autodiscovery(value.get().unwrap()),
_ => unimplemented!(),
}
}
@ -86,8 +80,9 @@ glib::wrapper! {
impl LoginAdvancedDialog {
pub fn new(window: &gtk::Window) -> Self {
glib::Object::new(&[("transient-for", window)])
.expect("Failed to create LoginAdvancedDialog")
glib::Object::builder()
.property("transient-for", window)
.build()
}
pub fn autodiscovery(&self) -> bool {

21
src/login/homeserver_page.rs

@ -55,28 +55,23 @@ mod imp {
PROPERTIES.as_ref()
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"autodiscovery" => obj.autodiscovery().to_value(),
"autodiscovery" => self.obj().autodiscovery().to_value(),
_ => unimplemented!(),
}
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"autodiscovery" => obj.set_autodiscovery(value.get().unwrap()),
"autodiscovery" => self.obj().set_autodiscovery(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.homeserver_entry
.connect_entry_activated(clone!(@weak obj => move|_| {
@ -101,7 +96,7 @@ glib::wrapper! {
impl LoginHomeserverPage {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create LoginHomeserverPage")
glib::Object::new(&[])
}
pub fn autodiscovery(&self) -> bool {

26
src/login/idp_button.rs

@ -146,7 +146,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"id" => obj.id().unwrap().to_value(),
"brand" => obj.brand().to_value(),
@ -154,13 +156,9 @@ mod imp {
}
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"brand" => {
obj.set_brand(value.get().unwrap());
@ -172,8 +170,10 @@ mod imp {
};
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
adw::StyleManager::default()
.connect_dark_notify(clone!(@weak obj => move |_| obj.update_icon()));
obj.update_icon();
@ -216,8 +216,10 @@ impl IdpButton {
let gidp: IdpBrand = idp.brand.as_ref()?.try_into().ok()?;
Some(
glib::Object::new(&[("brand", &gidp), ("id", &idp.id)])
.expect("Failed to create IdpButton"),
glib::Object::builder()
.property("brand", &gidp)
.property("id", &idp.id)
.build(),
)
}
}

17
src/login/method_page.rs

@ -71,7 +71,7 @@ mod imp {
PROPERTIES.as_ref()
}
fn property(&self, _obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"homeserver" => self.homeserver.borrow().to_value(),
"autodiscovery" => self.autodiscovery.get().to_value(),
@ -79,13 +79,7 @@ mod imp {
}
}
fn set_property(
&self,
_obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"homeserver" => {
self.homeserver.replace(value.get().ok());
@ -95,8 +89,9 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.username_entry
.connect_entry_activated(clone!(@weak obj => move|_| {
@ -131,7 +126,7 @@ glib::wrapper! {
impl LoginMethodPage {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create LoginMethodPage")
glib::Object::new(&[])
}
/// The username entered by the user.

25
src/login/mod.rs

@ -134,7 +134,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"homeserver" => obj.homeserver_pretty().to_value(),
"autodiscovery" => obj.autodiscovery().to_value(),
@ -142,23 +144,18 @@ mod imp {
}
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"autodiscovery" => obj.set_autodiscovery(value.get().unwrap()),
"autodiscovery" => self.obj().set_autodiscovery(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
fn constructed(&self) {
let obj = self.obj();
obj.action_set_enabled("login.next", false);
self.parent_constructed(obj);
self.parent_constructed();
let monitor = gio::NetworkMonitor::default();
monitor.connect_network_changed(clone!(@weak obj => move |_, _| {
@ -174,8 +171,8 @@ mod imp {
obj.update_network_state();
}
fn dispose(&self, obj: &Self::Type) {
obj.prune_created_client();
fn dispose(&self) {
self.obj().prune_created_client();
}
}
@ -192,7 +189,7 @@ glib::wrapper! {
impl Login {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create Login")
glib::Object::new(&[])
}
fn parent_window(&self) -> Window {

2
src/login/sso_page.rs

@ -40,7 +40,7 @@ glib::wrapper! {
impl LoginSsoPage {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create LoginSsoPage")
glib::Object::new(&[])
}
}

15
src/session/account_settings/devices_page/device.rs

@ -83,20 +83,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
_obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => self.session.set(value.get().ok().as_ref()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"session" => obj.session().to_value(),
"display-name" => obj.display_name().to_value(),
@ -121,8 +117,7 @@ impl Device {
device: MatrixDevice,
crypto_device: Option<CryptoDevice>,
) -> Self {
let obj: Self =
glib::Object::new(&[("session", session)]).expect("Failed to create Device");
let obj: Self = glib::Object::builder().property("session", session).build();
obj.set_matrix_device(device, crypto_device);

14
src/session/account_settings/devices_page/device_item.rs

@ -51,13 +51,7 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
_obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"type" => {
let type_ = value.get::<BoxedItemType>().unwrap();
@ -77,17 +71,17 @@ glib::wrapper! {
impl Item {
pub fn for_device(device: Device) -> Self {
let type_ = BoxedItemType(ItemType::Device(device));
glib::Object::new(&[("type", &type_)]).expect("Failed to create Item")
glib::Object::builder().property("type", &type_).build()
}
pub fn for_error(error: String) -> Self {
let type_ = BoxedItemType(ItemType::Error(error));
glib::Object::new(&[("type", &type_)]).expect("Failed to create Item")
glib::Object::builder().property("type", &type_).build()
}
pub fn for_loading_spinner() -> Self {
let type_ = BoxedItemType(ItemType::LoadingSpinner);
glib::Object::new(&[("type", &type_)]).expect("Failed to create Item")
glib::Object::builder().property("type", &type_).build()
}
pub fn type_(&self) -> &ItemType {

26
src/session/account_settings/devices_page/device_list.rs

@ -56,20 +56,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
_obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => self.session.set(value.get().ok().as_ref()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"session" => obj.session().to_value(),
"current-device" => obj.current_device().to_value(),
@ -77,20 +73,20 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
obj.load_devices();
fn constructed(&self) {
self.parent_constructed();
self.obj().load_devices();
}
}
impl ListModelImpl for DeviceList {
fn item_type(&self, _list_model: &Self::Type) -> glib::Type {
fn item_type(&self) -> glib::Type {
DeviceItem::static_type()
}
fn n_items(&self, _list_model: &Self::Type) -> u32 {
fn n_items(&self) -> u32 {
self.list.borrow().len() as u32
}
fn item(&self, _list_model: &Self::Type, position: u32) -> Option<glib::Object> {
fn item(&self, position: u32) -> Option<glib::Object> {
self.list
.borrow()
.get(position as usize)
@ -108,7 +104,7 @@ glib::wrapper! {
impl DeviceList {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)]).expect("Failed to create DeviceList")
glib::Object::builder().property("session", session).build()
}
pub fn session(&self) -> Session {

28
src/session/account_settings/devices_page/device_row.rs

@ -75,13 +75,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"device" => {
obj.set_device(value.get().unwrap());
@ -93,7 +89,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"device" => obj.device().to_value(),
"is-current-device" => obj.is_current_device().to_value(),
@ -101,8 +99,9 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
match &obj.is_current_device() {
false => self
@ -140,11 +139,10 @@ glib::wrapper! {
impl DeviceRow {
pub fn new(device: &Device, is_current_device: bool) -> Self {
glib::Object::new(&[
("device", device),
("is-current-device", &is_current_device),
])
.expect("Failed to create DeviceRow")
glib::Object::builder()
.property("device", device)
.property("is-current-device", &is_current_device)
.build()
}
pub fn device(&self) -> Option<Device> {

20
src/session/account_settings/devices_page/mod.rs

@ -64,22 +64,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"user" => obj.set_user(value.get().unwrap()),
"user" => self.obj().set_user(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"user" => obj.user().to_value(),
"user" => self.obj().user().to_value(),
_ => unimplemented!(),
}
}
@ -97,8 +91,10 @@ glib::wrapper! {
impl DevicesPage {
pub fn new(parent_window: &Option<gtk::Window>, user: &User) -> Self {
glib::Object::new(&[("transient-for", parent_window), ("user", user)])
.expect("Failed to create DevicesPage")
glib::Object::builder()
.property("transient-for", parent_window)
.property("user", user)
.build()
}
pub fn user(&self) -> Option<User> {

22
src/session/account_settings/mod.rs

@ -80,27 +80,21 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"session" => self.obj().set_session(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"session" => obj.session().to_value(),
"session" => self.obj().session().to_value(),
_ => unimplemented!(),
}
}
fn dispose(&self, _obj: &Self::Type) {
fn dispose(&self) {
if let Some(session) = self.session.upgrade() {
if let Some(handler) = self.session_handler.take() {
session.disconnect(handler);
@ -123,8 +117,10 @@ glib::wrapper! {
impl AccountSettings {
pub fn new(parent_window: Option<&impl IsA<gtk::Window>>, session: &Session) -> Self {
glib::Object::new(&[("transient-for", &parent_window), ("session", session)])
.expect("Failed to create AccountSettings")
glib::Object::builder()
.property("transient-for", &parent_window)
.property("session", session)
.build()
}
pub fn session(&self) -> Option<Session> {

16
src/session/account_settings/notifications_page.rs

@ -91,13 +91,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"account-enabled" => obj.sync_account_enabled(value.get().unwrap()),
@ -106,7 +102,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"session" => obj.session().to_value(),
"account-enabled" => obj.account_enabled().to_value(),
@ -129,7 +127,7 @@ glib::wrapper! {
impl NotificationsPage {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)]).expect("Failed to create NotificationsPage")
glib::Object::builder().property("session", session).build()
}
/// The current session.

22
src/session/account_settings/security_page/import_export_keys_subpage.rs

@ -112,13 +112,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"mode" => obj.set_mode(value.get().unwrap()),
@ -126,7 +122,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"session" => obj.session().to_value(),
"file-path" => obj
@ -139,8 +137,9 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.passphrase
.connect_changed(clone!(@weak obj => move|_| {
@ -169,8 +168,7 @@ glib::wrapper! {
#[gtk::template_callbacks]
impl ImportExportKeysSubpage {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)])
.expect("Failed to create ImportExportKeysSubpage")
glib::Object::builder().property("session", session).build()
}
pub fn session(&self) -> Option<Session> {

20
src/session/account_settings/security_page/mod.rs

@ -52,22 +52,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"session" => self.obj().set_session(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"session" => obj.session().to_value(),
"session" => self.obj().session().to_value(),
_ => unimplemented!(),
}
}
@ -86,8 +80,10 @@ glib::wrapper! {
#[gtk::template_callbacks]
impl SecurityPage {
pub fn new(parent_window: &Option<gtk::Window>, session: &Session) -> Self {
glib::Object::new(&[("transient-for", parent_window), ("session", session)])
.expect("Failed to create SecurityPage")
glib::Object::builder()
.property("transient-for", parent_window)
.property("session", session)
.build()
}
pub fn session(&self) -> Option<Session> {

21
src/session/account_settings/user_page/change_password_subpage.rs

@ -82,28 +82,23 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"session" => self.obj().set_session(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"session" => obj.session().to_value(),
"session" => self.obj().session().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.password_progress.set_min_value(0.0);
self.password_progress.set_max_value(5.0);
@ -140,7 +135,7 @@ glib::wrapper! {
#[gtk::template_callbacks]
impl ChangePasswordSubpage {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)]).expect("Failed to create ChangePasswordSubpage")
glib::Object::builder().property("session", session).build()
}
pub fn session(&self) -> Option<Session> {

22
src/session/account_settings/user_page/deactivate_account_subpage.rs

@ -59,28 +59,23 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"session" => self.obj().set_session(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"session" => obj.session().to_value(),
"session" => self.obj().session().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.confirmation
.connect_entry_activated(clone!(@weak obj => move|_| {
@ -117,8 +112,7 @@ glib::wrapper! {
impl DeactivateAccountSubpage {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)])
.expect("Failed to create DeactivateAccountSubpage")
glib::Object::builder().property("session", session).build()
}
pub fn session(&self) -> Option<Session> {

25
src/session/account_settings/user_page/mod.rs

@ -91,28 +91,23 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"session" => self.obj().set_session(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"session" => obj.session().to_value(),
"session" => self.obj().session().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
obj.init_avatar();
obj.init_display_name();
@ -133,8 +128,10 @@ glib::wrapper! {
#[gtk::template_callbacks]
impl UserPage {
pub fn new(parent_window: &Option<gtk::Window>, session: &Session) -> Self {
glib::Object::new(&[("transient-for", parent_window), ("session", session)])
.expect("Failed to create UserPage")
glib::Object::builder()
.property("transient-for", parent_window)
.property("session", session)
.build()
}
pub fn session(&self) -> Option<Session> {

23
src/session/avatar.rs

@ -90,13 +90,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"needed-size" => obj.set_needed_size(value.get().unwrap()),
"url" => obj.set_url(value.get::<&str>().ok().map(Into::into)),
@ -106,7 +102,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"image" => obj.image().to_value(),
"needed-size" => obj.needed_size().to_value(),
@ -131,11 +129,10 @@ glib::wrapper! {
impl Avatar {
pub fn new(session: &Session, url: Option<&MxcUri>) -> Self {
glib::Object::new(&[
("session", session),
("url", &url.map(|url| url.to_string())),
])
.expect("Failed to create Avatar")
glib::Object::builder()
.property("session", session)
.property("url", &url.map(|url| url.to_string()))
.build()
}
fn session(&self) -> Session {

25
src/session/content/explore/mod.rs

@ -90,35 +90,30 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"compact" => self.compact.set(value.get().unwrap()),
"session" => obj.set_session(value.get().unwrap()),
"session" => self.obj().set_session(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"compact" => self.compact.get().to_value(),
"session" => obj.session().to_value(),
"session" => self.obj().session().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
let adj = self.scrolled_window.vadjustment();
adj.connect_value_changed(clone!(@weak obj => move |adj| {
adj.connect_value_changed(clone!(@weak self as imp => move |adj| {
if adj.upper() - adj.value() < adj.page_size() * 2.0 {
if let Some(public_room_list) = &*obj.imp().public_room_list.borrow() {
if let Some(public_room_list) = &*imp.public_room_list.borrow() {
public_room_list.load_public_rooms(false);
}
}
@ -151,7 +146,7 @@ glib::wrapper! {
impl Explore {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)]).expect("Failed to create Explore")
glib::Object::builder().property("session", session).build()
}
pub fn session(&self) -> Option<Session> {

25
src/session/content/explore/public_room.rs

@ -65,20 +65,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
_obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"room-list" => self.room_list.set(value.get().unwrap()).unwrap(),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"room-list" => obj.room_list().to_value(),
"avatar" => obj.avatar().to_value(),
@ -88,8 +84,9 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.avatar
.set(Avatar::new(&obj.room_list().session(), None))
@ -105,9 +102,9 @@ mod imp {
}));
}
fn dispose(&self, obj: &Self::Type) {
fn dispose(&self) {
if let Some(handler_id) = self.room_handler.take() {
obj.room_list().disconnect(handler_id);
self.obj().room_list().disconnect(handler_id);
}
}
}
@ -119,7 +116,9 @@ glib::wrapper! {
impl PublicRoom {
pub fn new(room_list: &RoomList) -> Self {
glib::Object::new(&[("room-list", room_list)]).expect("Failed to create Room")
glib::Object::builder()
.property("room-list", room_list)
.build()
}
pub fn room_list(&self) -> &RoomList {

22
src/session/content/explore/public_room_list.rs

@ -81,20 +81,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"session" => self.obj().set_session(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"session" => obj.session().to_value(),
"loading" => obj.loading().to_value(),
@ -106,13 +102,13 @@ mod imp {
}
impl ListModelImpl for PublicRoomList {
fn item_type(&self, _list_model: &Self::Type) -> glib::Type {
fn item_type(&self) -> glib::Type {
PublicRoom::static_type()
}
fn n_items(&self, _list_model: &Self::Type) -> u32 {
fn n_items(&self) -> u32 {
self.list.borrow().len() as u32
}
fn item(&self, _list_model: &Self::Type, position: u32) -> Option<glib::Object> {
fn item(&self, position: u32) -> Option<glib::Object> {
self.list
.borrow()
.get(position as usize)
@ -129,7 +125,7 @@ glib::wrapper! {
impl PublicRoomList {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)]).expect("Failed to create PublicRoomList")
glib::Object::builder().property("session", session).build()
}
pub fn session(&self) -> Option<Session> {

35
src/session/content/explore/public_room_row.rs

@ -66,36 +66,31 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"public-room" => obj.set_public_room(value.get().unwrap()),
"public-room" => self.obj().set_public_room(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"public-room" => obj.public_room().to_value(),
"public-room" => self.obj().public_room().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
self.button.connect_clicked(clone!(@weak obj => move |_| {
if let Some(public_room) = &*obj.imp().public_room.borrow() {
public_room.join_or_view();
};
}));
fn constructed(&self) {
self.parent_constructed();
self.button
.connect_clicked(clone!(@weak self as imp => move |_| {
if let Some(public_room) = &*imp.public_room.borrow() {
public_room.join_or_view();
};
}));
}
fn dispose(&self, obj: &Self::Type) {
if let Some(ref old_public_room) = obj.public_room() {
fn dispose(&self) {
if let Some(ref old_public_room) = self.obj().public_room() {
if let Some(handler) = self.pending_handler.take() {
old_public_room.disconnect(handler);
}
@ -117,7 +112,7 @@ glib::wrapper! {
impl PublicRoomRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create PublicRoomRow")
glib::Object::new(&[])
}
pub fn public_room(&self) -> Option<PublicRoom> {

47
src/session/content/explore/server.rs

@ -65,13 +65,7 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
_obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"name" => self.name.set(value.get().unwrap()).unwrap(),
"network" => self.network.set(value.get().unwrap()).unwrap(),
@ -85,7 +79,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"name" => obj.name().to_value(),
"network" => obj.network().to_value(),
@ -103,32 +99,29 @@ glib::wrapper! {
impl Server {
pub fn with_default_server(name: &str) -> Self {
glib::Object::new(&[
("name", &name),
("network", &"matrix"),
("deletable", &false),
])
.expect("Failed to create Server")
glib::Object::builder()
.property("name", &name)
.property("network", &"matrix")
.property("deletable", &false)
.build()
}
pub fn with_third_party_protocol(protocol_id: &str, instance: &ProtocolInstance) -> Self {
let name = format!("{} ({protocol_id})", instance.desc);
glib::Object::new(&[
("name", &name),
("network", &instance.instance_id),
("deletable", &false),
])
.expect("Failed to create Server")
glib::Object::builder()
.property("name", &name)
.property("network", &instance.instance_id)
.property("deletable", &false)
.build()
}
pub fn with_custom_matrix_server(server: &str) -> Self {
glib::Object::new(&[
("name", &server),
("network", &"matrix"),
("server", &server),
("deletable", &true),
])
.expect("Failed to create Server")
glib::Object::builder()
.property("name", &server)
.property("network", &"matrix")
.property("server", &server)
.property("deletable", &true)
.build()
}
pub fn name(&self) -> &str {

22
src/session/content/explore/server_list.rs

@ -41,37 +41,31 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"session" => self.obj().set_session(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"session" => obj.session().to_value(),
"session" => self.obj().session().to_value(),
_ => unimplemented!(),
}
}
}
impl ListModelImpl for ServerList {
fn item_type(&self, _list_model: &Self::Type) -> glib::Type {
fn item_type(&self) -> glib::Type {
Server::static_type()
}
fn n_items(&self, _list_model: &Self::Type) -> u32 {
fn n_items(&self) -> u32 {
self.list.borrow().len() as u32
}
fn item(&self, _list_model: &Self::Type, position: u32) -> Option<glib::Object> {
fn item(&self, position: u32) -> Option<glib::Object> {
self.list
.borrow()
.get(position as usize)
@ -89,7 +83,7 @@ glib::wrapper! {
impl ServerList {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)]).expect("Failed to create ServerList")
glib::Object::builder().property("session", session).build()
}
fn set_session(&self, session: Session) {

20
src/session/content/explore/server_row.rs

@ -47,30 +47,24 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
_obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"server" => self.server.set(value.get().unwrap()).unwrap(),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"server" => obj.server().to_value(),
"server" => self.obj().server().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
if let Some(server) = obj.server().and_then(|s| s.server()) {
if let Some(server) = self.obj().server().and_then(|s| s.server()) {
self.remove_button.set_action_target(Some(&server));
self.remove_button
.set_action_name(Some("explore-servers-popover.remove-server"));
@ -89,7 +83,7 @@ glib::wrapper! {
impl ExploreServerRow {
pub fn new(server: &Server) -> Self {
glib::Object::new(&[("server", server)]).expect("Failed to create ExploreServerRow")
glib::Object::builder().property("server", server).build()
}
pub fn server(&self) -> Option<&Server> {

21
src/session/content/explore/servers_popover.rs

@ -85,20 +85,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"session" => obj.set_session(value.get().unwrap()),
"session" => self.obj().set_session(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"session" => obj.session().to_value(),
"server-list" => obj.server_list().to_value(),
@ -106,8 +102,9 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.server_entry
.connect_changed(clone!(@weak obj => move |_| {
@ -133,7 +130,7 @@ glib::wrapper! {
impl ExploreServersPopover {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)]).expect("Failed to create ExploreServersPopover")
glib::Object::builder().property("session", session).build()
}
pub fn session(&self) -> Option<Session> {

29
src/session/content/invite.rs

@ -88,37 +88,24 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"compact" => {
let compact = value.get().unwrap();
self.compact.set(compact);
}
"room" => {
let room = value.get().unwrap();
obj.set_room(room);
}
"compact" => self.compact.set(value.get().unwrap()),
"room" => self.obj().set_room(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"compact" => self.compact.get().to_value(),
"room" => obj.room().to_value(),
"room" => self.obj().room().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
self.room_topic
.connect_notify_local(Some("label"), |room_topic, _| {
@ -146,7 +133,7 @@ glib::wrapper! {
impl Invite {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create Invite")
glib::Object::new(&[])
}
pub fn set_room(&self, room: Option<Room>) {

17
src/session/content/markdown_popover.rs

@ -45,23 +45,14 @@ pub mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
_: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"markdown-enabled" => {
let markdown_enabled = value.get().unwrap();
self.markdown_enabled.set(markdown_enabled);
}
"markdown-enabled" => self.markdown_enabled.set(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, _: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"markdown-enabled" => self.markdown_enabled.get().to_value(),
_ => unimplemented!(),
@ -80,7 +71,7 @@ glib::wrapper! {
impl MarkdownPopover {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MarkdownPopover")
glib::Object::new(&[])
}
}

33
src/session/content/mod.rs

@ -101,25 +101,20 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"compact" => {
let compact = value.get().unwrap();
self.compact.set(compact);
}
"compact" => self.compact.set(value.get().unwrap()),
"session" => obj.set_session(value.get().unwrap()),
"item" => obj.set_item(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"compact" => self.compact.get().to_value(),
"session" => obj.session().to_value(),
@ -128,13 +123,13 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
self.stack
.connect_visible_child_notify(clone!(@weak obj => move |stack| {
let priv_ = obj.imp();
if stack.visible_child().as_ref() != Some(priv_.verification_page.upcast_ref::<gtk::Widget>()) {
priv_.identity_verification_widget.set_request(None);
.connect_visible_child_notify(clone!(@weak self as imp => move |stack| {
if stack.visible_child().as_ref() != Some(imp.verification_page.upcast_ref::<gtk::Widget>()) {
imp.identity_verification_widget.set_request(None);
}
}));
}
@ -151,7 +146,7 @@ glib::wrapper! {
impl Content {
pub fn new(session: &Session) -> Self {
glib::Object::new(&[("session", session)]).expect("Failed to create Content")
glib::Object::builder().property("session", session).build()
}
pub fn handle_paste_action(&self) {

19
src/session/content/room_details/general_page/mod.rs

@ -86,28 +86,23 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"room" => obj.set_room(value.get().unwrap()),
"room" => self.obj().set_room(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, _obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"room" => self.room.get().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
obj.init_avatar();
obj.init_edit_toggle();
@ -133,7 +128,7 @@ glib::wrapper! {
impl GeneralPage {
pub fn new(room: &Room) -> Self {
glib::Object::new(&[("room", room)]).expect("Failed to create GeneralPage")
glib::Object::builder().property("room", room).build()
}
pub fn room(&self) -> &Room {

25
src/session/content/room_details/invite_subpage/invitee.rs

@ -55,13 +55,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"invited" => obj.set_invited(value.get().unwrap()),
"anchor" => obj.set_anchor(value.get().unwrap()),
@ -70,7 +66,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"invited" => obj.is_invited().to_value(),
"anchor" => obj.anchor().to_value(),
@ -93,12 +91,11 @@ impl Invitee {
display_name: Option<&str>,
avatar_url: Option<&MxcUri>,
) -> Self {
let obj: Self = glib::Object::new(&[
("session", session),
("user-id", &user_id.as_str()),
("display-name", &display_name),
])
.expect("Failed to create Invitee");
let obj: Self = glib::Object::builder()
.property("session", session)
.property("user-id", &user_id.as_str())
.property("display-name", &display_name)
.build();
// FIXME: we should make the avatar_url settable as property
obj.set_avatar_url(avatar_url.map(std::borrow::ToOwned::to_owned));
obj

40
src/session/content/room_details/invite_subpage/invitee_list.rs

@ -103,38 +103,28 @@ mod imp {
fn signals() -> &'static [Signal] {
static SIGNALS: Lazy<Vec<Signal>> = Lazy::new(|| {
vec![
Signal::builder(
"invitee-added",
&[Invitee::static_type().into()],
<()>::static_type().into(),
)
.build(),
Signal::builder(
"invitee-removed",
&[Invitee::static_type().into()],
<()>::static_type().into(),
)
.build(),
Signal::builder("invitee-added")
.param_types([Invitee::static_type()])
.build(),
Signal::builder("invitee-removed")
.param_types([Invitee::static_type()])
.build(),
]
});
SIGNALS.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"room" => self.room.set(value.get().unwrap()).unwrap(),
"search-term" => obj.set_search_term(value.get().unwrap()),
"search-term" => self.obj().set_search_term(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"room" => obj.room().to_value(),
"search-term" => obj.search_term().to_value(),
@ -146,13 +136,13 @@ mod imp {
}
impl ListModelImpl for InviteeList {
fn item_type(&self, _list_model: &Self::Type) -> glib::Type {
fn item_type(&self) -> glib::Type {
Invitee::static_type()
}
fn n_items(&self, _list_model: &Self::Type) -> u32 {
fn n_items(&self) -> u32 {
self.list.borrow().len() as u32
}
fn item(&self, _list_model: &Self::Type, position: u32) -> Option<glib::Object> {
fn item(&self, position: u32) -> Option<glib::Object> {
self.list
.borrow()
.get(position as usize)
@ -170,7 +160,7 @@ glib::wrapper! {
impl InviteeList {
pub fn new(room: &Room) -> Self {
glib::Object::new(&[("room", room)]).expect("Failed to create InviteeList")
glib::Object::builder().property("room", room).build()
}
pub fn room(&self) -> &Room {

16
src/session/content/room_details/invite_subpage/invitee_row.rs

@ -52,24 +52,18 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"user" => {
obj.set_user(value.get().unwrap());
self.obj().set_user(value.get().unwrap());
}
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"user" => obj.user().to_value(),
"user" => self.obj().user().to_value(),
_ => unimplemented!(),
}
}
@ -85,7 +79,7 @@ glib::wrapper! {
impl InviteeRow {
pub fn new(user: &Invitee) -> Self {
glib::Object::new(&[("user", user)]).expect("Failed to create InviteeRow")
glib::Object::builder().property("user", user).build()
}
pub fn user(&self) -> Option<Invitee> {

21
src/session/content/room_details/invite_subpage/mod.rs

@ -92,28 +92,23 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"room" => obj.set_room(value.get().unwrap()),
"room" => self.obj().set_room(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"room" => obj.room().to_value(),
"room" => self.obj().room().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.cancel_button
.connect_clicked(clone!(@weak obj => move |_| {
@ -192,7 +187,7 @@ glib::wrapper! {
impl InviteSubpage {
pub fn new(room: &Room) -> Self {
glib::Object::new(&[("room", room)]).expect("Failed to create InviteSubpage")
glib::Object::builder().property("room", room).build()
}
pub fn room(&self) -> Option<Room> {

21
src/session/content/room_details/member_page/member_menu.rs

@ -47,20 +47,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"member" => obj.set_member(value.get().unwrap()),
"member" => self.obj().set_member(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"member" => obj.member().to_value(),
"allowed-actions" => obj.allowed_actions().to_value(),
@ -68,8 +64,9 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
obj.popover_menu()
.connect_closed(clone!(@weak obj => move |_| {
@ -85,7 +82,7 @@ glib::wrapper! {
impl MemberMenu {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MemberMenu")
glib::Object::new(&[])
}
pub fn member(&self) -> Option<Member> {

41
src/session/content/room_details/member_page/members_list_view/extra_lists.rs

@ -56,13 +56,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"joined" => obj.set_joined(value.get().unwrap()),
"invited" => obj.set_invited(value.get().unwrap()),
@ -71,7 +67,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"joined" => obj.joined().to_value(),
"invited" => obj.invited().to_value(),
@ -80,8 +78,9 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
let joined_members = obj.joined();
let invited_members = obj.invited().model();
@ -107,15 +106,18 @@ mod imp {
}
impl ListModelImpl for ExtraLists {
fn item_type(&self, _list_model: &Self::Type) -> glib::Type {
fn item_type(&self) -> glib::Type {
glib::Object::static_type()
}
fn n_items(&self, list_model: &Self::Type) -> u32 {
list_model.joined().n_items() + list_model.n_visible_extras()
fn n_items(&self) -> u32 {
let obj = self.obj();
obj.joined().n_items() + obj.n_visible_extras()
}
fn item(&self, list_model: &Self::Type, position: u32) -> Option<glib::Object> {
fn item(&self, position: u32) -> Option<glib::Object> {
let obj = self.obj();
if position == 0 && !self.invited_is_empty.get() {
let invited = self.invited.get().unwrap();
return Some(invited.clone().upcast());
@ -128,9 +130,7 @@ mod imp {
return Some(banned.clone().upcast());
}
list_model
.joined()
.item(position - list_model.n_visible_extras())
obj.joined().item(position - obj.n_visible_extras())
}
}
}
@ -146,8 +146,11 @@ impl ExtraLists {
invited: &MembershipSubpageItem,
banned: &MembershipSubpageItem,
) -> Self {
glib::Object::new(&[("joined", joined), ("invited", invited), ("banned", banned)])
.expect("Failed to create ExtraLists")
glib::Object::builder()
.property("joined", joined)
.property("invited", invited)
.property("banned", banned)
.build()
}
pub fn joined(&self) -> &gio::ListModel {

16
src/session/content/room_details/member_page/members_list_view/item_row.rs

@ -37,22 +37,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"item" => obj.set_item(value.get().unwrap()),
"item" => self.obj().set_item(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"item" => obj.item().to_value(),
"item" => self.obj().item().to_value(),
_ => unimplemented!(),
}
}
@ -69,7 +63,7 @@ glib::wrapper! {
impl ItemRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create ItemRow")
glib::Object::new(&[])
}
pub fn item(&self) -> Option<glib::Object> {

21
src/session/content/room_details/member_page/members_list_view/member_row.rs

@ -57,30 +57,25 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"member" => {
obj.set_member(value.get().unwrap());
self.obj().set_member(value.get().unwrap());
}
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"member" => obj.member().to_value(),
"member" => self.obj().member().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.menu_btn
.connect_toggled(clone!(@weak obj => move |btn| {
@ -103,7 +98,7 @@ glib::wrapper! {
impl MemberRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MemberRow")
glib::Object::new(&[])
}
pub fn member(&self) -> Option<Member> {

20
src/session/content/room_details/member_page/members_list_view/membership_subpage_item.rs

@ -49,13 +49,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"state" => obj.set_state(value.get().unwrap()),
"model" => obj.set_model(value.get().unwrap()),
@ -63,7 +59,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"state" => obj.state().to_value(),
"model" => obj.model().to_value(),
@ -79,8 +77,10 @@ glib::wrapper! {
impl MembershipSubpageItem {
pub fn new(state: Membership, model: &impl IsA<gio::ListModel>) -> Self {
glib::Object::new(&[("state", &state), ("model", model)])
.expect("Failed to create MembershipSubpageItem")
glib::Object::builder()
.property("state", &state)
.property("model", model)
.build()
}
pub fn state(&self) -> Membership {

21
src/session/content/room_details/member_page/members_list_view/membership_subpage_row.rs

@ -61,20 +61,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"item" => obj.set_item(value.get().unwrap()),
"item" => self.obj().set_item(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"item" => obj.item().to_value(),
"label" => obj.label().to_value(),
@ -82,8 +78,9 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
self.gesture.set_touch_only(false);
self.gesture.set_button(gdk::BUTTON_PRIMARY);
@ -118,7 +115,7 @@ glib::wrapper! {
impl MembershipSubpageRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MembershipSubpageRow")
glib::Object::new(&[])
}
pub fn item(&self) -> Option<MembershipSubpageItem> {

16
src/session/content/room_details/member_page/members_list_view/mod.rs

@ -60,22 +60,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"model" => obj.set_model(value.get::<&gio::ListModel>().ok()),
"model" => self.obj().set_model(value.get::<&gio::ListModel>().ok()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"model" => obj.model().to_value(),
"model" => self.obj().model().to_value(),
_ => unimplemented!(),
}
}
@ -91,7 +85,7 @@ glib::wrapper! {
impl MembersListView {
pub fn new(model: &impl IsA<gio::ListModel>) -> Self {
glib::Object::new(&[("model", model)]).expect("Failed to create MembersListView")
glib::Object::builder().property("model", model).build()
}
pub fn model(&self) -> Option<gio::ListModel> {

22
src/session/content/room_details/member_page/mod.rs

@ -128,13 +128,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"room" => obj.set_room(value.get().unwrap()),
"state" => obj.set_state(value.get().unwrap()),
@ -143,7 +139,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"room" => obj.room().to_value(),
"member-menu" => obj.member_menu().to_value(),
@ -152,7 +150,7 @@ mod imp {
}
}
fn dispose(&self, _: &Self::Type) {
fn dispose(&self) {
if let Some(invite_action) = self.invite_action_watch.take() {
invite_action.unwatch();
}
@ -170,7 +168,7 @@ glib::wrapper! {
impl MemberPage {
pub fn new(room: &Room) -> Self {
glib::Object::new(&[("room", room)]).expect("Failed to create MemberPage")
glib::Object::builder().property("room", room).build()
}
pub fn room(&self) -> Option<Room> {
@ -344,8 +342,8 @@ impl MemberPage {
)
}
let member_expr = gtk::ClosureExpression::new::<String, &[gtk::Expression], _>(
&[],
let member_expr = gtk::ClosureExpression::new::<String>(
&[] as &[gtk::Expression],
closure!(|member: Option<Member>| { member.map(search_string).unwrap_or_default() }),
);
let search_filter = gtk::StringFilter::builder()

20
src/session/content/room_details/mod.rs

@ -133,13 +133,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"room" => obj.set_room(value.get().unwrap()),
"visible-page" => obj.set_visible_page(value.get().unwrap()),
@ -147,10 +143,10 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"room" => self.room.get().to_value(),
"visible-page" => obj.visible_page().to_value(),
"visible-page" => self.obj().visible_page().to_value(),
_ => unimplemented!(),
}
}
@ -169,8 +165,10 @@ glib::wrapper! {
impl RoomDetails {
pub fn new(parent_window: &Option<gtk::Window>, room: &Room) -> Self {
glib::Object::new(&[("transient-for", parent_window), ("room", room)])
.expect("Failed to create RoomDetails")
glib::Object::builder()
.property("transient-for", parent_window)
.property("room", room)
.build()
}
pub fn room(&self) -> &Room {

27
src/session/content/room_history/attachment_dialog.rs

@ -41,13 +41,8 @@ mod imp {
impl ObjectImpl for AttachmentDialog {
fn signals() -> &'static [glib::subclass::Signal] {
static SIGNALS: Lazy<Vec<glib::subclass::Signal>> = Lazy::new(|| {
vec![
glib::subclass::Signal::builder("send", &[], glib::Type::UNIT.into())
.flags(glib::SignalFlags::RUN_FIRST)
.build(),
]
});
static SIGNALS: Lazy<Vec<glib::subclass::Signal>> =
Lazy::new(|| vec![glib::subclass::Signal::builder("send").run_first().build()]);
SIGNALS.as_ref()
}
}
@ -62,16 +57,20 @@ glib::wrapper! {
impl AttachmentDialog {
pub fn for_image(transient_for: &gtk::Window, title: &str, image: &gdk::Texture) -> Self {
let obj: Self = glib::Object::new(&[("transient-for", transient_for), ("title", &title)])
.expect("Failed to create AttachmentDialog");
let obj: Self = glib::Object::builder()
.property("transient-for", transient_for)
.property("title", &title)
.build();
obj.imp().media.view_image(image);
obj.imp().send_button.grab_focus();
obj
}
pub fn for_file(transient_for: &gtk::Window, title: &str, file: &gio::File) -> Self {
let obj: Self = glib::Object::new(&[("transient-for", transient_for), ("title", &title)])
.expect("Failed to create AttachmentDialog");
let obj: Self = glib::Object::builder()
.property("transient-for", transient_for)
.property("title", &title)
.build();
obj.imp().media.view_file(file.to_owned());
obj.imp().send_button.grab_focus();
obj
@ -82,8 +81,10 @@ impl AttachmentDialog {
title: &str,
geo_uri: &geo_uri::GeoUri,
) -> Self {
let obj: Self = glib::Object::new(&[("transient-for", transient_for), ("title", &title)])
.expect("Failed to create AttachmentDialog");
let obj: Self = glib::Object::builder()
.property("transient-for", transient_for)
.property("title", &title)
.build();
obj.imp().media.view_location(geo_uri);
obj.imp().send_button.grab_focus();
obj

25
src/session/content/room_history/completion/completion_popover.rs

@ -115,13 +115,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"user-id" => obj.set_user_id(value.get().unwrap()),
"members" => obj.set_members(value.get().unwrap()),
@ -129,7 +125,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"view" => obj.view().to_value(),
"user-id" => obj.user_id().to_value(),
@ -139,8 +137,9 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
self.parent_constructed(obj);
fn constructed(&self) {
self.parent_constructed();
let obj = self.obj();
// Filter the members that are joined and that are not our user.
let joined =
@ -152,7 +151,7 @@ mod imp {
))
.build();
let not_user = gtk::BoolFilter::builder()
.expression(gtk::ClosureExpression::new::<bool, _, _>(
.expression(gtk::ClosureExpression::new::<bool>(
&[
Member::this_expression("user-id"),
obj.property_expression("user-id"),
@ -190,7 +189,7 @@ mod imp {
let search = gtk::StringFilter::builder()
.ignore_case(true)
.match_mode(gtk::StringFilterMatchMode::Substring)
.expression(gtk::ClosureExpression::new::<String, _, _>(
.expression(gtk::ClosureExpression::new::<String>(
&[
Member::this_expression("user-id"),
Member::this_expression("display-name"),
@ -298,7 +297,7 @@ glib::wrapper! {
impl CompletionPopover {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create CompletionPopover")
glib::Object::new(&[])
}
pub fn view(&self) -> gtk::TextView {

16
src/session/content/room_history/completion/completion_row.rs

@ -56,22 +56,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"member" => obj.set_member(value.get().unwrap()),
"member" => self.obj().set_member(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"member" => obj.member().to_value(),
"member" => self.obj().member().to_value(),
_ => unimplemented!(),
}
}
@ -89,7 +83,7 @@ glib::wrapper! {
impl CompletionRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create CompletionRow")
glib::Object::new(&[])
}
pub fn member(&self) -> Option<Member> {

21
src/session/content/room_history/divider_row.rs

@ -44,25 +44,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"label" => {
let label = value.get().unwrap();
obj.set_label(label);
}
"label" => self.obj().set_label(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"label" => obj.label().to_value(),
"label" => self.obj().label().to_value(),
_ => unimplemented!(),
}
}
@ -78,11 +69,11 @@ glib::wrapper! {
impl DividerRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create DividerRow")
glib::Object::new(&[])
}
pub fn with_label(label: String) -> Self {
glib::Object::new(&[("label", &label)]).expect("Failed to create DividerRow")
glib::Object::builder().property("label", &label).build()
}
pub fn set_label(&self, label: &str) {

24
src/session/content/room_history/item_row.rs

@ -67,21 +67,17 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"item" => obj.set_item(value.get().unwrap()),
"item" => self.obj().set_item(value.get().unwrap()),
"room-history" => self.room_history.set(value.get().ok().as_ref()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"item" => obj.item().to_value(),
"room-history" => obj.room_history().to_value(),
@ -89,7 +85,7 @@ mod imp {
}
}
fn dispose(&self, _obj: &Self::Type) {
fn dispose(&self) {
if let Some(event) = self
.item
.borrow()
@ -107,7 +103,9 @@ mod imp {
impl BinImpl for ItemRow {}
impl ContextMenuBinImpl for ItemRow {
fn menu_opened(&self, obj: &Self::Type) {
fn menu_opened(&self) {
let obj = self.obj();
if let Some(event) = obj.item().and_then(|item| item.downcast::<Event>().ok()) {
let room_history = obj.room_history();
let popover = room_history.item_context_menu().to_owned();
@ -173,7 +171,9 @@ glib::wrapper! {
impl ItemRow {
pub fn new(room_history: &RoomHistory) -> Self {
glib::Object::new(&[("room-history", room_history)]).expect("Failed to create ItemRow")
glib::Object::builder()
.property("room-history", room_history)
.build()
}
pub fn room_history(&self) -> RoomHistory {

16
src/session/content/room_history/message_row/audio.rs

@ -85,20 +85,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"state" => obj.set_state(value.get().unwrap()),
"state" => self.obj().set_state(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"body" => obj.body().to_value(),
"state" => obj.state().to_value(),
@ -122,7 +118,7 @@ glib::wrapper! {
impl MessageAudio {
/// Create a new audio message.
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MessageAudio")
glib::Object::new(&[])
}
/// The body of the audio message.

16
src/session/content/room_history/message_row/content.rs

@ -74,22 +74,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"format" => obj.set_format(value.get().unwrap()),
"format" => self.obj().set_format(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"format" => obj.format().to_value(),
"format" => self.obj().format().to_value(),
_ => unimplemented!(),
}
}
@ -106,7 +100,7 @@ glib::wrapper! {
impl MessageContent {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MessageContent")
glib::Object::new(&[])
}
pub fn format(&self) -> ContentFormat {

16
src/session/content/room_history/message_row/file.rs

@ -59,13 +59,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"filename" => obj.set_filename(value.get().unwrap()),
"compact" => obj.set_compact(value.get().unwrap()),
@ -73,7 +69,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"filename" => obj.filename().to_value(),
"compact" => obj.compact().to_value(),
@ -95,7 +93,7 @@ glib::wrapper! {
impl MessageFile {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MessageFile")
glib::Object::new(&[])
}
pub fn set_filename(&self, filename: Option<String>) {

13
src/session/content/room_history/message_row/location.rs

@ -39,18 +39,13 @@ mod imp {
}
impl ObjectImpl for MessageLocation {
fn dispose(&self, _obj: &Self::Type) {
fn dispose(&self) {
self.overlay.unparent();
}
}
impl WidgetImpl for MessageLocation {
fn measure(
&self,
_widget: &Self::Type,
orientation: gtk::Orientation,
_for_size: i32,
) -> (i32, i32, i32, i32) {
fn measure(&self, orientation: gtk::Orientation, _for_size: i32) -> (i32, i32, i32, i32) {
if self.location.compact() {
if orientation == gtk::Orientation::Horizontal {
(75, 75, -1, -1)
@ -62,7 +57,7 @@ mod imp {
}
}
fn size_allocate(&self, _widget: &Self::Type, width: i32, height: i32, baseline: i32) {
fn size_allocate(&self, width: i32, height: i32, baseline: i32) {
let width = if self.location.compact() {
width.min(75)
} else {
@ -84,7 +79,7 @@ impl MessageLocation {
/// Create a new location message.
#[allow(clippy::new_without_default)]
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MessageLocation")
glib::Object::new(&[])
}
pub fn set_geo_uri(&self, uri: &str, format: ContentFormat) {

31
src/session/content/room_history/message_row/media.rs

@ -142,13 +142,9 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"width" => {
obj.set_width(value.get().unwrap());
@ -163,7 +159,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"width" => obj.width().to_value(),
"height" => obj.height().to_value(),
@ -173,22 +171,17 @@ mod imp {
}
}
fn dispose(&self, _obj: &Self::Type) {
fn dispose(&self) {
self.media.unparent();
}
}
impl WidgetImpl for MessageMedia {
fn measure(
&self,
obj: &Self::Type,
orientation: gtk::Orientation,
for_size: i32,
) -> (i32, i32, i32, i32) {
fn measure(&self, orientation: gtk::Orientation, for_size: i32) -> (i32, i32, i32, i32) {
let original_width = self.width.get();
let original_height = self.height.get();
let compact = obj.compact();
let compact = self.obj().compact();
let (max_width, max_height) = if compact {
(MAX_COMPACT_THUMBNAIL_WIDTH, MAX_COMPACT_THUMBNAIL_HEIGHT)
} else {
@ -233,11 +226,11 @@ mod imp {
(0, size, -1, -1)
}
fn request_mode(&self, _obj: &Self::Type) -> gtk::SizeRequestMode {
fn request_mode(&self) -> gtk::SizeRequestMode {
gtk::SizeRequestMode::HeightForWidth
}
fn size_allocate(&self, _obj: &Self::Type, width: i32, height: i32, baseline: i32) {
fn size_allocate(&self, width: i32, height: i32, baseline: i32) {
if let Some(child) = self.media.child() {
// We need to allocate just enough width to the child so it doesn't expand.
let original_width = self.width.get();
@ -267,7 +260,7 @@ impl MessageMedia {
/// Create a new media message.
#[allow(clippy::new_without_default)]
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MessageMedia")
glib::Object::new(&[])
}
pub fn width(&self) -> i32 {

22
src/session/content/room_history/message_row/mod.rs

@ -79,31 +79,25 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"show-header" => obj.set_show_header(value.get().unwrap()),
"show-header" => self.obj().set_show_header(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"show-header" => obj.show_header().to_value(),
"show-header" => self.obj().show_header().to_value(),
_ => unimplemented!(),
}
}
fn constructed(&self, obj: &Self::Type) {
fn constructed(&self) {
self.content.connect_notify_local(
Some("format"),
clone!(@weak obj => move |content, _|
obj.imp().reactions.set_visible(!matches!(
clone!(@weak self as imp => move |content, _|
imp.reactions.set_visible(!matches!(
content.format(),
ContentFormat::Compact | ContentFormat::Ellipsized
));
@ -123,7 +117,7 @@ glib::wrapper! {
impl MessageRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MessageRow")
glib::Object::new(&[])
}
pub fn show_header(&self) -> bool {

16
src/session/content/room_history/message_row/reaction.rs

@ -52,22 +52,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"group" => {
obj.set_group(value.get().unwrap());
self.obj().set_group(value.get().unwrap());
}
_ => unimplemented!(),
}
}
fn property(&self, _obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"group" => self.group.get().to_value(),
_ => unimplemented!(),
@ -88,7 +82,9 @@ glib::wrapper! {
impl MessageReaction {
pub fn new(reaction_group: ReactionGroup) -> Self {
glib::Object::new(&[("group", &reaction_group)]).expect("Failed to create MessageReaction")
glib::Object::builder()
.property("group", &reaction_group)
.build()
}
fn set_group(&self, group: ReactionGroup) {

2
src/session/content/room_history/message_row/reaction_list.rs

@ -47,7 +47,7 @@ glib::wrapper! {
impl MessageReactionList {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MessageReactionList")
glib::Object::new(&[])
}
pub fn set_reaction_list(&self, reaction_list: &ReactionList) {

2
src/session/content/room_history/message_row/reply.rs

@ -48,7 +48,7 @@ glib::wrapper! {
impl MessageReply {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MessageReply")
glib::Object::new(&[])
}
pub fn set_related_content_sender(&self, user: User) {

2
src/session/content/room_history/message_row/text.rs

@ -57,7 +57,7 @@ glib::wrapper! {
impl MessageText {
/// Creates a text widget.
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create MessageText")
glib::Object::new(&[])
}
/// Display the given plain text.

39
src/session/content/room_history/mod.rs

@ -302,22 +302,12 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
let obj = self.obj();
match pspec.name() {
"compact" => {
let compact = value.get().unwrap();
self.compact.set(compact);
}
"room" => {
let room = value.get().unwrap();
obj.set_room(room);
}
"compact" => self.compact.set(value.get().unwrap()),
"room" => obj.set_room(value.get().unwrap()),
"markdown-enabled" => {
let md_enabled = value.get().unwrap();
self.md_enabled.set(md_enabled);
@ -332,7 +322,9 @@ mod imp {
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"compact" => self.compact.get().to_value(),
"room" => obj.room().to_value(),
@ -345,7 +337,9 @@ mod imp {
}
}
fn constructed(&self, obj: &Self::Type) {
fn constructed(&self) {
let obj = self.obj();
let factory = gtk::SignalListItemFactory::new();
factory.connect_setup(clone!(@weak obj => move |_, item| {
let row = ItemRow::new(&obj);
@ -477,17 +471,17 @@ mod imp {
let settings = Application::default().settings();
settings
.bind("markdown-enabled", obj, "markdown-enabled")
.bind("markdown-enabled", &*obj, "markdown-enabled")
.build();
self.completion.set_parent(&*self.message_entry);
obj.setup_drop_target();
self.parent_constructed(obj);
self.parent_constructed();
}
fn dispose(&self, _obj: &Self::Type) {
fn dispose(&self) {
self.completion.unparent();
if let Some(invite_action) = self.invite_action_watch.take() {
@ -508,7 +502,7 @@ glib::wrapper! {
#[gtk::template_callbacks]
impl RoomHistory {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create RoomHistory")
glib::Object::new(&[])
}
pub fn set_room(&self, room: Option<Room>) {
@ -911,8 +905,7 @@ impl RoomHistory {
async fn send_location(&self) -> ashpd::Result<()> {
if let Some(room) = self.room() {
let connection = ashpd::zbus::Connection::session().await?;
let proxy = LocationProxy::new(&connection).await?;
let proxy = LocationProxy::new().await?;
let identifier = WindowIdentifier::default();
let session = proxy

2
src/session/content/room_history/state_row/creation.rs

@ -44,7 +44,7 @@ glib::wrapper! {
impl StateCreation {
pub fn new(event: &RoomCreateEventContent) -> Self {
let obj: Self = glib::Object::new(&[]).expect("Failed to create StateCreation");
let obj: Self = glib::Object::new(&[]);
obj.set_event(event);
obj
}

2
src/session/content/room_history/state_row/mod.rs

@ -51,7 +51,7 @@ glib::wrapper! {
impl StateRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create StateRow")
glib::Object::new(&[])
}
pub fn update(&self, state: &AnySyncStateEvent) {

2
src/session/content/room_history/state_row/tombstone.rs

@ -41,7 +41,7 @@ glib::wrapper! {
impl StateTombstone {
pub fn new(event: &RoomTombstoneEventContent) -> Self {
let obj: Self = glib::Object::new(&[]).expect("Failed to create StateTombstone");
let obj: Self = glib::Object::new(&[]);
obj.set_event(event);
obj
}

18
src/session/content/room_history/typing_row.rs

@ -71,20 +71,16 @@ mod imp {
PROPERTIES.as_ref()
}
fn set_property(
&self,
obj: &Self::Type,
_id: usize,
value: &glib::Value,
pspec: &glib::ParamSpec,
) {
fn set_property(&self, _id: usize, value: &glib::Value, pspec: &glib::ParamSpec) {
match pspec.name() {
"list" => obj.set_list(value.get().unwrap()),
"list" => self.obj().set_list(value.get().unwrap()),
_ => unimplemented!(),
}
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
fn property(&self, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
let obj = self.obj();
match pspec.name() {
"list" => obj.list().to_value(),
"is-empty" => obj.is_empty().to_value(),
@ -92,7 +88,7 @@ mod imp {
}
}
fn dispose(&self, _obj: &Self::Type) {
fn dispose(&self) {
if let Some((list, handler_id)) = self.list.take() {
list.disconnect(handler_id);
}
@ -111,7 +107,7 @@ glib::wrapper! {
impl TypingRow {
pub fn new() -> Self {
glib::Object::new(&[]).expect("Failed to create RoomHistoryTypingRow")
glib::Object::new(&[])
}
pub fn list(&self) -> Option<TypingList> {

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save