mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-08 07:58:02 +02:00
[xlib] Remove the key parameter from the close display hook.
By inspecting all the users of the close display hooks, we can see that (a) the key is redundant and (b) the data is unique to the hook. This means we can trim the interface and stop the linear searches as soon as we've found the correct element.
This commit is contained in:
parent
84a541a041
commit
63befc6ab1
3 changed files with 11 additions and 12 deletions
|
|
@ -326,7 +326,7 @@ UNLOCK:
|
|||
}
|
||||
|
||||
cairo_bool_t
|
||||
_cairo_xlib_add_close_display_hook (Display *dpy, void (*func) (Display *, void *), void *data, const void *key)
|
||||
_cairo_xlib_add_close_display_hook (Display *dpy, void (*func) (Display *, void *), void *data)
|
||||
{
|
||||
cairo_xlib_display_t *display;
|
||||
cairo_xlib_hook_t *hook;
|
||||
|
|
@ -342,7 +342,6 @@ _cairo_xlib_add_close_display_hook (Display *dpy, void (*func) (Display *, void
|
|||
if (hook != NULL) {
|
||||
hook->func = func;
|
||||
hook->data = data;
|
||||
hook->key = key;
|
||||
|
||||
hook->next = display->close_display_hooks;
|
||||
display->close_display_hooks = hook;
|
||||
|
|
@ -357,7 +356,7 @@ _cairo_xlib_add_close_display_hook (Display *dpy, void (*func) (Display *, void
|
|||
}
|
||||
|
||||
void
|
||||
_cairo_xlib_remove_close_display_hooks (Display *dpy, const void *key)
|
||||
_cairo_xlib_remove_close_display_hooks (Display *dpy, const void *data)
|
||||
{
|
||||
cairo_xlib_display_t *display;
|
||||
cairo_xlib_hook_t *hook, *next, **prev;
|
||||
|
|
@ -370,13 +369,13 @@ _cairo_xlib_remove_close_display_hooks (Display *dpy, const void *key)
|
|||
prev = &display->close_display_hooks;
|
||||
for (hook = display->close_display_hooks; hook != NULL; hook = next) {
|
||||
next = hook->next;
|
||||
if (hook->key == key) {
|
||||
if (hook->data == data) {
|
||||
*prev = hook->next;
|
||||
_cairo_freelist_free (&display->hook_freelist, hook);
|
||||
} else
|
||||
prev = &hook->next;
|
||||
break;
|
||||
}
|
||||
prev = &hook->next;
|
||||
}
|
||||
*prev = NULL;
|
||||
CAIRO_MUTEX_UNLOCK (display->mutex);
|
||||
|
||||
_cairo_xlib_display_destroy (display);
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@ struct _cairo_xlib_hook {
|
|||
cairo_xlib_hook_t *next;
|
||||
void (*func) (Display *display, void *data);
|
||||
void *data;
|
||||
const void *key;
|
||||
};
|
||||
|
||||
struct _cairo_xlib_display {
|
||||
|
|
@ -113,9 +112,9 @@ cairo_private void
|
|||
_cairo_xlib_display_destroy (cairo_xlib_display_t *info);
|
||||
|
||||
cairo_private cairo_bool_t
|
||||
_cairo_xlib_add_close_display_hook (Display *display, void (*func) (Display *, void *), void *data, const void *key);
|
||||
_cairo_xlib_add_close_display_hook (Display *display, void (*func) (Display *, void *), void *data);
|
||||
cairo_private void
|
||||
_cairo_xlib_remove_close_display_hooks (Display *display, const void *key);
|
||||
_cairo_xlib_remove_close_display_hooks (Display *display, const void *data);
|
||||
|
||||
cairo_private cairo_status_t
|
||||
_cairo_xlib_display_queue_work (cairo_xlib_display_t *display,
|
||||
|
|
|
|||
|
|
@ -2436,7 +2436,8 @@ _cairo_xlib_surface_create_internal (Display *dpy,
|
|||
}
|
||||
|
||||
if (! _cairo_xlib_add_close_display_hook (dpy,
|
||||
_cairo_xlib_surface_detach_display, surface, surface)) {
|
||||
_cairo_xlib_surface_detach_display, surface))
|
||||
{
|
||||
free (surface);
|
||||
_cairo_xlib_screen_info_destroy (screen_info);
|
||||
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
|
||||
|
|
@ -3011,7 +3012,7 @@ _cairo_xlib_surface_font_init (Display *dpy,
|
|||
|
||||
if (! _cairo_xlib_add_close_display_hook (dpy,
|
||||
_cairo_xlib_surface_remove_scaled_font,
|
||||
scaled_font, scaled_font))
|
||||
scaled_font))
|
||||
{
|
||||
free (font_private);
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue