forked from AuroraMiddleware/gtk
007-05-05 Richard Hult <richard@imendio.com> * gdk/quartz/gdkdrawable-quartz.c: (gdk_quartz_drawable_get_context), (gdk_quartz_drawable_release_context): Fix bugs #428733 and #433301. Turns out the lockFocus logic was flawed, now we only lock/unlock when called outside a real expose event and never flush manually. svn path=/trunk/; revision=17798
This commit is contained in:
parent
e6993e9a37
commit
d9dedc36ec
@ -1,3 +1,11 @@
|
|||||||
|
2007-05-05 Richard Hult <richard@imendio.com>
|
||||||
|
|
||||||
|
* gdk/quartz/gdkdrawable-quartz.c:
|
||||||
|
(gdk_quartz_drawable_get_context),
|
||||||
|
(gdk_quartz_drawable_release_context): Fix bugs #428733 and #433301.
|
||||||
|
Turns out the lockFocus logic was flawed, now we only lock/unlock
|
||||||
|
when called outside a real expose event and never flush manually.
|
||||||
|
|
||||||
2007-05-03 Behdad Esfahbod <behdad@gnome.org>
|
2007-05-03 Behdad Esfahbod <behdad@gnome.org>
|
||||||
|
|
||||||
* gtk/gtklabel.c (gtk_label_ensure_layout):
|
* gtk/gtklabel.c (gtk_label_ensure_layout):
|
||||||
|
@ -600,22 +600,23 @@ gdk_quartz_drawable_get_context (GdkDrawable *drawable,
|
|||||||
gboolean antialias)
|
gboolean antialias)
|
||||||
{
|
{
|
||||||
GdkDrawableImplQuartz *drawable_impl = GDK_DRAWABLE_IMPL_QUARTZ (drawable);
|
GdkDrawableImplQuartz *drawable_impl = GDK_DRAWABLE_IMPL_QUARTZ (drawable);
|
||||||
|
CGContextRef cg_context;
|
||||||
|
|
||||||
if (GDK_IS_WINDOW_IMPL_QUARTZ (drawable) &&
|
if (GDK_IS_WINDOW_IMPL_QUARTZ (drawable) &&
|
||||||
GDK_WINDOW_DESTROYED (drawable_impl->wrapper))
|
GDK_WINDOW_DESTROYED (drawable_impl->wrapper))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
CGContextRef cg_context;
|
|
||||||
|
|
||||||
if (GDK_IS_WINDOW_IMPL_QUARTZ (drawable))
|
if (GDK_IS_WINDOW_IMPL_QUARTZ (drawable))
|
||||||
{
|
{
|
||||||
GdkWindowImplQuartz *window_impl = GDK_WINDOW_IMPL_QUARTZ (drawable);
|
GdkWindowImplQuartz *window_impl = GDK_WINDOW_IMPL_QUARTZ (drawable);
|
||||||
|
|
||||||
/* Lock focus when not called as part of begin/end paint cycle.
|
/* Lock focus when not called as part of a drawRect call. This
|
||||||
* This is needed to allow broken apps that draw outside of expose
|
* is needed when called from outside "real" expose events, for
|
||||||
* to still work (somewhat).
|
* example for synthesized expose events when realizing windows
|
||||||
|
* and for widgets that send fake expose events like the arrow
|
||||||
|
* buttons in spinbuttons.
|
||||||
*/
|
*/
|
||||||
if (window_impl->begin_paint_count == 0)
|
if (window_impl->in_paint_rect_count == 0)
|
||||||
{
|
{
|
||||||
window_impl->pool = [[NSAutoreleasePool alloc] init];
|
window_impl->pool = [[NSAutoreleasePool alloc] init];
|
||||||
if (![window_impl->view lockFocusIfCanDraw])
|
if (![window_impl->view lockFocusIfCanDraw])
|
||||||
@ -695,19 +696,16 @@ gdk_quartz_drawable_release_context (GdkDrawable *drawable,
|
|||||||
CGContextRestoreGState (cg_context);
|
CGContextRestoreGState (cg_context);
|
||||||
CGContextSetAllowsAntialiasing (cg_context, TRUE);
|
CGContextSetAllowsAntialiasing (cg_context, TRUE);
|
||||||
|
|
||||||
/* Only flush and unlock if called outside the expose, since it's
|
/* See comment in gdk_quartz_drawable_get_context(). */
|
||||||
* already handled for otherwise.
|
if (window_impl->in_paint_rect_count == 0)
|
||||||
*/
|
|
||||||
if (window_impl->in_paint_rect_count == 0 && window_impl->begin_paint_count == 0)
|
|
||||||
{
|
{
|
||||||
CGContextFlush (cg_context);
|
|
||||||
[window_impl->view unlockFocus];
|
[window_impl->view unlockFocus];
|
||||||
}
|
|
||||||
|
|
||||||
if (window_impl->pool)
|
if (window_impl->pool)
|
||||||
{
|
{
|
||||||
[window_impl->pool release];
|
[window_impl->pool release];
|
||||||
window_impl->pool = NULL;
|
window_impl->pool = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (GDK_IS_PIXMAP_IMPL_QUARTZ (drawable))
|
else if (GDK_IS_PIXMAP_IMPL_QUARTZ (drawable))
|
||||||
|
Loading…
Reference in New Issue
Block a user