enum
{
PAGE_CONTACT_LIST = 0,
- PAGE_NO_MATCH
+ PAGE_MESSAGE
};
enum
GtkWidget *search_bar;
GtkWidget *notebook;
GtkWidget *no_entry_label;
+ GtkWidget *button_account_settings;
GtkToggleAction *show_protocols;
GtkRadioAction *sort_by_name;
tp_clear_object (&individual);
}
+static void
+button_account_settings_clicked_cb (GtkButton *button,
+ EmpathyRosterWindow *self)
+{
+ empathy_accounts_dialog_show_application (gdk_screen_get_default (),
+ NULL, FALSE, FALSE);
+}
+
+static void
+display_page_message (EmpathyRosterWindow *self,
+ const gchar *msg,
+ gboolean display_accounts_button)
+{
+ gchar *tmp;
+
+ tmp = g_strdup_printf ("<b><span size='xx-large'>%s</span></b>", msg);
+
+ gtk_label_set_markup (GTK_LABEL (self->priv->no_entry_label), tmp);
+ g_free (tmp);
+
+ gtk_label_set_line_wrap (GTK_LABEL (self->priv->no_entry_label), TRUE);
+
+ gtk_widget_set_visible (self->priv->button_account_settings,
+ display_accounts_button);
+
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook),
+ PAGE_MESSAGE);
+}
+
+static void
+display_page_no_account (EmpathyRosterWindow *self)
+{
+ display_page_message (self,
+ _("You need to setup an account to see contacts here."), TRUE);
+}
+
static void
roster_window_row_deleted_cb (GtkTreeModel *model,
GtkTreePath *path,
if (empathy_individual_view_is_searching (self->priv->individual_view))
{
- gchar *tmp;
-
- tmp = g_strdup_printf ("<b><span size='xx-large'>%s</span></b>",
- _("No match found"));
-
- gtk_label_set_markup (GTK_LABEL (self->priv->no_entry_label), tmp);
- g_free (tmp);
-
- gtk_label_set_line_wrap (GTK_LABEL (self->priv->no_entry_label),
- TRUE);
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook),
- PAGE_NO_MATCH);
+ display_page_message (self, _("No match found"), FALSE);
}
}
}
+static void
+display_page_contact_list (EmpathyRosterWindow *self)
+{
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook),
+ PAGE_CONTACT_LIST);
+}
+
static void
roster_window_row_inserted_cb (GtkTreeModel *model,
GtkTreePath *path,
if (self->priv->empty)
{
self->priv->empty = FALSE;
- gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook),
- PAGE_CONTACT_LIST);
+
+ display_page_contact_list (self);
gtk_widget_grab_focus (GTK_WIDGET (self->priv->individual_view));
/* The store is being filled, it will be done after an idle cb.
roster_window_setup_balance (self, account);
}
+/* @account: if not %NULL, the only account which can be enabled */
+static void
+display_page_account_not_enabled (EmpathyRosterWindow *self,
+ TpAccount *account)
+{
+ if (account == NULL)
+ {
+ display_page_message (self,
+ _("You need to enable one of your accounts to see contacts here."),
+ TRUE);
+ }
+ else
+ {
+ gchar *tmp;
+
+ /* translators: argument is an account name */
+ tmp = g_strdup_printf (_("You need to enable %s to see contacts here."),
+ tp_account_get_display_name (account));
+
+ display_page_message (self, tmp, TRUE);
+ g_free (tmp);
+ }
+}
+static gboolean
+has_enabled_account (GList *accounts)
+{
+ GList *l;
+
+ for (l = accounts; l != NULL; l = g_list_next (l))
+ {
+ TpAccount *account = l->data;
+
+ if (tp_account_is_enabled (account))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+set_notebook_page (EmpathyRosterWindow *self)
+{
+ GList *accounts;
+ guint len;
+
+ accounts = tp_account_manager_get_valid_accounts (
+ self->priv->account_manager);
+
+ len = g_list_length (accounts);
+
+ if (len == 0)
+ {
+ /* No account */
+ display_page_no_account (self);
+ goto out;
+ }
+
+ if (!has_enabled_account (accounts))
+ {
+ TpAccount *account = NULL;
+
+ /* Pass the account if there is only one which can be enabled */
+ if (len == 1)
+ account = accounts->data;
+
+ display_page_account_not_enabled (self, account);
+ goto out;
+ }
+
+ display_page_contact_list (self);
+
+out:
+ g_list_free (accounts);
+}
+
static void
roster_window_account_validity_changed_cb (TpAccountManager *manager,
TpAccount *account,
add_account (self, account);
else
roster_window_account_removed_cb (manager, account, self);
+
+ set_notebook_page (self);
}
static void
self->priv->actions_connected = list;
}
+static void
+account_enabled_cb (TpAccountManager *manager,
+ TpAccount *account,
+ EmpathyRosterWindow *self)
+{
+ set_notebook_page (self);
+}
+
+static void
+account_disabled_cb (TpAccountManager *manager,
+ TpAccount *account,
+ EmpathyRosterWindow *self)
+{
+ set_notebook_page (self);
+}
+
static void
account_manager_prepared_cb (GObject *source_object,
GAsyncResult *result,
g_signal_connect (manager, "account-validity-changed",
G_CALLBACK (roster_window_account_validity_changed_cb), self);
+ tp_g_signal_connect_object (manager, "account-disabled",
+ G_CALLBACK (account_disabled_cb), self, 0);
+ tp_g_signal_connect_object (manager, "account-enabled",
+ G_CALLBACK (account_enabled_cb), self, 0);
roster_window_update_status (self);
gtk_action_set_sensitive (self->priv->view_history,
g_list_length (accounts) > 0);
+ set_notebook_page (self);
+
g_list_free (accounts);
}
"notebook", &self->priv->notebook,
"no_entry_label", &self->priv->no_entry_label,
"roster_scrolledwindow", &sw,
+ "button_account_settings", &self->priv->button_account_settings,
NULL);
g_free (filename);
roster_window_notify_contact_list_size_cb (self->priv->gsettings_ui,
EMPATHY_PREFS_UI_SHOW_AVATARS, self);
+
+ g_signal_connect (self->priv->button_account_settings, "clicked",
+ G_CALLBACK (button_account_settings_clicked_cb), self);
}
GtkWidget *