Commit graph

406 commits

Author SHA1 Message Date
Francesca Frangipane 09c809003b
x11: Overhaul XIM code (#451)
Fixes #195
Fixes #277
Fixes #455

* Read `XMODIFIERS` explicitly/directly instead of calling `XSetLocaleModifiers` with an
empty string. This is useful for debugging purposes, and more clear to read and handle.
* Fallback to local input method if the one specified in `XMODIFIERS` is later closed on the
server end (i.e. if ibus/fcitx is terminated). Previously, that would cause the event loop
to freeze and usually also segfault.
* If using the fallback input method, respond to the `XMODIFIERS` input method later
becoming available. This means that the input method restarting is handled, and that even if
the program was started while ibus/fcitx/etc. was unavailable, it will start using it as
soon as it becomes available.
* Only one input method is opened for the whole event loop, with each window having its own
input context.
* IME works completely out of the box now, no longer requiring application developers to
call `setlocale` or `XSetLocaleModifiers`.
* Detailed error messages are provided if no input method could be opened. However, no
information is provided to the user if their intended `XMODIFIERS` input method failed to
open but the fallbacks (which will ostensibly always succeed) succeeded; in my opinion, this
is something that is best filled by adding a logging feature to winit.
2018-04-10 22:18:30 -04:00
Joe Moon f08bf44670 [macOS] implement HiDPIFactorChanged event on relevant events: (#443)
* moving window to another screen
* changing resolution of screen
2018-04-10 21:42:22 -04:00
Simon Sapin e36fd1788d Fix some more unconstrained types in msg_send results (#453)
The error I was investigating https://github.com/servo/servo/pull/20474#issuecomment-379802897 turned out to be already be fixed by https://github.com/tomaka/winit/pull/428, but there was a few more cases of the same problem.
2018-04-09 15:58:47 -04:00
Francesca Frangipane 4005bf11e4
x11: More robust geometry calculations (#438)
Tested on the following window managers:
* Xfwm4 4.12.4
* Mutter 3.26.2
* Muffin 3.6.0
* Budgie 10.4
* Marco 1.20.0
* Compiz 0.9.13.1
* KWin 5.12.3
* Enlightenment 0.22.2
* FVWM 2.6.7
* Awesome 4.2
* i3 4.15
* xmonad 0.13
* dwm 6.1
* Openbox 3.6.1
* Fluxbox 1.3.7
* Blackbox 0.70.1
* IceWM 1.3.8
* IceWM 1.4.2
2018-04-07 15:36:10 -04:00
mitchmindtree 9d036a6faa
Publish 0.12.0. Update CHANGELOG. (#449)
See the CHANGELOG for all relevant changes included in this new version.
2018-04-06 15:04:12 +05:45
Ed Barnard 591e0d9b8e Fix macOS window sizes to follow convention with changelog entry (#435)
* Fix macOS window sizes to follow convention

* Add changelog entry
2018-04-05 15:51:15 -04:00
cpardotortosa 580321b56f Add Touch events for win32. (#377)
* Add Touch events for win32.

* Add entry to CHANGELOG.md
2018-04-05 15:25:37 -04:00
Francesca Frangipane 1c4973d5b7
x11: Only access XIM from the event loop thread (#439)
XIM isn't thread-safe at all. Any call made to it from another thread will result in the
event loop freezing (this is why the old implementation of Drop for Window had that
problem).

XIM is now confined to one thread, and the existing API is maintained using channels. In
testing this with Alacritty, I initially thought the occasional slight lag on updating the
spot location was due to this change, but it's present without it as well.
2018-04-05 14:58:10 -04:00
hcpl 7cd440135a Try XOpenIM with different locale modifiers (#424)
* Try XOpenIM with different locale modifiers

Implements the solution suggested in
https://github.com/tomaka/winit/issues/277#issuecomment-337751136.

* Use empty XSetLocaleModifiers beforehand

Also, for modifiers, convert from length-based UTF-8 strings to
null-terminated bytestrings.

* Add CHANGELOG entry and comments
2018-04-05 13:21:50 -04:00
Francesca Frangipane f3ab8af813
x11: Don't panic when using dead keys (#432) 2018-04-05 12:58:24 -04:00
Joe Moon be6d2ed3b9 subclass windows in macos so they can be made resizable even with no decorations (#408)
* make windows without decorations resizable and movable in macos

fixes #368

The subclassing logic was copied from servo's fork of glutin:
63026a0f4c/src/api/cocoa/mod.rs (L418)

* remove `isMovableByWindowBackground` and `mouseDownCanMoveWindow`

* revert example changes

* remove resizable mask from decoration: false

* avoid duplicate class declarations

* update changelog

* fix changelog

* changelog whitespace
2018-04-02 19:12:38 -04:00
Pierre Krieger 0b922ad9c0
0.11.3 (#437) 2018-03-28 13:32:46 +02:00
forbjok 7a1946589c x11: Support numpad arrows/Home/End/PageUp/PageDown/Insert/Delete (#396) 2018-03-23 10:36:04 +01:00
Osspial bbcd3019e8 Add ability to change the min/max size of windows at runtime (#405)
* Add min/max size setting for win32 and wayland backends

* Implement dynamic min/max size on macos

* Add min/max size setting for x11

* Add empty functions for remaining platforms

* Improved min/max size setting for x11

* Added CHANGELOG entry for new min/max methods

* Added documentation for new min/max methods

* On win32, bound window size to min/max dimensions on window creation

* On win32, force re-check of window size when changing min/max dimensions

* Fix freeze when setting min and max size
2018-03-23 10:35:35 +01:00
Francesca Frangipane d667a395b6 x11: Destroy dropped windows; handle WM_DELETE_WINDOW (#416)
Fixes #79 #414

This changes the implementation of Drop for Window to send a WM_DELETE_WINDOW ClientMessage,
offloading all the cleanup and window destruction to the event loop. Unsurprisingly, this
entails that the event loop now handles WM_DELETE_WINDOW using the behavior that was
previously contained in Window's Drop implementation, along with destroying the Window.
Not only does this mean that dropped windows are closed, but also that clicking the × button
on the window actually closes it now.

The previous implemention of Drop was also broken, as the event loop would be (seemingly
permenanently) frozen after its invocation. That was caused specifically by the mutex
locking, and is no longer an issue now that the locking is done in the event loop.

While I don't have full confidence that it makes sense for the Drop implementation to behave
this way, this is nonetheless a significant improvement. The previous behavior led to
inconsistent state, panics, and event loop breakage, along with not actually destroying the
window.

This additionally makes the assumption that users don't need Focused or CursorLeft events
for the destroyed window, as Closed is adequate to indicate unfocus, and users may not
expect to receive events for closed/dropped windows. In my testing, those specific events
were sent immediately after the window was destroyed, though this sort of behavior could be
WM-specific. I've opted to explicitly suppress those events in the case of the window no
longer existing.
2018-03-23 10:31:31 +01:00
Joe Moon 76118af341 update changelog (#431) 2018-03-23 10:25:02 +01:00
Paul Rouget 51181b4347 Version bump (#418)
* Send Awakened event on Android when event loop is woken up

* v0.11.2
2018-03-06 18:07:18 +01:00
Paul Rouget e6fefd5e93 Send Awakened event on Android when event loop is woken up (#417) 2018-03-06 18:06:56 +01:00
Nicholas Lordello f3d43016ad Implement MonitorId::get_hidpi_factor for macOS (#410)
* Implement MonitorId::get_hidpi_factor for macOS

* Added changelog entry
2018-03-06 09:35:04 +01:00
Jim Turner 4c62d71950 Derive more traits for events::ModifiersState (#411) 2018-02-22 18:15:56 +01:00
Chet Gurevitch f279b2f229 Version 0.11.1 (#409) 2018-02-20 16:18:16 +01:00
HDM 7daf27f389 Add mouse event capturing when click-dragging out of a win32 window (#292)
* Add mouse event capturing when click-dragging out of a win32 window

* Remove git merge conflict comments

* Add changelog entry
2018-02-14 10:31:25 +01:00
Pierre Krieger 4abcc164cd
Publish 0.11.0 (#404) 2018-02-09 12:07:19 +01:00
Paul Rouget ff17eff00f Implement MonitorId::get_dimensions for Android (#400) 2018-02-08 14:55:17 +01:00
Paul Rouget 9b5254adeb Version 0.10.1 (#397) 2018-02-05 18:50:13 +01:00
Michael Schumacher 1609808e27 Add support for Caret (^) Key in OSX (de_DE) (#380)
* Add caret key

* Use hex value

* Added caret key support.
2018-01-25 13:32:30 +01:00
Robert Günzler 7e1c70964d [macOS] Move the window if there is no title bar (#382)
* macOS: Move the window if there is no title bar

On macOS by default windows can only be moved by clicking and
dragging on the titlebar, if we spawn a window without one we
need to set the `movableByWindowBackground` property.

Partial fix for #368

* macOS: Make moveByWindowBackground optional

Implements setting the property via WindowBuilderExt:

    WindowBuilder::new()
        .with_decorations(false)
        .with_movable_by_window_background(true)

* Update CHANGELOG
2018-01-22 19:07:51 +01:00
Victor Berger 0ea4f93f05 Implement set_maximized, set_fullscreen and set_decorations for wayland (#383)
* wayland: implement Window::set_decorations()

* wayland: implement Window::set_maximized()

* wayland: implement Window::set_fullscreen()

* Update changelog.
2018-01-13 06:38:12 +01:00
Pierre Krieger 198d9ff230
Publish 0.10.0 (#375) 2017-12-27 19:44:53 +01:00
Chet Gurevitch 23881459bc Update dependencies (#369)
* macos: Update core-graphics to v12 and cocoa to v13

* Update lazy_static to v1
2017-12-27 18:39:38 +01:00
Bryan Gilbert 011720848a Added modifier support to mouse events (#328) 2017-12-26 22:46:28 +01:00
Francesca Sunshine 463f316cb8 Add set_decorations method to Window (#365)
This has been stubbed on all platforms other than X11. The X11 implementation has also been
revised to toggle correctly, as it was previously only able to remove decorations.
2017-12-22 13:50:46 +01:00
Francesca Sunshine 23e4293179 unix::WindowExt no longer returns pointers for things that aren't actually pointers (#364)
Fixes #256

`get_xlib_window` and `get_xlib_screen_id` previously returned `Option<*mut c_void>` by
casting integer IDs into pointers, which while producing no functionality issues, is
semantically incorrect and rather surprising. Worse still, the docs for `get_xlib_window`
stated that it was in fact a valid pointer.

Additionally, now all `unix::WindowExt` methods return `std::os::raw` types rather than
`libc` types; note that the two versions of `c_void` are not interchangeable in the eyes of
the compiler, so those wanting the `libc` type will need to explicitly cast.

This is a breaking change, and will require some trivial changes to glutin.
2017-12-17 10:17:26 +01:00
Francesca Sunshine d18db208ff x11: Implement file drag and drop (#360)
* x11: Implement file drag and drop

* Fixed typo
2017-12-13 12:22:03 +01:00
thiolliere d2dd82c146 impl touch events for emscripten (#358) 2017-12-01 14:00:09 +01:00
stuart nelson 8348e8225b bump for v0.9.0 (#355) 2017-12-01 10:58:48 +01:00
thiolliere 663d615379 Emscripten (#357)
* impl modifiers state for emscripten

* impl mouse events emscripten

* impl mousemotion for emscripten

it is useful when cursor is grabbed

* changelog
2017-12-01 10:53:50 +01:00
Jacob Kiesel cfd087d9a5 Mouse events (#344)
* Explicit mouse-related DeviceEvents

This makes the API more intuitive for common use-cases and allows us
to better propagate platform knowledge of motion semantics.

* Improve event naming consistency

* Clarify axis event forwards-compatibility

* Rename WindowEvent::MouseMoved/Entered/Left to CursorMoved/...

This emphasizes the difference between motion of the host GUI cursor,
as used for clicking on things, and raw mouse(-like) input data, as
used for first-person controls.

* Add support for windows and OSX, fix merging

* Fix warnings and errors on Linux

* Remove unnecessary breaking changes

* Add MouseWheel events to windows and OSX

* Fix bad push call.

* Fix docs, naming, and x11 events

* Remove mutability warning

* Add changelog entry
2017-11-12 21:56:57 +01:00
Victor Berger c61f9b75f8
Wayland: implement touch events (#342)
* wayland: move pointer to its own file

* wayland: touch events support

* update changelog
2017-11-11 10:03:42 +01:00
Alex Butler b3c5ee6219 Fix no primary monitor panic in XWayland (#318)
* Fix no primary monitor panic in XWayland

In this case try to use the first existing monitor instead of panicking.
Fixes #317

* Shift no monitor panic to x11::get_primary_monitor

* Update changelog with xll get_primary_monitor fallback
2017-10-28 15:24:37 +02:00
Chris Tolliday 159364bec3 Impl Clone for EventsLoopProxy (#331) 2017-10-25 20:03:57 +02:00
kryptan 760e588627 Use EnumDisplayMonitors to enumerate monitors on Windows (#327)
* Use EnumDisplayMonitors to enumerate monitors on Windows

* Add requested changes
2017-10-25 17:12:39 +02:00
Victor Berger d10312c6b1 Rewrite of wayland backend to new wayland-client API (#325)
* wayland: clean state for rewrite to new wayland-client API

* wayland: context init

* wayland: Monitors logic

* wayland: Basic event loop logic

* wayland: Keyboard handling

* wayland: pointer handling

* wayland: refactor to remove WaylandContext

* wayland: window logic

* wayland: event dispatching logic

* wayland: update changelog
2017-10-20 09:46:42 +02:00
kryptan 4e4db1749d Make MonitorId::get_position() return (i32, i32) instead of (u32, u32) because it can be negative on Windows (#324) 2017-10-19 19:08:05 +02:00
Victor Berger 229029f2da Formalize thread-safety guarantees (#322) 2017-10-18 20:40:21 +02:00
kryptan 48902297b7 Implement public API for high-DPI (#319)
* Implement public API for high-DPI #105

* Recover get_inner_size_points and get_inner_size_pixels and change their implementation assuming get_inner_size() returns size in pixels

* Update changelog for high-DPI changes
2017-10-17 13:56:38 +02:00
Chet Gurevitch eff3440482 Mirror x11 ISO_LEFT_TAB detection on wayland and release version 0.8.3 (#314)
* wayland: mirror x11 ISO_LEFT_TAB detection

* Release 0.8.3
2017-10-12 09:39:41 +02:00
Matteo Signer 3f33cd1929 Make ISO_Left_Tab generate VirtualKeyCode::Tab (#308)
* Make ISO_Left_Tab generate VirtualKeyCode::Tab

* Add changes to changelog
2017-10-08 13:59:45 +02:00
Pedro Côrte-Real 1db92063d9 Fix X11 on 32bit architectures (#311)
* Add an i386 target to travis

* Fix X11 on 32bit architectures

One would hope 32bit X11 was dead by now but apparently not :). Fix
the window hint setting code to not assume window IDs are 64bit as
apparently they are not in 32bit arches.
2017-10-07 21:20:37 +02:00
Chris Tolliday 5af88d97e8 On Windows, use SWP_ASYNCWINDOWPOS to prevent thread from blocking when calling (#302)
set_inner_size
2017-10-04 09:42:35 +02:00
Victor Berger b337d8f99b Version 0.8.2 (#301) 2017-09-28 19:04:26 +02:00
Victor Berger 515595153d Wayland: rework the event loop & expose readiness signal (#298)
* wayland: don't create a second event_queue

As each EventsLoop has its own context, this is no longer necessary.

* wayland: buffer events rather than direct dispatch

Changes the behavior of the event loop to first internally
buffer the events generated by the wayland handlers, and then
dispatch them to the client's closure.

- It simplifies the event loop logic
- It makes it possible for the user to call window methods such as
  `set_title()` or `set_inner_size()` without causing a deadlock

* wayland: add is_ready() & fix protocol errors

Adds a `is_ready()` method to the windows to advertize
when it is legal to start drawing, and fix a few wayland
protocol mishandling in the process.
2017-09-27 16:31:46 +02:00
Victor Berger 9c116a1bae x11: uniformize keyboard scancodes with linux (#297) 2017-09-25 07:25:36 +02:00
tomaka 15fbc0dff4 Publish 0.8.1 with fixes necessary for glutin (#296) 2017-09-23 09:36:30 +02:00
tomaka 6a2a7036d4 Fix mistake in 0.8 changelog (#294) 2017-09-23 09:36:21 +02:00
tomaka 3edc8e0cd9 Publish 0.8.0 (#290) 2017-09-22 08:00:19 +02:00