aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src
diff options
context:
space:
mode:
Diffstat (limited to 'alacritty/src')
-rw-r--r--alacritty/src/display/window.rs10
-rw-r--r--alacritty/src/event.rs7
2 files changed, 17 insertions, 0 deletions
diff --git a/alacritty/src/display/window.rs b/alacritty/src/display/window.rs
index 2e8ed085..ad89738d 100644
--- a/alacritty/src/display/window.rs
+++ b/alacritty/src/display/window.rs
@@ -495,6 +495,16 @@ impl Window {
self.windowed_context.resize(size);
}
+ pub fn make_not_current(&mut self) {
+ if self.windowed_context.is_current() {
+ self.windowed_context.replace_with(|context| unsafe {
+ // We do ensure that context is current before any rendering operation due to multi
+ // window support, so we don't need extra "type aid" from glutin here.
+ context.make_not_current().expect("context swap").treat_as_current()
+ });
+ }
+ }
+
pub fn make_current(&mut self) {
if !self.windowed_context.is_current() {
self.windowed_context
diff --git a/alacritty/src/event.rs b/alacritty/src/event.rs
index d16114af..2955ab8c 100644
--- a/alacritty/src/event.rs
+++ b/alacritty/src/event.rs
@@ -1344,6 +1344,13 @@ impl Processor {
GlutinEvent::UserEvent(Event {
payload: EventType::CreateWindow(options), ..
}) => {
+ // XXX Ensure that no context is current when creating a new window, otherwise
+ // it may lock the backing buffer of the surface of current context when asking
+ // e.g. EGL on Wayland to create a new context.
+ for window_context in self.windows.values_mut() {
+ window_context.display.window.make_not_current();
+ }
+
if let Err(err) = self.create_window(event_loop, proxy.clone(), options) {
error!("Could not open window: {:?}", err);
}