From 027c49e8bdd194be06e635130713590956bdd35e Mon Sep 17 00:00:00 2001 From: Bob Ham Date: Fri, 9 Nov 2018 12:38:04 +0000 Subject: [PATCH] src: Add old state as argument to CallsCall's state-changed signal --- src/calls-call.c | 11 ++++++++--- src/calls-dummy-call.c | 12 +++++++++++- src/calls-dummy-origin.c | 5 +++-- src/calls-mm-call.c | 15 ++++++++++++--- src/calls-mm-origin.c | 5 +++-- src/calls-ofono-call.c | 11 ++++++++++- 6 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/calls-call.c b/src/calls-call.c index 131b156..134e919 100644 --- a/src/calls-call.c +++ b/src/calls-call.c @@ -102,12 +102,17 @@ static guint signals [SIGNAL_LAST_SIGNAL]; static void calls_call_default_init (CallsCallInterface *iface) { - GType arg_types = CALLS_TYPE_CALL_STATE; + GType arg_types[2] = + { + CALLS_TYPE_CALL_STATE, + CALLS_TYPE_CALL_STATE + }; /** * CallsCall::state-changed: * @self: The #CallsCall instance. - * @state: The new state of the call. + * @new_state: The new state of the call. + * @old_state: The old state of the call. * * This signal is emitted when the state of the call changes, for * example when it's answered or when the call is disconnected. @@ -118,7 +123,7 @@ calls_call_default_init (CallsCallInterface *iface) G_SIGNAL_RUN_LAST, NULL, NULL, NULL, NULL, G_TYPE_NONE, - 1, &arg_types); + 2, arg_types); } diff --git a/src/calls-dummy-call.c b/src/calls-dummy-call.c index 473ccfa..bd6bcb6 100644 --- a/src/calls-dummy-call.c +++ b/src/calls-dummy-call.c @@ -85,8 +85,18 @@ change_state (CallsCall *call, CallsDummyCall *self, CallsCallState state) { + CallsCallState old_state = self->state; + + if (old_state == state) + { + return; + } + self->state = state; - g_signal_emit_by_name (call, "state-changed", state); + g_signal_emit_by_name (call, + "state-changed", + state, + old_state); } static void diff --git a/src/calls-dummy-origin.c b/src/calls-dummy-origin.c index 678a646..9057adc 100644 --- a/src/calls-dummy-origin.c +++ b/src/calls-dummy-origin.c @@ -110,10 +110,11 @@ remove_calls (CallsDummyOrigin *self, const gchar *reason) static void call_state_changed_cb (CallsDummyOrigin *self, - CallsCallState state, + CallsCallState new_state, + CallsCallState old_state, CallsCall *call) { - if (state != CALLS_CALL_STATE_DISCONNECTED) + if (new_state != CALLS_CALL_STATE_DISCONNECTED) { return; } diff --git a/src/calls-mm-call.c b/src/calls-mm-call.c index 6c86e7c..467147e 100644 --- a/src/calls-mm-call.c +++ b/src/calls-mm-call.c @@ -81,12 +81,21 @@ get_state (CallsCall *call) static void -change_state (CallsMMCall *self, - MMCallState state) +change_state (CallsMMCall *self, + CallsCallState state) { + CallsCallState old_state = self->state; + + if (old_state == state) + { + return; + } + self->state = state; g_signal_emit_by_name (CALLS_CALL (self), - "state-changed", state); + "state-changed", + state, + old_state); } diff --git a/src/calls-mm-origin.c b/src/calls-mm-origin.c index 1884462..588359a 100644 --- a/src/calls-mm-origin.c +++ b/src/calls-mm-origin.c @@ -204,10 +204,11 @@ delete_call (CallsMMOrigin *self, static void call_state_changed_cb (CallsMMOrigin *self, - CallsCallState state, + CallsCallState new_state, + CallsCallState old_state, CallsCall *call) { - if (state != CALLS_CALL_STATE_DISCONNECTED) + if (new_state != CALLS_CALL_STATE_DISCONNECTED) { return; } diff --git a/src/calls-ofono-call.c b/src/calls-ofono-call.c index d85ae6d..aee1a57 100644 --- a/src/calls-ofono-call.c +++ b/src/calls-ofono-call.c @@ -87,9 +87,18 @@ static void change_state (CallsOfonoCall *self, CallsCallState state) { + CallsCallState old_state = self->state; + + if (old_state == state) + { + return; + } + self->state = state; g_signal_emit_by_name (CALLS_CALL (self), - "state-changed", state); + "state-changed", + state, + old_state); }