Commit graph

457 commits

Author SHA1 Message Date
Determinant
aea61a74fb remove the the redundant code, fix a bug 2017-07-12 00:00:51 -04:00
Rukai
117beed0b5 Fix x11 mouse scroll wheel 2017-07-11 17:15:23 +10:00
Imanol Fernandez
5ebeb8ab5f Fix Android compilation error 2017-07-06 23:33:42 +02:00
Lucien Greathouse
0371b6573f Implement raw mouse motion for Windows 2017-07-05 00:28:08 -07:00
Determinant
75856e0e39 dynamically reallocate buffer; release mutex before callback 2017-07-01 12:24:35 -04:00
Benjamin Saunders
3d9e8da9ec Transparent axis/button IDs 2017-07-01 02:22:02 -07:00
Brendan Zabarauskas
886eab5c7e Fix build on nightly
Nightly recently fixed some soundness issues related to `Sized`. This had to be fixed in the cocoa crates as well, and also affects our ios bindings.
2017-07-01 17:48:47 +10:00
Pierre Krieger
61ba6dce7f Switch win32 implementation to new design 2017-06-26 21:46:26 +02:00
Victor Berger
05cd9f2114 Merge pull request #199 from alexheretic/xwayland-env-var
Add a `WINIT_UNIX_BACKEND` environment variable to all the user to control the choice of x11/wayland backend.
2017-06-25 10:40:05 +02:00
Determinant
5e5debc48f increase the buffer size; proper IC focus/unfocus 2017-06-23 14:27:48 -04:00
Victor Berger
e915454a9d linux: update wayland dependencies 2017-06-23 20:25:06 +02:00
Alex Butler
3a89843767 Add WINIT_UNIX_BACKEND documentation 2017-06-21 20:10:23 +01:00
Alex Butler
eaa92a4282 Improve unix backend env var docs 2017-06-21 19:59:56 +01:00
Alex Butler
789598fa84 Rename unix backend env var
Rename inline with stricter behaviour
Add docs explaining behaviour
2017-06-21 19:54:21 +01:00
Alex Butler
7a19ef1907 Make usage of env vars strict
Using `BACKEND_PREFERENCE_ENV_VAR=$backend` will no longer fallback on
any other backend
2017-06-21 19:41:26 +01:00
Alex Butler
9804cad7dd Allow usage of XWayland
Will prefer X11 over wayland when the environment variable
`WINIT_PREFER_UNIX_BACKEND=x11` is set.
2017-06-21 18:34:16 +01:00
mitchmindtree
04ccad1dbc Rename ControlFlow variant from Complete to Break 2017-06-20 21:25:53 +10:00
mitchmindtree
df1276d72a Fix x11 EventsLoopProxy::wakeup implementation using a dummy, InputOnly window 2017-06-17 22:59:56 +10:00
mitchmindtree
4b42af910b Make x11 backend take &mut self in poll_events method 2017-06-09 22:55:48 +10:00
mitchmindtree
0237526999 Complete macos backend update to addition of ControlFlow 2017-06-09 22:13:30 +10:00
mitchmindtree
c5b9bd3612 Update macos backend to addition of ControlFlow (untested) 2017-06-09 19:40:22 +10:00
mitchmindtree
f2dd2f0752 WIP - Make poll_events and run_forever take &mut self
This removes the need for the EventsLoop::interrupt method by inroducing
a ControlFlow type. This new type is to be returned by the user's
callback and indicates whether the `EventsLoop` should continue waiting
for events or break from the loop.

Only the wayland, x11 and api_transition backends have been updated so
far, and only the wayland backend has actually been tested.
2017-06-02 21:19:45 +10:00
mitchmindtree
38856b1c60 X11 - Move event insertion from interrupt to proxy wakeup. 2017-05-31 18:07:51 +10:00
mitchmindtree
2b55b2e0ef Temporarily remove windows window-specific awakened event. Needs to be updated to non-window-specific Event. 2017-05-31 16:11:06 +10:00
mitchmindtree
8f0ef514b1 Fix incorred Awakened import in windows backend 2017-05-31 15:52:15 +10:00
mitchmindtree
339318f295 Update macOS backend to removal of Send+Sync and addition of EventsLoopProxy 2017-05-31 15:00:49 +10:00
mitchmindtree
9ca2f83784 Call flush so that the wayland eventsloop correctly breaks from dispatch when wakeup is called 2017-05-27 22:51:59 +10:00
mitchmindtree
f6587aed39 [WIP] Have EventsLoopProxy::wakeup return a Result. Begin linux impl.
X11 and Wayland implementations are now half implemented, however both
still do not correctly break from the inner blocking event dispatch
functions when `wakeup` is called, which they should do.
2017-05-25 23:19:13 +10:00
mitchmindtree
fdb1c56366 Move interrupt flag reset to beginning of run_forever in wayland backend 2017-05-25 02:54:32 +10:00
mitchmindtree
1523548d3e wayland: Reset the intterupted flag before breaking from run_forever
This is important for any code that re-enters `run_forever` after some
previous interrupt.
2017-05-25 00:19:30 +10:00
Victor Berger
148c751f32 wayland: Initially paint the window white so that they always exist 2017-05-23 21:53:17 +02:00
Victor Berger
c2c27c1b37 wayland: Fix deadlock in poll_events 2017-05-14 15:28:27 +02:00
Joe Wilm
4ec5078bdb Fix poll_events on x11 not draining completely
If the interrupted flag were set going into poll_events, it would only
ever handle the first event in the queue. Now, the flag is reset at the
start so events are processed until the caller requests otherwise.
2017-05-11 23:00:22 -07:00
Joe Wilm
46057d7122 Remove unnecessary locking
For X11 interrupt, we can just use the root window which doesn't require
taking a lock to find.
2017-05-09 21:30:31 -07:00
Joe Wilm
f3db0ba641 Fix x11 interrupt to actually wake event loop
This is the same behavior as with WindowProxy::wakeup_event_loop in
previous versions.

Unfortunately, `EventsLoop::interrupt` is also the recommend way to exit
a `run_forever` loop from within the event handler callback. Pushing an
extra event on the queue in that case is simply wasteful. Changing this
would require a refactor taking one of two possible forms:

1. Add a method *in addition* to interrupt intended for waking up the
   event loop
2. Add a return type to the event callback like

    enum Continue { True, False }

   which would be used in lieu of the atomic interrupt flag.
2017-05-09 09:51:00 -07:00
Joe Wilm
8288d419fd Remove unnecessary mut 2017-05-09 09:50:16 -07:00
Joe Wilm
c92ac695af Fix x11 poll_events to drain queue
It was only processing a single event per call. The docs say

> Fetches all the events that are pending, calls the callback function
> for each of them, and returns.

which suggests that was incorrect.
2017-05-09 09:20:35 -07:00
Joe Wilm
0b75a6b60c Make keyboard input event order consistent
All platforms should now receive events in the following order:

1. KeyboardInput(ElementState::Pressed, ..)
2. ReceivedCharacter
3. KeyboardInput(ElementState::Released, ..)

cc https://github.com/tomaka/glutin/issues/878
2017-05-07 21:16:48 -07:00
tomaka
15aafc2908 Merge pull request #164 from Ralith/rich-input
Richer input events
2017-05-07 08:35:03 +02:00
Jon Gjengset
4087627b12
Set WM_CLASS and WM_NAME before mapping window
ICCCM 4.1.2.5 (https://tronche.com/gui/x/icccm/sec-4.html#WM_CLASS)
states that:

> This property must be present when the window leaves the Withdrawn
> state and may be changed only while the window is in the Withdrawn
> state.

Previously, we would first map the window, and then set these
properties, causing sadness for window managers (#167,
tomaka/glutin#879). This patch changes that by setting the class and
name attributes immediately after the window is created, and before it
is mapped.

Fixes #167.
2017-05-04 17:37:24 -04:00
Benjamin Saunders
22bc119cd7 Richer input events
This expands input events to represent sub-pixel mouse positions, devices responsible for generating events, and raw
device-oriented events. The X11 back end is refactored to make full use of the new expressiveness. Other backends have
had new functionality minimally stubbed out, save for the macos backend which already supports sub-pixel mouse
positions.
2017-04-23 01:08:15 -07:00
mitchmindtree
cccc48b84d [macos] Emit a resize event when Window changes screens 2017-03-19 20:30:54 +11:00
mitchmindtree
4656540417 Close NSWindow when Window is dropped if not already closed.
Previously, if a `Window` was `Drop`ped while open, the window would
remain open until the user pressed the x button. This fixes the
behaviour so that the window is closed when dropped if it has not
already been closed.
2017-03-19 19:32:24 +11:00
mitchmindtree
27bd796c2a [macos] Remove Window from EventsLoop's Window list on close and drop
Previously, a Window was only removed from the list when dropped.
2017-03-19 19:20:38 +11:00
mitchmindtree
41e7572147 [macos] Avoid panic when callback is None.
This can happen when window is destroyed/created during a call to user
callback as this causes WindowDelegate method to be called.

Instead if the user callback is `None` store the event in
`pending_events`.
2017-03-19 19:09:20 +11:00
mitchmindtree
4b39f81621 Avoid leaking Windows by storing Weak pointers in EventsLoop 2017-03-19 18:19:24 +11:00
Victor Berger
50f38e2f76 wayland: Update to wayland 0.8.6 2017-03-13 19:18:49 +01:00
tomaka
2e82cac69a Merge pull request #154 from vberger/wayland_new_api
Port wayland to the new API
2017-03-11 09:04:09 +01:00
Victor Berger
d3356763dc wayland: add some comments 2017-03-10 23:56:31 +01:00
Victor Berger
3ff9eb08e8 wayland: cleanup signal to prune dead windows 2017-03-10 23:40:31 +01:00