diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bbd5f704..4168f731 100644 --- a/CONTRIBUTING.md +++ b/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). diff --git a/Cargo.lock b/Cargo.lock index df788f0f..8f9c9de4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/Cargo.toml b/Cargo.toml index d07a1847..e51d8a28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ name = "fractal" version = "5.0.0-alpha1" authors = ["Julian Sparber "] 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" diff --git a/src/account_switcher/avatar_with_selection.rs b/src/account_switcher/avatar_with_selection.rs index 92db9bbd..a4d4a20b 100644 --- a/src/account_switcher/avatar_with_selection.rs +++ b/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) { diff --git a/src/account_switcher/mod.rs b/src/account_switcher/mod.rs index 477ed72b..9d11bcdd 100644 --- a/src/account_switcher/mod.rs +++ b/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) { diff --git a/src/account_switcher/user_entry.rs b/src/account_switcher/user_entry.rs index 8647dfbe..96d1946c 100644 --- a/src/account_switcher/user_entry.rs +++ b/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) { diff --git a/src/application.rs b/src/application.rs index d75b3d4a..d24a36a7 100644 --- a/src/application.rs +++ b/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::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::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 { diff --git a/src/components/action_button.rs b/src/components/action_button.rs index ddb0dd52..e19e568b 100644 --- a/src/components/action_button.rs +++ b/src/components/action_button.rs @@ -81,9 +81,8 @@ mod imp { impl ObjectImpl for ActionButton { fn signals() -> &'static [Signal] { - static SIGNALS: Lazy> = Lazy::new(|| { - vec![Signal::builder("clicked", &[], <()>::static_type().into()).build()] - }); + static SIGNALS: Lazy> = + 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 { + fn action_name(&self) -> Option { self.action_name.borrow().clone() } - fn action_target_value(&self, _obj: &Self::Type) -> Option { + fn action_target_value(&self) -> Option { 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 { diff --git a/src/components/audio_player.rs b/src/components/audio_player.rs index a8867ed7..caeb29a7 100644 --- a/src/components/audio_player.rs +++ b/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. diff --git a/src/components/auth_dialog.rs b/src/components/auth_dialog.rs index ffac3877..27404512 100644 --- a/src/components/auth_dialog.rs +++ b/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> = 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>, 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) { diff --git a/src/components/avatar.rs b/src/components/avatar.rs index b18eefc9..8becdef5 100644 --- a/src/components/avatar.rs +++ b/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) { diff --git a/src/components/badge.rs b/src/components/badge.rs index 4bac0dde..5d787685 100644 --- a/src/components/badge.rs +++ b/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 { diff --git a/src/components/button_row.rs b/src/components/button_row.rs index d5f779b6..e5459498 100644 --- a/src/components/button_row.rs +++ b/src/components/button_row.rs @@ -38,9 +38,8 @@ mod imp { impl ObjectImpl for ButtonRow { fn signals() -> &'static [Signal] { - static SIGNALS: Lazy> = Lazy::new(|| { - vec![Signal::builder("activated", &[], <()>::static_type().into()).build()] - }); + static SIGNALS: Lazy> = + 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 { diff --git a/src/components/context_menu_bin.rs b/src/components/context_menu_bin.rs index f7762fd9..5d80d4ed 100644 --- a/src/components/context_menu_bin.rs +++ b/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 IsSubclassable for ContextMenuBin @@ -248,5 +244,5 @@ where T::Type: IsA, { let this = this.downcast_ref::().unwrap(); - this.imp().menu_opened(this) + this.imp().menu_opened() } diff --git a/src/components/custom_entry.rs b/src/components/custom_entry.rs index d1f093c1..6d8717de 100644 --- a/src/components/custom_entry.rs +++ b/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(&[]) } } diff --git a/src/components/drag_overlay.rs b/src/components/drag_overlay.rs index 0357d876..a395eb93 100644 --- a/src/components/drag_overlay.rs +++ b/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::().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(&[]) } } diff --git a/src/components/editable_avatar.rs b/src/components/editable_avatar.rs index c826e46e..712391a8 100644 --- a/src/components/editable_avatar.rs +++ b/src/components/editable_avatar.rs @@ -72,13 +72,10 @@ mod imp { fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = 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 { diff --git a/src/components/image_paintable.rs b/src/components/image_paintable.rs index bd87ac21..4970d891 100644 --- a/src/components/image_paintable.rs +++ b/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, ) -> Result> { - let obj = - glib::Object::new::(&[]).expect("Failed to create object of type ImagePaintable"); + let obj = glib::Object::new::(&[]); let mut reader = image::io::Reader::new(reader); diff --git a/src/components/label_with_widgets.rs b/src/components/label_with_widgets.rs index 4052f4a9..6f1b725e 100644 --- a/src/components/label_with_widgets.rs +++ b/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: >k::Builder, - child: &glib::Object, - type_: Option<&str>, - ) { + fn add_child(&self, builder: >k::Builder, child: &glib::Object, type_: Option<&str>) { if let Some(child) = child.downcast_ref::() { - 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>(label: &str, widgets: Vec

) -> 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() { diff --git a/src/components/loading_listbox_row.rs b/src/components/loading_listbox_row.rs index 5a91f591..20e47621 100644 --- a/src/components/loading_listbox_row.rs +++ b/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> = Lazy::new(|| { - vec![Signal::builder("retry", &[], <()>::static_type().into()).build()] - }); + static SIGNALS: Lazy> = + 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 { diff --git a/src/components/location_viewer.rs b/src/components/location_viewer.rs index 19777e32..83ec505e 100644 --- a/src/components/location_viewer.rs +++ b/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. diff --git a/src/components/media_content_viewer.rs b/src/components/media_content_viewer.rs index c4d554fa..00a9c38c 100644 --- a/src/components/media_content_viewer.rs +++ b/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) { diff --git a/src/components/overlapping_box.rs b/src/components/overlapping_box.rs index 6cb81f7e..578dac3b 100644 --- a/src/components/overlapping_box.rs +++ b/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: >k::Builder, - child: &glib::Object, - type_: Option<&str>, - ) { + fn add_child(&self, builder: >k::Builder, child: &glib::Object, type_: Option<&str>) { if let Some(child) = child.downcast_ref::() { - 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. diff --git a/src/components/pill.rs b/src/components/pill.rs index fe744674..f2594732 100644 --- a/src/components/pill.rs +++ b/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) { diff --git a/src/components/reaction_chooser.rs b/src/components/reaction_chooser.rs index d396ae00..917eab42 100644 --- a/src/components/reaction_chooser.rs +++ b/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 { diff --git a/src/components/room_title.rs b/src/components/room_title.rs index 4302efef..fc6a3d56 100644 --- a/src/components/room_title.rs +++ b/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) { diff --git a/src/components/spinner_button.rs b/src/components/spinner_button.rs index e7e29b8d..33ef8a1b 100644 --- a/src/components/spinner_button.rs +++ b/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) { diff --git a/src/components/video_player.rs b/src/components/video_player.rs index 0a274742..9ce80b68 100644 --- a/src/components/video_player.rs +++ b/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 { diff --git a/src/components/video_player_renderer.rs b/src/components/video_player_renderer.rs index dcd335c2..cf8c2b71 100644 --- a/src/components/video_player_renderer.rs +++ b/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 { diff --git a/src/contrib/qr_code.rs b/src/contrib/qr_code.rs index 46049a9f..9e56e057 100644 --- a/src/contrib/qr_code.rs +++ b/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: >k::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: >k::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(&[]) } } diff --git a/src/contrib/qr_code_scanner/camera.rs b/src/contrib/qr_code_scanner/camera.rs index 818c4164..a66eee45 100644 --- a/src/contrib/qr_code_scanner/camera.rs +++ b/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>, pub paintable: glib::WeakRef, } @@ -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 { - 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), 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 { - 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 { 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 = - Lazy::new(|| glib::Object::new(&[]).expect("Failed to create a Camera")); + static CAMERA: Lazy = Lazy::new(Camera::new); CAMERA.to_owned() } diff --git a/src/contrib/qr_code_scanner/camera_paintable.rs b/src/contrib/qr_code_scanner/camera_paintable.rs index 5131d900..a3618c3f 100644 --- a/src/contrib/qr_code_scanner/camera_paintable.rs +++ b/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> = 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::().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(fd: F, node_id: Option) -> Self { - let self_: Self = glib::Object::new(&[]).expect("Failed to create a CameraPaintable"); + pub async fn new(fd: F, streams: Vec) -> 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(&self, fd: F, node_id: Option) { + async fn set_pipewire_fd(&self, fd: F, streams: Vec) { // 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(&[ diff --git a/src/contrib/qr_code_scanner/mod.rs b/src/contrib/qr_code_scanner/mod.rs index ae58e043..9040f72f 100644 --- a/src/contrib/qr_code_scanner/mod.rs +++ b/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> = 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) { diff --git a/src/contrib/qr_code_scanner/qr_code_detector.rs b/src/contrib/qr_code_scanner/qr_code_detector.rs index a92f546c..df29290a 100644 --- a/src/contrib/qr_code_scanner/qr_code_detector.rs +++ b/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 { + fn show_frame(&self, buffer: &gst::Buffer) -> Result { 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) -> Self { - let sink = glib::Object::new::(&[]).expect("Failed to create a QrCodeDetector"); + let sink = glib::Object::new::(&[]); sink.imp().sender.lock().unwrap().replace(sender); sink } diff --git a/src/error_page.rs b/src/error_page.rs index b6a11336..3f85c467 100644 --- a/src/error_page.rs +++ b/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) { diff --git a/src/greeter.rs b/src/greeter.rs index 8517e320..a52167e4 100644 --- a/src/greeter.rs +++ b/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 { diff --git a/src/login/advanced_dialog.rs b/src/login/advanced_dialog.rs index 4b281b2b..89c62f6a 100644 --- a/src/login/advanced_dialog.rs +++ b/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: >k::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 { diff --git a/src/login/homeserver_page.rs b/src/login/homeserver_page.rs index 74131798..b8adb57b 100644 --- a/src/login/homeserver_page.rs +++ b/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 { diff --git a/src/login/idp_button.rs b/src/login/idp_button.rs index a6948d42..42dd6515 100644 --- a/src/login/idp_button.rs +++ b/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(), ) } } diff --git a/src/login/method_page.rs b/src/login/method_page.rs index 7fbb077f..cfe2a849 100644 --- a/src/login/method_page.rs +++ b/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. diff --git a/src/login/mod.rs b/src/login/mod.rs index 617dc347..1563c88c 100644 --- a/src/login/mod.rs +++ b/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 { diff --git a/src/login/sso_page.rs b/src/login/sso_page.rs index ba90bfcc..fc8eca4d 100644 --- a/src/login/sso_page.rs +++ b/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(&[]) } } diff --git a/src/session/account_settings/devices_page/device.rs b/src/session/account_settings/devices_page/device.rs index a2d90b6d..9b03957c 100644 --- a/src/session/account_settings/devices_page/device.rs +++ b/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, ) -> 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); diff --git a/src/session/account_settings/devices_page/device_item.rs b/src/session/account_settings/devices_page/device_item.rs index 75fa0b90..c28160e6 100644 --- a/src/session/account_settings/devices_page/device_item.rs +++ b/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::().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 { diff --git a/src/session/account_settings/devices_page/device_list.rs b/src/session/account_settings/devices_page/device_list.rs index 9b28bba4..7e70ef82 100644 --- a/src/session/account_settings/devices_page/device_list.rs +++ b/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 { + fn item(&self, position: u32) -> Option { 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 { diff --git a/src/session/account_settings/devices_page/device_row.rs b/src/session/account_settings/devices_page/device_row.rs index bd8fa655..25b1d197 100644 --- a/src/session/account_settings/devices_page/device_row.rs +++ b/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 { diff --git a/src/session/account_settings/devices_page/mod.rs b/src/session/account_settings/devices_page/mod.rs index dc9ab264..6cedd2f5 100644 --- a/src/session/account_settings/devices_page/mod.rs +++ b/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, 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 { diff --git a/src/session/account_settings/mod.rs b/src/session/account_settings/mod.rs index bfb5bb59..07e5b5ee 100644 --- a/src/session/account_settings/mod.rs +++ b/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>, 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 { diff --git a/src/session/account_settings/notifications_page.rs b/src/session/account_settings/notifications_page.rs index 0bc481bb..1ea2a245 100644 --- a/src/session/account_settings/notifications_page.rs +++ b/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. diff --git a/src/session/account_settings/security_page/import_export_keys_subpage.rs b/src/session/account_settings/security_page/import_export_keys_subpage.rs index 6dc8750d..ab239d2a 100644 --- a/src/session/account_settings/security_page/import_export_keys_subpage.rs +++ b/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 { diff --git a/src/session/account_settings/security_page/mod.rs b/src/session/account_settings/security_page/mod.rs index 454a46aa..72e1bf68 100644 --- a/src/session/account_settings/security_page/mod.rs +++ b/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, 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 { diff --git a/src/session/account_settings/user_page/change_password_subpage.rs b/src/session/account_settings/user_page/change_password_subpage.rs index 2e8c2ca7..71e81108 100644 --- a/src/session/account_settings/user_page/change_password_subpage.rs +++ b/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 { diff --git a/src/session/account_settings/user_page/deactivate_account_subpage.rs b/src/session/account_settings/user_page/deactivate_account_subpage.rs index 3cad5ccc..52f0acda 100644 --- a/src/session/account_settings/user_page/deactivate_account_subpage.rs +++ b/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 { diff --git a/src/session/account_settings/user_page/mod.rs b/src/session/account_settings/user_page/mod.rs index 408da398..35c83075 100644 --- a/src/session/account_settings/user_page/mod.rs +++ b/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, 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 { diff --git a/src/session/avatar.rs b/src/session/avatar.rs index 326ac09b..0f2a41b7 100644 --- a/src/session/avatar.rs +++ b/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 { diff --git a/src/session/content/explore/mod.rs b/src/session/content/explore/mod.rs index a334a1a6..347510e1 100644 --- a/src/session/content/explore/mod.rs +++ b/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 { diff --git a/src/session/content/explore/public_room.rs b/src/session/content/explore/public_room.rs index 50b668b9..8cb2f0f7 100644 --- a/src/session/content/explore/public_room.rs +++ b/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 { diff --git a/src/session/content/explore/public_room_list.rs b/src/session/content/explore/public_room_list.rs index 8527cd86..99310614 100644 --- a/src/session/content/explore/public_room_list.rs +++ b/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 { + fn item(&self, position: u32) -> Option { 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 { diff --git a/src/session/content/explore/public_room_row.rs b/src/session/content/explore/public_room_row.rs index e824f504..4280d2e3 100644 --- a/src/session/content/explore/public_room_row.rs +++ b/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 { diff --git a/src/session/content/explore/server.rs b/src/session/content/explore/server.rs index d941d208..8734173b 100644 --- a/src/session/content/explore/server.rs +++ b/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 { diff --git a/src/session/content/explore/server_list.rs b/src/session/content/explore/server_list.rs index b0282b69..4ca262b3 100644 --- a/src/session/content/explore/server_list.rs +++ b/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 { + fn item(&self, position: u32) -> Option { 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) { diff --git a/src/session/content/explore/server_row.rs b/src/session/content/explore/server_row.rs index 26868cc6..bbe8aba5 100644 --- a/src/session/content/explore/server_row.rs +++ b/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> { diff --git a/src/session/content/explore/servers_popover.rs b/src/session/content/explore/servers_popover.rs index 991cc2e5..973b62fa 100644 --- a/src/session/content/explore/servers_popover.rs +++ b/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 { diff --git a/src/session/content/invite.rs b/src/session/content/invite.rs index 0306673f..0d70ea54 100644 --- a/src/session/content/invite.rs +++ b/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) { diff --git a/src/session/content/markdown_popover.rs b/src/session/content/markdown_popover.rs index 326f9bb3..a8cb1818 100644 --- a/src/session/content/markdown_popover.rs +++ b/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(&[]) } } diff --git a/src/session/content/mod.rs b/src/session/content/mod.rs index c1cf234d..e379425b 100644 --- a/src/session/content/mod.rs +++ b/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::()) { - 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::()) { + 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) { diff --git a/src/session/content/room_details/general_page/mod.rs b/src/session/content/room_details/general_page/mod.rs index acb85adc..d876bffa 100644 --- a/src/session/content/room_details/general_page/mod.rs +++ b/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 { diff --git a/src/session/content/room_details/invite_subpage/invitee.rs b/src/session/content/room_details/invite_subpage/invitee.rs index 7f754336..e12cd771 100644 --- a/src/session/content/room_details/invite_subpage/invitee.rs +++ b/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 diff --git a/src/session/content/room_details/invite_subpage/invitee_list.rs b/src/session/content/room_details/invite_subpage/invitee_list.rs index 6bef7643..823ca506 100644 --- a/src/session/content/room_details/invite_subpage/invitee_list.rs +++ b/src/session/content/room_details/invite_subpage/invitee_list.rs @@ -103,38 +103,28 @@ mod imp { fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = 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 { + fn item(&self, position: u32) -> Option { 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 { diff --git a/src/session/content/room_details/invite_subpage/invitee_row.rs b/src/session/content/room_details/invite_subpage/invitee_row.rs index e4812b29..84a2ed54 100644 --- a/src/session/content/room_details/invite_subpage/invitee_row.rs +++ b/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 { diff --git a/src/session/content/room_details/invite_subpage/mod.rs b/src/session/content/room_details/invite_subpage/mod.rs index 42e86a67..72bffbec 100644 --- a/src/session/content/room_details/invite_subpage/mod.rs +++ b/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 { diff --git a/src/session/content/room_details/member_page/member_menu.rs b/src/session/content/room_details/member_page/member_menu.rs index 176d63a7..a8b08a85 100644 --- a/src/session/content/room_details/member_page/member_menu.rs +++ b/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 { diff --git a/src/session/content/room_details/member_page/members_list_view/extra_lists.rs b/src/session/content/room_details/member_page/members_list_view/extra_lists.rs index 49ec0507..7e6498af 100644 --- a/src/session/content/room_details/member_page/members_list_view/extra_lists.rs +++ b/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 { + fn item(&self, position: u32) -> Option { + 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 { diff --git a/src/session/content/room_details/member_page/members_list_view/item_row.rs b/src/session/content/room_details/member_page/members_list_view/item_row.rs index 4cfc4dbd..068a41e4 100644 --- a/src/session/content/room_details/member_page/members_list_view/item_row.rs +++ b/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 { diff --git a/src/session/content/room_details/member_page/members_list_view/member_row.rs b/src/session/content/room_details/member_page/members_list_view/member_row.rs index 94d4f669..720a29e5 100644 --- a/src/session/content/room_details/member_page/members_list_view/member_row.rs +++ b/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 { diff --git a/src/session/content/room_details/member_page/members_list_view/membership_subpage_item.rs b/src/session/content/room_details/member_page/members_list_view/membership_subpage_item.rs index 5624f94d..3fd88405 100644 --- a/src/session/content/room_details/member_page/members_list_view/membership_subpage_item.rs +++ b/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) -> 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 { diff --git a/src/session/content/room_details/member_page/members_list_view/membership_subpage_row.rs b/src/session/content/room_details/member_page/members_list_view/membership_subpage_row.rs index e0f4ac96..6c4bdb9b 100644 --- a/src/session/content/room_details/member_page/members_list_view/membership_subpage_row.rs +++ b/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 { diff --git a/src/session/content/room_details/member_page/members_list_view/mod.rs b/src/session/content/room_details/member_page/members_list_view/mod.rs index 842e1613..7687cd08 100644 --- a/src/session/content/room_details/member_page/members_list_view/mod.rs +++ b/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) -> Self { - glib::Object::new(&[("model", model)]).expect("Failed to create MembersListView") + glib::Object::builder().property("model", model).build() } pub fn model(&self) -> Option { diff --git a/src/session/content/room_details/member_page/mod.rs b/src/session/content/room_details/member_page/mod.rs index eff38045..8834609a 100644 --- a/src/session/content/room_details/member_page/mod.rs +++ b/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 { @@ -344,8 +342,8 @@ impl MemberPage { ) } - let member_expr = gtk::ClosureExpression::new::( - &[], + let member_expr = gtk::ClosureExpression::new::( + &[] as &[gtk::Expression], closure!(|member: Option| { member.map(search_string).unwrap_or_default() }), ); let search_filter = gtk::StringFilter::builder() diff --git a/src/session/content/room_details/mod.rs b/src/session/content/room_details/mod.rs index c6e429c4..235b8757 100644 --- a/src/session/content/room_details/mod.rs +++ b/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, 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 { diff --git a/src/session/content/room_history/attachment_dialog.rs b/src/session/content/room_history/attachment_dialog.rs index 069f4ca7..85ee6c1e 100644 --- a/src/session/content/room_history/attachment_dialog.rs +++ b/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> = Lazy::new(|| { - vec![ - glib::subclass::Signal::builder("send", &[], glib::Type::UNIT.into()) - .flags(glib::SignalFlags::RUN_FIRST) - .build(), - ] - }); + static SIGNALS: Lazy> = + 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: >k::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: >k::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 diff --git a/src/session/content/room_history/completion/completion_popover.rs b/src/session/content/room_history/completion/completion_popover.rs index bd99545e..657aa53b 100644 --- a/src/session/content/room_history/completion/completion_popover.rs +++ b/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::( + .expression(gtk::ClosureExpression::new::( &[ 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::( + .expression(gtk::ClosureExpression::new::( &[ 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 { diff --git a/src/session/content/room_history/completion/completion_row.rs b/src/session/content/room_history/completion/completion_row.rs index 4974cec6..60d22c9e 100644 --- a/src/session/content/room_history/completion/completion_row.rs +++ b/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 { diff --git a/src/session/content/room_history/divider_row.rs b/src/session/content/room_history/divider_row.rs index 44131ced..8e8797d6 100644 --- a/src/session/content/room_history/divider_row.rs +++ b/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) { diff --git a/src/session/content/room_history/item_row.rs b/src/session/content/room_history/item_row.rs index dcd9356d..e9cc2612 100644 --- a/src/session/content/room_history/item_row.rs +++ b/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::().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 { diff --git a/src/session/content/room_history/message_row/audio.rs b/src/session/content/room_history/message_row/audio.rs index 2dd0e987..7f6a1ec6 100644 --- a/src/session/content/room_history/message_row/audio.rs +++ b/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. diff --git a/src/session/content/room_history/message_row/content.rs b/src/session/content/room_history/message_row/content.rs index 970e2b0c..2556a405 100644 --- a/src/session/content/room_history/message_row/content.rs +++ b/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 { diff --git a/src/session/content/room_history/message_row/file.rs b/src/session/content/room_history/message_row/file.rs index 75d6b339..49827623 100644 --- a/src/session/content/room_history/message_row/file.rs +++ b/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) { diff --git a/src/session/content/room_history/message_row/location.rs b/src/session/content/room_history/message_row/location.rs index 4499947d..62316076 100644 --- a/src/session/content/room_history/message_row/location.rs +++ b/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) { diff --git a/src/session/content/room_history/message_row/media.rs b/src/session/content/room_history/message_row/media.rs index 592c8e84..47179687 100644 --- a/src/session/content/room_history/message_row/media.rs +++ b/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 { diff --git a/src/session/content/room_history/message_row/mod.rs b/src/session/content/room_history/message_row/mod.rs index 73e7a74d..4d59071b 100644 --- a/src/session/content/room_history/message_row/mod.rs +++ b/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 { diff --git a/src/session/content/room_history/message_row/reaction.rs b/src/session/content/room_history/message_row/reaction.rs index 3a3f2781..9bc3db70 100644 --- a/src/session/content/room_history/message_row/reaction.rs +++ b/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) { diff --git a/src/session/content/room_history/message_row/reaction_list.rs b/src/session/content/room_history/message_row/reaction_list.rs index f8c31a85..3c7a9768 100644 --- a/src/session/content/room_history/message_row/reaction_list.rs +++ b/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) { diff --git a/src/session/content/room_history/message_row/reply.rs b/src/session/content/room_history/message_row/reply.rs index fea2f0b0..007c06b3 100644 --- a/src/session/content/room_history/message_row/reply.rs +++ b/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) { diff --git a/src/session/content/room_history/message_row/text.rs b/src/session/content/room_history/message_row/text.rs index 5f1b1aad..aa67b06a 100644 --- a/src/session/content/room_history/message_row/text.rs +++ b/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. diff --git a/src/session/content/room_history/mod.rs b/src/session/content/room_history/mod.rs index 89005eda..aac49b32 100644 --- a/src/session/content/room_history/mod.rs +++ b/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) { @@ -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 diff --git a/src/session/content/room_history/state_row/creation.rs b/src/session/content/room_history/state_row/creation.rs index 54b55403..f504ef23 100644 --- a/src/session/content/room_history/state_row/creation.rs +++ b/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 } diff --git a/src/session/content/room_history/state_row/mod.rs b/src/session/content/room_history/state_row/mod.rs index cc507a5f..9ca23e29 100644 --- a/src/session/content/room_history/state_row/mod.rs +++ b/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) { diff --git a/src/session/content/room_history/state_row/tombstone.rs b/src/session/content/room_history/state_row/tombstone.rs index eacae898..4d13d87d 100644 --- a/src/session/content/room_history/state_row/tombstone.rs +++ b/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 } diff --git a/src/session/content/room_history/typing_row.rs b/src/session/content/room_history/typing_row.rs index 67cd2725..41444a28 100644 --- a/src/session/content/room_history/typing_row.rs +++ b/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 { diff --git a/src/session/content/room_history/verification_info_bar.rs b/src/session/content/room_history/verification_info_bar.rs index 58b86fd8..724cb88b 100644 --- a/src/session/content/room_history/verification_info_bar.rs +++ b/src/session/content/room_history/verification_info_bar.rs @@ -77,22 +77,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() { - "request" => obj.set_request(value.get().unwrap()), + "request" => self.obj().set_request(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() { - "request" => obj.request().to_value(), + "request" => self.obj().request().to_value(), _ => unimplemented!(), } } @@ -108,7 +102,7 @@ glib::wrapper! { impl VerificationInfoBar { pub fn new(label: String) -> Self { - glib::Object::new(&[("label", &label)]).expect("Failed to create VerificationInfoBar") + glib::Object::builder().property("label", &label).build() } pub fn request(&self) -> Option { diff --git a/src/session/content/verification/emoji.rs b/src/session/content/verification/emoji.rs index 2aea8005..652801f8 100644 --- a/src/session/content/verification/emoji.rs +++ b/src/session/content/verification/emoji.rs @@ -43,7 +43,7 @@ glib::wrapper! { impl Emoji { pub fn new(symbol: &str, name: &str) -> Self { - let obj: Self = glib::Object::new(&[]).expect("Failed to create Emoji"); + let obj: Self = glib::Object::new(&[]); obj.set_emoji(symbol, name); obj diff --git a/src/session/content/verification/identity_verification_widget.rs b/src/session/content/verification/identity_verification_widget.rs index e2e5ea8d..4f747e2b 100644 --- a/src/session/content/verification/identity_verification_widget.rs +++ b/src/session/content/verification/identity_verification_widget.rs @@ -130,28 +130,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() { - "request" => obj.set_request(value.get().unwrap()), + "request" => self.obj().set_request(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() { - "request" => obj.request().to_value(), + "request" => self.obj().request().to_value(), _ => unimplemented!(), } } - fn constructed(&self, obj: &Self::Type) { - self.parent_constructed(obj); + fn constructed(&self) { + self.parent_constructed(); + let obj = self.obj(); + self.accept_btn .connect_clicked(clone!(@weak obj => move |button| { button.set_loading(true); @@ -233,8 +229,8 @@ mod imp { })); } - fn dispose(&self, obj: &Self::Type) { - if let Some(request) = obj.request() { + fn dispose(&self) { + if let Some(request) = self.obj().request() { if let Some(handler) = self.state_handler.take() { request.disconnect(handler); } @@ -251,9 +247,9 @@ mod imp { } impl WidgetImpl for IdentityVerificationWidget { - fn map(&self, widget: &Self::Type) { - self.parent_map(widget); - widget.update_view(); + fn map(&self) { + self.parent_map(); + self.obj().update_view(); } } impl BinImpl for IdentityVerificationWidget {} @@ -266,8 +262,7 @@ glib::wrapper! { impl IdentityVerificationWidget { pub fn new(request: &IdentityVerification) -> Self { - glib::Object::new(&[("request", request)]) - .expect("Failed to create IdentityVerificationWidget") + glib::Object::builder().property("request", request).build() } pub fn request(&self) -> Option { diff --git a/src/session/content/verification/session_verification.rs b/src/session/content/verification/session_verification.rs index 46fd4669..89b054fa 100644 --- a/src/session/content/verification/session_verification.rs +++ b/src/session/content/verification/session_verification.rs @@ -84,28 +84,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.action_set_enabled("session-verification.show-recovery", false); @@ -118,8 +113,8 @@ mod imp { obj.start_request(); } - fn dispose(&self, obj: &Self::Type) { - if let Some(request) = obj.request() { + fn dispose(&self) { + if let Some(request) = self.obj().request() { request.cancel(true); } } @@ -136,7 +131,7 @@ glib::wrapper! { impl SessionVerification { pub fn new(session: &Session) -> Self { - glib::Object::new(&[("session", session)]).expect("Failed to create SessionVerification") + glib::Object::builder().property("session", session).build() } /// The current `Session`. diff --git a/src/session/event_source_dialog.rs b/src/session/event_source_dialog.rs index 37246297..95e257df 100644 --- a/src/session/event_source_dialog.rs +++ b/src/session/event_source_dialog.rs @@ -52,30 +52,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() { "event" => { - let event = value.get().unwrap(); - let _ = self.event.set(event); + let _ = self.event.set(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() { "event" => self.event.get().to_value(), _ => unimplemented!(), } } - fn constructed(&self, obj: &Self::Type) { + fn constructed(&self) { let buffer = self .source_view .buffer() @@ -86,7 +79,7 @@ mod imp { buffer.set_language(json_lang.as_ref()); crate::utils::sourceview::setup_style_scheme(&buffer); - self.parent_constructed(obj); + self.parent_constructed(); } } @@ -102,8 +95,10 @@ glib::wrapper! { impl EventSourceDialog { pub fn new(window: >k::Window, event: &Event) -> Self { - glib::Object::new(&[("transient-for", window), ("event", event)]) - .expect("Failed to create EventSourceDialog") + glib::Object::builder() + .property("transient-for", window) + .property("event", event) + .build() } pub fn copy_to_clipboard(&self) { diff --git a/src/session/media_viewer.rs b/src/session/media_viewer.rs index 47d8dc5e..9dadaf57 100644 --- a/src/session/media_viewer.rs +++ b/src/session/media_viewer.rs @@ -96,13 +96,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() { "fullscreened" => obj.set_fullscreened(value.get().unwrap()), "event" => obj.set_event(value.get().unwrap()), @@ -110,7 +106,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() { "fullscreened" => obj.fullscreened().to_value(), "event" => obj.event().to_value(), @@ -119,14 +117,14 @@ mod imp { } } - fn constructed(&self, obj: &Self::Type) { - self.parent_constructed(obj); + fn constructed(&self) { + self.parent_constructed(); self.menu .set_menu_model(Some(Self::Type::event_media_menu_model())); // Bind `fullscreened` to the window property of the same name. - obj.connect_notify_local(Some("root"), |obj, _| { + self.obj().connect_notify_local(Some("root"), |obj, _| { if let Some(window) = obj.root().and_then(|root| root.downcast::().ok()) { window .bind_property("fullscreened", obj, "fullscreened") @@ -150,7 +148,7 @@ glib::wrapper! { impl MediaViewer { #[allow(clippy::new_without_default)] pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create MediaViewer") + glib::Object::new(&[]) } pub fn event(&self) -> Option { diff --git a/src/session/mod.rs b/src/session/mod.rs index ce1b670a..82dea931 100644 --- a/src/session/mod.rs +++ b/src/session/mod.rs @@ -238,7 +238,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() { "session-id" => obj.session_id().to_value(), "item-list" => obj.item_list().to_value(), @@ -251,25 +253,24 @@ mod imp { fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| { vec![ - Signal::builder("ready", &[], <()>::static_type().into()).build(), - Signal::builder("logged-out", &[], <()>::static_type().into()).build(), + Signal::builder("ready").build(), + Signal::builder("logged-out").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.sidebar.connect_notify_local( Some("selected-item"), - clone!(@weak obj => move |_, _| { - let priv_ = obj.imp(); - - if priv_.sidebar.selected_item().is_none() { - priv_.leaflet.navigate(adw::NavigationDirection::Back); + clone!(@weak self as imp => move |_, _| { + if imp.sidebar.selected_item().is_none() { + imp.leaflet.navigate(adw::NavigationDirection::Back); } else { - priv_.leaflet.navigate(adw::NavigationDirection::Forward); + imp.leaflet.navigate(adw::NavigationDirection::Forward); } }), ); @@ -308,7 +309,9 @@ mod imp { }); } - fn dispose(&self, obj: &Self::Type) { + fn dispose(&self) { + let obj = self.obj(); + // Needs to be disconnected or else it may restart the sync if let Some(handler_id) = self.offline_handler_id.take() { gio::NetworkMonitor::default().disconnect(handler_id); @@ -340,7 +343,7 @@ glib::wrapper! { impl Session { pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create Session") + glib::Object::new(&[]) } pub fn session_id(&self) -> Option<&str> { diff --git a/src/session/room/event/mod.rs b/src/session/room/event/mod.rs index 21c6ec34..3a9f2a70 100644 --- a/src/session/room/event/mod.rs +++ b/src/session/room/event/mod.rs @@ -120,17 +120,11 @@ 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() { "pure-event" => { let event = value.get::().unwrap(); - obj.set_pure_event(event.0); + self.obj().set_pure_event(event.0); } "room" => { self.room.set(value.get().ok().as_ref()); @@ -139,7 +133,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() { "source" => obj.source().to_value(), "room" => obj.room().to_value(), @@ -150,11 +146,16 @@ mod imp { } impl TimelineItemImpl for Event { - fn event_sender(&self, obj: &Self::Type) -> Option { - Some(obj.room().members().member_by_id(obj.sender_id()?)) + fn event_sender(&self) -> Option { + Some( + self.obj() + .room() + .members() + .member_by_id(self.obj().sender_id()?), + ) } - fn selectable(&self, _obj: &Self::Type) -> bool { + fn selectable(&self) -> bool { true } } @@ -302,14 +303,15 @@ impl> EventExt for O { /// Overriding a method from this trait overrides also its behavior in /// `EventExt`. pub trait EventImpl: ObjectImpl { - fn source(&self, obj: &Self::Type) -> String { - obj.dynamic_cast_ref::() + fn source(&self) -> String { + self.obj() + .dynamic_cast_ref::() .map(|event| event.original_source()) .unwrap_or_default() } - fn event_id(&self, obj: &Self::Type) -> Option { - obj.dynamic_cast_ref::().and_then(|event| { + fn event_id(&self) -> Option { + self.obj().dynamic_cast_ref::().and_then(|event| { event .imp() .pure_event @@ -323,8 +325,8 @@ pub trait EventImpl: ObjectImpl { }) } - fn sender_id(&self, obj: &Self::Type) -> Option { - obj.dynamic_cast_ref::().and_then(|event| { + fn sender_id(&self) -> Option { + self.obj().dynamic_cast_ref::().and_then(|event| { event .imp() .pure_event @@ -338,8 +340,8 @@ pub trait EventImpl: ObjectImpl { }) } - fn origin_server_ts(&self, obj: &Self::Type) -> Option { - obj.dynamic_cast_ref::().and_then(|event| { + fn origin_server_ts(&self) -> Option { + self.obj().dynamic_cast_ref::().and_then(|event| { event .imp() .pure_event @@ -379,7 +381,7 @@ where T::Type: IsA, { let this = this.downcast_ref::().unwrap(); - this.imp().source(this) + this.imp().source() } fn event_id_trampoline(this: &Event) -> Option @@ -388,7 +390,7 @@ where T::Type: IsA, { let this = this.downcast_ref::().unwrap(); - this.imp().event_id(this) + this.imp().event_id() } fn sender_id_trampoline(this: &Event) -> Option @@ -397,7 +399,7 @@ where T::Type: IsA, { let this = this.downcast_ref::().unwrap(); - this.imp().sender_id(this) + this.imp().sender_id() } fn origin_server_ts_trampoline(this: &Event) -> Option @@ -406,5 +408,5 @@ where T::Type: IsA, { let this = this.downcast_ref::().unwrap(); - this.imp().origin_server_ts(this) + this.imp().origin_server_ts() } diff --git a/src/session/room/event/supported_event.rs b/src/session/room/event/supported_event.rs index ec8af7a8..af53276a 100644 --- a/src/session/room/event/supported_event.rs +++ b/src/session/room/event/supported_event.rs @@ -85,31 +85,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() { "matrix-event" => { let matrix_event = value.get::().unwrap(); - obj.set_matrix_event(matrix_event.0); + self.obj().set_matrix_event(matrix_event.0); } _ => 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() { - "reactions" => obj.reactions().to_value(), + "reactions" => self.obj().reactions().to_value(), _ => unimplemented!(), } } - fn constructed(&self, obj: &Self::Type) { - obj.connect_notify_local(Some("source"), |obj, _| { + fn constructed(&self) { + self.obj().connect_notify_local(Some("source"), |obj, _| { if let Ok(matrix_event) = obj.pure_event().event.deserialize() { obj.set_matrix_event(matrix_event); } @@ -118,8 +112,8 @@ mod imp { } impl TimelineItemImpl for SupportedEvent { - fn activatable(&self, obj: &Self::Type) -> bool { - match obj.original_content() { + fn activatable(&self) -> bool { + match self.obj().original_content() { // The event can be activated to open the media viewer if it's an image or a video. Some(AnyMessageLikeEventContent::RoomMessage(message)) => { matches!( @@ -131,8 +125,8 @@ mod imp { } } - fn can_hide_header(&self, obj: &Self::Type) -> bool { - match obj.original_content() { + fn can_hide_header(&self) -> bool { + match self.obj().original_content() { Some(AnyMessageLikeEventContent::RoomMessage(message)) => { matches!( message.msgtype, @@ -150,19 +144,21 @@ mod imp { } } - fn event_sender(&self, obj: &Self::Type) -> Option { - Some(obj.sender()) + fn event_sender(&self) -> Option { + Some(self.obj().sender()) } } impl EventImpl for SupportedEvent { - fn source(&self, obj: &Self::Type) -> String { + fn source(&self) -> String { + let obj = self.obj(); + obj.replacement() .map(|replacement| replacement.source()) .unwrap_or_else(|| obj.original_source()) } - fn origin_server_ts(&self, _obj: &Self::Type) -> Option { + fn origin_server_ts(&self) -> Option { Some( self.matrix_event .borrow() @@ -190,12 +186,12 @@ impl SupportedEvent { pub fn try_from_event(pure_event: SyncTimelineEvent, room: &Room) -> Result { let matrix_event = BoxedAnySyncTimelineEvent(pure_event.event.deserialize()?); let pure_event = BoxedSyncTimelineEvent(pure_event); - Ok(glib::Object::new(&[ - ("pure-event", &pure_event), - ("matrix-event", &matrix_event), - ("room", room), - ]) - .expect("Failed to create SupportedEvent")) + + Ok(glib::Object::builder() + .property("pure-event", &pure_event) + .property("matrix-event", &matrix_event) + .property("room", room) + .build()) } /// Set the deserialized Matrix event of this `SupportedEvent`. diff --git a/src/session/room/event/unsupported_event.rs b/src/session/room/event/unsupported_event.rs index 90a12596..4e6240ec 100644 --- a/src/session/room/event/unsupported_event.rs +++ b/src/session/room/event/unsupported_event.rs @@ -36,8 +36,10 @@ impl UnsupportedEvent { /// Construct an `UnsupportedEvent` from the given pure event and room. pub fn new(pure_event: SyncTimelineEvent, room: &Room) -> Self { let pure_event = BoxedSyncTimelineEvent(pure_event); - glib::Object::new(&[("pure-event", &pure_event), ("room", room)]) - .expect("Failed to create UnsupportedEvent") + glib::Object::builder() + .property("pure-event", &pure_event) + .property("room", room) + .build() } /// The type of this `UnsupportedEvent`, if the field is found. diff --git a/src/session/room/member.rs b/src/session/room/member.rs index 488265a7..c81f7b48 100644 --- a/src/session/room/member.rs +++ b/src/session/room/member.rs @@ -132,20 +132,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() { - "latest-activity" => obj.set_latest_activity(value.get().unwrap()), + "latest-activity" => self.obj().set_latest_activity(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() { "power-level" => obj.power_level().to_value(), "membership" => obj.membership().to_value(), @@ -164,8 +160,10 @@ glib::wrapper! { impl Member { pub fn new(room: &Room, user_id: &UserId) -> Self { let session = room.session(); - glib::Object::new(&[("session", &session), ("user-id", &user_id.as_str())]) - .expect("Failed to create Member") + glib::Object::builder() + .property("session", &session) + .property("user-id", &user_id.as_str()) + .build() } pub fn power_level(&self) -> PowerLevel { diff --git a/src/session/room/member_list.rs b/src/session/room/member_list.rs index a7b19b09..938f3046 100644 --- a/src/session/room/member_list.rs +++ b/src/session/room/member_list.rs @@ -43,35 +43,29 @@ 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" => self.room.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() { - "room" => obj.room().to_value(), + "room" => self.obj().room().to_value(), _ => unimplemented!(), } } } impl ListModelImpl for MemberList { - fn item_type(&self, _list_model: &Self::Type) -> glib::Type { + fn item_type(&self) -> glib::Type { Member::static_type() } - fn n_items(&self, _list_model: &Self::Type) -> u32 { + fn n_items(&self) -> u32 { self.members.borrow().len() as u32 } - fn item(&self, _list_model: &Self::Type, position: u32) -> Option { + fn item(&self, position: u32) -> Option { let members = self.members.borrow(); members @@ -91,7 +85,7 @@ glib::wrapper! { impl MemberList { pub fn new(room: &Room) -> Self { - glib::Object::new(&[("room", room)]).expect("Failed to create MemberList") + glib::Object::builder().property("room", room).build() } pub fn room(&self) -> Room { diff --git a/src/session/room/mod.rs b/src/session/room/mod.rs index 3089e54d..bf524b4a 100644 --- a/src/session/room/mod.rs +++ b/src/session/room/mod.rs @@ -262,38 +262,27 @@ 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" => self.session.set(value.get().ok().as_ref()), - "display-name" => { - let room_name = value.get().unwrap(); - obj.store_room_name(room_name) - } - "category" => { - let category = value.get().unwrap(); - obj.set_category(category); - } + "display-name" => obj.store_room_name(value.get().unwrap()), + "category" => obj.set_category(value.get().unwrap()), "room-id" => self .room_id .set(RoomId::parse(value.get::<&str>().unwrap()).unwrap()) .unwrap(), - "topic" => { - let topic = value.get().unwrap(); - obj.store_topic(topic); - } + "topic" => obj.store_topic(value.get().unwrap()), "verification" => obj.set_verification(value.get().unwrap()), "encrypted" => obj.set_is_encrypted(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-id" => obj.room_id().as_str().to_value(), "session" => obj.session().to_value(), @@ -332,20 +321,21 @@ mod imp { fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| { vec![ - Signal::builder("order-changed", &[], <()>::static_type().into()).build(), - Signal::builder("room-forgotten", &[], <()>::static_type().into()).build(), - Signal::builder("new-encryption-keys", &[], <()>::static_type().into()).build(), + Signal::builder("order-changed").build(), + Signal::builder("room-forgotten").build(), + Signal::builder("new-encryption-keys").build(), ] }); SIGNALS.as_ref() } - fn constructed(&self, obj: &Self::Type) { - self.parent_constructed(obj); + fn constructed(&self) { + self.parent_constructed(); + let obj = self.obj(); obj.set_matrix_room(obj.session().client().get_room(obj.room_id()).unwrap()); - self.timeline.set(Timeline::new(obj)).unwrap(); - self.members.set(MemberList::new(obj)).unwrap(); + self.timeline.set(Timeline::new(&obj)).unwrap(); + self.members.set(MemberList::new(&obj)).unwrap(); self.avatar .set(Avatar::new( &obj.session(), @@ -384,8 +374,10 @@ glib::wrapper! { impl Room { pub fn new(session: &Session, room_id: &RoomId) -> Self { - glib::Object::new(&[("session", session), ("room-id", &room_id.to_string())]) - .expect("Failed to create Room") + glib::Object::builder() + .property("session", session) + .property("room-id", &room_id.to_string()) + .build() } pub fn session(&self) -> Session { diff --git a/src/session/room/power_levels.rs b/src/session/room/power_levels.rs index 08eda3e9..8250fe7a 100644 --- a/src/session/room/power_levels.rs +++ b/src/session/room/power_levels.rs @@ -50,9 +50,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 { match pspec.name() { - "power-levels" => obj.power_levels().to_value(), + "power-levels" => self.obj().power_levels().to_value(), _ => unimplemented!(), } } @@ -65,7 +65,7 @@ glib::wrapper! { impl PowerLevels { pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create PowerLevels") + glib::Object::new(&[]) } pub fn power_levels(&self) -> BoxedPowerLevelsEventContent { @@ -85,7 +85,7 @@ impl PowerLevels { member: &Member, room_action: RoomAction, ) -> gtk::ClosureExpression { - gtk::ClosureExpression::new::( + gtk::ClosureExpression::new::( &[ member.property_expression("power-level"), self.property_expression("power-levels"), diff --git a/src/session/room/reaction_group.rs b/src/session/room/reaction_group.rs index 7f723b30..38e1cec5 100644 --- a/src/session/room/reaction_group.rs +++ b/src/session/room/reaction_group.rs @@ -58,13 +58,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() { "key" => { self.key.set(value.get().unwrap()).unwrap(); @@ -73,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() { "key" => obj.key().to_value(), "count" => obj.count().to_value(), @@ -91,7 +87,7 @@ glib::wrapper! { impl ReactionGroup { pub fn new(key: &str) -> Self { - glib::Object::new(&[("key", &key)]).expect("Failed to create ReactionGroup") + glib::Object::builder().property("key", &key).build() } pub fn key(&self) -> &str { diff --git a/src/session/room/reaction_list.rs b/src/session/room/reaction_list.rs index 91fc3029..4d71e88c 100644 --- a/src/session/room/reaction_list.rs +++ b/src/session/room/reaction_list.rs @@ -28,13 +28,13 @@ mod imp { impl ObjectImpl for ReactionList {} impl ListModelImpl for ReactionList { - fn item_type(&self, _list_model: &Self::Type) -> glib::Type { + fn item_type(&self) -> glib::Type { ReactionGroup::static_type() } - fn n_items(&self, _list_model: &Self::Type) -> u32 { + fn n_items(&self) -> u32 { self.reactions.borrow().len() as u32 } - fn item(&self, _list_model: &Self::Type, position: u32) -> Option { + fn item(&self, position: u32) -> Option { let reactions = self.reactions.borrow(); reactions @@ -54,7 +54,7 @@ glib::wrapper! { impl ReactionList { pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create ReactionList") + glib::Object::new(&[]) } /// Add reactions with the given reaction `SupportedEvent`s. diff --git a/src/session/room/timeline/mod.rs b/src/session/room/timeline/mod.rs index 1782e0f7..97f71773 100644 --- a/src/session/room/timeline/mod.rs +++ b/src/session/room/timeline/mod.rs @@ -115,20 +115,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" => 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 { + let obj = self.obj(); + match pspec.name() { "room" => obj.room().to_value(), "empty" => obj.is_empty().to_value(), @@ -139,11 +135,11 @@ mod imp { } impl ListModelImpl for Timeline { - fn item_type(&self, _list_model: &Self::Type) -> glib::Type { + fn item_type(&self) -> glib::Type { TimelineItem::static_type() } - fn n_items(&self, _list_model: &Self::Type) -> u32 { + fn n_items(&self) -> u32 { let mut len = self.list.borrow().len() as u32; if self.has_typing.get() { @@ -153,7 +149,7 @@ mod imp { len } - fn item(&self, _list_model: &Self::Type, position: u32) -> Option { + fn item(&self, position: u32) -> Option { let position = position as usize; let list = self.list.borrow(); @@ -184,7 +180,7 @@ glib::wrapper! { // - [ ] Add new message divider impl Timeline { pub fn new(room: &Room) -> Self { - glib::Object::new(&[("room", &room)]).expect("Failed to create Timeline") + glib::Object::builder().property("room", &room).build() } fn items_changed(&self, position: u32, removed: u32, added: u32) { diff --git a/src/session/room/timeline/timeline_day_divider.rs b/src/session/room/timeline/timeline_day_divider.rs index 082bbad4..8aaa9949 100644 --- a/src/session/room/timeline/timeline_day_divider.rs +++ b/src/session/room/timeline/timeline_day_divider.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() { - "date" => obj.set_date(value.get().unwrap()), + "date" => self.obj().set_date(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() { "date" => obj.date().to_value(), "formatted-date" => obj.formatted_date().to_value(), @@ -79,7 +75,7 @@ glib::wrapper! { impl TimelineDayDivider { pub fn new(date: glib::DateTime) -> Self { - glib::Object::new::(&[("date", &date)]).expect("Failed to create TimelineDayDivider") + glib::Object::builder().property("date", &date).build() } pub fn date(&self) -> Option { diff --git a/src/session/room/timeline/timeline_item.rs b/src/session/room/timeline/timeline_item.rs index d4cd32b6..e9495c30 100644 --- a/src/session/room/timeline/timeline_item.rs +++ b/src/session/room/timeline/timeline_item.rs @@ -100,20 +100,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() { - "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 { + let obj = self.obj(); + match pspec.name() { "selectable" => obj.selectable().to_value(), "activatable" => obj.activatable().to_value(), @@ -205,19 +201,19 @@ impl> TimelineItemExt for O { /// Overriding a method from this Trait overrides also its behavior in /// `TimelineItemExt`. pub trait TimelineItemImpl: ObjectImpl { - fn selectable(&self, _obj: &Self::Type) -> bool { + fn selectable(&self) -> bool { false } - fn activatable(&self, _obj: &Self::Type) -> bool { + fn activatable(&self) -> bool { false } - fn can_hide_header(&self, _obj: &Self::Type) -> bool { + fn can_hide_header(&self) -> bool { false } - fn event_sender(&self, _obj: &Self::Type) -> Option { + fn event_sender(&self) -> Option { None } } @@ -247,7 +243,7 @@ where T::Type: IsA, { let this = this.downcast_ref::().unwrap(); - this.imp().selectable(this) + this.imp().selectable() } fn activatable_trampoline(this: &TimelineItem) -> bool @@ -256,7 +252,7 @@ where T::Type: IsA, { let this = this.downcast_ref::().unwrap(); - this.imp().activatable(this) + this.imp().activatable() } fn can_hide_header_trampoline(this: &TimelineItem) -> bool @@ -265,7 +261,7 @@ where T::Type: IsA, { let this = this.downcast_ref::().unwrap(); - this.imp().can_hide_header(this) + this.imp().can_hide_header() } fn event_sender_trampoline(this: &TimelineItem) -> Option @@ -274,5 +270,5 @@ where T::Type: IsA, { let this = this.downcast_ref::().unwrap(); - this.imp().event_sender(this) + this.imp().event_sender() } diff --git a/src/session/room/timeline/timeline_new_messages_divider.rs b/src/session/room/timeline/timeline_new_messages_divider.rs index f6862153..747f30f9 100644 --- a/src/session/room/timeline/timeline_new_messages_divider.rs +++ b/src/session/room/timeline/timeline_new_messages_divider.rs @@ -26,7 +26,7 @@ glib::wrapper! { impl TimelineNewMessagesDivider { pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create TimelineNewMessagesDivider") + glib::Object::new(&[]) } } diff --git a/src/session/room/timeline/timeline_placeholder.rs b/src/session/room/timeline/timeline_placeholder.rs index 738181fd..219a7661 100644 --- a/src/session/room/timeline/timeline_placeholder.rs +++ b/src/session/room/timeline/timeline_placeholder.rs @@ -52,20 +52,14 @@ 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() { "kind" => self.kind.set(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() { "kind" => self.kind.get().to_value(), _ => unimplemented!(), @@ -83,12 +77,13 @@ glib::wrapper! { impl TimelinePlaceholder { pub fn spinner() -> Self { - glib::Object::new(&[]).expect("Failed to create TimelinePlaceholder") + glib::Object::new(&[]) } pub fn typing() -> Self { - glib::Object::new(&[("kind", &PlaceholderKind::Typing)]) - .expect("Failed to create TimelinePlaceholder") + glib::Object::builder() + .property("kind", &PlaceholderKind::Typing) + .build() } pub fn kind(&self) -> PlaceholderKind { diff --git a/src/session/room/typing_list.rs b/src/session/room/typing_list.rs index 560ecf49..1e739d1a 100644 --- a/src/session/room/typing_list.rs +++ b/src/session/room/typing_list.rs @@ -37,24 +37,24 @@ 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() { - "is-empty" => obj.is_empty().to_value(), + "is-empty" => self.obj().is_empty().to_value(), _ => unimplemented!(), } } } impl ListModelImpl for TypingList { - fn item_type(&self, _list_model: &Self::Type) -> glib::Type { + fn item_type(&self) -> glib::Type { Member::static_type() } - fn n_items(&self, _list_model: &Self::Type) -> u32 { + fn n_items(&self) -> u32 { self.members.borrow().len() as u32 } - fn item(&self, _list_model: &Self::Type, position: u32) -> Option { + fn item(&self, position: u32) -> Option { self.members .borrow() .get(position as usize) @@ -71,7 +71,7 @@ glib::wrapper! { impl TypingList { pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create TypingList") + glib::Object::new(&[]) } pub fn members(&self) -> Vec { diff --git a/src/session/room_creation/mod.rs b/src/session/room_creation/mod.rs index 1216833d..30c42813 100644 --- a/src/session/room_creation/mod.rs +++ b/src/session/room_creation/mod.rs @@ -103,28 +103,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.cancel_button .connect_clicked(clone!(@weak obj => move |_| { @@ -156,8 +151,10 @@ glib::wrapper! { impl RoomCreation { pub fn new(parent_window: Option<&impl IsA>, session: &Session) -> Self { - glib::Object::new(&[("transient-for", &parent_window), ("session", session)]) - .expect("Failed to create RoomCreation") + glib::Object::builder() + .property("transient-for", &parent_window) + .property("session", session) + .build() } pub fn session(&self) -> Option { diff --git a/src/session/room_list.rs b/src/session/room_list.rs index 74c10347..dd3fa468 100644 --- a/src/session/room_list.rs +++ b/src/session/room_list.rs @@ -51,45 +51,35 @@ 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 signals() -> &'static [Signal] { - static SIGNALS: Lazy> = Lazy::new(|| { - vec![ - Signal::builder("pending-rooms-changed", &[], <()>::static_type().into()) - .build(), - ] - }); + static SIGNALS: Lazy> = + Lazy::new(|| vec![Signal::builder("pending-rooms-changed").build()]); SIGNALS.as_ref() } } impl ListModelImpl for RoomList { - fn item_type(&self, _list_model: &Self::Type) -> glib::Type { + fn item_type(&self) -> glib::Type { Room::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 { + fn item(&self, position: u32) -> Option { self.list .borrow() .get_index(position as usize) @@ -115,7 +105,7 @@ glib::wrapper! { impl RoomList { pub fn new(session: &Session) -> Self { - glib::Object::new(&[("session", session)]).expect("Failed to create RoomList") + glib::Object::builder().property("session", session).build() } pub fn session(&self) -> Session { diff --git a/src/session/settings.rs b/src/session/settings.rs index a3fb534f..c3731b23 100644 --- a/src/session/settings.rs +++ b/src/session/settings.rs @@ -80,13 +80,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-id" => obj.set_session_id(value.get().ok()), "notifications-enabled" => obj.set_notifications_enabled(value.get().unwrap()), @@ -94,7 +90,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-id" => obj.session_id().to_value(), "notifications-enabled" => obj.notifications_enabled().to_value(), @@ -111,7 +109,9 @@ glib::wrapper! { impl SessionSettings { pub fn new(session_id: &str) -> Self { - glib::Object::new(&[("session-id", &session_id)]).expect("Failed to create SessionSettings") + glib::Object::builder() + .property("session-id", &session_id) + .build() } pub fn session_id(&self) -> &str { @@ -134,7 +134,7 @@ impl SessionSettings { let index = sessions .iter() .enumerate() - .find_map(|(idx, settings)| (settings.session_id == session_id).then(|| idx)); + .find_map(|(idx, settings)| (settings.session_id == session_id).then_some(idx)); priv_.session_id.set(session_id).unwrap(); @@ -174,7 +174,7 @@ impl SessionSettings { .unwrap_or_default(); let index = sessions.iter().enumerate().find_map(|(idx, settings)| { - (settings.session_id == new_settings.session_id).then(|| idx) + (settings.session_id == new_settings.session_id).then_some(idx) }); if let Some(index) = index { sessions[index] = new_settings; diff --git a/src/session/sidebar/category.rs b/src/session/sidebar/category.rs index 3955cf52..bdd50ad7 100644 --- a/src/session/sidebar/category.rs +++ b/src/session/sidebar/category.rs @@ -68,27 +68,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() { - "type" => { - let type_ = value.get().unwrap(); - self.type_.set(type_); - } - "model" => { - let model = value.get().unwrap(); - obj.set_model(model); - } + "type" => self.type_.set(value.get().unwrap()), + "model" => self.obj().set_model(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() { "type" => obj.type_().to_value(), "display-name" => obj.type_().to_string().to_value(), @@ -100,21 +90,23 @@ mod imp { } impl ListModelImpl for Category { - fn item_type(&self, _list_model: &Self::Type) -> glib::Type { + fn item_type(&self) -> glib::Type { SidebarItem::static_type() } - fn n_items(&self, _list_model: &Self::Type) -> u32 { + fn n_items(&self) -> u32 { self.model.get().unwrap().n_items() } - fn item(&self, _list_model: &Self::Type, position: u32) -> Option { + fn item(&self, position: u32) -> Option { self.model.get().unwrap().item(position) } } impl SidebarItemImpl for Category { - fn update_visibility(&self, obj: &Self::Type, for_category: CategoryType) { + fn update_visibility(&self, for_category: CategoryType) { + let obj = self.obj(); + obj.set_visible( !obj.is_empty() || RoomType::try_from(for_category) @@ -141,7 +133,10 @@ glib::wrapper! { impl Category { pub fn new(type_: CategoryType, model: &impl IsA) -> Self { - glib::Object::new(&[("type", &type_), ("model", model)]).expect("Failed to create Category") + glib::Object::builder() + .property("type", &type_) + .property("model", model) + .build() } pub fn type_(&self) -> CategoryType { diff --git a/src/session/sidebar/category_row.rs b/src/session/sidebar/category_row.rs index 9a46cc39..cea14141 100644 --- a/src/session/sidebar/category_row.rs +++ b/src/session/sidebar/category_row.rs @@ -78,13 +78,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() { "category" => obj.set_category(value.get().unwrap()), "expanded" => obj.set_expanded(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() { "category" => obj.category().to_value(), "expanded" => obj.expanded().to_value(), @@ -115,8 +113,9 @@ glib::wrapper! { impl CategoryRow { pub fn new() -> Self { - glib::Object::new(&[("show-label-for-category", &CategoryType::None)]) - .expect("Failed to create CategoryRow") + glib::Object::builder() + .property("show-label-for-category", &CategoryType::None) + .build() } pub fn category(&self) -> Option { diff --git a/src/session/sidebar/entry.rs b/src/session/sidebar/entry.rs index c8f58dad..8d3cd5c3 100644 --- a/src/session/sidebar/entry.rs +++ b/src/session/sidebar/entry.rs @@ -53,13 +53,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" => { self.type_.set(value.get().unwrap()); @@ -71,7 +65,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() { "type" => obj.type_().to_value(), "display-name" => obj.type_().to_string().to_value(), @@ -82,7 +78,9 @@ mod imp { } impl SidebarItemImpl for Entry { - fn update_visibility(&self, obj: &Self::Type, for_category: CategoryType) { + fn update_visibility(&self, for_category: CategoryType) { + let obj = self.obj(); + match obj.type_() { EntryType::Explore => obj.set_visible(true), EntryType::Forget => obj.set_visible(for_category == CategoryType::Left), @@ -101,7 +99,7 @@ glib::wrapper! { impl Entry { pub fn new(type_: EntryType) -> Self { - glib::Object::new(&[("type", &type_)]).expect("Failed to create Entry") + glib::Object::builder().property("type", &type_).build() } pub fn type_(&self) -> EntryType { diff --git a/src/session/sidebar/entry_row.rs b/src/session/sidebar/entry_row.rs index d6f2906c..a29354f2 100644 --- a/src/session/sidebar/entry_row.rs +++ b/src/session/sidebar/entry_row.rs @@ -47,22 +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() { - "entry" => obj.set_entry(value.get().unwrap()), + "entry" => self.obj().set_entry(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() { - "entry" => obj.entry().to_value(), + "entry" => self.obj().entry().to_value(), _ => unimplemented!(), } } @@ -79,7 +73,7 @@ glib::wrapper! { impl EntryRow { pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create EntryRow") + glib::Object::new(&[]) } pub fn entry(&self) -> Option { diff --git a/src/session/sidebar/item_list.rs b/src/session/sidebar/item_list.rs index 4b7a2600..05e58af7 100644 --- a/src/session/sidebar/item_list.rs +++ b/src/session/sidebar/item_list.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() { "room-list" => obj.set_room_list(value.get().unwrap()), "verification-list" => obj.set_verification_list(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() { "room-list" => obj.room_list().to_value(), "verification-list" => obj.verification_list().to_value(), @@ -84,8 +82,9 @@ mod imp { } } - fn constructed(&self, obj: &Self::Type) { - self.parent_constructed(obj); + fn constructed(&self) { + self.parent_constructed(); + let obj = self.obj(); let room_list = obj.room_list(); let verification_list = obj.verification_list(); @@ -119,11 +118,11 @@ mod imp { } impl ListModelImpl for ItemList { - fn item_type(&self, _list_model: &Self::Type) -> glib::Type { + fn item_type(&self) -> glib::Type { SidebarItem::static_type() } - fn n_items(&self, _list_model: &Self::Type) -> u32 { + fn n_items(&self) -> u32 { self.list .get() .unwrap() @@ -132,7 +131,7 @@ mod imp { .count() as u32 } - fn item(&self, _list_model: &Self::Type, position: u32) -> Option { + fn item(&self, position: u32) -> Option { self.list .get() .unwrap() @@ -156,11 +155,10 @@ glib::wrapper! { impl ItemList { pub fn new(room_list: &RoomList, verification_list: &VerificationList) -> Self { - glib::Object::new(&[ - ("room-list", room_list), - ("verification-list", verification_list), - ]) - .expect("Failed to create ItemList") + glib::Object::builder() + .property("room-list", room_list) + .property("verification-list", verification_list) + .build() } pub fn show_all_for_category(&self) -> CategoryType { diff --git a/src/session/sidebar/mod.rs b/src/session/sidebar/mod.rs index 36692ee7..c2aeadaa 100644 --- a/src/session/sidebar/mod.rs +++ b/src/session/sidebar/mod.rs @@ -171,33 +171,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) { + let obj = self.obj(); + match pspec.name() { - "compact" => { - let compact = value.get().unwrap(); - self.compact.set(compact); - } - "user" => { - obj.set_user(value.get().unwrap()); - } - "item-list" => { - obj.set_item_list(value.get().unwrap()); - } - "selected-item" => { - let selected_item = value.get().unwrap(); - obj.set_selected_item(selected_item); - } + "compact" => self.compact.set(value.get().unwrap()), + "user" => obj.set_user(value.get().unwrap()), + "item-list" => obj.set_item_list(value.get().unwrap()), + "selected-item" => obj.set_selected_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(), "user" => obj.user().to_value(), @@ -211,8 +199,9 @@ mod imp { } } - fn constructed(&self, obj: &Self::Type) { - self.parent_constructed(obj); + fn constructed(&self) { + self.parent_constructed(); + let obj = self.obj(); let factory = gtk::SignalListItemFactory::new(); factory.connect_setup(clone!(@weak obj => move |_, item| { @@ -269,10 +258,11 @@ mod imp { } impl WidgetImpl for Sidebar { - fn focus(&self, widget: &Self::Type, direction_type: gtk::DirectionType) -> bool { + fn focus(&self, direction_type: gtk::DirectionType) -> bool { // WORKAROUND: This works around the tab behavior `gtk::ListViews have` // See: https://gitlab.gnome.org/GNOME/gtk/-/issues/4840 - let focus_child = widget + let focus_child = self + .obj() .focus_child() .and_then(|w| w.focus_child()) .and_then(|w| w.focus_child()); @@ -284,7 +274,7 @@ mod imp { { false } else { - self.parent_focus(widget, direction_type) + self.parent_focus(direction_type) } } } @@ -298,7 +288,7 @@ glib::wrapper! { impl Sidebar { pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create Sidebar") + glib::Object::new(&[]) } pub fn selected_item(&self) -> Option { @@ -334,8 +324,8 @@ impl Sidebar { item.clone().downcast::().ok() }); - let room_expression = gtk::ClosureExpression::new::( - &[], + let room_expression = gtk::ClosureExpression::new::( + &[] as &[gtk::Expression], closure!(|row: gtk::TreeListRow| { row.item() .and_then(|o| o.downcast::().ok()) diff --git a/src/session/sidebar/room_row.rs b/src/session/sidebar/room_row.rs index 13a97a46..ca00fe85 100644 --- a/src/session/sidebar/room_row.rs +++ b/src/session/sidebar/room_row.rs @@ -89,28 +89,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(); // Allow to drag rooms let drag = gtk::DragSource::builder() @@ -130,7 +125,7 @@ mod imp { obj.add_controller(&drag); } - fn dispose(&self, _obj: &Self::Type) { + fn dispose(&self) { if let Some(room) = self.room.take() { if let Some(id) = self.signal_handler.take() { room.disconnect(id); @@ -143,7 +138,9 @@ mod imp { impl BinImpl for RoomRow {} impl ContextMenuBinImpl for RoomRow { - fn menu_opened(&self, obj: &Self::Type) { + fn menu_opened(&self) { + let obj = self.obj(); + if let Some(sidebar) = obj .parent() .as_ref() @@ -164,7 +161,7 @@ glib::wrapper! { impl RoomRow { pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create RoomRow") + glib::Object::new(&[]) } pub fn room(&self) -> Option { @@ -196,7 +193,7 @@ impl RoomRow { "visible", ) .flags(glib::BindingFlags::SYNC_CREATE) - .transform_from(|_, value| Some((value.get::().unwrap() > 0).to_value())) + .transform_from(|_, count: u64| Some(count > 0)) .build(), )); diff --git a/src/session/sidebar/row.rs b/src/session/sidebar/row.rs index aff2e0ad..e6ed94cf 100644 --- a/src/session/sidebar/row.rs +++ b/src/session/sidebar/row.rs @@ -67,13 +67,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() { "list-row" => obj.set_list_row(value.get().unwrap()), "sidebar" => self.sidebar.set(value.get().ok().as_ref()), @@ -81,7 +77,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(), "list-row" => obj.list_row().to_value(), @@ -90,8 +88,9 @@ mod imp { } } - fn constructed(&self, obj: &Self::Type) { - self.parent_constructed(obj); + fn constructed(&self) { + self.parent_constructed(); + let obj = self.obj(); // Set up drop controller let drop = gtk::DropTarget::builder() @@ -124,7 +123,7 @@ glib::wrapper! { impl Row { pub fn new(sidebar: &Sidebar) -> Self { - glib::Object::new(&[("sidebar", sidebar)]).expect("Failed to create Row") + glib::Object::builder().property("sidebar", sidebar).build() } pub fn sidebar(&self) -> Sidebar { diff --git a/src/session/sidebar/selection.rs b/src/session/sidebar/selection.rs index 97e0007b..c74cb096 100644 --- a/src/session/sidebar/selection.rs +++ b/src/session/sidebar/selection.rs @@ -62,28 +62,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) { + let obj = self.obj(); + match pspec.name() { "model" => { let model: Option = value.get().unwrap(); obj.set_model(model.as_ref()); } - "selected" => { - let selected = value.get().unwrap(); - obj.set_selected(selected); - } + "selected" => obj.set_selected(value.get().unwrap()), "selected-item" => obj.set_selected_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() { "model" => obj.model().to_value(), "selected" => obj.selected().to_value(), @@ -94,28 +89,23 @@ mod imp { } impl ListModelImpl for Selection { - fn item_type(&self, _list_model: &Self::Type) -> glib::Type { + fn item_type(&self) -> glib::Type { gtk::TreeListRow::static_type() } - fn n_items(&self, _list_model: &Self::Type) -> u32 { + fn n_items(&self) -> u32 { self.model .borrow() .as_ref() .map(|m| m.n_items()) .unwrap_or(0) } - fn item(&self, _list_model: &Self::Type, position: u32) -> Option { + fn item(&self, position: u32) -> Option { self.model.borrow().as_ref().and_then(|m| m.item(position)) } } impl SelectionModelImpl for Selection { - fn selection_in_range( - &self, - _model: &Self::Type, - _position: u32, - _n_items: u32, - ) -> gtk::Bitset { + fn selection_in_range(&self, _position: u32, _n_items: u32) -> gtk::Bitset { let bitset = gtk::Bitset::new_empty(); let selected = self.selected.get(); @@ -126,7 +116,7 @@ mod imp { bitset } - fn is_selected(&self, _model: &Self::Type, position: u32) -> bool { + fn is_selected(&self, position: u32) -> bool { self.selected.get() == position } } @@ -140,7 +130,7 @@ glib::wrapper! { impl Selection { pub fn new>(model: Option<&P>) -> Selection { let model = model.map(|m| m.clone().upcast()); - glib::Object::new(&[("model", &model)]).expect("Failed to create Selection") + glib::Object::builder().property("model", &model).build() } pub fn model(&self) -> Option { diff --git a/src/session/sidebar/sidebar_item.rs b/src/session/sidebar/sidebar_item.rs index 339ed663..f16bd419 100644 --- a/src/session/sidebar/sidebar_item.rs +++ b/src/session/sidebar/sidebar_item.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() { - "visible" => obj.set_visible(value.get().unwrap()), + "visible" => self.obj().set_visible(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() { - "visible" => obj.visible().to_value(), + "visible" => self.obj().visible().to_value(), _ => unimplemented!(), } } @@ -134,7 +128,7 @@ impl> SidebarItemExt for O { /// Overriding a method from this Trait overrides also its behavior in /// `SidebarItemExt`. pub trait SidebarItemImpl: ObjectImpl { - fn update_visibility(&self, _obj: &Self::Type, _for_category: CategoryType) {} + fn update_visibility(&self, _for_category: CategoryType) {} } // Make `SidebarItem` subclassable. @@ -159,5 +153,5 @@ where T::Type: IsA, { let this = this.downcast_ref::().unwrap(); - this.imp().update_visibility(this, for_category) + this.imp().update_visibility(for_category) } diff --git a/src/session/sidebar/verification_row.rs b/src/session/sidebar/verification_row.rs index f6083a84..d13dfbf2 100644 --- a/src/session/sidebar/verification_row.rs +++ b/src/session/sidebar/verification_row.rs @@ -47,22 +47,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() { - "identity-verification" => obj.set_identity_verification(value.get().unwrap()), + "identity-verification" => { + self.obj().set_identity_verification(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() { - "identity-verification" => obj.identity_verification().to_value(), + "identity-verification" => self.obj().identity_verification().to_value(), _ => unimplemented!(), } } @@ -79,7 +75,7 @@ glib::wrapper! { impl VerificationRow { pub fn new() -> Self { - glib::Object::new(&[]).expect("Failed to create VerificationRow") + glib::Object::new(&[]) } pub fn identity_verification(&self) -> Option { diff --git a/src/session/user.rs b/src/session/user.rs index 31a94279..99cff2c9 100644 --- a/src/session/user.rs +++ b/src/session/user.rs @@ -102,13 +102,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() { "user-id" => { self.user_id @@ -116,14 +110,16 @@ mod imp { .unwrap(); } "display-name" => { - obj.set_display_name(value.get().unwrap()); + self.obj().set_display_name(value.get().unwrap()); } "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() { "display-name" => obj.display_name().to_value(), "user-id" => obj.user_id().as_str().to_value(), @@ -135,8 +131,9 @@ mod imp { } } - fn constructed(&self, obj: &Self::Type) { - self.parent_constructed(obj); + fn constructed(&self) { + self.parent_constructed(); + let obj = self.obj(); let avatar = Avatar::new(&obj.session(), None); self.avatar.set(avatar).unwrap(); @@ -157,8 +154,10 @@ glib::wrapper! { impl User { pub fn new(session: &Session, user_id: &UserId) -> Self { - glib::Object::new(&[("session", session), ("user-id", &user_id.as_str())]) - .expect("Failed to create User") + glib::Object::builder() + .property("session", session) + .property("user-id", &user_id.as_str()) + .build() } pub async fn crypto_identity(&self) -> Option { diff --git a/src/session/verification/identity_verification.rs b/src/session/verification/identity_verification.rs index 2e4020f3..9e3728a8 100644 --- a/src/session/verification/identity_verification.rs +++ b/src/session/verification/identity_verification.rs @@ -277,13 +277,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()), "session" => obj.set_session(value.get().unwrap()), @@ -296,7 +292,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(), "session" => obj.session().to_value(), @@ -312,8 +310,9 @@ mod imp { } } - fn constructed(&self, obj: &Self::Type) { - self.parent_constructed(obj); + fn constructed(&self) { + self.parent_constructed(); + let obj = self.obj(); let (main_sender, main_receiver) = glib::MainContext::sync_channel::(Default::default(), 100); @@ -354,8 +353,8 @@ mod imp { obj.start_handler(); } - fn dispose(&self, obj: &Self::Type) { - obj.cancel(true); + fn dispose(&self) { + self.obj().cancel(true); } } @@ -369,13 +368,12 @@ glib::wrapper! { impl IdentityVerification { fn for_error(session: &Session, user: &User, start_time: &glib::DateTime) -> Self { - glib::Object::new(&[ - ("state", &State::Error), - ("session", session), - ("user", user), - ("start-time", start_time), - ]) - .expect("Failed to create IdentityVerification") + glib::Object::builder() + .property("state", &State::Error) + .property("session", session) + .property("user", user) + .property("start-time", start_time) + .build() } /// Create a new object tracking an already existing verification request @@ -385,14 +383,13 @@ impl IdentityVerification { user: &User, start_time: &glib::DateTime, ) -> Self { - glib::Object::new(&[ - ("flow-id", &flow_id), - ("session", session), - ("user", user), - ("supported-methods", &SupportedMethods::with_camera(true)), - ("start-time", start_time), - ]) - .expect("Failed to create IdentityVerification") + glib::Object::builder() + .property("flow-id", &flow_id) + .property("session", session) + .property("user", user) + .property("supported-methods", &SupportedMethods::with_camera(true)) + .property("start-time", start_time) + .build() } /// Creates and send a new verification request. @@ -418,15 +415,14 @@ impl IdentityVerification { match handle.await.unwrap() { Ok(request) => { - let obj = glib::Object::new(&[ - ("state", &State::RequestSend), - ("supported-methods", &supported_methods), - ("flow-id", &request.flow_id()), - ("session", session), - ("user", user), - ("start-time", &glib::DateTime::now_local().unwrap()), - ]) - .expect("Failed to create IdentityVerification"); + let obj = glib::Object::builder() + .property("state", &State::RequestSend) + .property("supported-methods", &supported_methods) + .property("flow-id", &request.flow_id()) + .property("session", session) + .property("user", user) + .property("start-time", &glib::DateTime::now_local().unwrap()) + .build(); return obj; } diff --git a/src/session/verification/verification_list.rs b/src/session/verification/verification_list.rs index b0f31fa4..d50cd929 100644 --- a/src/session/verification/verification_list.rs +++ b/src/session/verification/verification_list.rs @@ -82,35 +82,29 @@ 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!(), } } } impl ListModelImpl for VerificationList { - fn item_type(&self, _list_model: &Self::Type) -> glib::Type { + fn item_type(&self) -> glib::Type { IdentityVerification::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 { + fn item(&self, position: u32) -> Option { self.list .borrow() .get_index(position as usize) @@ -126,7 +120,7 @@ glib::wrapper! { impl VerificationList { pub fn new(session: &Session) -> Self { - glib::Object::new(&[("session", session)]).expect("Failed to create VerificationList") + glib::Object::builder().property("session", session).build() } pub fn session(&self) -> Session { diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 6182f033..b7fcd2ac 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -25,7 +25,7 @@ use regex::Regex; /// expressions. #[allow(dead_code)] pub fn and_expr>(a_expr: E, b_expr: E) -> gtk::ClosureExpression { - gtk::ClosureExpression::new::( + gtk::ClosureExpression::new::( &[a_expr, b_expr], closure!(|_: Option, a: bool, b: bool| { a && b }), ) @@ -34,7 +34,7 @@ pub fn and_expr>(a_expr: E, b_expr: E) -> gtk::Closure /// Returns an expression that is the or’ed result of the given boolean /// expressions. pub fn or_expr>(a_expr: E, b_expr: E) -> gtk::ClosureExpression { - gtk::ClosureExpression::new::( + gtk::ClosureExpression::new::( &[a_expr, b_expr], closure!(|_: Option, a: bool, b: bool| { a || b }), ) @@ -44,10 +44,7 @@ pub fn or_expr>(a_expr: E, b_expr: E) -> gtk::ClosureE /// expressions. #[allow(dead_code)] pub fn not_expr>(a_expr: E) -> gtk::ClosureExpression { - gtk::ClosureExpression::new::( - &[a_expr], - closure!(|_: Option, a: bool| { !a }), - ) + gtk::ClosureExpression::new::(&[a_expr], closure!(|_: Option, a: bool| { !a })) } /// Get the cache directory. diff --git a/src/utils/notifications.rs b/src/utils/notifications.rs index cb84a580..4016c268 100644 --- a/src/utils/notifications.rs +++ b/src/utils/notifications.rs @@ -78,7 +78,7 @@ pub fn paintable_as_notification_icon( ); snapshot.push_rounded_clip(&bounds); - paintable.snapshot(snapshot.upcast_ref(), snap_width, snap_height); + paintable.snapshot(&snapshot, snap_width, snap_height); snapshot.pop(); @@ -139,11 +139,10 @@ pub fn string_as_notification_icon( let layout = helper_widget.create_pango_layout(Some(&initials)); // Set the proper weight and size. - if let Some(mut font_description) = layout.font_description().or_else(|| { - layout - .context() - .and_then(|context| context.font_description()) - }) { + if let Some(mut font_description) = layout + .font_description() + .or_else(|| layout.context().font_description()) + { font_description.set_weight(pango::Weight::Bold); font_description.set_size(18 * scale_factor * pango::SCALE); layout.set_font_description(Some(&font_description)); diff --git a/src/window.rs b/src/window.rs index 6e098aaf..dd1c8cac 100644 --- a/src/window.rs +++ b/src/window.rs @@ -94,15 +94,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() { - "has-sessions" => obj.has_sessions().to_value(), + "has-sessions" => self.obj().has_sessions().to_value(), _ => unimplemented!(), } } - fn constructed(&self, obj: &Self::Type) { - self.parent_constructed(obj); + fn constructed(&self) { + self.parent_constructed(); + let obj = self.obj(); let builder = gtk::Builder::from_resource("/org/gnome/Fractal/shortcuts.ui"); let shortcuts = builder.object("shortcuts").unwrap(); @@ -149,8 +150,8 @@ mod imp { impl WindowImpl for Window { // save window state on delete event - fn close_request(&self, obj: &Self::Type) -> Inhibit { - if let Err(err) = obj.save_window_size() { + fn close_request(&self) -> Inhibit { + if let Err(err) = self.obj().save_window_size() { warn!("Failed to save window state, {}", &err); } Inhibit(false) @@ -169,8 +170,10 @@ glib::wrapper! { impl Window { pub fn new(app: &Application) -> Self { - glib::Object::new(&[("application", &Some(app)), ("icon-name", &Some(APP_ID))]) - .expect("Failed to create Window") + glib::Object::builder() + .property("application", &Some(app)) + .property("icon-name", &Some(APP_ID)) + .build() } pub fn add_session(&self, session: &Session) {