mirror of
https://gitlab.gnome.org/GNOME/calls.git
synced 2024-12-14 00:17:35 +00:00
ui-call-data: Add "state-changed" signal
This signal is for use in the UI components that are interested in both the old and new state.
This commit is contained in:
parent
2f32e09982
commit
1518a4b6fb
1 changed files with 53 additions and 5 deletions
|
@ -27,6 +27,7 @@
|
||||||
#include "calls-manager.h"
|
#include "calls-manager.h"
|
||||||
|
|
||||||
#include <cui-call.h>
|
#include <cui-call.h>
|
||||||
|
#include <cui-enums.h>
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
@ -41,8 +42,13 @@ enum {
|
||||||
PROP_LAST_PROP
|
PROP_LAST_PROP
|
||||||
};
|
};
|
||||||
|
|
||||||
static GParamSpec *props[PROP_LAST_PROP];
|
enum {
|
||||||
|
STATE_CHANGED,
|
||||||
|
N_SIGNALS,
|
||||||
|
};
|
||||||
|
|
||||||
|
static GParamSpec *props[PROP_LAST_PROP];
|
||||||
|
static guint signals[N_SIGNALS];
|
||||||
|
|
||||||
struct _CallsUiCallData
|
struct _CallsUiCallData
|
||||||
{
|
{
|
||||||
|
@ -54,6 +60,8 @@ struct _CallsUiCallData
|
||||||
GTimer *timer;
|
GTimer *timer;
|
||||||
gdouble active_time;
|
gdouble active_time;
|
||||||
guint timer_id;
|
guint timer_id;
|
||||||
|
|
||||||
|
CuiCallState state;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void calls_ui_call_data_cui_call_interface_init (CuiCallInterface *iface);
|
static void calls_ui_call_data_cui_call_interface_init (CuiCallInterface *iface);
|
||||||
|
@ -91,7 +99,7 @@ calls_ui_call_data_get_state (CuiCall *call_data)
|
||||||
g_return_val_if_fail (CALLS_IS_UI_CALL_DATA (self), CUI_CALL_STATE_UNKNOWN);
|
g_return_val_if_fail (CALLS_IS_UI_CALL_DATA (self), CUI_CALL_STATE_UNKNOWN);
|
||||||
g_return_val_if_fail (!!self->call, CUI_CALL_STATE_UNKNOWN);
|
g_return_val_if_fail (!!self->call, CUI_CALL_STATE_UNKNOWN);
|
||||||
|
|
||||||
return calls_call_state_to_cui_call_state (calls_call_get_state (self->call));
|
return self->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -206,21 +214,43 @@ on_timer_ticked (CallsUiCallData *self)
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_notify_state (CallsUiCallData *self)
|
set_state (CallsUiCallData *self,
|
||||||
|
CuiCallState new_state)
|
||||||
{
|
{
|
||||||
|
CuiCallState old_state;
|
||||||
|
|
||||||
g_assert (CALLS_IS_UI_CALL_DATA (self));
|
g_assert (CALLS_IS_UI_CALL_DATA (self));
|
||||||
|
|
||||||
if (calls_call_get_state (self->call) == CALLS_CALL_STATE_ACTIVE) {
|
if (self->state == new_state)
|
||||||
|
return;
|
||||||
|
|
||||||
|
old_state = self->state;
|
||||||
|
self->state = new_state;
|
||||||
|
|
||||||
|
if (new_state == CUI_CALL_STATE_ACTIVE) {
|
||||||
self->timer = g_timer_new ();
|
self->timer = g_timer_new ();
|
||||||
self->timer_id = g_timeout_add (500,
|
self->timer_id = g_timeout_add (500,
|
||||||
G_SOURCE_FUNC (on_timer_ticked),
|
G_SOURCE_FUNC (on_timer_ticked),
|
||||||
self);
|
self);
|
||||||
} else if (calls_call_get_state (self->call) == CALLS_CALL_STATE_DISCONNECTED) {
|
} else if (new_state == CUI_CALL_STATE_DISCONNECTED) {
|
||||||
g_clear_handle_id (&self->timer_id, g_source_remove);
|
g_clear_handle_id (&self->timer_id, g_source_remove);
|
||||||
g_clear_pointer (&self->timer, g_timer_destroy);
|
g_clear_pointer (&self->timer, g_timer_destroy);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]);
|
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STATE]);
|
||||||
|
|
||||||
|
g_signal_emit (self, signals[STATE_CHANGED], 0, new_state, old_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_notify_state (CallsUiCallData *self)
|
||||||
|
{
|
||||||
|
CallsCallState state;
|
||||||
|
g_assert (CALLS_IS_UI_CALL_DATA (self));
|
||||||
|
|
||||||
|
state = calls_call_get_state (self->call);
|
||||||
|
set_state (self, calls_call_state_to_cui_call_state (state));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -410,6 +440,24 @@ calls_ui_call_data_class_init (CallsUiCallDataClass *klass)
|
||||||
|
|
||||||
g_object_class_override_property (object_class, PROP_ACTIVE_TIME, "active-time");
|
g_object_class_override_property (object_class, PROP_ACTIVE_TIME, "active-time");
|
||||||
props[PROP_ACTIVE_TIME] = g_object_class_find_property (object_class, "active-time");
|
props[PROP_ACTIVE_TIME] = g_object_class_find_property (object_class, "active-time");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CallsUiCallData::state-changed:
|
||||||
|
* @self: The #CallsUiCallData instance.
|
||||||
|
* @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.
|
||||||
|
*/
|
||||||
|
signals[STATE_CHANGED] =
|
||||||
|
g_signal_new ("state-changed",
|
||||||
|
G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL, NULL,
|
||||||
|
G_TYPE_NONE,
|
||||||
|
2, CUI_TYPE_CALL_STATE, CUI_TYPE_CALL_STATE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CallsUiCallData *
|
CallsUiCallData *
|
||||||
|
|
Loading…
Reference in a new issue