ringer: Never cancel async DBus calls and refactor
Previously our code assumed that g_cancellable_cancel() the async DBus calls to libfeedback would guarantee that the underlying operation would not be performed (i.e. triggering or ending a feedback). However the endless ringing exhibited in #470 shows this assumption not to hold. Therefore we avoid using g_cancellable_cancel () completely and default to waiting for the async operation to finish. update_ring () now sets the target state by inspecting managed calls and the main logic will now step towards the target state: Changing from regular/loud to soft/quiet ringing (or vice versa) requires we first end feedback before (re)triggering it. Additionally the "is-quiet" and "is-ringing" properties are replaced by a new "state" property to allow changing the combination atomically. Closes: #470
This commit is contained in:
@@ -28,13 +28,24 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
/* TODO docstring */
|
||||
typedef enum {
|
||||
CALLS_RING_STATE_INACTIVE,
|
||||
CALLS_RING_STATE_RINGING,
|
||||
CALLS_RING_STATE_RINGING_SOFT,
|
||||
CALLS_RING_STATE_ERROR
|
||||
} CallsRingState;
|
||||
|
||||
|
||||
#define CALLS_TYPE_RINGER (calls_ringer_get_type ())
|
||||
|
||||
G_DECLARE_FINAL_TYPE (CallsRinger, calls_ringer, CALLS, RINGER, GObject)
|
||||
|
||||
|
||||
CallsRinger *calls_ringer_new (void);
|
||||
gboolean calls_ringer_get_is_ringing (CallsRinger *self);
|
||||
gboolean calls_ringer_get_ring_is_quiet (CallsRinger *self);
|
||||
CallsRingState calls_ringer_get_state (CallsRinger *self);
|
||||
void calls_ringer_start_ringing (CallsRinger *self,
|
||||
gboolean quiet);
|
||||
void calls_ringer_stop_ringing (CallsRinger *self);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
Reference in New Issue
Block a user