In the Quartz backend, there are two methods by which windows are
resized. The first method is fully handled by Quartz and does not appear
in the event stream the application resizes. The second method is when
we resize windows by ourselves. In OS X this happens when a GTK+ resize
grip is used. This resize grip is larger than the Quartz resize grip.
When the resize is started outside the "Quartz area", we have to handle
it by ourselves.
This patch fixes this manual window resizing by ignoring events while we
are in the process of resizing (such that the events actually arrive at
the sendEvent handler of GdkQuartzWindow where this resize is handled).
When the resize has finished we break all grabs such that GDK is not
stuck thinking the cursor is still in the resize window.
We have to do this, especially after the screen containing the menubar
has changed. Such more larger changes in monitor geometry will cause
changes to how monitors are laid out in the root window. The position
coordinates of the windows will have to be updated to reflect their
position in the new layout.
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.
The one that puts windows outside the screen and moves them in when
showing. It might not be needed anymore and the workaround doesn't
work with the client-side window branch anyway because the window is
already mapped when we get showed for some reason.
2008-02-24 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c: Prevent hidden windows from being
shown without gdk's control when clicking the dock icon.
svn path=/trunk/; revision=19638
2008-02-17 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c: (showAndMakeKey): Update the
position after showing the window since the window manager might
not place it where we requested in the first places.
svn path=/trunk/; revision=19605
2008-02-14 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c: Set frame, not bounds when
resizing to be consistent and to avoid introducing an internal
transform in the view.
svn path=/trunk/; revision=19566
2007-12-20 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c:
* gdk/quartz/GdkQuartzWindow.h: Make manual resizing smoother by
processing events after changing the size.
svn path=/trunk/; revision=19206
2007-11-03 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c:
* gdk/quartz/GdkQuartzWindow.h: Make the grab breaking on window
move work on Leopard (as well as Tiger) by ignoring which mouse
button is pressed.
svn path=/trunk/; revision=18964
2007-11-01 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c:
* gdk/quartz/GdkQuartzWindow.h:
* gdk/quartz/gdkdnd-quartz.c:
* gdk/quartz/gdkquartz.h:
* gtk/gtkdnd-quartz.c: Redo the fix for bug #492117, by adding a
getter for the private drag context info so we don't need to
expose so much in the public quartz header file.
svn path=/trunk/; revision=18959
2007-07-07 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c ([GdkQuartzWindow -windowDidResignMain:])
([GdkQuartzWindow -windowDidBecomeMain:]):
* gdk/quartz/gdkwindow-quartz.c (_gdk_quartz_window_did_resign_main)
(_gdk_quartz_window_did_become_main, gdk_window_hide)
(_gdk_windowing_window_destroy): Keep a stack of main windows and
select the most recent one when hiding/closing the current one.
svn path=/trunk/; revision=18396
2007-07-06 Richard Hult <richard@imendio.com>
* gdk/quartz/gdkprivate-quartz.h:
* gdk/quartz/gdkwindow-quartz.c:
* gdk/quartz/GdkQuartzWindow.c: Fix (de)miniaturizing transient
windows, by (un)setting the parent before and after miniaturizing.
svn path=/trunk/; revision=18388
2007-06-30 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzView.c: Improve the tracking rect updating:
- No need to override setFrame.
- Use our own size instead of the bounds from for the view as it's
not always updated before the tracking rect.
- Only reset the tracking rect if the new window is nil).
* gdk/quartz/GdkQuartzWindow.c: Update the bounds of the content
view when the window size changes.
svn path=/trunk/; revision=18309
2007-06-20 Richard Hult <richard@imendio.com>
* gdk/quartz/gdkwindow-quartz.c (gdk_window_new):
* gdk/quartz/GdkQuartzWindow.c (windowDidResize): Don't create or
update the tracking rect in the window, move it to the view where
it belongs.
* gdk/quartz/GdkQuartzView.c (updateTrackingRect)
(viewDidMoveToWindow, viewWillMoveToWindow)
(setFrame, setBounds): Create and update the tracking rect here.
svn path=/trunk/; revision=18197
2007-06-16 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c: (isInMove): Implement, to be used
to detect if the window is currently being moved with the mouse.
svn path=/trunk/; revision=18159
2007-06-05 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c: Don't let temp windows become key
window.
svn path=/trunk/; revision=18046
2007-04-06 Richard Hult <richard@imendio.com>
* gdk/quartz/: Clean up namespaces to make the code more
maintainable.
* gdk/quartz/gdkdrawable-quartz.c:
* gdk/quartz/gdkgc-quartz.c: Fix bug #418384, alignment of tiled
images, by setting the pattern phase for the CG pattern.
svn path=/trunk/; revision=17584
2006-07-29 Richard Hult <richard@imendio.com>
* gdk/quartz/gdkcolor-quartz.c (gdk_colormap_alloc_colors): Always
set success to TRUE.
(gdk_color_change): Implement.
* gdk/quartz/GdkQuartzWindow.c
([GdkQuartzWindow -canBecomeKeyWindow]): Add comment.
* gdk/quartz/gdkevents-quartz.c (gdk_screen_get_setting): Make the
default font a bit smaller until we have made this get the system
setting.
* gdk/quartz/gdkwindow-quartz.c (gdk_window_set_type_hint): Enable
shadows for the right window types.
* gdk/quartz/gdkprivate-quartz.h:
* gdk/quartz/gdkgc-quartz.c:
* gdk/quartz/gdkdrawable-quartz.c:
* gdk/quartz/gdkcolor-quartz.c: Expose the CGContext functions,
update callers.
* gdk/quartz/gdkmain-quartz.c: (_gdk_windowing_init): No need to
get the current process ID, use the right constant instead.
2006-07-24 Richard Hult <richard@imendio.com>
* gdk/quartz/gdkwindow-quartz.c (gdk_window_set_type_hint): Set the
window level depending on the type hint.
* gdk/quartz/gdkevents-quartz.c (gdk_keyboard_grab,
pointer_ungrab_internal): Only break the grab if the new window is
a different one.
(gdk_event_translate): Catch the case where the entire app loses
focus and break any grabs. Only do implicit grabs when the event
mask has both press and release.
* gdk/quartz/gdkkeys-quartz.c (translate_keysym):
* gdk/quartz/gdkselection-quartz.c:
* gdk/quartz/GdkQuartzWindow.c
([GdkQuartzWindow -windowDidResignKey:]): Use this to update the
focus window instead of resignMain, fixes the case where other apps
uses focus follows mouse (like the terminal can).
2006-07-19 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c
([GdkQuartzWindow -windowDidResignMain:]):
* gdk/quartz/gdkevents-quartz.c (_gdk_quartz_update_focus_window):
Listen to windowDidResignMain notifications and properly update the
focus window when windows are unfocused.
2006-07-19 Richard Hult <richard@imendio.com>
* gdk/quartz/gdkwindow-quartz.c (gdk_window_impl_quartz_init)
(gdk_window_set_type_hint, gdk_window_get_type_hint):
* gdk/quartz/GdkQuartzWindow.c
([GdkQuartzWindow -canBecomeMainWindow])
([GdkQuartzWindow -canBecomeKeyWindow]): Implement type hints and
use them to determine which windows should be allowed to become
main and key windows.
2006-03-21 Anders Carlsson <andersca@imendio.com>
* gdk/quartz/GdkQuartzWindow.c:
(drag_operation_to_drag_action):
(drag_action_to_drag_operation):
(update_context_from_dragging_info):
(-[GdkQuartzWindow draggingEntered:]):
(-[GdkQuartzWindow draggingEnded:]):
(-[GdkQuartzWindow draggingExited:]):
(-[GdkQuartzWindow draggingUpdated:]):
(-[GdkQuartzWindow performDragOperation:]):
(-[GdkQuartzWindow wantsPeriodicDraggingUpdates]):
(-[GdkQuartzWindow draggedImage:endedAt:operation:]):
* gdk/quartz/gdkdnd-quartz.c:
(gdk_drag_context_finalize):
(gdk_drag_context_init):
(gdk_drag_context_class_init):
(gdk_drag_begin):
(gdk_drag_status):
Add the GDK part of the DND implementation.
* gdk/quartz/Makefile.am:
Add some missing headers.
* gdk/quartz/gdkdrawable-quartz.h:
* gdk/quartz/gdkprivate-quartz.h:
* gdk/quartz/gdkquartz.h:
* gdk/quartz/gdkwindow-quartz.c:
(gdk_quartz_window_get_nsview):
New function, for use by the GTK part of the DND implementation
2006-03-21 Anders Carlsson <andersca@imendio.com>
* gdk/quartz/GdkQuartzWindow.c
([GdkQuartzWindow -windowDidMove:]): Synthesize GDK_CONFIGURE events
when the window position changes.
2006-01-02 Anders Carlsson <andersca@imendio.com>
* gdk/quartz/GdkQuartzWindow.c:
(-[GdkQuartzWindow canBecomeMainWindow]):
(-[GdkQuartzWindow canBecomeKeyWindow]):
Have these return TRUE
* gdk/quartz/gdkevents-quartz.c:
(pointer_grab_internal):
Remove FIXME
(find_child_window_by_point_helper):
Fix bug in offset calculation
(find_window_for_event):
Use grab window toplevel when a grab is in effect
(gdk_event_translate):
Don't call _gdk_event_button_generate on mouse up
* gdk/quartz/gdkgc-quartz.c:
(_gdk_quartz_gc_new):
Fix indentation
* gdk/quartz/gdkwindow-quartz.c:
(gdk_window_new):
Make TEMP windows borderless
(gdk_window_hide):
Hide window
(gdk_window_get_origin):
Implement