forked from AuroraMiddleware/gtk
Add vfuncs for process_updates_recurse and the before and after hooks
This commit is contained in:
parent
da216c0665
commit
ccb6edeb8b
@ -170,6 +170,9 @@ struct _GdkDisplayClass
|
|||||||
GdkDragProtocol *protocol,
|
GdkDragProtocol *protocol,
|
||||||
guint *version);
|
guint *version);
|
||||||
|
|
||||||
|
void (*before_process_all_updates) (GdkDisplay *display);
|
||||||
|
void (*after_process_all_updates) (GdkDisplay *display);
|
||||||
|
|
||||||
/* Signals */
|
/* Signals */
|
||||||
void (*closed) (GdkDisplay *display,
|
void (*closed) (GdkDisplay *display,
|
||||||
gboolean is_error);
|
gboolean is_error);
|
||||||
|
@ -4039,19 +4039,18 @@ gdk_window_process_updates_internal (GdkWindow *window)
|
|||||||
cairo_region_get_extents (update_area, &clip_box);
|
cairo_region_get_extents (update_area, &clip_box);
|
||||||
end_implicit = gdk_window_begin_implicit_paint (window, &clip_box);
|
end_implicit = gdk_window_begin_implicit_paint (window, &clip_box);
|
||||||
expose_region = cairo_region_copy (update_area);
|
expose_region = cairo_region_copy (update_area);
|
||||||
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
||||||
if (!end_implicit)
|
if (!end_implicit)
|
||||||
{
|
{
|
||||||
/* Rendering is not double buffered by gdk, do outstanding
|
/* Rendering is not double buffered by gdk, do outstanding
|
||||||
* moves and queue antiexposure immediately. No need to do
|
* moves and queue antiexposure immediately. No need to do
|
||||||
* any tricks */
|
* any tricks */
|
||||||
gdk_window_flush_outstanding_moves (window);
|
gdk_window_flush_outstanding_moves (window);
|
||||||
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
||||||
save_region = impl_class->queue_antiexpose (window, update_area);
|
save_region = impl_class->queue_antiexpose (window, update_area);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Render the invalid areas to the implicit paint, by sending exposes.
|
/* Render the invalid areas to the implicit paint, by sending exposes.
|
||||||
* May flush if non-double buffered widget draw. */
|
* May flush if non-double buffered widget draw. */
|
||||||
_gdk_windowing_window_process_updates_recurse (window, expose_region);
|
impl_class->process_updates_recurse (window, expose_region);
|
||||||
|
|
||||||
if (end_implicit)
|
if (end_implicit)
|
||||||
{
|
{
|
||||||
@ -4060,17 +4059,12 @@ gdk_window_process_updates_internal (GdkWindow *window)
|
|||||||
|
|
||||||
/* By this time we know that any outstanding expose for this
|
/* By this time we know that any outstanding expose for this
|
||||||
* area is invalid and we can avoid it, so queue an antiexpose.
|
* area is invalid and we can avoid it, so queue an antiexpose.
|
||||||
* However, it may be that due to an non-double buffered expose
|
|
||||||
* we have already started drawing to the window, so it would
|
* we have already started drawing to the window, so it would
|
||||||
* be to late to anti-expose now. Since this is merely an
|
* be to late to anti-expose now. Since this is merely an
|
||||||
* optimization we just avoid doing it at all in that case.
|
* optimization we just avoid doing it at all in that case.
|
||||||
*/
|
*/
|
||||||
if (window->implicit_paint != NULL &&
|
if (window->implicit_paint != NULL && !window->implicit_paint->flushed)
|
||||||
!window->implicit_paint->flushed)
|
save_region = impl_class->queue_antiexpose (window, update_area);
|
||||||
{
|
|
||||||
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
||||||
save_region = impl_class->queue_antiexpose (window, update_area);
|
|
||||||
}
|
|
||||||
|
|
||||||
gdk_window_end_implicit_paint (window);
|
gdk_window_end_implicit_paint (window);
|
||||||
}
|
}
|
||||||
@ -4093,11 +4087,39 @@ gdk_window_process_updates_internal (GdkWindow *window)
|
|||||||
static void
|
static void
|
||||||
flush_all_displays (void)
|
flush_all_displays (void)
|
||||||
{
|
{
|
||||||
GSList *displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
|
GSList *displays, *l;
|
||||||
GSList *tmp_list;
|
|
||||||
|
|
||||||
for (tmp_list = displays; tmp_list; tmp_list = tmp_list->next)
|
displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
|
||||||
gdk_display_flush (tmp_list->data);
|
for (l = displays; l; l = l->next)
|
||||||
|
gdk_display_flush (l->data);
|
||||||
|
|
||||||
|
g_slist_free (displays);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
before_process_all_updates (void)
|
||||||
|
{
|
||||||
|
GSList *displays, *l;
|
||||||
|
GdkDisplayClass *display_class;
|
||||||
|
|
||||||
|
displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
|
||||||
|
display_class = GDK_DISPLAY_GET_CLASS (displays->data);
|
||||||
|
for (l = displays; l; l = l->next)
|
||||||
|
display_class->before_process_all_updates (l->data);
|
||||||
|
|
||||||
|
g_slist_free (displays);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
after_process_all_updates (void)
|
||||||
|
{
|
||||||
|
GSList *displays, *l;
|
||||||
|
GdkDisplayClass *display_class;
|
||||||
|
|
||||||
|
displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
|
||||||
|
display_class = GDK_DISPLAY_GET_CLASS (displays->data);
|
||||||
|
for (l = displays; l; l = l->next)
|
||||||
|
display_class->after_process_all_updates (l->data);
|
||||||
|
|
||||||
g_slist_free (displays);
|
g_slist_free (displays);
|
||||||
}
|
}
|
||||||
@ -4145,7 +4167,7 @@ gdk_window_process_all_updates (void)
|
|||||||
update_windows = NULL;
|
update_windows = NULL;
|
||||||
update_idle = 0;
|
update_idle = 0;
|
||||||
|
|
||||||
_gdk_windowing_before_process_all_updates ();
|
before_process_all_updates ();
|
||||||
|
|
||||||
g_slist_foreach (old_update_windows, (GFunc)g_object_ref, NULL);
|
g_slist_foreach (old_update_windows, (GFunc)g_object_ref, NULL);
|
||||||
|
|
||||||
@ -4170,7 +4192,7 @@ gdk_window_process_all_updates (void)
|
|||||||
|
|
||||||
flush_all_displays ();
|
flush_all_displays ();
|
||||||
|
|
||||||
_gdk_windowing_after_process_all_updates ();
|
after_process_all_updates ();
|
||||||
|
|
||||||
in_process_all_updates = FALSE;
|
in_process_all_updates = FALSE;
|
||||||
|
|
||||||
|
@ -251,6 +251,9 @@ struct _GdkWindowImplClass
|
|||||||
GdkDragContext * (*drag_begin) (GdkWindow *window,
|
GdkDragContext * (*drag_begin) (GdkWindow *window,
|
||||||
GdkDevice *device,
|
GdkDevice *device,
|
||||||
GList *targets);
|
GList *targets);
|
||||||
|
|
||||||
|
void (*process_updates_recurse) (GdkWindow *window,
|
||||||
|
cairo_region_t *region);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Interface Functions */
|
/* Interface Functions */
|
||||||
|
@ -2703,5 +2703,8 @@ _gdk_display_x11_class_init (GdkDisplayX11Class * class)
|
|||||||
display_class->get_maximal_cursor_size = _gdk_x11_display_get_maximal_cursor_size;
|
display_class->get_maximal_cursor_size = _gdk_x11_display_get_maximal_cursor_size;
|
||||||
display_class->supports_cursor_alpha = _gdk_x11_display_supports_cursor_alpha;
|
display_class->supports_cursor_alpha = _gdk_x11_display_supports_cursor_alpha;
|
||||||
display_class->supports_cursor_color = _gdk_x11_display_supports_cursor_color;
|
display_class->supports_cursor_color = _gdk_x11_display_supports_cursor_color;
|
||||||
|
|
||||||
|
display_class->before_process_all_updates = _gdk_x11_display_before_process_all_updates;
|
||||||
|
display_class->after_process_all_updates = _gdk_x11_display_after_process_all_updates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,6 +173,8 @@ void _gdk_x11_display_get_default_cursor_size (GdkDisplay *display,
|
|||||||
void _gdk_x11_display_get_maximal_cursor_size (GdkDisplay *display,
|
void _gdk_x11_display_get_maximal_cursor_size (GdkDisplay *display,
|
||||||
guint *width,
|
guint *width,
|
||||||
guint *height);
|
guint *height);
|
||||||
|
void _gdk_x11_display_before_process_all_updates (GdkDisplay *display);
|
||||||
|
void _gdk_x11_display_after_process_all_updates (GdkDisplay *display);
|
||||||
|
|
||||||
void _gdk_x11_precache_atoms (GdkDisplay *display,
|
void _gdk_x11_precache_atoms (GdkDisplay *display,
|
||||||
const gchar * const *atom_names,
|
const gchar * const *atom_names,
|
||||||
|
@ -4862,20 +4862,20 @@ gdk_x11_window_set_composited (GdkWindow *window,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
_gdk_windowing_window_process_updates_recurse (GdkWindow *window,
|
gdk_x11_window_process_updates_recurse (GdkWindow *window,
|
||||||
cairo_region_t *region)
|
cairo_region_t *region)
|
||||||
{
|
{
|
||||||
_gdk_window_process_updates_recurse (window, region);
|
_gdk_window_process_updates_recurse (window, region);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_gdk_windowing_before_process_all_updates (void)
|
_gdk_x11_display_before_process_all_updates (GdkDisplay *display)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_gdk_windowing_after_process_all_updates (void)
|
_gdk_x11_display_after_process_all_updates (GdkDisplay *display)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5051,5 +5051,5 @@ gdk_window_impl_x11_class_init (GdkWindowImplX11Class *klass)
|
|||||||
impl_class->destroy_notify = gdk_x11_window_destroy_notify;
|
impl_class->destroy_notify = gdk_x11_window_destroy_notify;
|
||||||
impl_class->register_dnd = _gdk_x11_window_register_dnd;
|
impl_class->register_dnd = _gdk_x11_window_register_dnd;
|
||||||
impl_class->drag_begin = _gdk_x11_window_drag_begin;
|
impl_class->drag_begin = _gdk_x11_window_drag_begin;
|
||||||
|
impl_class->process_updates_recurse = gdk_x11_window_process_updates_recurse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user