Fix modem addition/removal and deal with ModemManager appearing/vanishing

Modems being added or removed were not working.  To fix this, we pay
attention to the "object-removed" event and not just
"interface-removed".

Also, to deal with ModemManager appearing and vanishing, we add a
GDBus watch on ModemManager's D-Bus object.

Finally, we provide appropriate UI feedback when it's not possible to
make a call.

Closes #15
Closes #16
This commit is contained in:
Bob Ham
2018-10-19 10:19:41 +00:00
parent 39ae9d6d76
commit c203f470fe
8 changed files with 304 additions and 79 deletions

View File

@@ -38,6 +38,8 @@ struct _CallsNewCallBox
GtkListStore *origin_store;
GtkComboBox *origin_box;
GtkSearchEntry *number_entry;
GtkButton *dial;
GtkLabel *status;
};
G_DEFINE_TYPE (CallsNewCallBox, calls_new_call_box, GTK_TYPE_BOX);
@@ -108,6 +110,21 @@ dial_clicked_cb (CallsNewCallBox *self,
}
void
notify_status_cb (CallsNewCallBox *self,
GParamSpec *pspec,
CallsProvider *provider)
{
gchar *status;
g_assert (CALLS_IS_PROVIDER (provider));
status = calls_provider_get_status (provider);
gtk_label_set_text (self->status, status);
g_free (status);
}
void
update_origin_box (CallsNewCallBox *self)
{
@@ -117,11 +134,16 @@ update_origin_box (CallsNewCallBox *self)
if (!gtk_tree_model_get_iter_first (origin_store, &iter))
{
gtk_widget_hide (GTK_WIDGET (self->origin_box));
gtk_widget_set_sensitive (GTK_WIDGET (self->dial), FALSE);
gtk_widget_set_visible (GTK_WIDGET (self->status), TRUE);
return;
}
/* We know there is at least one origin. */
gtk_widget_set_sensitive (GTK_WIDGET (self->dial), TRUE);
gtk_widget_set_visible (GTK_WIDGET (self->status), FALSE);
if (!gtk_tree_model_iter_next (origin_store, &iter))
{
gtk_combo_box_set_active (self->origin_box, 0);
@@ -205,6 +227,8 @@ add_provider_origins (CallsNewCallBox *self, CallsProvider *provider)
static void
set_provider (CallsNewCallBox *self, CallsProvider *provider)
{
g_signal_connect_swapped (provider, "notify::status",
G_CALLBACK (notify_status_cb), self);
g_signal_connect_swapped (provider, "origin-added",
G_CALLBACK (add_origin), self);
g_signal_connect_swapped (provider, "origin-removed",
@@ -282,6 +306,8 @@ calls_new_call_box_class_init (CallsNewCallBoxClass *klass)
gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, origin_store);
gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, origin_box);
gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, number_entry);
gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, dial);
gtk_widget_class_bind_template_child (widget_class, CallsNewCallBox, status);
gtk_widget_class_bind_template_callback (widget_class, dial_clicked_cb);
gtk_widget_class_bind_template_callback (widget_class, dial_pad_deleted_cb);
gtk_widget_class_bind_template_callback (widget_class, dial_pad_symbol_clicked_cb);