mirror of
https://gitlab.gnome.org/GNOME/calls.git
synced 2024-12-13 16:07:36 +00:00
manager: Add new set of add and remove signals for CuiCalls
This is part of a refactoring which should help separating concerns between CallsCall and CallsUiCallData better. To accomplish this we want to stop passing around CallsCall objects and instead pass CallsUiCallData objects. In this commit we added new signals instead of changing the existing ones because that results in a lot of churn. It allows to do the switch per module allowing smaller individual patches and a more manageable patchset.
This commit is contained in:
parent
1518a4b6fb
commit
db7674d0f9
1 changed files with 47 additions and 0 deletions
|
@ -34,6 +34,7 @@
|
|||
#include "calls-message-source.h"
|
||||
#include "calls-provider.h"
|
||||
#include "calls-settings.h"
|
||||
#include "calls-ui-call-data.h"
|
||||
#include "calls-ussd.h"
|
||||
|
||||
#include "enum-types.h"
|
||||
|
@ -59,6 +60,9 @@ struct _CallsManager
|
|||
/* dial_actions_by_protocol maps protocol names to GSimpleActions */
|
||||
GHashTable *dial_actions_by_protocol;
|
||||
|
||||
/* map CallsCall to CallsUiCallData */
|
||||
GHashTable *calls;
|
||||
|
||||
CallsContactsProvider *contacts_provider;
|
||||
|
||||
CallsManagerFlags state_flags;
|
||||
|
@ -85,6 +89,8 @@ static GParamSpec *props[PROP_LAST_PROP];
|
|||
enum {
|
||||
SIGNAL_CALL_ADD,
|
||||
SIGNAL_CALL_REMOVE,
|
||||
UI_CALL_ADDDED, /* we're phasing out "call-added" in favour of "ui-call-added" */
|
||||
UI_CALL_REMOVED,
|
||||
USSD_ADDED,
|
||||
USSD_CANCELLED,
|
||||
USSD_STATE_CHANGED,
|
||||
|
@ -225,21 +231,39 @@ on_message (CallsMessageSource *source,
|
|||
static void
|
||||
add_call (CallsManager *self, CallsCall *call, CallsOrigin *origin)
|
||||
{
|
||||
CallsUiCallData *call_data;
|
||||
|
||||
g_return_if_fail (CALLS_IS_MANAGER (self));
|
||||
g_return_if_fail (CALLS_IS_ORIGIN (origin));
|
||||
g_return_if_fail (CALLS_IS_CALL (call));
|
||||
|
||||
call_data = calls_ui_call_data_new (call);
|
||||
g_hash_table_insert (self->calls, call, call_data);
|
||||
|
||||
/* TODO get rid of SIGNAL_CALL_ADD signal */
|
||||
g_signal_emit (self, signals[SIGNAL_CALL_ADD], 0, call, origin);
|
||||
g_signal_emit (self, signals[UI_CALL_ADDDED], 0, call_data);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
remove_call (CallsManager *self, CallsCall *call, gchar *reason, CallsOrigin *origin)
|
||||
{
|
||||
CallsUiCallData *call_data;
|
||||
|
||||
g_return_if_fail (CALLS_IS_MANAGER (self));
|
||||
g_return_if_fail (CALLS_IS_ORIGIN (origin));
|
||||
g_return_if_fail (CALLS_IS_CALL (call));
|
||||
|
||||
call_data = g_hash_table_lookup (self->calls, call);
|
||||
if (!call_data) {
|
||||
g_warning ("Could not remove call %s from hash table", calls_call_get_id (call));
|
||||
} else {
|
||||
g_signal_emit (self, signals[UI_CALL_REMOVED], 0, call_data);
|
||||
g_hash_table_remove (self->calls, call);
|
||||
}
|
||||
|
||||
/* TODO get rid of SIGNAL_CALL_REMOVE signal */
|
||||
/* We ignore the reason for now, because it doesn't give any usefull information */
|
||||
g_signal_emit (self, signals[SIGNAL_CALL_REMOVE], 0, call, origin);
|
||||
}
|
||||
|
@ -631,6 +655,26 @@ calls_manager_class_init (CallsManagerClass *klass)
|
|||
CALLS_TYPE_CALL,
|
||||
CALLS_TYPE_ORIGIN);
|
||||
|
||||
signals[UI_CALL_ADDDED] =
|
||||
g_signal_new ("ui-call-added",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
CALLS_TYPE_UI_CALL_DATA);
|
||||
|
||||
signals[UI_CALL_REMOVED] =
|
||||
g_signal_new ("ui-call-removed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
CALLS_TYPE_UI_CALL_DATA);
|
||||
|
||||
signals[USSD_ADDED] =
|
||||
g_signal_new ("ussd-added",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
|
@ -739,6 +783,9 @@ calls_manager_init (CallsManager *self)
|
|||
|
||||
self->origins = g_list_store_new (calls_origin_get_type ());
|
||||
|
||||
/* This hash table only owns the value, not the key */
|
||||
self->calls = g_hash_table_new_full (NULL, NULL, NULL, g_object_unref);
|
||||
|
||||
self->settings = calls_settings_new ();
|
||||
// Load the contacts provider
|
||||
self->contacts_provider = calls_contacts_provider_new (self->settings);
|
||||
|
|
Loading…
Reference in a new issue