Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dorota Czaplejewicz
gtk
Commits
ccb6edeb
Commit
ccb6edeb
authored
Dec 13, 2010
by
Matthias Clasen
Browse files
Add vfuncs for process_updates_recurse and the before and after hooks
parent
da216c06
Changes
6
Hide whitespace changes
Inline
Side-by-side
gdk/gdkdisplayprivate.h
View file @
ccb6edeb
...
...
@@ -170,6 +170,9 @@ struct _GdkDisplayClass
GdkDragProtocol
*
protocol
,
guint
*
version
);
void
(
*
before_process_all_updates
)
(
GdkDisplay
*
display
);
void
(
*
after_process_all_updates
)
(
GdkDisplay
*
display
);
/* Signals */
void
(
*
closed
)
(
GdkDisplay
*
display
,
gboolean
is_error
);
...
...
gdk/gdkwindow.c
View file @
ccb6edeb
...
...
@@ -4039,19 +4039,18 @@ gdk_window_process_updates_internal (GdkWindow *window)
cairo_region_get_extents
(
update_area
,
&
clip_box
);
end_implicit
=
gdk_window_begin_implicit_paint
(
window
,
&
clip_box
);
expose_region
=
cairo_region_copy
(
update_area
);
impl_class
=
GDK_WINDOW_IMPL_GET_CLASS
(
window
->
impl
);
if
(
!
end_implicit
)
{
/* Rendering is not double buffered by gdk, do outstanding
* moves and queue antiexposure immediately. No need to do
* any tricks */
gdk_window_flush_outstanding_moves
(
window
);
impl_class
=
GDK_WINDOW_IMPL_GET_CLASS
(
window
->
impl
);
save_region
=
impl_class
->
queue_antiexpose
(
window
,
update_area
);
}
/* Render the invalid areas to the implicit paint, by sending exposes.
* 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
)
{
...
...
@@ -4060,17 +4059,12 @@ gdk_window_process_updates_internal (GdkWindow *window)
/* By this time we know that any outstanding expose for this
* 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
* be to late to anti-expose now. Since this is merely an
* optimization we just avoid doing it at all in that case.
*/
if
(
window
->
implicit_paint
!=
NULL
&&
!
window
->
implicit_paint
->
flushed
)
{
impl_class
=
GDK_WINDOW_IMPL_GET_CLASS
(
window
->
impl
);
save_region
=
impl_class
->
queue_antiexpose
(
window
,
update_area
);
}
if
(
window
->
implicit_paint
!=
NULL
&&
!
window
->
implicit_paint
->
flushed
)
save_region
=
impl_class
->
queue_antiexpose
(
window
,
update_area
);
gdk_window_end_implicit_paint
(
window
);
}
...
...
@@ -4093,11 +4087,39 @@ gdk_window_process_updates_internal (GdkWindow *window)
static
void
flush_all_displays
(
void
)
{
GSList
*
displays
=
gdk_display_manager_list_displays
(
gdk_display_manager_get
());
GSList
*
tmp_list
;
GSList
*
displays
,
*
l
;
displays
=
gdk_display_manager_list_displays
(
gdk_display_manager_get
());
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
;
for
(
tmp_list
=
displays
;
tmp_list
;
tmp_list
=
tmp_list
->
next
)
gdk_display_flush
(
tmp_list
->
data
);
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
);
}
...
...
@@ -4145,7 +4167,7 @@ gdk_window_process_all_updates (void)
update_windows
=
NULL
;
update_idle
=
0
;
_gdk_windowing_
before_process_all_updates
();
before_process_all_updates
();
g_slist_foreach
(
old_update_windows
,
(
GFunc
)
g_object_ref
,
NULL
);
...
...
@@ -4170,7 +4192,7 @@ gdk_window_process_all_updates (void)
flush_all_displays
();
_gdk_windowing_
after_process_all_updates
();
after_process_all_updates
();
in_process_all_updates
=
FALSE
;
...
...
gdk/gdkwindowimpl.h
View file @
ccb6edeb
...
...
@@ -251,6 +251,9 @@ struct _GdkWindowImplClass
GdkDragContext
*
(
*
drag_begin
)
(
GdkWindow
*
window
,
GdkDevice
*
device
,
GList
*
targets
);
void
(
*
process_updates_recurse
)
(
GdkWindow
*
window
,
cairo_region_t
*
region
);
};
/* Interface Functions */
...
...
gdk/x11/gdkdisplay-x11.c
View file @
ccb6edeb
...
...
@@ -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
->
supports_cursor_alpha
=
_gdk_x11_display_supports_cursor_alpha
;
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
;
}
gdk/x11/gdkprivate-x11.h
View file @
ccb6edeb
...
...
@@ -173,6 +173,8 @@ void _gdk_x11_display_get_default_cursor_size (GdkDisplay *display,
void
_gdk_x11_display_get_maximal_cursor_size
(
GdkDisplay
*
display
,
guint
*
width
,
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
,
const
gchar
*
const
*
atom_names
,
...
...
gdk/x11/gdkwindow-x11.c
View file @
ccb6edeb
...
...
@@ -4862,20 +4862,20 @@ gdk_x11_window_set_composited (GdkWindow *window,
#endif
}
void
_
gdk_
windowing
_window_process_updates_recurse
(
GdkWindow
*
window
,
cairo_region_t
*
region
)
static
void
gdk_
x11
_window_process_updates_recurse
(
GdkWindow
*
window
,
cairo_region_t
*
region
)
{
_gdk_window_process_updates_recurse
(
window
,
region
);
}
void
_gdk_
windowing
_before_process_all_updates
(
void
)
_gdk_
x11_display
_before_process_all_updates
(
GdkDisplay
*
display
)
{
}
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
->
register_dnd
=
_gdk_x11_window_register_dnd
;
impl_class
->
drag_begin
=
_gdk_x11_window_drag_begin
;
impl_class
->
process_updates_recurse
=
gdk_x11_window_process_updates_recurse
;
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment