Implement missing xkb_state_ref and add return value

xkb_state_ref was missing.

Also modify the _ref functions to return the object instead of being
void. This is a useful idiom:

    struct my_object my_object_new(struct xkb_state *state)
    {
        [...]
        my_object->state = xkb_state_ref(state);
        [...]
    }

Essentially "taking" a reference, such that you don't forget to
increment it and it's one line less (see example in our own code).

A case could also be made for _unref to return the object or NULL, but
this is quite uncommon.

Signed-off-by: Ran Benita <ran234@gmail.com>

[daniels: Updated for xkb_keymap changes.]
master
Ran Benita 2012-04-05 10:13:24 +03:00 committed by Daniel Stone
parent b08629f92b
commit 467d7bb64e
5 changed files with 17 additions and 10 deletions

View File

@ -247,7 +247,7 @@ xkb_context_include_path_get(struct xkb_context *context, unsigned int index);
/**
* Takes a new reference on an XKB context.
*/
_X_EXPORT void
_X_EXPORT struct xkb_context *
xkb_context_ref(struct xkb_context *context);
/**
@ -315,7 +315,7 @@ xkb_map_new_from_string(struct xkb_context *context,
/**
* Takes a new reference on a keymap.
*/
_X_EXPORT extern void
_X_EXPORT extern struct xkb_keymap *
xkb_map_ref(struct xkb_keymap *xkb);
/**
@ -412,9 +412,9 @@ _X_EXPORT struct xkb_state *
xkb_state_new(struct xkb_keymap *xkb);
/**
* Adds a reference to a state object, so it will not be freed until unref.
* Takes a new reference on a state object.
*/
_X_EXPORT void
_X_EXPORT struct xkb_state *
xkb_state_ref(struct xkb_state *state);
/**

View File

@ -266,8 +266,7 @@ XkbcAllocKeyboard(struct xkb_context *context)
return NULL;
xkb->refcnt = 1;
xkb_context_ref(context);
xkb->context = context;
xkb->context = xkb_context_ref(context);
return xkb;
}

View File

@ -158,10 +158,11 @@ xkb_context_include_path_get(struct xkb_context *context, unsigned int idx)
/**
* Take a new reference on the context.
*/
void
struct xkb_context *
xkb_context_ref(struct xkb_context *context)
{
context->refcnt++;
return context;
}
/**

View File

@ -472,12 +472,18 @@ xkb_state_new(struct xkb_keymap *xkb)
return NULL;
ret->refcnt = 1;
ret->xkb = xkb;
xkb_map_ref(xkb);
ret->xkb = xkb_map_ref(xkb);
return ret;
}
struct xkb_state *
xkb_state_ref(struct xkb_state *state)
{
state->refcnt++;
return state;
}
void
xkb_state_unref(struct xkb_state *state)
{

View File

@ -312,10 +312,11 @@ xkb_map_new_from_fd(struct xkb_context *context,
return compile_keymap(context, file);
}
void
struct xkb_keymap *
xkb_map_ref(struct xkb_keymap *xkb)
{
xkb->refcnt++;
return xkb;
}
void