From a9bd1ebae6c517068273173b0613d065cda2b85f Mon Sep 17 00:00:00 2001 From: Julian Sparber Date: Thu, 19 Mar 2020 17:41:08 +0100 Subject: [PATCH] MainWindow: show error message when making calls isn't possible --- src/calls-main-window.c | 42 +++++++++++++++++++++++++++++++++++++++++ src/style.css | 7 +++++++ src/ui/main-window.ui | 17 +++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/src/calls-main-window.c b/src/calls-main-window.c index 5297065..8e6d717 100644 --- a/src/calls-main-window.c +++ b/src/calls-main-window.c @@ -56,6 +56,9 @@ struct _CallsMainWindow HdyViewSwitcherBar *switcher_bar; GtkStack *main_stack; + GtkRevealer *permanent_error_revealer; + GtkLabel *permanent_error_label; + CallsNewCallBox *new_call; }; @@ -158,6 +161,36 @@ set_property (GObject *object, } +static void +state_changed_cb (CallsMainWindow *self, + GParamSpec *pspec, + CallsManager *manager) +{ + const gchar *error = NULL; + switch (calls_manager_get_state (manager)) + { + case CALLS_MANAGER_STATE_READY: + break; + + case CALLS_MANAGER_STATE_NO_ORIGIN: + error = _("Can't place calls: No SIM card"); + break; + + case CALLS_MANAGER_STATE_UNKNOWN: + case CALLS_MANAGER_STATE_NO_PROVIDER: + error = _("Can't place calls: No backend service"); + break; + + case CALLS_MANAGER_STATE_NO_PLUGIN: + error = _("Can't place calls: No plugin"); + break; + } + + gtk_label_set_text (self->permanent_error_label, error); + gtk_revealer_set_reveal_child (self->permanent_error_revealer, error != NULL); +} + + static void constructed (GObject *object) { @@ -218,6 +251,13 @@ constructed (GObject *object) self->title_label, NULL); + g_signal_connect_swapped (calls_manager_get_default (), + "notify::state", + G_CALLBACK (state_changed_cb), + self); + + state_changed_cb (self, NULL, calls_manager_get_default ()); + G_OBJECT_CLASS (calls_main_window_parent_class)->constructed (object); } @@ -289,6 +329,8 @@ calls_main_window_class_init (CallsMainWindowClass *klass) gtk_widget_class_bind_template_child (widget_class, CallsMainWindow, narrow_switcher); gtk_widget_class_bind_template_child (widget_class, CallsMainWindow, switcher_bar); gtk_widget_class_bind_template_child (widget_class, CallsMainWindow, main_stack); + gtk_widget_class_bind_template_child (widget_class, CallsMainWindow, permanent_error_revealer); + gtk_widget_class_bind_template_child (widget_class, CallsMainWindow, permanent_error_label); } diff --git a/src/style.css b/src/style.css index 9fe7b51..64268ac 100644 --- a/src/style.css +++ b/src/style.css @@ -14,3 +14,10 @@ hdykeypad > button, .dial-button, .delete-button { .phone-number-entry { font-size: 24px; } + +.error-state-message { + background-color: @error_color; + border-bottom: 1px solid darker(@error_color); + color: @theme_base_color; + padding: 6px; +} diff --git a/src/ui/main-window.ui b/src/ui/main-window.ui index a7117c4..21046c2 100644 --- a/src/ui/main-window.ui +++ b/src/ui/main-window.ui @@ -24,6 +24,23 @@ True False vertical + + + True + False + True + + + True + False + No modem found + + + + + True