Commit graph

984 commits

Author SHA1 Message Date
Joe Wilm 2ee658048a Fix busy loop in X11 WaitEventsIterator
WaitEventsIterator implements waiting by first calling XPeekEvent which
will block until at least 1 event is queued, and then it delegates to
PollEventsIterator to actually handle the new event. PollEventsIterator
was previously picky about which events it would process. Events of
other types would get stuck at the head of the X event queue, and
PollEventsIterator would return None. This initiated a busy loop in the
WaitEventsIterator because it would XPeekEvent, see that something is
there, and then PollEventsIterator would return None, and the process
would repeat.

This is resolved by using XNextEvent in the PollEventsIterator instead
of XCheckTypedEvent. Any event in the queue will be popped. Even if
winit isn't interested in the event, this means XPeekEvent will block
again to wait for another event instead of the previous behavior.
2017-02-15 08:34:24 -08: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
mitchmindtree ea19409960 Make sure EventsLoop::interrupt awakens the waiting event loop 2017-02-04 02:54:40 +11:00
mitchmindtree 35dcf8dab9 Only return Awakened on NsApplicationActivated, rather than on every unknown event. 2017-02-04 00:51:38 +11:00
mitchmindtree be09639b69 Update the macOS backend to the new futures-compatible API.
This is a follow up to the new API introduced in #20.

This also fixes the issue where window resize events would not be
emitted until the end of the resize. This PR fixese #39 by ensuring that
the user callback given to either `EventsLoop::poll_events` or
`EventsLoop::run_forever` can be called by each window delegate's resize
callback directly.
2017-02-03 23:05:57 +11:00
Pierre Krieger 885b927d23 Merge remote-tracking branch 'origin/master' into impl-20 2017-02-03 09:14:24 +01:00
Pierre Krieger b988c174fe Add WindowId type 2017-02-03 09:13:11 +01:00
tomaka ae53bb0f14 Merge pull request #102 from cjhowe/master
iOS Support
2017-02-03 09:09:02 +01:00
Pierre Krieger 9cd0430ec7 Remove stuff from Window's API 2017-02-03 06:48:58 +01:00
Pierre Krieger 5025db2d59 Unix fix attempt 2017-01-28 16:09:22 +01:00
Pierre Krieger 148f507272 Wayland fix attempt 2017-01-28 15:56:53 +01:00
Pierre Krieger c3d2289b0c Remove resize_callback from WindowsAttributes 2017-01-28 15:34:15 +01:00
Pierre Krieger bcb242983b Add documentation for the new API 2017-01-28 15:33:54 +01:00
Pierre Krieger d86fdb48d1 Remove the window from the events loop on destruction 2017-01-28 15:14:23 +01:00
Pierre Krieger 0242daa242 Add interrupting the events loop 2017-01-28 15:09:01 +01:00
Pierre Krieger e7d43174e7 Implement the transition API 2017-01-28 15:05:36 +01:00
Pierre Krieger 422b332c1b Add a transition macro system 2017-01-28 15:00:17 +01:00
tomaka f1d70d351e Merge pull request #82 from tomaka/documentation
Some documentation improvements
2017-01-28 13:31:36 +01:00
Pierre Krieger 8277b26862 No longer use an api_dispatch module for linux 2017-01-28 13:14:20 +01:00
tomaka 6738f7cc2e Merge pull request #118 from ojacobson/macos-window-resize
Naive implementation of resize events for OS X.
2017-01-25 07:58:08 +01:00
Owen Jacobson 6f82ccfba9
De-duplicate resize events.
This tracks resizes separately, and synthesizes them for the event iterators as needed, so that OS X apps don't generate a whole set of resize events after each resize.
2017-01-24 13:46:46 -05:00
Pavel Potocek bf1585b819 Use a hand pointing a finger in X11 as MouseCursor::Hand 2017-01-24 15:35:38 +01:00
Owen Jacobson 7d6b4c3fe5
Naive implementation of resize events for OS X.
These events are batched, and delievered en masse at the end of the resize. This isn't a great developer experience (and it should probably be called out in the docs), but it makes it possible for winit client applications to detect and respond to resizes without special-casing Mac OS targets.

See #39. This is only a partial fix, and does not provide on-the-fly resize events.
2017-01-24 00:13:45 -05:00
mitchmindtree 95b7d5326e Fix patterns_in_fns_without_body warning on macos 2017-01-22 17:55:30 +11:00
mitchmindtree 9b15440b62 Fix non_upper_case_globals warnings on macos 2017-01-22 17:54:45 +11:00
tomaka 41ac24b107 Merge pull request #113 from samdphillips/mac-middle-mouse-button
Add middle mouse button events for MacOS.
2017-01-19 20:45:51 +01:00
Jeff Muizelaar 3b1fdc0f55 macos: Map our user generated event to Event::Awakened
This fixes propagation of Event::Awakend from wakeup_event_loop() when
using poll_event() on macOS.

Currently wait_event() translates all unknown events into
Event::Awakened so doesn't need the explicit translation.
2017-01-19 14:17:55 -05:00
Sam Phillips 55e52d6071 Add middle mouse events for MacOS. 2017-01-17 19:47:36 -08:00
rerion 941c8d3344 Add TODO & bump version 2017-01-07 15:00:15 +01:00
rerion f5812018ca Add get_x11_xconnection function 2017-01-07 14:34:38 +01:00
rerion d4b8fd9f5a Add methods allowing creation of X11 window with specified visual and screen 2017-01-06 22:46:41 +01:00
Christian Howe ba94b8edf8 Fix Travis iOS build 2016-12-15 21:34:37 -06:00
Christian Howe 5146bce88e Fix iOS build and add to Travis CI 2016-12-13 07:29:17 -06:00
tomaka 3b93c7c664 Merge pull request #95 from frewsxcv/transparent
Implement window transparency on macOS.
2016-12-04 07:59:51 +01:00
Corey Farwell cb0811faf3 Implement window transparency on macOS.
Fixes https://github.com/tomaka/winit/issues/57.
2016-11-30 14:36:51 -05:00
k-brac 7f2ee9a09a remove useless pub 2016-11-29 14:02:19 +01:00
k-brac 3e2154a922 child window created using a winapi::HWND instead of a WindowProxy 2016-11-29 13:02:42 +01:00
k-brac 2b25bf1480 child window creation improvement 2016-11-28 13:50:07 +01:00
k-brac 5a09e8ba21 first try to allow child window on windows 2016-11-25 17:05:39 +01:00
Corey Farwell 57d1e162ee Update min/max window constraints to support MacOS 10.10. 2016-11-23 10:50:12 -05:00
Corey Farwell e3fce3d5ec Implement min/max window dimension constraints for MacOS.
Fixes https://github.com/tomaka/winit/issues/80.
2016-11-23 09:31:41 -05:00
mitchmindtree 53065bda40 Move resize_callback field from WindowBuilder into WindowAttributes struct 2016-11-12 02:55:21 +11:00
mitchmindtree eb18b3d8b6 Add a WindowBuilder::with_window_resize_callback method.
This allows for passing the window_resize_callback fn during the window
building stage. More importantly, this allows setting the callback
without the need for mutable access to the Window, making it possible
to set the callback in the downstream glium crate.

This may solve tomaka/glium#1232 for most folk.
2016-11-11 22:08:46 +11:00
Pierre Krieger 2c58e85584 Some documentation improvements 2016-11-06 09:51:20 +01:00
Pierre Krieger 712b27086f Fix win32 panicking all the time and make events work 2016-11-05 13:44:23 +01:00
Victor Berger f371621dd9 linux: remove outdate comment 2016-11-03 22:48:58 +01:00
Andy Barron db45e58390 Add MouseEntered/MouseLeft for Windows, X11, Wayland, & Cocoa 2016-11-03 01:31:16 -07:00
Victor Berger ce6d2496d3 wayland: sync drawn border size on window creation 2016-11-02 20:07:49 +01:00
Pierre Krieger cf7c691bd6 Remove emscripten implementation 2016-11-01 16:16:59 +01:00
tomaka 9e404f2fe6 Merge pull request #28 from tomaka/win32-cleanups
Cleanups in the win32 code
2016-11-01 16:10:14 +01:00
Pierre Krieger ef61a46182 Removed pub fields when not needed 2016-10-31 17:30:19 +01:00
Pierre Krieger 158543f336 Remove obsolete comment 2016-10-31 17:29:12 +01:00
Pierre Krieger aace1c0373 Remove dependency on libc when possible 2016-10-31 17:26:26 +01:00
Pierre Krieger 751b0a7ed7 Move the win32 implementation to platform/windows 2016-10-31 17:23:00 +01:00
Pierre Krieger 188ecae101 Move some implementations around 2016-10-31 17:13:11 +01:00
Andrey Lesnikov f5daac771e Prepared winit for glutin porting 2016-10-20 11:06:57 +03:00
Victor Berger 76f5613496 wayland: properly fetch new events with Window::poll_events() 2016-10-16 23:29:29 +02:00
Victor Berger 0663269482 wayland: Implement wakeup_event_loop() 2016-10-16 22:53:53 +02:00
Victor Berger db6b4606a1 wayland: Support for wheel scrolling 2016-10-16 22:35:18 +02:00
Victor Berger 44996acf94 wayland: expose internals as side unsable methods 2016-10-10 08:01:58 +02:00
Victor Berger 42d73a1488 wayland: fix event dispatch, avoid double wait 2016-10-09 18:26:46 +02:00
Victor Berger 2d025a4a35 wayland: gracefully handle missing libxkbcommon 2016-10-09 18:26:24 +02:00
Victor Berger c6f8ed2f81 wayland: handle Focused event 2016-10-09 16:33:29 +02:00
Victor Berger 6483e7f408 wayland: Some Window methods 2016-10-09 16:19:06 +02:00
Victor Berger a5ba9983c9 wayland: basic mouse & keyboard support 2016-10-09 16:08:10 +02:00
Victor Berger 34c00aa153 wayland: window creation & resizing 2016-10-09 16:08:10 +02:00
Victor Berger a505eddf29 wayland: bases of backend and output handling 2016-10-09 16:08:10 +02:00
Victor Berger c991172a28 wayland: remove old code for new backend 2016-10-09 16:08:10 +02:00
Pierre Krieger fe77a55a67 Fix WindowExt implemented on the wrong Window 2016-10-08 09:18:00 +02:00
Pierre Krieger d5b88f1d5f Add get_nsview to WindowExt for MacOS 2016-10-06 20:41:15 +02:00
Andrey Lesnikov 2def6d5fff Fixed macos 2016-09-19 21:05:48 +03:00
Andrey Lesnikov 7f6ae8910e Merge https://github.com/tomaka/glutin
Conflicts:
	.travis.yml
	Cargo.toml
	examples/fullscreen.rs
	src/api/android/mod.rs
	src/api/cocoa/headless.rs
	src/api/cocoa/helpers.rs
	src/api/cocoa/mod.rs
	src/api/glx/mod.rs
	src/api/osmesa/mod.rs
	src/api/win32/callback.rs
	src/headless.rs
	src/lib.rs
	src/platform/linux/mod.rs
	src/window.rs
2016-09-19 19:53:28 +03:00
tomaka 614276eb0b Merge pull request #12 from Osspial/master
Fix win32 bug where window resize cursors would not show
2016-09-07 07:13:19 +02:00
Glenn Watson 1eb2052bcf Add support to Linux headless implementation for specifying OpenGL version.
This allows creation of GL3+ headless OSMesa contexts on Linux.
2016-08-22 09:16:47 +10:00
Victor Koenders 5ce48523cd Added a couple more PartialEq's 2016-08-17 20:42:45 +02:00
Nicolas Koch 32d01b288e Add support for xcb
Due to XCB and Xlib compability, we can take a shortcut and use X11's
underlying xcb_connection. This way, a complete XCB backend implementation can
be avoided.
2016-07-31 00:00:43 +02:00
Emilio Cobos Álvarez 952ca7cfed
x11: handle X11's multi-key, a.k.a compose key. 2016-07-04 16:40:47 -07:00
mraof f6ead48378 owner_events is now true when grabbing the pointer 2016-06-29 23:28:03 -04:00
mitchmindtree 8076255ba8 Make sure the window does not set itself to autorelease upon closing. 2016-06-26 11:44:27 +10:00
mitchmindtree cbb734b5a1 Remove unnecessary global imports in favour of explicitly importing traits and using namespacing for constants, types and functions. 2016-06-22 15:50:34 +10:00
tomaka 0c4cf714a1 Merge pull request #790 from mitchmindtree/remove_unused_imports
Addresses unused import and `non_upper_case_globals` warnings emitted on OS X
2016-06-22 07:43:55 +02:00
tomaka 572af951e9 Merge pull request #791 from mitchmindtree/remove_unused_private_fields
Remove unused private fields from cocoa HeadlessContext struct.
2016-06-22 07:43:17 +02:00
mitchmindtree 9a6b6b3f35 Remove imports of enum variants in favour of using the type name paths. 2016-06-22 13:32:36 +10:00
mitchmindtree c2537d81e8 Remove unused private fields from cocoa HeadlessContext struct. 2016-06-22 12:45:42 +10:00
mitchmindtree 561349669a Addresses several warnings emitted on OS X by removing unused imports and allowing non_upper_case_globals in cocoa event conversion function. 2016-06-22 12:40:48 +10:00
Andrey Lesnikov 7a8429e499 android: Fixed Window::get_pixel_format 2016-06-19 11:24:26 +03:00
tomaka 11faacefd7 Merge pull request #772 from ozkriff/master
Update to android_glue 0.2
2016-05-25 21:22:13 +02:00
Jan Segre e0f36b80c9 Make WindowBuilder and HeadlessRendererBuilder derive Clone. 2016-05-23 03:17:31 -03:00
Victor Berger c49c6bcd6e
wayland: WindowExt implementations. 2016-05-08 09:28:54 +02:00
Ivan Ukhov 54f442ea06 Generalize WindowBuilder::with_title 2016-05-08 09:28:42 +02:00
Victor Berger 14323656b6
wayland: Remove EGL-dependent code.
This removes all EGL-specific code from the wayland backend.

Notable unresolved question: due to wayland design, the resizing
methods will only get/set the size of the drawn borders, not of the
actual content drawn. This latter size cannot be controlled by winit.
2016-05-08 09:11:15 +02:00
Osspial b2cf70b342 Fixed some warnings when building on Windows 2016-05-07 21:05:45 -04:00
Osspial 163563073f Fixed win32 bug where resizing window wouldn't show resize cursors 2016-05-07 21:00:50 -04:00
Andrey Lesnikov 18f846403b Updated to android_glue 0.2 2016-05-06 00:01:40 +03:00
Corey Farwell dc49156fe6 Allow OSX WindowBuilder to specify 'activation behavior'. 2016-04-29 10:43:30 -04:00
Pierre Krieger 764bf7ce4b Update the android glue to 0.2 to use the new cargo-apk crate 2016-04-26 13:43:48 +02:00
Pierre Krieger 180aae3ada Remove OpenGL from Android code 2016-04-19 19:31:36 +02:00
Emilio Cobos Álvarez 0918fe4d9c
x11: Refactor NoneCursor logic so it applies to CursorState::Hide too 2016-04-17 18:14:53 +02:00
Emilio Cobos Álvarez 51aeb27d7e
x11: Add cursor hiding
The created cursor could be cached and whatnot, but I'm not sure it
deserves the complexity.
2016-04-17 17:41:58 +02:00
est31 7fb6450d17 Improve X11 cursor symbols handling
1. Make it non failing. Before we tried to call XFreeCursor with a
   cursor of 0 if we couldn't find a cursor. This has then caused a panic.

2. Introduce a system where multiple special cursors are tried
   in order to work with different themes and desktop environments.
   This way we get less often into the situation where we have to use a
   default cursor.

3. Also set names for some cursors that previously only had a placeholder.

Fixes #765.
Will fix https://github.com/servo/servo/issues/10475 as well.
2016-04-17 16:48:27 +02:00
Boris-Chengbiao Zhou b9065f56ba glx: Always set CONFIG_CAVEAT to DONT_CARE 2016-04-13 13:39:03 +02:00
Pierre Chevalier c68c0d96b2 Fix pixel format support detection in glx. #748
* by accepting GLX_EXT_framebuffer_sRGB as a sRGB capable framebuffer
* the new behaviour matches the wgl codel
2016-04-13 01:25:23 +01:00
tomaka d2343106bc Merge pull request #755 from BonsaiDen/glx_multisampling_conformance
glx: Support non-conformant multisampling fbconfigs.
2016-04-06 16:34:05 +02:00
Ivo Wetzel 1b313df1ea glx: Support non-conformant multisampling fbconfigs. 2016-03-30 08:40:32 +02:00
Ivo Wetzel 0e9fad5d23 Merge branch 'master' of github.com:tomaka/glutin into x11_window_size_constraints 2016-03-30 08:21:01 +02:00
Richard Lettich 117069ef90 Changed MouseMoved((i32, i32)) to MouseMoved(i32, i32), breaking change 2016-03-27 14:39:20 -04:00
Pierre Krieger d216d6b052 Merge remote-tracking branch 'glutin/master' into merge-glutin
Conflicts:
	Cargo.toml
	build.rs
	src/api/caca/mod.rs
	src/api/cocoa/mod.rs
	src/api/egl/ffi.rs
	src/api/egl/mod.rs
	src/api/glx/mod.rs
	src/api/osmesa/mod.rs
2016-03-26 17:55:03 +01:00
Ivo Wetzel 1b7a3cd31f Correctly apply initial size constraints for x11 windows. 2016-03-25 19:52:57 +01:00
Ivo Wetzel 7a5e47c446 Merge branch 'master' into x11_window_size_constraints 2016-03-25 02:54:40 +01:00
tomaka 8ae2df68e1 Merge pull request #744 from adamncasey/patch-1
Enable more Windows keys
2016-03-24 19:56:55 +01:00
tomaka 0cf1f01990 Merge pull request #746 from Thinkofname/hide-cursor-state-x11
Implement CursorState::Hide for x11
2016-03-24 07:37:58 +01:00
Thinkofname 5c4bfe1379 Remove a debug print added in 1de66e4ef 2016-03-21 18:49:00 +00:00
Thinkofname 267221af3e Implement CursorState::Hide for x11 2016-03-21 18:42:54 +00:00
Steven Sheldon c5268309c3 Update objc to 0.2. 2016-03-20 16:04:11 -07:00
Adam Casey 9e2a179daa Enable more Windows keys
This should enable most required keys on Windows.

Mappings taken from: https://msdn.microsoft.com/en-gb/library/windows/desktop/dd375731%28v=vs.85%29.aspx and applied with some guesswork to the Glutin names.
2016-03-19 10:56:58 +00:00
UK992 28599a5d79 Uncomment more keys on win32 2016-03-18 02:49:15 +01:00
Manish Goregaokar 1de66e4efb Add support for navigation keys 2016-03-17 16:04:03 +05:30
Paul Rouget a3543b700f Merge pull request #733 from fkaa/cocoa-memleak
Fix memory leak while creating NSEvent and swapping buffers (Fixes #514)
2016-03-17 03:08:47 +01:00
Patrick Walton 7249529654 Make Mac borderless windows resizable and draggable.
Despite the fact that the style mask contains `NSTitledWindowMask`, the
title doesn't show up for two reasons: (a) we draw over it; (b) we make
it invisible with a call to `-[NSWindow setTitleVisibility:]`.

Addresses servo/servo#9856 and servo/servo#9878.
Partially addresses servo/servo#9812.
2016-03-14 16:45:01 -07:00
Ivo Wetzel 7473d99c2f Implement min/max_dimensions for x11 windows.
Size hints are only being set for non-fullscreen windows, if
`max_dimensions` are set they'll override the normal `dimensions`
since X11 will not automatically resize the window after setting
the size hints.

`PSize` hint is currently set along with the `min/max` hints for
good measure.
2016-03-06 20:52:46 +01:00
Patrick Walton 7886ff9acd Add phases to wheel events.
Needed for apps to support overscroll on the Mac.
2016-03-03 16:49:35 -07:00
Felix Kaaman 08c311839f Fix memory leak while creating NSEvent and swapping buffers (Fixes #514) 2016-03-02 16:44:08 +01:00
Kirill Zdornyy 74a28adba2 Fix this_platform_is_not_supported on OpenBSD.
I followed the steps of @mneumann.
2016-03-01 18:06:13 -08:00
Patrick Walton bcd7999bf6 cocoa: Post Awakened events at the end of the queue to avoid floods.
Closes servo/webrender#179.
2016-02-29 15:12:35 -08:00
Pierre Krieger 16f76b2407 Make it compile on Linux 2016-02-27 13:59:11 +01:00
Paul Rouget 68818751f4 TouchpadPressure event 2016-02-26 11:08:46 +01:00
Felix Kaaman 778b8fa87a Purge OpenGL from cocoa 2016-02-23 13:25:33 +01:00
Pierre Krieger 10bb03c5f0 Remove most OpenGL stuff and make it compile on win32 2016-02-23 12:56:23 +01:00
Pierre Krieger ec76d991ad Unlocks platform-specific attributes 2016-02-10 17:39:35 +01:00
Pierre Krieger 982279bc39 Update the emscripten port of glutin 2016-02-09 14:25:21 +01:00
Paul Rouget 202f8c5a2d allow non ascii character in ReceivedCharacter 2016-02-08 14:45:02 +01:00
tomaka 3246613a51 Merge pull request #709 from gdamjan/support-utf8-window-title
support utf8 window titles via _NET_WM_NAME standard
2016-02-03 10:13:14 +01:00
Paul Rouget 99073eec7b osx: scroll delta should take hidpi factor into account 2016-02-02 10:25:26 +01:00
Matt Brubeck c67e43d076 Use double buffering by default on GLX 2016-01-28 13:23:06 -08:00
Mátyás Mustoha 11bbca7ca7 Replace i8 with libc::c_char 2016-01-26 12:44:34 +01:00
Michael Howell 0a43f8f733 Allow it to work under Xvfb.
Part of servo/servo#8641
2016-01-19 09:44:33 -07:00
tomaka 1113fa1c13 Merge pull request #703 from FredrikNoren/master
Fix cocoa headless. Fixes #635
2016-01-18 23:07:31 +01:00
Fredrik Noren 2a66d1cffc Construct cocoa headless context based on args 2016-01-18 13:12:40 -05:00
Damjan Georgievski e9fc0eeb87 call set_title() in new()
…instead of low-level X11 calls that don't work with utf8
2016-01-17 18:52:21 +01:00
Damjan Georgievski c923b27cad support utf8 window titles via _NET_WM_NAME standard
based on this freerdp patch
9767f7f042

thanks to emiliocobos on irc
2016-01-17 18:52:13 +01:00