Commit graph

434 commits

Author SHA1 Message Date
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
Victor Berger
17fde48ed7 wayland: move input logic to the event loop 2017-03-10 23:22:59 +01:00
Imanol Fernandez
f961bdd668 Implement android events and wake event loop. 2017-03-06 14:39:42 +01:00
Gabriel Martinez
deeda59689 Clean up macOS window style logic
* Remove NSTitledWindowMask for windows with no decorations. This
makes sure that they do not have a title bar.
* Transparency is not be taken into account as we could have a window
with a titlebar or without that is transparent.
2017-03-05 14:50:39 -08:00
Gabriel Martinez
0b530b026d Support disabling window decorations in X11
This uses the incredibly old and ugly _MOTIF_WM_HINTS property:
http://stackoverflow.com/questions/5134297/xlib-how-does-this-removing-window-decoration-work

Using _NET_WM_WINDOW_TYPE from the Extended Window Manager Hints spec
(https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html)
would be preferred, but it requires knowing up front what the user
intends their window to be. _MOTIF_WM_HINTS should work for now.
2017-03-05 09:42:24 -08:00
Victor Berger
7336cacf07 wayland: mugrate to new API 2017-03-04 14:04:01 +01:00
Victor Berger
9aaa788434 linux: Remove dead code from wayland & fix some trivial warnings. 2017-03-04 11:26:12 +01:00
Victor Berger
4e75c1e668 linux: Add missing Window2::id() impl 2017-03-04 10:48:44 +01:00
Victor Berger
624a422f20 linux: move api transition boilerplate to x11/wayland submodules 2017-03-04 09:09:09 +01:00
Victor Berger
4acf437221 Move api module into platform::linux 2017-03-04 09:09:09 +01:00
Erik Rigtorp
290040dbd8 Implement KeyboardEvent ModifiersState for macOS 2017-02-27 13:38:47 -06:00
Erik Rigtorp
5d41067a05 Implement KeyboardEvent ModifiersState for win32 2017-02-27 13:36:15 -06:00
Erik Rigtorp
f3ccdb7aec Add keyboard modifiers to input event
Making applications track modifier keys results in unnecessary work for
consumers, it's error prone, and it turns out to have unavoidable bugs.
For example, alt-tabbing with x11 results in the alt modifier state
getting stuck.

To resolve these problems, this patch adds a Mods value to the keyboard
input event.

Based on this patch: d287fa96e3
2017-02-27 13:36:11 -06:00
mitchmindtree
24b44e3b8e Remove confusingly named event import alias 2017-02-05 20:41:26 +11:00
mitchmindtree
ba71f6fb77 Add missing unsafe block to check for main thread macOS 2017-02-05 19:53:13 +11:00
mitchmindtree
926e03039f Panic if the user attempts to create window on non-main thread 2017-02-05 19:47:39 +11:00
mitchmindtree
b62ecfd517 Fix comments on macOS backend UserCallback methods 2017-02-05 19:37:00 +11:00
mitchmindtree
30e00f0454 Fix comment on event conversion special case 2017-02-05 19:21:51 +11:00
mitchmindtree
06c1b5903b Fix bug where an NSEvent is produced when a user opens spotlight while
the NSApplication is in focus.

This NSEvent produces an undocumented NSEventType value `21` that has no
associated variant within the cocoa-rs crate's `NSEventType` enum, thus
causing a segfault when attemptingt to match on the value.

This commit adds a check for `21` to avoid the segfault.

This fixes #104.
2017-02-05 19:01:27 +11:00
mitchmindtree
cbadc4bc31 Fix issue where window would not focus on startup.
Fix issue where key window would lose all mouse events once mouse left
that window.

Make sure that only window under mouse receives mouse scroll wheel
events.
2017-02-05 18:12:32 +11:00
mitchmindtree
3482c53c89 Rename old glutin ivar to winit 2017-02-05 13:28:56 +11:00
mitchmindtree
3ce7904e01 Wrap the temporarily stored user callback in a type to enforce
invariants

This also removes the need for "box"ing the callback in favour of
storing a raw `*mut` pointer. We can do this by ensuring that we never
store the pointer for longer than the lifetime of the user callback,
which is the duration of a call to `poll_events` or `run_forever`.

Also removes old commented out event code from the window module.
2017-02-05 12:51:09 +11:00
mitchmindtree
c03311fa2d Add a method to simplify emitting an event from the macos poll_events and run_forever methods 2017-02-04 13:30:34 +11:00
mitchmindtree
fd0ddee63c Panic if the user attempts to run an event loop on a non-main thread on macOS 2017-02-04 02:55:42 +11:00