Commit Graph

201 Commits

Author SHA1 Message Date
Michael Natterer
5ca2f06893 quartz: include all buttons' state in GdkEventMotion.state
(cherry picked from commit 3b5c5710da)
2011-11-09 00:36:21 +01:00
Michael Natterer
5f6c70f211 quartz: include all buttons' states in GdkEventButton.state
(cherry picked from commit a381e8ea62)
2011-11-09 00:26:30 +01:00
Michael Natterer
264241eb11 Bug 663605 - Fix event->state of many event types on quartz
Don't try to remember the current keyboard modifier and mouse button
states from the last event, because that isn't always right, and don't
set event.state = 0 for generated events. Instead, add private functions
to get the current states, and implement them with API that retrieves
these states independently from an event.
2011-11-08 21:52:49 +01:00
Kristian Rietveld
88329aeff4 quartz: use get_toplevel_from_ns_event in one more place
Fixup needed due to refactoring in GTK+-3.0.
2011-11-06 10:36:00 +01:00
Kristian Rietveld
e5ccae5782 quartz: make test_resize () conform to coding style 2011-11-06 10:16:27 +01:00
Kristian Rietveld
9f45c37be7 quartz: Process motion events within windows bounds without window set
When an NSEvent does not have the window field set, we already assumed
the event was not for us and discarded it.  But for NSMouseMoved events
we now make an exception, because such events generated after
using/clicking the main menu bar have the window field set to NULL while
the application window still has focus.

We used to experience a loss of motion events after using the menu bar,
this could be seen in buttons that stopped prelighting and first
clicks often being ignored unless you clicked somewhere else first.
These issues are fixed by this patch.
2011-11-06 10:15:16 +01:00
Kristian Rietveld
7269cdf315 quartz: Factor out toplevel from NSEvent code into function 2011-11-06 10:12:24 +01:00
Kristian Rietveld
6a7280ce1a quartz: Separate out screen_point conversion in function
Reduces code duplication and confusion.
2011-11-06 10:10:12 +01:00
Kristian Rietveld
4d9d8ba96d quartz: remove unused variable 2011-11-06 10:04:39 +01:00
Michael Natterer
a99d14f61c quartz: resolve the modifier confusion on the Mac
- map Alt/Option to MOD1
- map Command to MOD2
- map MOD2 to the virtual Meta
- improve/fix (?) group handling in gdkkeys-quartz.c
2011-09-26 16:01:50 +02:00
John Ralls
f84c787be4 Bug 655122: Lion Crashes during resize
Move resizing detection to a separate function and on 10.7 detect
resizes on all edges so that they don't result in grabs.
2011-08-13 15:30:59 -07:00
Kristian Rietveld
58ba8a7c7f quartz: use already existing current_button_state variable 2011-07-30 23:01:38 +02:00
Kristian Rietveld
a979e414fb quartz: remove _gdk_quartz_events_get_current_event_mask 2011-07-30 23:01:38 +02:00
Kristian Rietveld
c9f6c7645c quartz: return modifiers instead of an event mask ... 2011-07-30 23:01:37 +02:00
John Ralls
cfaed624be Update quartz to reflect deletion of GdkNativeWindow and client_message functions. 2011-02-01 13:53:00 -08:00
Kristian Rietveld
deffbd9885 quartz: reorder gdkprivate-quartz.h and related clean up 2010-12-23 14:17:42 +01:00
Kristian Rietveld
fb8717f722 quartz: move utils to gdkutils-quartz.c 2010-12-23 14:17:41 +01:00
Kristian Rietveld
caa9794af8 quartz: Clean up header files, use same arrangement as X11 backend 2010-12-23 14:17:41 +01:00
Kristian Rietveld
197590258f quartz: Make keyboard input work again 2010-12-22 22:33:05 +01:00
Kristian Rietveld
083c556e00 quartz: rename GdkDeviceManagerCore -> GdkQuartzDeviceManagerCore 2010-12-22 17:47:05 +01:00
Kristian Rietveld
3bc60a8149 quartz: rename GdkQuartzWindow to GdkQuartzNSWindow 2010-12-22 17:47:04 +01:00
Kristian Rietveld
6b96c56976 quartz: remove duplicate definition of gdk_flush 2010-12-22 17:47:03 +01:00
Kristian Rietveld
d0976d9f53 quartz: Fix gdkevents-quartz.c 2010-12-22 17:47:02 +01:00
Matthias Clasen
b2ff02332f Implement event_data_{copy,free} for quartz 2010-12-22 17:47:00 +01:00
Matthias Clasen
3232be603a Implement has_pending and queue_events vfuncs for quartz 2010-12-22 17:46:59 +01:00
Matthias Clasen
733c8fc8e7 Derive GdkDisplayManager for quartz 2010-12-22 17:46:59 +01:00
Matthias Clasen
8a9c604b8a Adapt quartz device code to new ways
We will need to rename the Core implementations in X11/Quartz
to not clash, later.
2010-12-22 17:46:59 +01:00
Matthias Clasen
41352f24d6 Convert all GdkScreen methods to vtable calls, quartz backend 2010-12-22 17:46:59 +01:00
Matthias Clasen
acd99409b8 Make display method vtable calls, quartz backend 2010-12-22 17:46:59 +01:00
Matthias Clasen
31cd046cd0 Move gdk_add_client_message_filter to common code 2010-12-21 12:06:55 -05:00
Kristian Rietveld
fd6e57687d Port Quartz backend to latest rendering-cleanup changes 2010-12-06 14:15:47 +01:00
John Ralls
c0aae6644a Replace references to sealed GdkDevice private variables with accessor calls in quartz. 2010-11-23 16:53:45 -08:00
William Jon McCann
323df2b280 Make gdk_event_apply_filters safe against changes in filter list
An event filter may add or remove filters itself.  This patch does
two things to address this case.  The first is to take a temporary
reference to the filter while it is being used.  The second is
to wait until after the filter function is run before determining
the next node in the list to process.  This guards against
changes to the next node.  It also does not run functions
that have been marked as removed.  Though I'm not sure if this
case can arise.

https://bugzilla.gnome.org/show_bug.cgi?id=635380
2010-11-22 13:16:24 -05:00
Benjamin Otte
b5097de481 gdk: gdk_drawable_get_display() => gdk_window_get_display() 2010-09-26 15:11:33 +02:00
Kristian Rietveld
234d750bb3 Update Quartz backend for GDK key name changes 2010-09-13 16:26:02 +02:00
Kristian Rietveld
bde0f9a8f6 quartz: Misc. fixes for getting offscreen windows to work
Mainly fixes to properly differentiate between toplevel and offscreen
windows, since these sometimes need different treatment.  Furthermore,
usage of gdk_window_get_effective_foo() instead of gdk_window_get_foo()
where applicable.
2010-08-10 21:02:31 +02:00
Kristian Rietveld
be27fba3f3 Remove dummy for gdk_event_get_graphics_expose()
This was a deprecated function that has been removed.
2010-06-30 21:43:25 +02:00
Matthias Clasen
bd4609b140 Merge the xi2-for-master branch 2010-05-25 18:38:44 -04:00
Javier Jardón
7894951cee Remove deprecated code from GdkEvent 2010-05-03 01:48:45 +02:00
Kristian Rietveld
66207cf13e Improve enter/motion notify semantics
On X11 we receive enter notify and motion notify events for a window
regardless of its focus state.  On Mac OS X this is not the case.  This
commit improves the semantics to overcome this difference.  It improves
on my earlier patch that sent a motion notify event when a window became
main.

Instead of sending a motion notify when a window becomes main, we now
send one when a window becomes key, which comes closest to a window
getting focus in X11.  This motion notify is needed because Mac OS X does
not send motion events when an application is inactive (none of its
windows have focus), these events are sent in X11.  This dummy motion
notify event (with current coordinates of the mouse cursor) allows an
application to get its prelight and other state right when it gets focus
and thus user attention.

Another change is to send an enter notify event when updating the
tracking rectangle of a GdkQuartView and the mouse cursor is currently in
this rectangle.  This rectangle is at least updated on window creation.
This enter notify event is important for the case where a new window
appears right below the mouse cursor.  The window has to receive an enter
notify event for the subsequent events to be processed correctly.  Mac
OS X does not send one in this case, so we generate it ourselves.

Both of these synthesized events have to go through
_gdk_windowing_got_event() for updating statekeeping, etc.
append_event() has a boolean flag now to make this convenient.
2010-01-30 20:36:28 +01:00
Kristian Rietveld
b2b70e5a8d Start using NSInteger and NSUInteger
These have been introduced in Leopard and default to int and unsigned int.
In 64-bit Snow Leopard they are long and unsigned long.  This caused issues
with the getRectsBeingDrawn message which needs a pointer to a NSInteger
(long on 64-bit!) but we passed in an integer.  Surprisingly this problem
was visible when compiling with -O0 (segfault), but *not* when compiling
with -O1.  Other messages were NSInteger is now needed have also been
adapted.

Since NSInteger and NSUInteger are not available on Tiger, a define
has been added to add typedefs for these when they have not been defined
by the system headers.
2009-12-27 19:28:56 +01:00
Kristian Rietveld
8846012c6d Rework coordinate transformation to be based on root window
The root window contains all the monitors attached to a Mac.  The
coordinate transformation now both translates the x and y coordinate,
translating it from the Cocoa monitor coordinate space to the GDK
coordinate space.  How monitors are laid out in the root window differs
between Cocoa and GDK, which is why it is important to translate based
on the root window to get multi monitor setups to work properly.

We have replaced the old y coordinate transformation function with
new functions that translate both the x and y coordinate.

When creating new toplevels, we have to determine the Cocoa screen on
which the toplevel should appear and translate the coordinates according
to that screen.

This change also fixes event handling in case there is a monitor left
of the screen containing the menu bar.  In such a case all coordinates
on the left monitor are negative.  Event handling broke, because of
_gdk_quartz_window_find_child() checking bounds.  Now that coordinates
are always properly translated to GDK coordinate space, in which negative
coordinates do never occur, the checks here will work properly.
2009-10-26 09:52:54 +01:00
Christian Hergert
17130a8ec9 Bug 517394 - Native resize grip steals button release ...
Explicitly handle resizing by leaving all events in the lower right 15x15
corner to Cocoa, if the window shows a resizing indicator.  Some
applications may have widgets allocated in this area.  Generally, these
widgets are likely larger than 15x15 so they can still be hit.  Often
scroll bars are found in this area and these can also be manipulated by
other means.  Since this is the only way of resizing windows on Mac OS X,
it is too important to keep it broken.
2009-09-25 21:52:13 +02:00
Kristian Rietveld
cf80feb3dd Do not test the event mask of implicit grabs
The quartz backend simulates the semantics of XGrabPointer, as a part of
this it checks the event mask of the grab.  However, implicit grabs on X
do not go through XGrabPointer and thus the quartz backend should not check
the event mask for these.  This fixes various "the UI got stuck" cases.
2009-09-16 08:48:49 +02:00
Richard Hult
52ca2f29cc Update _gdk_windowing_pointer_grab 2009-06-20 11:50:10 +02:00
Richard Hult
730a44a516 Tweak the click-through handling so active apps get it (but not inactive ones) 2009-04-02 10:16:30 +02:00
Richard Hult
53b3343d1b Get the right event window for non-grabbed windows too 2009-04-02 10:16:29 +02:00
Richard Hult
f51a3f5e33 Make owner_events grabs work again, use the pointer window, not the event window 2009-04-02 10:15:32 +02:00
Richard Hult
6d1a8853c4 Don't ignore all events when inactive, only clicks 2009-04-02 10:15:32 +02:00
Richard Hult
41d40786b1 Relax the check for ignoring events above the content view 2009-04-02 10:15:32 +02:00
Richard Hult
651335bc7e Remove workaround for missing enter events on newly popped up windows
The reason for the issue was that we got entered/exited events for the
title bar buttons. Now we properly ignore those instead.
2009-04-02 10:15:32 +02:00
Richard Hult
aeeb54ddf0 Remove re-declared variable 2009-04-02 10:15:32 +02:00
Richard Hult
64195589dc Remove unused code and fix some indentation 2009-04-02 10:15:32 +02:00
Richard Hult
6d01d16d48 Button press and release can share the same fill_button_event call 2009-04-02 10:15:32 +02:00
Richard Hult
77ee2feda2 Remove tracking of "current mouse window", this is handled in the common code now 2009-04-02 10:15:32 +02:00
Richard Hult
3c7a37d10d Remove old cursor setting and make it work with client-side windows 2009-04-02 10:15:32 +02:00
Richard Hult
e6f2a809b2 Update for latest changes in the common code for grab tracking 2009-04-02 10:15:32 +02:00
Richard Hult
f455b478e7 Ignore all events if the app is not active 2009-04-02 10:15:31 +02:00
Richard Hult
2c043566fc When breaking grabs on deactivation, the unset should be implicit 2009-04-02 10:15:31 +02:00
Richard Hult
30f83d8398 Use _gdk_display_unset_has_*_grab in break_all_grabs() 2009-04-02 10:15:31 +02:00
Richard Hult
65aef2099a Use cooca to convert coordinats from event window to grab window instead of homegrown code 2009-04-02 10:15:31 +02:00
Richard Hult
a180f7588f Replace quartz specific keyboard grab code with common code 2009-04-02 10:15:31 +02:00
Richard Hult
152614966f Use the common pointer grab code instead of tracking it ourselves 2009-04-02 10:15:31 +02:00
Richard Hult
55c71f18a4 Use isKeyWindow instead of isMainWindow for the non-click-through check 2009-04-02 10:15:31 +02:00
Richard Hult
e8d6ac71b7 Apply non-click-through policy on unfocused windows even if the app is active 2009-04-02 10:15:31 +02:00
Richard Hult
ccd982f8bd Remove unused remainders from the old implicit grab code 2009-04-02 10:15:31 +02:00
Richard Hult
79d9a8f960 Get implicit grabs working 2009-04-02 10:15:31 +02:00
Richard Hult
3d72fe16c0 Leave AppKit events unhandled 2009-04-02 10:15:30 +02:00
Richard Hult
0fc2c36ee7 Use event_type we already have instead of regetting it 2009-04-02 10:15:30 +02:00
Richard Hult
7abde8388f Get the correct root coordinates for events 2009-04-02 10:15:30 +02:00
Richard Hult
19951c064e Remove gdk_keyboard_grab_info_libgtk_only which moved to the common code 2009-04-02 10:15:26 +02:00
Richard Hult
defc779df5 Add serial argument to _gdk_windowing_got_event 2009-04-02 10:15:26 +02:00
Richard Hult
89f1cb5178 First cut at getting events working 2009-04-02 10:15:25 +02:00
Richard Hult
edb35763a2 Get rid of all the synthesized crossing events except for ANCESTOR one on the toplevel 2009-04-02 10:15:24 +02:00
Richard Hult
330e790fb2 Rename _gdk_quartz_events_send_map_events to ..._event 2009-04-02 10:15:24 +02:00
Richard Hult
32555badb5 Clean up some whitespace 2009-04-02 10:15:24 +02:00
Richard Hult
54e6878001 Add fill_crossing_event to be used soon 2009-04-02 10:15:24 +02:00
Richard Hult
8e8aa53298 Add enter/leave notify to get_event_mask_from_ns_event now that those are handled like other events 2009-04-02 10:15:24 +02:00
Richard Hult
da8666d745 Clean up the scroll support a little 2009-04-02 10:15:24 +02:00
Richard Hult
25b311bac3 Make the various fill_*_event functions consistent 2009-04-02 10:15:24 +02:00
Richard Hult
4c01ca7ddd Rework the event translation to look more like X11
Put the event in the queue with a pending flag, remove again if not
handled.
2009-04-02 10:15:24 +02:00
Richard Hult
19b1f6a93a Fix bug from first patch round, get private from window, not from impl 2009-04-02 10:15:23 +02:00
Richard Hult
f080825430 Remove gdk_display_pointer_is_grabbed and gdk_pointer_grab_info_libgtk_only 2009-04-02 10:15:23 +02:00
Richard Hult
b1b358c820 Remove width/height from GdkWindowImplQuartz and use those in GdkWindowObject 2009-04-02 10:15:22 +02:00
Richard Hult
31357d3cc7 Revert (at least for now) the alt/cmd switching since it breaks the
2008-11-05  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c:
	(get_keyboard_modifiers_from_ns_event), (create_key_event): Revert
	(at least for now) the alt/cmd switching since it breaks the
	"alt-gr" functionality of alt which makes it impossible to input
	lots of characters.

svn path=/trunk/; revision=21761
2008-11-05 19:12:48 +00:00
Richard Hult
d2ed4085c0 Bug 557894 – Wrong return value for gdk_pointer_grab_info_libgtk_only()
2008-10-27  Richard Hult  <richard@imendio.com>

	Bug 557894 – Wrong return value for
	gdk_pointer_grab_info_libgtk_only()

	* gdk/quartz/gdkevents-quartz.c:
	(gdk_pointer_grab_info_libgtk_only): Return TRUE when there is a
	pointer grab. Patch by Owen Taylor.

svn path=/trunk/; revision=21722
2008-10-27 14:54:57 +00:00
Johan Dahlin
d97cdbdf53 Include "config.h" instead of <config.h> Command used: find -name
2008-06-21  Johan Dahlin  <jdahlin@async.com.br>

    * *.[ch]: Include "config.h" instead of <config.h>
    Command used:
    find -name \*.[ch]|xargs perl -p -i -e 's/^#include <config.h>/#include "config.h"/g'
    Rubberstamped by Mitch and Tim


svn path=/trunk/; revision=20669
2008-06-22 14:28:52 +00:00
Richard Hult
f3a6fecb67 Try setting the default font, might need to tweak this.
2008-05-26  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c: (gdk_screen_get_setting): Try
	setting the default font, might need to tweak this.

svn path=/trunk/; revision=20181
2008-05-26 18:51:35 +00:00
Richard Hult
801f7bb44a Remove special casing of menu key events as it's no longer necessary;
2008-05-12  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c:
	* gdk/quartz/gdkquartz.h: Remove special casing of menu key events
	as it's no longer necessary; instead the added quartz API to get
	the nsevent from an event should be used. Also move the global
	filter up so it's done before the check for window-less events.

svn path=/trunk/; revision=20100
2008-05-12 11:23:28 +00:00
Michael Natterer
f3cd3f7cf5 gdk/gdkinternals.h gdk/gdkevents.c gdk/directfb/gdkevents-directfb.c
2008-05-07  Michael Natterer  <mitch@imendio.com>

	* gdk/gdkinternals.h
	* gdk/gdkevents.c
	* gdk/directfb/gdkevents-directfb.c
	* gdk/quartz/gdkevents-quartz.c
	* gdk/win32/gdkevents-win32.c
	* gdk/x11/gdkevents-x11.c (_gdk_windowing_event_data_copy):
	order parameters src,dest and make src const.


svn path=/trunk/; revision=20079
2008-05-06 22:35:13 +00:00
Richard Hult
4ee2d1b6ba Add private backend data to events, and handle it when copying/freeing
2008-05-06  Richard Hult  <richard@imendio.com>

	* gdk/gdkevents.c: (gdk_event_copy), (gdk_event_free):
	* gdk/gdkinternals.h: Add private backend data to events, and
	handle it when copying/freeing events. Currently only needed in
	the quartz backend.

	* gdk/directfb/gdkevents-directfb.c:
	* gdk/quartz/gdkevents-quartz.c:
	* gdk/win32/gdkevents-win32.c:
	* gdk/x11/gdkevents-x11.c: (_gdk_windowing_event_data_copy)
	(_gdk_windowing_event_data_free): Add stubs for X11, win32 and
	directfb. Implement for quartz. Part of fixing bug #473822.

svn path=/trunk/; revision=20078
2008-05-06 21:00:06 +00:00
Richard Hult
ca9a6075e6 Don't send nsevents with the gdk lock held, fixes deadlock when doing
2008-04-30  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c: (_gdk_events_queue): Don't send
	nsevents with the gdk lock held, fixes deadlock when doing manual
	window resizing with threading enabled.

svn path=/trunk/; revision=20055
2008-04-30 17:46:00 +00:00
Richard Hult
49f341f12c Map Alt to Alt and Cmd to Meta. This is not only more logical but also
2008-04-30  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c:
	(get_keyboard_modifiers_from_ns_event), (create_key_event): Map
	Alt to Alt and Cmd to Meta. This is not only more logical but also
	makes it easier to have Mac-like behavior.

svn path=/trunk/; revision=20054
2008-04-30 17:42:27 +00:00
Richard Hult
a63c87c5da Defer the generated event to the mainloop and don't generate one at all if
2008-03-28  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c: (gdk_event_translate),
	(_gdk_quartz_events_trigger_crossing_events): Defer the generated
	event to the mainloop and don't generate one at all if the
	toplevel didn't change. Use the actual window and not the toplevel
	as event window. These changes make the generated crossing events
	match the X11 behavior and fixes issues with e.g. tooltips,
	comboboxes and menus.

	* gdk/quartz/GdkQuartzView.c: Don't update the tracking rect if
	the view has no window, it will be updated as soon as it's put
	inside a window.

	* gdk/quartz/gdkwindow-quartz.c:
	(_gdk_quartz_window_debug_highlight): Make it possible to track
	multiple windows with debug highlighting.
	(show_window_internal): Remove workaround for tooltips and popups
	that is no longer needed with the above changes.

svn path=/trunk/; revision=19951
2008-03-31 13:15:15 +00:00
Richard Hult
9d8b846e80 Bail out early if we can't find a matching window.
2008-03-25  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c:
	(_gdk_quartz_events_trigger_crossing_events): Bail out early if we
	can't find a matching window.

	* gdk/quartz/gdkwindow-quartz.c: (show_window_internal): Add a
	comment, and only trigger an event for non-temp windows, fixes
	problems for tooltips caused by the workarounds for the
	problematic tracking rect API.

svn path=/trunk/; revision=19934
2008-03-25 13:49:03 +00:00
Richard Hult
837aec97bb Fix build on tiger.
2008-02-25  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c
	(_gdk_quartz_events_trigger_crossing_events): Fix build on tiger.

svn path=/trunk/; revision=19644
2008-02-25 12:45:56 +00:00
Richard Hult
4dbd9d23d7 Use the subtype field for the custom event that is used to wake up the
2008-02-24  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkprivate-quartz.h:
	* gdk/quartz/gdkeventloop-quartz.c: (got_fd_activity), (poll_func):
	Use the subtype field for the custom event that is used to wake up
	the mainloop so we can have other custom event types.

	* gdk/quartz/gdkevents-quartz.c:
	(_gdk_quartz_events_trigger_crossing_events):
	* gdk/quartz/gdkwindow-quartz.c: (show_window_internal): Create
	crossing events after showing a window if necessary, to work
	around problems with the tracking rect API.

svn path=/trunk/; revision=19637
2008-02-24 17:45:29 +00:00
Richard Hult
c17e6f1fa2 Highlight the mouse window when event debugging is enabled.
2008-02-17  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c
	(_gdk_quartz_events_update_mouse_window): Highlight the mouse
	window when event debugging is enabled.

svn path=/trunk/; revision=19603
2008-02-17 09:54:57 +00:00
Richard Hult
ccc8afdbf2 Add state to the scroll event (bug #516757, Paul Davis).
2008-02-16  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c (create_scroll_event): Add state
	to the scroll event (bug #516757, Paul Davis).

svn path=/trunk/; revision=19598
2008-02-16 09:49:52 +00:00
Richard Hult
d6098bb41a Ignore the delta from the NSEvent for now, generating multiple scroll
2008-02-08  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkevents-quartz.c (gdk_event_translate): Ignore the
	delta from the NSEvent for now, generating multiple scroll events
	results in a lot of events getting queued up and things get really
	slow.

svn path=/trunk/; revision=19499
2008-02-08 19:08:40 +00:00