Skip to content

Commit

Permalink
Add ability to get wayland display from events loop. (#829)
Browse files Browse the repository at this point in the history
Signed-off-by: Hal Gentz <[email protected]>
  • Loading branch information
goddessfreya authored and elinorbgr committed Apr 8, 2019
1 parent 47194b5 commit 746e99c
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
- `LoopDestroyed` is emitted when the `run` or `run_return` method is about to exit.
- Rename `MonitorId` to `MonitorHandle`.
- Removed `serde` implementations from `ControlFlow`.

- On Wayland, added a `get_wayland_display` function to `EventsLoopExt`.
- On Windows, fix `CursorMoved(0, 0)` getting dispatched on window focus.
- On macOS, fix command key event left and right reverse.
- On FreeBSD, NetBSD, and OpenBSD, fix build of X11 backend.
Expand Down
15 changes: 15 additions & 0 deletions src/platform/unix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,13 @@ pub trait EventLoopExtUnix {

//#[doc(hidden)]
//fn get_xlib_xconnection(&self) -> Option<Arc<XConnection>>;

/// Returns a pointer to the `wl_display` object of wayland that is used by this `EventsLoop`.
///
/// Returns `None` if the `EventsLoop` doesn't use wayland (if it uses xlib for example).
///
/// The pointer will become invalid when the glutin `EventsLoop` is destroyed.
fn get_wayland_display(&self) -> Option<*mut raw::c_void>;
}

impl<T> EventLoopExtUnix for EventLoop<T> {
Expand Down Expand Up @@ -150,6 +157,14 @@ impl<T> EventLoopExtUnix for EventLoop<T> {
//fn get_xlib_xconnection(&self) -> Option<Arc<XConnection>> {
// self.event_loop.x_connection().cloned()
//}

#[inline]
fn get_wayland_display(&self) -> Option<*mut raw::c_void> {
match self.events_loop {
LinuxEventsLoop::Wayland(ref e) => Some(e.get_display().c_ptr() as *mut _),
_ => None
}
}
}

/// Additional methods on `Window` that are specific to Unix.
Expand Down
4 changes: 4 additions & 0 deletions src/platform_impl/linux/wayland/event_loop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,10 @@ impl<T: 'static> EventLoop<T> {
get_available_monitors(&self.outputs)
}

pub fn get_display(&self) -> &Display {
&*self.display
}

pub fn window_target(&self) -> &RootELW<T> {
&self.window_target
}
Expand Down

0 comments on commit 746e99c

Please sign in to comment.