1
1
use crate :: preferences:: GlobalPreferences ;
2
2
use anyhow:: Error ;
3
- use arboard:: Clipboard ;
4
3
use chrono:: { DateTime , Utc } ;
4
+ use egui_winit:: clipboard:: Clipboard ;
5
5
use fontdb:: Family ;
6
6
use rfd:: {
7
7
AsyncFileDialog , FileHandle , MessageButtons , MessageDialog , MessageDialogResult , MessageLevel ,
@@ -14,6 +14,7 @@ use ruffle_core::backend::ui::{
14
14
use std:: rc:: Rc ;
15
15
use tracing:: error;
16
16
use url:: Url ;
17
+ use winit:: raw_window_handle:: HasDisplayHandle ;
17
18
use winit:: window:: { Fullscreen , Window } ;
18
19
19
20
pub struct DesktopFileDialogResult {
@@ -117,7 +118,7 @@ impl FileDialogResult for DesktopFileDialogResult {
117
118
pub struct DesktopUiBackend {
118
119
window : Rc < Window > ,
119
120
cursor_visible : bool ,
120
- clipboard : Option < Clipboard > ,
121
+ clipboard : Clipboard ,
121
122
preferences : GlobalPreferences ,
122
123
preferred_cursor : MouseCursor ,
123
124
open_url_mode : OpenURLMode ,
@@ -133,12 +134,19 @@ impl DesktopUiBackend {
133
134
font_database : Rc < fontdb:: Database > ,
134
135
preferences : GlobalPreferences ,
135
136
) -> Result < Self , Error > {
137
+ // The window handle is only relevant to linux/wayland
138
+ // If it fails it'll fallback to x11 or wlr-data-control
139
+ let clipboard = Clipboard :: new (
140
+ window
141
+ . clone ( )
142
+ . display_handle ( )
143
+ . ok ( )
144
+ . map ( |handle| handle. as_raw ( ) ) ,
145
+ ) ;
136
146
Ok ( Self {
137
147
window,
138
148
cursor_visible : true ,
139
- clipboard : Clipboard :: new ( )
140
- . inspect_err ( |err| tracing:: error!( "Failed to initialize clipboard: {err}" ) )
141
- . ok ( ) ,
149
+ clipboard,
142
150
preferences,
143
151
preferred_cursor : MouseCursor :: Arrow ,
144
152
open_url_mode,
@@ -177,19 +185,11 @@ impl UiBackend for DesktopUiBackend {
177
185
}
178
186
179
187
fn clipboard_content ( & mut self ) -> String {
180
- if let Some ( ref mut clipboard) = self . clipboard {
181
- clipboard. get_text ( ) . unwrap_or_default ( )
182
- } else {
183
- "" . to_string ( )
184
- }
188
+ self . clipboard . get ( ) . unwrap_or_default ( )
185
189
}
186
190
187
191
fn set_clipboard_content ( & mut self , content : String ) {
188
- if let Some ( ref mut clipboard) = self . clipboard {
189
- if let Err ( e) = clipboard. set_text ( content) {
190
- error ! ( "Couldn't set clipboard contents: {:?}" , e) ;
191
- }
192
- }
192
+ self . clipboard . set ( content) ;
193
193
}
194
194
195
195
fn set_fullscreen ( & mut self , is_full : bool ) -> Result < ( ) , FullscreenError > {
0 commit comments