Commit Graph

51 Commits

Author SHA1 Message Date
John Ralls
3a959e984f Force a window resize if the content view frame changes.
Closes: https://gitlab.gnome.org/GNOME/gtk/issues/1029

Should fix most if not all other cases where system-caused changes to
the NSWindow result in the Gdk coordinates not mapping correctly to the
AppKit coordinates.
2019-03-17 10:15:30 -07:00
John Ralls
db84dc8e58 Fix crash when closing a fullscreen window. 2019-03-11 16:16:46 -07:00
Suyuan Chang
cfad43b80d macOS: Fix bug that entry cannot press and hold a key to input accented character.
There're two issues in GdkQuartzView's NSTextInputClient implementation
causes this bug.

1. The -(NSRange)selectedRange should not return [NSNotFound, 0] if
   there's no selection. The accented character window will not show
   if returned NSRange's location is NSNotFound. Instead of that, the
   NSRange's location should be the caret position in the text input
   buffer.

2. The accented character window will invoke
   -(void)insertText:replacementRange: with non-empty replacement
   range, to replace non-accented character with accented character
   after user select it from accented character window. This case is
   not implemented in original code. Here I use another gobject data
   to pass the information to input module and convert it into
   'delete-surrounding' event.

Besides these, there's another bug cause gtk_im_context_filter_keypress()
return wrong value while user press and hold a key. When user press
and hold a key, the accented character window will consume the
repeating key down event. Is this case, gtk_im_context_filter_keypress()
should return TRUE, indicate the key press is filtered by input
method module. But it will return FALSE because
gtk_im_context_filter_keypress() assume that every key press event
will generate some text from input method module.

Fixes #1618
2019-01-30 22:07:23 -08:00
John Ralls
9773b1951c Clean up some unused variables. 2018-12-07 16:39:13 -08:00
John Ralls
85f52dceaa Replace NSInputManager for MacOS 10.6 and later. 2018-12-07 16:39:13 -08:00
Christoph Reiter
5c0d242ea3 macos: Fix gdk_quartz_drag_context_get_dragging_info_libgtk_only symbol export
The header got included without config.h being included first which resulted in the
wrong _GDK_EXTERN macro being used. As a result some symbols weren't exported
and starting a DnD action would crash in the linker.

This patch adds config.h includes in all places where clang complained about
_GDK_EXTERN redefinitions.

See #32 for more info.
2018-02-27 19:53:43 +01:00
Matthias Clasen
2a2d254a8b quartz: Don't use g_print for debug output
The g_print documentation explicitly says not to do this, since
g_print is meant to be redirected by applications. Instead use
g_message for logging that can be triggered via GTK_DEBUG.
2016-02-28 21:40:23 -05:00
Allin Cottrell
46d3611052 Fix Quartz Full Screen Crash. 2016-02-21 16:22:27 -08:00
Marek Kasik
8b5d30d439 Remove redundant checks for NULL
Remove checks for NULL before g_free() and g_clear_object().
Merge check for NULL, freeing of pointer and its setting
to NULL by g_clear_pointer().

https://bugzilla.gnome.org/show_bug.cgi?id=733157
2014-10-02 19:06:03 +02:00
Ek Kato
08042ea830 Bug 705750 Quartz input method doesn't work correctly for Chinese characters
Modified from original for Gtk3.
2013-08-16 11:18:29 -07:00
Ek Kato
40c429c2cb Bug 705181 Annoying beep on arrow keys
Original patch was a bit excessive, just needed to not forward the command.
2013-08-13 11:16:03 -07:00
Michael Hutchinson
a78643bd6f Bug 705181: Fix annoying beeping introduced by Mac IME
NSTextInputClient should not chain unhandled commands to super

(cherry picked from commit 91bcca6f39)
2013-07-30 17:27:10 -07:00
Ek Kato
fbfce31889 Bug 701332 - Patch for minor glitch in NSTextInput
(cherry picked from commit 43ed68aa33)
2013-07-27 14:09:55 -07:00
E. K. Kato
155caad426 Bug 694273 - Patch to support NSTextInputClient in text widgets
Provides an input module for native OSX input methods.
Based on a patch by Hiroyuki Yamamoto
(http://www.sraoss.jp/sylpheed/sylpheed/macosx/gtk+-2.24.0-macosx-textinputclient_ja-test1.patch).
Adjustments for Gtk3 by Matthew Francis <gnomebugs@newsheffield.co.uk>
2013-05-20 10:48:32 -07:00
Michael Natterer
2d5ad5f54e Bug 672193 - windows (including menus) shown multiple times don't...
Based on a patch from Paul Davis, inject synthetic enter events directly
into the Quartz event stream, instead of trying to synthesize them in GDK.

This seems to magically fix most combo box popup weirdness, I guess
some code is relying on a specfic order of events, or any other state
imposed by the "proper" code path of events coming in the usual way.

The patch also removes _gdk_quartz_events_send_enter_notify_event()
which is now obsolete.

(sortof cherry-pixked from 979e5061a0
but needed manual editing because GdkQuartzWindow.c was renamed
and apparently earlier patches not picked correctly/completely)
2012-11-20 10:28:58 +01:00
Kristian Rietveld
c7ce4b6b3d quartz: Actually use the window background PATTERN color
Before we used a window's background color, which resulted in corrupted
display in some cases, presumably because we didn't reset the active
pattern. This patch seems to eliminate the observed corruption.
(cherry picked from commit 0e42cf81f1)
2012-10-09 16:19:29 +02:00
Kristian Rietveld
4ccf8609ab quartz: Fix garbage content when windows are initially mapped
The garbage would be visible if any widget enabled the toplevel
NSView's CALayer in order to do custom native rendering.
(cherry picked from commit 92ea94af5f)
2012-09-28 10:11:16 +02:00
Javier Jardón
9d0febc9a6 Change FSF Address 2012-02-27 17:06:11 +00: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
fd6e57687d Port Quartz backend to latest rendering-cleanup changes 2010-12-06 14:15:47 +01:00
Benjamin Otte
eac72ec830 quartz: Compare visuals for RGBA, not colormaps 2010-09-26 15:11:33 +02:00
Benjamin Otte
300e6b84cd s/GdkRegion/cairo_region_t/ in all of gtk
https://bugzilla.gnome.org/show_bug.cgi?id=613284
2010-06-29 16:06:38 +02:00
Benjamin Otte
3e96cfe8fc Deprecate the GdkRegion API
Includes fixing all callers to use the cairo region API instead. This is
usually just replacing the function names, the only difference is
gdk_region_get_rectangles() being replaced by
cairo_region_num_rectangles() and cairo_region_get_rectangle() which
required a bit more work.

https://bugzilla.gnome.org/show_bug.cgi?id=613284
2010-06-29 16:06:38 +02:00
Kristian Rietveld
7f2e4c38a9 Move Leopard-specific type definitions to gdkquartz.h
Update includes subsequently where it matters.  Fixes build on Mac OS
X 10.4.

(cherry picked from commit e634f3fbe0)
2010-06-27 11:00:42 +02:00
Paul Davis
aea9f1b6cf Remove arbitrary limit on number of redraw rectangles
The aim of this limit was to not degrade performance too much, however,
it actually did degrade performance to a large extent.
2010-05-12 12:11:40 +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
3887838244 Fix memory leak in GdkQuartzView
Should remove the tracking rect in dealloc.
2009-12-30 14:11:14 +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
3043155796 Bug 550939 - GtkFileChooser listbox does not refresh selection
Make the quartz backend support the new queued translations.  We do this
by keeping our own copy of the region that has been set to need display.
Using this region we can intersect by the given area, translate this and also
set needs display for the resulting area.
2009-09-21 20:41:35 +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
65b5644cda Call _gdk_window_process_updates_recurse() in drawRect instead of creating our own expose events 2009-04-02 10:15:27 +02:00
Richard Hult
7ab3435a58 Remove autoreleasepool in drawRect, not necessary 2009-04-02 10:15:24 +02:00
Richard Hult
f12a992be2 Only setup tracking rect for toplevels, we only want enter/leave for those 2009-04-02 10:15:24 +02:00
Richard Hult
c33a6699ae Simplify check for zero sized expose area.
2008-04-30  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c: Simplify check for zero sized expose
	area.

svn path=/trunk/; revision=20056
2008-04-30 17:50:14 +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
f14bf84699 Fix performance regression for borderless transparent windows with shadow.
2008-02-27  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c:
	* gdk/quartz/GdkQuartzView.h:
	* gdk/quartz/gdkwindow-quartz.c: (gdk_window_set_decorations):
	Fix performance regression for borderless transparent windows
	with shadow.

svn path=/trunk/; revision=19666
2008-02-27 10:49:22 +00:00
Richard Hult
fbe4c4f8b6 Set the right window level and shadow after recreating the window.
2008-02-20  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkwindow-quartz.c: (gdk_window_set_decorations): Set
	the right window level and shadow after recreating the window.

	* gdk/quartz/GdkQuartzView.c: (drawRect): Invalidate the shadow if
	necessary after drawing (bug #517338).

svn path=/trunk/; revision=19622
2008-02-20 20:10:30 +00:00
Richard Hult
db38664512 Adapt to the change to use frame instead of bounds when resizing windows.
2008-02-15  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c: Adapt to the change to use frame
	instead of bounds when resizing windows.

svn path=/trunk/; revision=19580
2008-02-15 19:06:49 +00:00
Richard Hult
0ca4891ee0 Another attempt at fixing focus issues with undecorated windows. Revert
2008-01-31  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c: Another attempt at fixing focus
	issues with undecorated windows. Revert the change done on
	2008-01-25 and fix it by using the view's bounds instead. The
	bounds will always be up to date when setting up the tracking
	rect, so this should be more robust.

svn path=/trunk/; revision=19445
2008-01-31 14:05:47 +00:00
Richard Hult
7b8050aff2 Don't recreate a tracking rect if it didn't change, fixes focus event
2008-01-25  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c: Don't recreate a tracking rect if it
	didn't change, fixes focus event issues for undecorated windows.

svn path=/trunk/; revision=19402
2008-01-25 13:19:02 +00:00
Richard Hult
7639a61116 Ignore drawRect calls with zero sized areas at (0, 0), patch from Paul
2007-12-10  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c: Ignore drawRect calls with zero
	sized areas at (0, 0), patch from Paul Davis.

svn path=/trunk/; revision=19145
2007-12-10 19:38:47 +00:00
Richard Hult
89230024e6 Fix build warning (trackingRect should be 0, not nil).
2007-10-31  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c: Fix build warning (trackingRect should be
	0, not nil).

svn path=/trunk/; revision=18953
2007-10-31 10:07:47 +00:00
Richard Hult
8fd51a225e Improve the tracking rect updating: - No need to override setFrame. - Use
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-30 08:56:50 +00:00
Johan Dahlin
f43329fcd6 Fix a typo in a comment
* gdk/quartz/GdkQuartzView.c ([GdkQuartzView -updateTrackingRect]): Fix a typo
    in a comment


svn path=/trunk/; revision=18199
2007-06-19 22:42:51 +00:00
Richard Hult
0932e4be38 Don't create or update the tracking rect in the window, move it to the
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-19 22:09:56 +00:00
Richard Hult
5b14b85c3a Remove unneccesary exposure mask check.
2007-03-10  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c: Remove unneccesary exposure mask check.

svn path=/trunk/; revision=17460
2007-03-10 20:57:13 +00:00
Richard Hult
611f5526e9 Don't do anything if exposure isn't in the event mask, plug a leak, and
2006-09-03  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c (drawRect): Don't do anything if
	exposure isn't in the event mask, plug a leak, and check that the
	window isn't destroyed.
	(isOpaque): Check that the window isn't destroyed, fixes bug
	#353028.
2006-09-03 10:46:32 +00:00
Richard Hult
d3ee9f833a Just expose the minimal region instead of the whole rect.
2006-08-08  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c: Just expose the minimal region
	instead of the whole rect.

	* gdk/quartz/gdkwindow-quartz.c:
	(gdk_window_quartz_process_all_updates), (gdk_window_update_idle),
	(gdk_window_impl_quartz_invalidate_maybe_recurse),
	(gdk_window_impl_quartz_process_updates),
	(_gdk_windowing_window_destroy): Rework the expose handling so that
	it works like the X11 backend, using an idle with the right
	priority instead of relying on quartz to do it.
	(gdk_window_set_type_hint): Use tornoff instead of submenu as the
	documentation (and Mitch) suggests.
2006-08-08 20:53:09 +00:00
Richard Hult
157ba89508 ]): Remove unused variables to fix compiler warnings.
2006-07-19  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzView.c ([GdkQuartzView -drawRect:]):
	* gdk/quartz/gdkpixmap-quartz.c (gdk_pixmap_new): Remove unused
	variables to fix compiler warnings.
2006-07-19 09:15:58 +00:00
Anders Carlsson
1e3d722024 Have GdkWindowImplQuartz implement GdkPaintable.
2006-04-11  Anders Carlsson  <andersca@mac.imendio.com>

        * gdk/quartz/GdkQuartzView.c:
        (-[GdkQuartzView drawRect:]):
        * gdk/quartz/gdkdrawable-quartz.c:
        (gdk_quartz_ref_cairo_surface):
        (_gdk_quartz_drawable_get_context):
        (_gdk_quartz_drawable_release_context):
        * gdk/quartz/gdkwindow-quartz.c:
        (gdk_window_impl_quartz_finalize):
        (gdk_window_impl_quartz_class_init):
        (gdk_window_impl_quartz_begin_paint_region):
        (gdk_window_impl_quartz_end_paint):
        (gdk_window_impl_quartz_invalidate_maybe_recurse):
        (gdk_window_impl_quartz_process_updates):
        (gdk_window_impl_quartz_paintable_init):
        (_gdk_window_impl_quartz_get_type):
        * gdk/quartz/gdkwindow-quartz.h:
        Have GdkWindowImplQuartz implement GdkPaintable.
2006-04-10 23:17:26 +00:00