diff --git a/src/calls-new-call-box.c b/src/calls-new-call-box.c index e03e559..d35627c 100644 --- a/src/calls-new-call-box.c +++ b/src/calls-new-call-box.c @@ -24,6 +24,7 @@ #define G_LOG_DOMAIN "CallsNewCallBox" +#include "calls-account.h" #include "calls-main-window.h" #include "calls-manager.h" #include "calls-new-call-box.h" @@ -85,23 +86,39 @@ get_origin (CallsNewCallBox *self, CallsManager *manager = calls_manager_get_default (); CallsSettings *settings = calls_manager_get_settings (manager); - g_autoptr (CallsOrigin) origin = NULL; GListModel *model; gboolean auto_use_def_origin = calls_settings_get_use_default_origins (settings); if (auto_use_def_origin) { + guint n_items; + model = calls_manager_get_suitable_origins (calls_manager_get_default (), target); - if (g_list_model_get_n_items (model) == 0) + n_items = g_list_model_get_n_items (model); + + if (n_items == 0) return NULL; - origin = g_list_model_get_item (model, 0); + for (guint i = 0; i < n_items; i++) { + g_autoptr (CallsOrigin) origin = g_list_model_get_item (model, i); + g_autofree char *origin_name = NULL; - return g_steal_pointer (&origin); + if (CALLS_IS_ACCOUNT (origin) && + calls_account_get_state (CALLS_ACCOUNT (origin)) != CALLS_ACCOUNT_STATE_ONLINE) + continue; + + origin_name = calls_origin_get_name (origin); + g_debug ("Using origin '%s' for call to '%s'", + origin_name, target); + + return g_steal_pointer (&origin); + } } else { return get_selected_origin (self); } + + return NULL; }