fixes: various fixes and cleanup
This commit is contained in:
parent
b4346ff3ca
commit
c1edb81084
27 changed files with 676 additions and 1455 deletions
|
|
@ -1,7 +1,7 @@
|
|||
//! Wayland specific shell
|
||||
//!
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::{borrow::Cow, collections::HashMap, sync::Arc};
|
||||
|
||||
#[cfg(all(feature = "wayland", target_os = "linux"))]
|
||||
use cctk::sctk::reexports::client::Connection;
|
||||
|
|
@ -20,7 +20,7 @@ pub use wayland::*;
|
|||
#[cfg(all(feature = "wayland", target_os = "linux"))]
|
||||
use wayland_backend::client::Backend;
|
||||
|
||||
use crate::{Program, WindowManager};
|
||||
use crate::{CreateCompositor, Program, WindowManager};
|
||||
|
||||
pub type UserInterfaces<'a, P> = HashMap<
|
||||
window::Id,
|
||||
|
|
@ -176,12 +176,14 @@ impl PlatformSpecific {
|
|||
}
|
||||
}
|
||||
|
||||
pub(crate) fn handle_event<'a, P>(
|
||||
pub(crate) async fn handle_event<'a, 'b, P>(
|
||||
e: Event,
|
||||
events: &mut Vec<(Option<window::Id>, iced_runtime::core::Event)>,
|
||||
platform_specific: &mut PlatformSpecific,
|
||||
program: &'a crate::program::Instance<P>,
|
||||
compositor: &mut <<P as Program>::Renderer as compositor::Default>::Compositor,
|
||||
compositor: &mut Option<
|
||||
<<P as Program>::Renderer as compositor::Default>::Compositor,
|
||||
>,
|
||||
window_manager: &mut WindowManager<
|
||||
P,
|
||||
<<P as Program>::Renderer as compositor::Default>::Compositor,
|
||||
|
|
@ -192,23 +194,28 @@ pub(crate) fn handle_event<'a, P>(
|
|||
window::Id,
|
||||
(u64, iced_accessibility::accesskit_winit::Adapter),
|
||||
>,
|
||||
create_compositor: CreateCompositor<'b, P>,
|
||||
) where
|
||||
P: Program,
|
||||
{
|
||||
match e {
|
||||
#[cfg(all(feature = "wayland", target_os = "linux"))]
|
||||
Event::Wayland(e) => {
|
||||
platform_specific.wayland.handle_event(
|
||||
e,
|
||||
events,
|
||||
program,
|
||||
compositor,
|
||||
window_manager,
|
||||
user_interfaces,
|
||||
clipboard,
|
||||
#[cfg(feature = "a11y")]
|
||||
adapters,
|
||||
);
|
||||
platform_specific
|
||||
.wayland
|
||||
.handle_event(
|
||||
e,
|
||||
events,
|
||||
program,
|
||||
compositor,
|
||||
window_manager,
|
||||
user_interfaces,
|
||||
clipboard,
|
||||
#[cfg(feature = "a11y")]
|
||||
adapters,
|
||||
create_compositor,
|
||||
)
|
||||
.await;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1232,7 +1232,6 @@ impl SctkState {
|
|||
found |= p.data.id == settings.parent;
|
||||
parent_mismatch |= found && p.data.id != settings.parent;
|
||||
}
|
||||
parent_mismatch |= !found;
|
||||
if !self.destroyed.is_empty() || parent_mismatch {
|
||||
if parent_mismatch {
|
||||
let mut found = false;
|
||||
|
|
|
|||
|
|
@ -893,3 +893,195 @@ pub fn keysym_location(keysym: u32) -> Location {
|
|||
_ => Location::Standard,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn key_to_keysym(
|
||||
unmodified_key: Key,
|
||||
location: Location,
|
||||
) -> Option<xkeysym::Keysym> {
|
||||
use xkbcommon_dl::keysyms;
|
||||
|
||||
let raw = match unmodified_key {
|
||||
Key::Named(named) => Some(match (named, location) {
|
||||
(Named::Escape, _) => keysyms::Escape,
|
||||
(Named::Backspace, _) => keysyms::BackSpace,
|
||||
(Named::Tab, _) => keysyms::Tab,
|
||||
(Named::Enter, _) => keysyms::Return,
|
||||
|
||||
(Named::Compose, _) => keysyms::Multi_key,
|
||||
|
||||
(Named::KanjiMode, _) => keysyms::Kanji,
|
||||
(Named::Eisu, _) => keysyms::Eisu_toggle,
|
||||
(Named::NonConvert, _) => keysyms::Muhenkan,
|
||||
(Named::Convert, _) => keysyms::Henkan_Mode,
|
||||
(Named::Romaji, _) => keysyms::Romaji,
|
||||
(Named::Hiragana, _) => keysyms::Hiragana,
|
||||
(Named::Katakana, _) => keysyms::Katakana,
|
||||
(Named::HiraganaKatakana, _) => keysyms::Hiragana_Katakana,
|
||||
(Named::Zenkaku, _) => keysyms::Zenkaku,
|
||||
(Named::Hankaku, _) => keysyms::Hankaku,
|
||||
(Named::ZenkakuHankaku, _) => keysyms::Zenkaku_Hankaku,
|
||||
(Named::KanaMode, _) => keysyms::Kana_Lock,
|
||||
(Named::Alphanumeric, _) => keysyms::Eisu_toggle,
|
||||
(Named::CodeInput, _) => keysyms::Codeinput,
|
||||
(Named::AllCandidates, _) => keysyms::MultipleCandidate,
|
||||
(Named::PreviousCandidate, _) => keysyms::PreviousCandidate,
|
||||
(Named::SingleCandidate, _) => keysyms::SingleCandidate,
|
||||
|
||||
(Named::ArrowUp, _) => keysyms::Up,
|
||||
(Named::ArrowDown, _) => keysyms::Down,
|
||||
(Named::ArrowLeft, _) => keysyms::Left,
|
||||
(Named::ArrowRight, _) => keysyms::Right,
|
||||
(Named::PageUp, _) => keysyms::Page_Up,
|
||||
(Named::PageDown, _) => keysyms::Page_Down,
|
||||
(Named::Home, _) => keysyms::Home,
|
||||
(Named::End, _) => keysyms::End,
|
||||
(Named::Insert, _) => keysyms::Insert,
|
||||
(Named::Delete, _) => keysyms::Delete,
|
||||
|
||||
(Named::Undo, _) => keysyms::Undo,
|
||||
(Named::Redo, _) => keysyms::Redo,
|
||||
(Named::ContextMenu, _) => keysyms::Menu,
|
||||
(Named::Find, _) => keysyms::Find,
|
||||
(Named::Cancel, _) => keysyms::Cancel,
|
||||
(Named::Help, _) => keysyms::Help,
|
||||
(Named::Pause, _) => keysyms::Break,
|
||||
(Named::ModeChange, _) => keysyms::Mode_switch,
|
||||
(Named::NumLock, _) => keysyms::Num_Lock,
|
||||
(Named::CapsLock, _) => keysyms::Caps_Lock,
|
||||
(Named::ScrollLock, _) => keysyms::Scroll_Lock,
|
||||
(Named::PrintScreen, _) => keysyms::Print,
|
||||
|
||||
(Named::F1, _) => keysyms::F1,
|
||||
(Named::F2, _) => keysyms::F2,
|
||||
(Named::F3, _) => keysyms::F3,
|
||||
(Named::F4, _) => keysyms::F4,
|
||||
(Named::F5, _) => keysyms::F5,
|
||||
(Named::F6, _) => keysyms::F6,
|
||||
(Named::F7, _) => keysyms::F7,
|
||||
(Named::F8, _) => keysyms::F8,
|
||||
(Named::F9, _) => keysyms::F9,
|
||||
(Named::F10, _) => keysyms::F10,
|
||||
(Named::F11, _) => keysyms::F11,
|
||||
(Named::F12, _) => keysyms::F12,
|
||||
(Named::F13, _) => keysyms::F13,
|
||||
(Named::F14, _) => keysyms::F14,
|
||||
(Named::F15, _) => keysyms::F15,
|
||||
(Named::F16, _) => keysyms::F16,
|
||||
(Named::F17, _) => keysyms::F17,
|
||||
(Named::F18, _) => keysyms::F18,
|
||||
(Named::F19, _) => keysyms::F19,
|
||||
(Named::F20, _) => keysyms::F20,
|
||||
|
||||
(Named::Shift, _) => keysyms::Shift_L,
|
||||
(Named::Control, _) => keysyms::Control_L,
|
||||
(Named::Alt, _) => keysyms::Alt_L,
|
||||
(Named::Super, _) => keysyms::Super_L,
|
||||
(Named::Hyper, _) => keysyms::Hyper_L,
|
||||
(Named::Meta, _) => keysyms::Meta_L,
|
||||
|
||||
(Named::AltGraph, _) => keysyms::ISO_Level3_Shift,
|
||||
(Named::GroupNext, _) => keysyms::ISO_Next_Group,
|
||||
(Named::GroupPrevious, _) => keysyms::ISO_Prev_Group,
|
||||
(Named::GroupFirst, _) => keysyms::ISO_First_Group,
|
||||
(Named::GroupLast, _) => keysyms::ISO_Last_Group,
|
||||
|
||||
(Named::EraseEof, _) => keysyms::_3270_EraseEOF,
|
||||
(Named::Attn, _) => keysyms::_3270_Attn,
|
||||
(Named::Play, _) => keysyms::_3270_Play,
|
||||
(Named::ExSel, _) => keysyms::_3270_ExSelect,
|
||||
(Named::CrSel, _) => keysyms::_3270_CursorSelect,
|
||||
|
||||
(Named::Space, _) => keysyms::space,
|
||||
|
||||
// XF86 multimedia / internet / power keys (subset shown)
|
||||
(Named::BrightnessUp, _) => keysyms::XF86_MonBrightnessUp,
|
||||
(Named::BrightnessDown, _) => keysyms::XF86_MonBrightnessDown,
|
||||
(Named::Standby, _) => keysyms::XF86_Standby,
|
||||
(Named::AudioVolumeDown, _) => keysyms::XF86_AudioLowerVolume,
|
||||
(Named::AudioVolumeUp, _) => keysyms::XF86_AudioRaiseVolume,
|
||||
(Named::MediaPlay, _) => keysyms::XF86_AudioPlay,
|
||||
(Named::MediaStop, _) => keysyms::XF86_AudioStop,
|
||||
(Named::MediaTrackPrevious, _) => keysyms::XF86_AudioPrev,
|
||||
(Named::MediaTrackNext, _) => keysyms::XF86_AudioNext,
|
||||
(Named::BrowserHome, _) => keysyms::XF86_HomePage,
|
||||
(Named::LaunchMail, _) => keysyms::XF86_Mail,
|
||||
(Named::BrowserSearch, _) => keysyms::XF86_Search,
|
||||
(Named::MediaRecord, _) => keysyms::XF86_AudioRecord,
|
||||
(Named::LaunchApplication2, _) => keysyms::XF86_Calculator,
|
||||
(Named::LaunchCalendar, _) => keysyms::XF86_Calendar,
|
||||
(Named::Power, _) => keysyms::XF86_PowerDown,
|
||||
(Named::BrowserBack, _) => keysyms::XF86_Back,
|
||||
(Named::BrowserForward, _) => keysyms::XF86_Forward,
|
||||
(Named::BrowserRefresh, _) => keysyms::XF86_Refresh,
|
||||
(Named::WakeUp, _) => keysyms::XF86_WakeUp,
|
||||
(Named::Eject, _) => keysyms::XF86_Eject,
|
||||
(Named::LaunchScreenSaver, _) => keysyms::XF86_ScreenSaver,
|
||||
(Named::LaunchWebBrowser, _) => keysyms::XF86_WWW,
|
||||
(Named::BrowserFavorites, _) => keysyms::XF86_Favorites,
|
||||
(Named::MediaPause, _) => keysyms::XF86_AudioPause,
|
||||
(Named::LaunchApplication1, _) => keysyms::XF86_MyComputer,
|
||||
(Named::Close, _) => keysyms::XF86_Close,
|
||||
(Named::Copy, _) => keysyms::XF86_Copy,
|
||||
(Named::Cut, _) => keysyms::XF86_Cut,
|
||||
(Named::LaunchSpreadsheet, _) => keysyms::XF86_Excel,
|
||||
(Named::LogOff, _) => keysyms::XF86_LogOff,
|
||||
(Named::New, _) => keysyms::XF86_New,
|
||||
(Named::Open, _) => keysyms::XF86_Open,
|
||||
(Named::Paste, _) => keysyms::XF86_Paste,
|
||||
(Named::LaunchPhone, _) => keysyms::XF86_Phone,
|
||||
(Named::MailReply, _) => keysyms::XF86_Reply,
|
||||
(Named::Save, _) => keysyms::XF86_Save,
|
||||
(Named::MailSend, _) => keysyms::XF86_Send,
|
||||
(Named::SpellCheck, _) => keysyms::XF86_Spell,
|
||||
(Named::SplitScreenToggle, _) => keysyms::XF86_SplitScreen,
|
||||
(Named::LaunchMediaPlayer, _) => keysyms::XF86_Video,
|
||||
(Named::LaunchWordProcessor, _) => keysyms::XF86_Word,
|
||||
(Named::ZoomIn, _) => keysyms::XF86_ZoomIn,
|
||||
(Named::ZoomOut, _) => keysyms::XF86_ZoomOut,
|
||||
(Named::LaunchWebCam, _) => keysyms::XF86_WebCam,
|
||||
(Named::MailForward, _) => keysyms::XF86_MailForward,
|
||||
(Named::LaunchMusicPlayer, _) => keysyms::XF86_Music,
|
||||
(Named::MediaFastForward, _) => keysyms::XF86_AudioForward,
|
||||
(Named::RandomToggle, _) => keysyms::XF86_AudioRandomPlay,
|
||||
(Named::Subtitle, _) => keysyms::XF86_Subtitle,
|
||||
(Named::MediaAudioTrack, _) => keysyms::XF86_AudioCycleTrack,
|
||||
(Named::Hibernate, _) => keysyms::XF86_Hibernate,
|
||||
(Named::AudioVolumeMute, _) => keysyms::XF86_AudioMute,
|
||||
(Named::VideoModeNext, _) => keysyms::XF86_Next_VMode,
|
||||
|
||||
_ => return None,
|
||||
}),
|
||||
Key::Character(c) if c.chars().count() == 1 => {
|
||||
Some(match (c.chars().next(), location) {
|
||||
(Some('0'), Location::Numpad) => keysyms::KP_0,
|
||||
(Some('1'), Location::Numpad) => keysyms::KP_1,
|
||||
(Some('2'), Location::Numpad) => keysyms::KP_2,
|
||||
(Some('3'), Location::Numpad) => keysyms::KP_3,
|
||||
(Some('4'), Location::Numpad) => keysyms::KP_4,
|
||||
(Some('5'), Location::Numpad) => keysyms::KP_5,
|
||||
(Some('6'), Location::Numpad) => keysyms::KP_6,
|
||||
(Some('7'), Location::Numpad) => keysyms::KP_7,
|
||||
(Some('8'), Location::Numpad) => keysyms::KP_8,
|
||||
(Some('9'), Location::Numpad) => keysyms::KP_9,
|
||||
(Some('.'), Location::Numpad) => keysyms::KP_Decimal,
|
||||
(Some('+'), Location::Numpad) => keysyms::KP_Add,
|
||||
(Some('-'), Location::Numpad) => keysyms::KP_Subtract,
|
||||
(Some('*'), Location::Numpad) => keysyms::KP_Multiply,
|
||||
(Some('/'), Location::Numpad) => keysyms::KP_Divide,
|
||||
(Some('='), Location::Numpad) => keysyms::KP_Equal,
|
||||
|
||||
(Some(c), _) => unsafe {
|
||||
let keysym =
|
||||
xkbcommon::xkb::ffi::xkb_utf32_to_keysym(c as u32);
|
||||
if keysym == keysyms::NoSymbol {
|
||||
return None;
|
||||
}
|
||||
keysym
|
||||
},
|
||||
_ => return None,
|
||||
})
|
||||
}
|
||||
_ => None,
|
||||
};
|
||||
raw.map(|k| xkeysym::Keysym::new(k))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ pub mod subsurface_widget;
|
|||
pub mod winit_window;
|
||||
|
||||
use super::{PlatformSpecific, SurfaceIdWrapper};
|
||||
use crate::{Control, Program, WindowManager};
|
||||
use crate::{Control, CreateCompositor, Program, WindowManager};
|
||||
|
||||
use crate::platform_specific::UserInterfaces;
|
||||
use cctk::sctk::reexports::calloop;
|
||||
|
|
@ -150,12 +150,14 @@ impl WaylandSpecific {
|
|||
self.conn.as_ref()
|
||||
}
|
||||
|
||||
pub(crate) fn handle_event<'a, P>(
|
||||
pub(crate) async fn handle_event<'a, 'b, P>(
|
||||
&mut self,
|
||||
e: SctkEvent,
|
||||
events: &mut Vec<(Option<window::Id>, iced_runtime::core::Event)>,
|
||||
program: &'a crate::program::Instance<P>,
|
||||
compositor: &mut <<P as Program>::Renderer as compositor::Default>::Compositor,
|
||||
compositor: &mut Option<
|
||||
<<P as Program>::Renderer as compositor::Default>::Compositor,
|
||||
>,
|
||||
window_manager: &mut WindowManager<
|
||||
P,
|
||||
<<P as Program>::Renderer as compositor::Default>::Compositor,
|
||||
|
|
@ -166,6 +168,7 @@ impl WaylandSpecific {
|
|||
window::Id,
|
||||
(u64, iced_accessibility::accesskit_winit::Adapter),
|
||||
>,
|
||||
create_compositor: CreateCompositor<'b, P>,
|
||||
) where
|
||||
P: Program,
|
||||
{
|
||||
|
|
@ -196,22 +199,25 @@ impl WaylandSpecific {
|
|||
return Default::default();
|
||||
};
|
||||
|
||||
sctk_event.process(
|
||||
modifiers,
|
||||
program,
|
||||
compositor,
|
||||
window_manager,
|
||||
surface_ids,
|
||||
sender,
|
||||
event_sender,
|
||||
proxy,
|
||||
user_interfaces,
|
||||
events,
|
||||
clipboard,
|
||||
subsurface_state,
|
||||
#[cfg(feature = "a11y")]
|
||||
adapters,
|
||||
);
|
||||
sctk_event
|
||||
.process(
|
||||
modifiers,
|
||||
program,
|
||||
compositor,
|
||||
window_manager,
|
||||
surface_ids,
|
||||
sender,
|
||||
event_sender,
|
||||
proxy,
|
||||
user_interfaces,
|
||||
events,
|
||||
clipboard,
|
||||
subsurface_state,
|
||||
#[cfg(feature = "a11y")]
|
||||
adapters,
|
||||
create_compositor,
|
||||
)
|
||||
.await;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::{
|
||||
Clipboard, Control, Program,
|
||||
Clipboard, Control, CreateCompositor, Error, Program, create_compositor,
|
||||
platform_specific::{
|
||||
SurfaceIdWrapper, UserInterfaces,
|
||||
wayland::{
|
||||
|
|
@ -342,11 +342,13 @@ pub struct SurfaceCompositorUpdate {
|
|||
}
|
||||
|
||||
impl SctkEvent {
|
||||
pub(crate) fn process<'a, P>(
|
||||
pub(crate) async fn process<'a, 'b, P>(
|
||||
self,
|
||||
modifiers: &mut Modifiers,
|
||||
program: &'a crate::program::Instance<P>,
|
||||
compositor: &mut <<P as Program>::Renderer as compositor::Default>::Compositor,
|
||||
compositor: &mut Option<
|
||||
<<P as Program>::Renderer as compositor::Default>::Compositor,
|
||||
>,
|
||||
window_manager: &mut crate::WindowManager<
|
||||
P,
|
||||
<<P as Program>::Renderer as compositor::Default>::Compositor,
|
||||
|
|
@ -363,6 +365,7 @@ impl SctkEvent {
|
|||
window::Id,
|
||||
(u64, iced_accessibility::accesskit_winit::Adapter),
|
||||
>,
|
||||
create_compositor_data: CreateCompositor<'b, P>,
|
||||
) where
|
||||
P: Program,
|
||||
{
|
||||
|
|
@ -766,7 +769,25 @@ impl SctkEvent {
|
|||
sctk_winit.clone(),
|
||||
))
|
||||
.expect("Send control message");
|
||||
|
||||
if compositor.is_none() {
|
||||
match create_compositor(
|
||||
sctk_winit.clone(),
|
||||
create_compositor_data,
|
||||
)
|
||||
.await
|
||||
{
|
||||
Ok(c) => *compositor = Some(c),
|
||||
Err(error) => {
|
||||
control_sender
|
||||
.start_send(Control::Crash(
|
||||
Error::GraphicsCreationFailed(error),
|
||||
))
|
||||
.expect("Send control message");
|
||||
return;
|
||||
}
|
||||
};
|
||||
}
|
||||
let compositor = compositor.as_mut().unwrap();
|
||||
let window = window_manager.insert(
|
||||
surface_id,
|
||||
sctk_winit,
|
||||
|
|
@ -976,6 +997,10 @@ impl SctkEvent {
|
|||
},
|
||||
);
|
||||
}
|
||||
let Some(compositor) = compositor.as_mut() else {
|
||||
log::error!("compositor missing");
|
||||
return;
|
||||
};
|
||||
|
||||
let window = window_manager.insert(
|
||||
surface_id,
|
||||
|
|
@ -1190,6 +1215,25 @@ impl SctkEvent {
|
|||
},
|
||||
);
|
||||
}
|
||||
if compositor.is_none() {
|
||||
match create_compositor(
|
||||
sctk_winit.clone(),
|
||||
create_compositor_data,
|
||||
)
|
||||
.await
|
||||
{
|
||||
Ok(c) => *compositor = Some(c),
|
||||
Err(error) => {
|
||||
control_sender
|
||||
.start_send(Control::Crash(
|
||||
Error::GraphicsCreationFailed(error),
|
||||
))
|
||||
.expect("Send control message");
|
||||
return;
|
||||
}
|
||||
};
|
||||
}
|
||||
let compositor = compositor.as_mut().unwrap();
|
||||
|
||||
let window = window_manager.insert(
|
||||
surface_id,
|
||||
|
|
@ -1201,20 +1245,70 @@ impl SctkEvent {
|
|||
);
|
||||
_ = surface_ids.insert(object_id, wrapper.clone());
|
||||
let logical_size = window.logical_size();
|
||||
todo!()
|
||||
// let _ = user_interfaces.insert(
|
||||
// surface_id,
|
||||
// crate::build_user_interface(
|
||||
// program,
|
||||
// user_interface::Cache::default(),
|
||||
// &mut window.renderer,
|
||||
// logical_size,
|
||||
// surface_id,
|
||||
// window.raw.clone(),
|
||||
// window.prev_dnd_destination_rectangles_count,
|
||||
// clipboard,
|
||||
// ),
|
||||
// );
|
||||
let mut ui = crate::build_user_interface(
|
||||
program,
|
||||
user_interface::Cache::default(),
|
||||
&mut window.renderer,
|
||||
logical_size,
|
||||
surface_id,
|
||||
window.raw.clone(),
|
||||
window.prev_dnd_destination_rectangles_count,
|
||||
clipboard,
|
||||
);
|
||||
|
||||
_ = ui.update(
|
||||
&vec![iced_runtime::core::Event::PlatformSpecific(
|
||||
iced_runtime::core::event::PlatformSpecific::Wayland(
|
||||
iced_runtime::core::event::wayland::Event::RequestResize,
|
||||
),
|
||||
)],
|
||||
window.state.cursor(),
|
||||
&mut window.renderer,
|
||||
clipboard,
|
||||
&mut Vec::new(),
|
||||
);
|
||||
|
||||
if let Some(requested_size) =
|
||||
clipboard.requested_logical_size.lock().unwrap().take()
|
||||
{
|
||||
let requested_physical_size = winit::dpi::PhysicalSize::new(
|
||||
(requested_size.width as f64
|
||||
* window.state.scale_factor())
|
||||
.ceil() as u32,
|
||||
(requested_size.height as f64
|
||||
* window.state.scale_factor())
|
||||
.ceil() as u32,
|
||||
);
|
||||
let physical_size = window.state.physical_size();
|
||||
if requested_physical_size.width != physical_size.width
|
||||
|| requested_physical_size.height
|
||||
!= physical_size.height
|
||||
{
|
||||
// FIXME what to do when we are stuck in a configure event/resize request loop
|
||||
// We don't have control over how winit handles this.
|
||||
window.resize_enabled = true;
|
||||
|
||||
let s =
|
||||
winit::dpi::Size::Physical(requested_physical_size);
|
||||
_ = window.raw.request_surface_size(s);
|
||||
window.raw.set_min_surface_size(Some(s));
|
||||
window.raw.set_max_surface_size(Some(s));
|
||||
window.state.synchronize(
|
||||
&program,
|
||||
surface_id,
|
||||
window.raw.as_ref(),
|
||||
);
|
||||
}
|
||||
}
|
||||
events.push((
|
||||
Some(surface_id),
|
||||
iced_runtime::core::Event::PlatformSpecific(
|
||||
PlatformSpecific::Wayland(wayland::Event::Subsurface(
|
||||
wayland::SubsurfaceEvent::Created,
|
||||
)),
|
||||
),
|
||||
));
|
||||
_ = user_interfaces.insert(surface_id, ui);
|
||||
}
|
||||
SctkEvent::SessionLockSurfaceConfigure {
|
||||
surface,
|
||||
|
|
@ -1434,6 +1528,10 @@ impl SctkEvent {
|
|||
},
|
||||
);
|
||||
}
|
||||
let Some(compositor) = compositor.as_mut() else {
|
||||
log::error!("compositor missing");
|
||||
return;
|
||||
};
|
||||
|
||||
let window = window_manager.insert(
|
||||
surface_id,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue