@@ -53,7 +53,7 @@ use ordermap::OrderMap;
5353use serde:: { Deserialize , Serialize } ;
5454use std:: {
5555 borrow:: Cow ,
56- cell:: Cell ,
56+ cell:: { Cell , RefCell } ,
5757 cmp:: Ordering ,
5858 collections:: HashMap ,
5959 error:: Error ,
@@ -63,7 +63,8 @@ use std::{
6363 io:: { BufRead , BufReader } ,
6464 os:: unix:: fs:: MetadataExt ,
6565 path:: { Path , PathBuf } ,
66- sync:: { Arc , LazyLock , Mutex , RwLock , atomic} ,
66+ rc:: Rc ,
67+ sync:: { Arc , LazyLock , RwLock , atomic} ,
6768 time:: { Duration , Instant , SystemTime } ,
6869} ;
6970use tempfile:: NamedTempFile ;
@@ -5449,7 +5450,7 @@ impl Tab {
54495450 let view = self . config . view ;
54505451 let item_view = match drag_list {
54515452 Some ( drag_list) if self . selected_clicked => {
5452- let drag_list = ArcElementWrapper :: < Message > ( Arc :: new ( Mutex :: new ( drag_list) ) ) ;
5453+ let drag_list = RcElementWrapper :: < Message > ( Rc :: new ( RefCell :: new ( drag_list) ) ) ;
54535454 item_view
54545455 . drag_content ( move || {
54555456 ClipboardCopy :: new ( crate :: clipboard:: ClipboardKind :: Copy , & files)
@@ -5913,15 +5914,15 @@ pub fn respond_to_scroll_direction(delta: ScrollDelta, modifiers: Modifiers) ->
59135914}
59145915
59155916#[ derive( Clone ) ]
5916- pub struct ArcElementWrapper < M > ( pub Arc < Mutex < Element < ' static , M > > > ) ;
5917+ pub struct RcElementWrapper < M > ( pub Rc < RefCell < Element < ' static , M > > > ) ;
59175918
5918- impl < M > Widget < M , cosmic:: Theme , cosmic:: Renderer > for ArcElementWrapper < M > {
5919+ impl < M > Widget < M , cosmic:: Theme , cosmic:: Renderer > for RcElementWrapper < M > {
59195920 fn size ( & self ) -> Size < Length > {
5920- self . 0 . lock ( ) . unwrap ( ) . as_widget ( ) . size ( )
5921+ self . 0 . borrow ( ) . as_widget ( ) . size ( )
59215922 }
59225923
59235924 fn size_hint ( & self ) -> Size < Length > {
5924- self . 0 . lock ( ) . unwrap ( ) . as_widget ( ) . size_hint ( )
5925+ self . 0 . borrow ( ) . as_widget ( ) . size_hint ( )
59255926 }
59265927
59275928 fn layout (
@@ -5930,11 +5931,7 @@ impl<M> Widget<M, cosmic::Theme, cosmic::Renderer> for ArcElementWrapper<M> {
59305931 renderer : & cosmic:: Renderer ,
59315932 limits : & cosmic:: iced_core:: layout:: Limits ,
59325933 ) -> cosmic:: iced_core:: layout:: Node {
5933- self . 0
5934- . lock ( )
5935- . unwrap ( )
5936- . as_widget_mut ( )
5937- . layout ( tree, renderer, limits)
5934+ self . 0 . borrow ( ) . as_widget ( ) . layout ( tree, renderer, limits)
59385935 }
59395936
59405937 fn draw (
@@ -5948,26 +5945,25 @@ impl<M> Widget<M, cosmic::Theme, cosmic::Renderer> for ArcElementWrapper<M> {
59485945 viewport : & Rectangle ,
59495946 ) {
59505947 self . 0
5951- . lock ( )
5952- . unwrap ( )
5948+ . borrow ( )
59535949 . as_widget ( )
59545950 . draw ( tree, renderer, theme, style, layout, cursor, viewport)
59555951 }
59565952
59575953 fn tag ( & self ) -> tree:: Tag {
5958- self . 0 . lock ( ) . unwrap ( ) . as_widget ( ) . tag ( )
5954+ self . 0 . borrow ( ) . as_widget ( ) . tag ( )
59595955 }
59605956
59615957 fn state ( & self ) -> tree:: State {
5962- self . 0 . lock ( ) . unwrap ( ) . as_widget ( ) . state ( )
5958+ self . 0 . borrow ( ) . as_widget ( ) . state ( )
59635959 }
59645960
59655961 fn children ( & self ) -> Vec < tree:: Tree > {
5966- self . 0 . lock ( ) . unwrap ( ) . as_widget ( ) . children ( )
5962+ self . 0 . borrow ( ) . as_widget ( ) . children ( )
59675963 }
59685964
59695965 fn diff ( & mut self , tree : & mut tree:: Tree ) {
5970- self . 0 . lock ( ) . unwrap ( ) . as_widget_mut ( ) . diff ( tree)
5966+ self . 0 . borrow_mut ( ) . as_widget_mut ( ) . diff ( tree)
59715967 }
59725968
59735969 fn operate (
@@ -5978,8 +5974,7 @@ impl<M> Widget<M, cosmic::Theme, cosmic::Renderer> for ArcElementWrapper<M> {
59785974 operation : & mut dyn widget:: Operation ,
59795975 ) {
59805976 self . 0
5981- . lock ( )
5982- . unwrap ( )
5977+ . borrow ( )
59835978 . as_widget ( )
59845979 . operate ( state, layout, renderer, operation)
59855980 }
@@ -5995,7 +5990,7 @@ impl<M> Widget<M, cosmic::Theme, cosmic::Renderer> for ArcElementWrapper<M> {
59955990 _shell : & mut cosmic:: iced_core:: Shell < ' _ , M > ,
59965991 _viewport : & Rectangle ,
59975992 ) -> event:: Status {
5998- self . 0 . lock ( ) . unwrap ( ) . as_widget_mut ( ) . on_event (
5993+ self . 0 . borrow_mut ( ) . as_widget_mut ( ) . on_event (
59995994 _state, _event, _layout, _cursor, _renderer, _clipboard, _shell, _viewport,
60005995 )
60015996 }
@@ -6009,8 +6004,7 @@ impl<M> Widget<M, cosmic::Theme, cosmic::Renderer> for ArcElementWrapper<M> {
60096004 _renderer : & cosmic:: Renderer ,
60106005 ) -> cosmic:: iced_core:: mouse:: Interaction {
60116006 self . 0
6012- . lock ( )
6013- . unwrap ( )
6007+ . borrow ( )
60146008 . as_widget ( )
60156009 . mouse_interaction ( _state, _layout, _cursor, _viewport, _renderer)
60166010 }
@@ -6027,11 +6021,11 @@ impl<M> Widget<M, cosmic::Theme, cosmic::Renderer> for ArcElementWrapper<M> {
60276021 }
60286022
60296023 fn id ( & self ) -> Option < Id > {
6030- self . 0 . lock ( ) . unwrap ( ) . as_widget ( ) . id ( )
6024+ self . 0 . borrow ( ) . as_widget ( ) . id ( )
60316025 }
60326026
60336027 fn set_id ( & mut self , _id : Id ) {
6034- self . 0 . lock ( ) . unwrap ( ) . as_widget_mut ( ) . set_id ( _id)
6028+ self . 0 . borrow_mut ( ) . as_widget_mut ( ) . set_id ( _id)
60356029 }
60366030
60376031 fn drag_destinations (
@@ -6041,17 +6035,15 @@ impl<M> Widget<M, cosmic::Theme, cosmic::Renderer> for ArcElementWrapper<M> {
60416035 renderer : & cosmic:: Renderer ,
60426036 _dnd_rectangles : & mut cosmic:: iced_core:: clipboard:: DndDestinationRectangles ,
60436037 ) {
6044- self . 0 . lock ( ) . unwrap ( ) . as_widget ( ) . drag_destinations (
6045- _state,
6046- _layout,
6047- renderer,
6048- _dnd_rectangles,
6049- )
6038+ self . 0
6039+ . borrow ( )
6040+ . as_widget ( )
6041+ . drag_destinations ( _state, _layout, renderer, _dnd_rectangles)
60506042 }
60516043}
60526044
6053- impl < Message : ' static > From < ArcElementWrapper < Message > > for Element < ' static , Message > {
6054- fn from ( wrapper : ArcElementWrapper < Message > ) -> Self {
6045+ impl < Message : ' static > From < RcElementWrapper < Message > > for Element < ' static , Message > {
6046+ fn from ( wrapper : RcElementWrapper < Message > ) -> Self {
60556047 Element :: new ( wrapper)
60566048 }
60576049}
0 commit comments