diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/event.rs | 3 | ||||
-rw-r--r-- | src/main.rs | 2 | ||||
-rw-r--r-- | src/window.rs | 20 |
3 files changed, 24 insertions, 1 deletions
diff --git a/src/event.rs b/src/event.rs index 95685001..6ec8415a 100644 --- a/src/event.rs +++ b/src/event.rs @@ -327,6 +327,9 @@ impl<N: Notify> Processor<N> { }, Event::Awakened => { processor.ctx.terminal.dirty = true; + }, + Event::Suspended(_) => { + // Only relevant on mobile devices } } } diff --git a/src/main.rs b/src/main.rs index ec327009..ee774094 100644 --- a/src/main.rs +++ b/src/main.rs @@ -181,7 +181,7 @@ fn run(mut config: Config, options: cli::Options) -> Result<(), Box<Error>> { }); // Maybe draw the terminal - if terminal.needs_draw() { + if terminal.needs_draw() && display.window().drawing_ready() { // Try to update the position of the input method editor display.update_ime_position(&terminal); // Handle pending resize events diff --git a/src/window.rs b/src/window.rs index f24def3a..a99b1437 100644 --- a/src/window.rs +++ b/src/window.rs @@ -256,6 +256,9 @@ impl Window { #[inline] pub fn resize(&self, width: u32, height: u32) { + // resize the window + self.window.set_inner_size(width, height); + // resize the gl context (needed on some platforms) self.window.resize(width, height); } @@ -331,6 +334,20 @@ impl Window { pub fn get_window_id(&self) -> Option<usize> { None } + + #[cfg(any(target_os = "linux", target_os = "freebsd", target_os="dragonfly", target_os="openbsd"))] + #[inline] + pub fn drawing_ready(&self) -> bool { + // needed for wayland support while glutin does not manage it itself + use glutin::os::unix::WindowExt; + self.window.is_ready() + } + + #[cfg(not(any(target_os = "linux", target_os = "freebsd", target_os="dragonfly", target_os="openbsd")))] + #[inline] + pub fn drawing_ready(&self) -> bool { + true + } } pub trait OsExtensions { @@ -394,6 +411,9 @@ pub trait SetInnerSize<T> { impl SetInnerSize<Pixels<u32>> for Window { fn set_inner_size<T: ToPoints>(&mut self, size: &T) { let size = size.to_points(self.hidpi_factor()); + // resize the window self.window.set_inner_size(*size.width as _, *size.height as _); + // resize the gl context (needed on some platforms) + self.window.resize(*size.width as _, *size.height as _); } } |