Replace CallsOrigin getters with properties and add calls_origin_foreach_call method
This commit is contained in:
committed by
Evangelos Ribeiro Tzaras
parent
891ed1fe79
commit
4e7a0b8151
@@ -190,12 +190,8 @@ ussd_state_changed_cb (CallsManager *self,
|
||||
static void
|
||||
add_origin (CallsManager *self, CallsOrigin *origin, CallsProvider *provider)
|
||||
{
|
||||
g_autoptr (GList) calls = NULL;
|
||||
GList *c;
|
||||
g_return_if_fail (CALLS_IS_ORIGIN (origin));
|
||||
|
||||
calls = calls_origin_get_calls (origin);
|
||||
|
||||
g_signal_connect_swapped (origin, "call-added", G_CALLBACK (add_call), self);
|
||||
g_signal_connect_swapped (origin, "call-removed", G_CALLBACK (remove_call), self);
|
||||
|
||||
@@ -206,30 +202,28 @@ add_origin (CallsManager *self, CallsOrigin *origin, CallsProvider *provider)
|
||||
g_signal_connect_swapped (origin, "ussd-state-changed", G_CALLBACK (ussd_state_changed_cb), self);
|
||||
}
|
||||
|
||||
for (c = calls; c != NULL; c = c->next)
|
||||
{
|
||||
add_call (self, c->data, origin);
|
||||
}
|
||||
calls_origin_foreach_call(origin, (CallsOriginForeachCallFunc)add_call, self);
|
||||
|
||||
set_state (self, CALLS_MANAGER_STATE_READY);
|
||||
g_signal_emit (self, signals[SIGNAL_ORIGIN_ADD], 0, origin);
|
||||
}
|
||||
|
||||
static void
|
||||
remove_call_cb (gpointer self, CallsCall *call, CallsOrigin *origin)
|
||||
{
|
||||
remove_call(self, call, NULL, origin);
|
||||
}
|
||||
|
||||
static void
|
||||
remove_origin (CallsManager *self, CallsOrigin *origin, CallsProvider *provider)
|
||||
{
|
||||
g_autoptr (GList) origins = NULL;
|
||||
g_autoptr (GList) calls = NULL;
|
||||
GList *c;
|
||||
|
||||
g_return_if_fail (CALLS_IS_ORIGIN (origin));
|
||||
|
||||
g_signal_handlers_disconnect_by_data (origin, self);
|
||||
|
||||
calls = calls_origin_get_calls (origin);
|
||||
for (c = calls; c != NULL; c = c->next)
|
||||
{
|
||||
remove_call (self, c->data, NULL, origin);
|
||||
}
|
||||
calls_origin_foreach_call(origin, remove_call_cb, self);
|
||||
|
||||
if (self->default_origin == origin)
|
||||
calls_manager_set_default_origin (self, NULL);
|
||||
|
||||
@@ -47,6 +47,21 @@ calls_origin_default_init (CallsOriginInterface *iface)
|
||||
{
|
||||
GType arg_types[2] = { CALLS_TYPE_CALL, G_TYPE_STRING };
|
||||
|
||||
g_object_interface_install_property (
|
||||
iface,
|
||||
g_param_spec_string ("name",
|
||||
"Name",
|
||||
"The name of the origin",
|
||||
NULL,
|
||||
G_PARAM_READABLE));
|
||||
|
||||
g_object_interface_install_property (
|
||||
iface,
|
||||
g_param_spec_pointer ("calls",
|
||||
"Calls",
|
||||
"The list of current calls",
|
||||
G_PARAM_READABLE));
|
||||
|
||||
signals[SIGNAL_CALL_ADDED] =
|
||||
g_signal_newv ("call-added",
|
||||
G_TYPE_FROM_INTERFACE (iface),
|
||||
@@ -64,9 +79,8 @@ calls_origin_default_init (CallsOriginInterface *iface)
|
||||
2, arg_types);
|
||||
}
|
||||
|
||||
#define DEFINE_ORIGIN_FUNC(function,rettype,errval) \
|
||||
CALLS_DEFINE_IFACE_FUNC(origin, Origin, ORIGIN, \
|
||||
function, rettype, errval)
|
||||
#define DEFINE_ORIGIN_GETTER(prop,rettype,errval) \
|
||||
CALLS_DEFINE_IFACE_GETTER(origin, Origin, ORIGIN, prop, rettype, errval)
|
||||
|
||||
/**
|
||||
* calls_origin_get_name:
|
||||
@@ -77,7 +91,7 @@ calls_origin_default_init (CallsOriginInterface *iface)
|
||||
* Returns: A string containing the name. The string must be freed by
|
||||
* the caller.
|
||||
*/
|
||||
DEFINE_ORIGIN_FUNC(get_name, const gchar *, NULL);
|
||||
DEFINE_ORIGIN_GETTER(name, const gchar *, NULL);
|
||||
|
||||
/**
|
||||
* calls_origin_get_calls:
|
||||
@@ -89,7 +103,33 @@ DEFINE_ORIGIN_FUNC(get_name, const gchar *, NULL);
|
||||
* Returns: A newly-allocated GList of objects implementing
|
||||
* #CallsCall or NULL if there was an error.
|
||||
*/
|
||||
DEFINE_ORIGIN_FUNC(get_calls, GList *, NULL);
|
||||
DEFINE_ORIGIN_GETTER(calls, GList *, NULL);
|
||||
|
||||
|
||||
/**
|
||||
* calls_origin_foreach_call:
|
||||
* @self: a #CallsOrigin
|
||||
* @callback: function to be called for each call from the origin
|
||||
* @param: user data for @callback
|
||||
*
|
||||
* Iterate over all current calls from this origin
|
||||
**/
|
||||
void
|
||||
calls_origin_foreach_call(CallsOrigin *self,
|
||||
CallsOriginForeachCallFunc callback,
|
||||
gpointer param)
|
||||
{
|
||||
g_autoptr(GList) calls = NULL;
|
||||
GList *node;
|
||||
|
||||
calls = calls_origin_get_calls (self);
|
||||
|
||||
for (node = calls; node; node = node->next)
|
||||
{
|
||||
callback (param, CALLS_CALL (node->data), self);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* calls_origin_dial:
|
||||
|
||||
@@ -42,15 +42,17 @@ struct _CallsOriginInterface
|
||||
{
|
||||
GTypeInterface parent_iface;
|
||||
|
||||
const gchar * (*get_name) (CallsOrigin *self);
|
||||
GList * (*get_calls) (CallsOrigin *self);
|
||||
void (*dial) (CallsOrigin *self,
|
||||
const gchar *number);
|
||||
};
|
||||
|
||||
typedef void (*CallsOriginForeachCallFunc) (gpointer param, CallsCall* call, CallsOrigin* origin);
|
||||
|
||||
const gchar * calls_origin_get_name (CallsOrigin *self);
|
||||
GList * calls_origin_get_calls (CallsOrigin *self);
|
||||
void calls_origin_foreach_call(CallsOrigin *self,
|
||||
CallsOriginForeachCallFunc callback,
|
||||
gpointer param);
|
||||
void calls_origin_dial(CallsOrigin *self,
|
||||
const gchar *number);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user