aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/empathy-account-assistant.c9
-rw-r--r--src/empathy-accounts-dialog.c59
-rw-r--r--src/empathy-main-window.ui2
-rw-r--r--src/empathy.c72
4 files changed, 89 insertions, 53 deletions
diff --git a/src/empathy-account-assistant.c b/src/empathy-account-assistant.c
index 0f917fac5..f351a9639 100644
--- a/src/empathy-account-assistant.c
+++ b/src/empathy-account-assistant.c
@@ -771,9 +771,12 @@ account_assistant_build_enter_or_create_page (EmpathyAccountAssistant *self)
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
gtk_widget_show (main_vbox);
+ hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0);
+ gtk_widget_show (hbox);
+
w = gtk_label_new (NULL);
- gtk_misc_set_alignment (GTK_MISC (w), 0, 0);
- gtk_box_pack_start (GTK_BOX (main_vbox), w, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0);
gtk_widget_show (w);
priv->first_label = w;
@@ -783,7 +786,7 @@ account_assistant_build_enter_or_create_page (EmpathyAccountAssistant *self)
gtk_widget_show (w);
chooser = empathy_protocol_chooser_new ();
- gtk_container_add (GTK_CONTAINER (w), chooser);
+ gtk_box_pack_start (GTK_BOX (hbox), chooser, FALSE, FALSE, 0);
gtk_widget_show (chooser);
priv->chooser = chooser;
diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c
index 501b93648..83179a8b9 100644
--- a/src/empathy-accounts-dialog.c
+++ b/src/empathy-accounts-dialog.c
@@ -1501,6 +1501,28 @@ accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog,
}
static void
+select_and_scroll_to_iter (EmpathyAccountsDialog *dialog,
+ GtkTreeIter *iter)
+{
+ EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
+ GtkTreeSelection *selection;
+ GtkTreePath *path;
+ GtkTreeModel *model;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
+
+ gtk_tree_selection_select_iter (selection, iter);
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
+ path = gtk_tree_model_get_path (model, iter);
+
+ gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (priv->treeview), path, NULL,
+ TRUE, 0, 0.5);
+
+ gtk_tree_path_free (path);
+}
+
+static void
accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog,
EmpathyAccountSettings *settings)
{
@@ -1510,7 +1532,7 @@ accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog,
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
if (accounts_dialog_get_settings_iter (dialog, settings, &iter))
- gtk_tree_selection_select_iter (selection, &iter);
+ select_and_scroll_to_iter (dialog, &iter);
}
static void
@@ -1752,6 +1774,7 @@ accounts_dialog_add_account (EmpathyAccountsDialog *dialog,
const gchar *name;
gboolean enabled;
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
+ gboolean selected = FALSE;
model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
status = tp_account_get_connection_status (account, NULL);
@@ -1761,7 +1784,16 @@ accounts_dialog_add_account (EmpathyAccountsDialog *dialog,
settings = empathy_account_settings_new_for_account (account);
if (!accounts_dialog_get_account_iter (dialog, account, &iter))
- gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+ {
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+ }
+ else
+ {
+ GtkTreeSelection *selection;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
+ selected = gtk_tree_selection_iter_is_selected (selection, &iter);
+ }
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
COL_NAME, name,
@@ -1770,6 +1802,14 @@ accounts_dialog_add_account (EmpathyAccountsDialog *dialog,
COL_ACCOUNT_SETTINGS, settings,
-1);
+ if (selected)
+ {
+ /* We just modified the selected account. Its display name may have been
+ * changed and so it's place in the treeview. Scroll to it so it stays
+ * visible. */
+ select_and_scroll_to_iter (dialog, &iter);
+ }
+
accounts_dialog_connection_changed_cb (account,
0,
status,
@@ -1943,20 +1983,7 @@ accounts_dialog_set_selected_account (EmpathyAccountsDialog *dialog,
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
if (accounts_dialog_get_account_iter (dialog, account, &iter))
- {
- GtkTreePath *path;
- GtkTreeModel *model;
-
- gtk_tree_selection_select_iter (selection, &iter);
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
- path = gtk_tree_model_get_path (model, &iter);
-
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (priv->treeview), path, NULL,
- TRUE, 0, 0.5);
-
- gtk_tree_path_free (path);
- }
+ select_and_scroll_to_iter (dialog, &iter);
}
static void
diff --git a/src/empathy-main-window.ui b/src/empathy-main-window.ui
index 217b276f2..864be1d28 100644
--- a/src/empathy-main-window.ui
+++ b/src/empathy-main-window.ui
@@ -47,6 +47,7 @@
<property name="name">chat_search_contacts</property>
<property name="label" translatable="yes">_Search for Contacts…</property>
</object>
+ <accelerator key="f" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
</child>
<child>
<object class="GtkAction" id="view_show_ft_manager">
@@ -124,6 +125,7 @@
<property name="name">edit_search_contacts</property>
<property name="label" translatable="yes">Find in Contact _List</property>
</object>
+ <accelerator key="f" modifiers="GDK_CONTROL_MASK"/>
</child>
<child>
<object class="GtkAction" id="view">
diff --git a/src/empathy.c b/src/empathy.c
index e18288c35..74d3741a5 100644
--- a/src/empathy.c
+++ b/src/empathy.c
@@ -528,19 +528,46 @@ account_manager_ready_cb (GObject *source_object,
}
static void
+account_join_chatrooms (TpAccount *account,
+ EmpathyChatroomManager *chatroom_manager)
+{
+ TpConnection *conn;
+ GList *chatrooms, *p;
+
+ if (tp_account_get_connection_status (account, NULL) !=
+ TP_CONNECTION_STATUS_CONNECTED)
+ return;
+
+ /* If we're connected we should have a connection */
+ conn = tp_account_get_connection (account);
+ g_return_if_fail (conn != NULL);
+
+ chatrooms = empathy_chatroom_manager_get_chatrooms (
+ chatroom_manager, account);
+
+ for (p = chatrooms; p != NULL; p = p->next)
+ {
+ EmpathyChatroom *room = EMPATHY_CHATROOM (p->data);
+
+ if (!empathy_chatroom_get_auto_connect (room))
+ continue;
+
+ empathy_join_muc (account, empathy_chatroom_get_room (room),
+ TP_USER_ACTION_TIME_NOT_USER_ACTION);
+ }
+ g_list_free (chatrooms);
+}
+
+static void
account_status_changed_cb (TpAccount *account,
guint old_status,
guint new_status,
guint reason,
gchar *dbus_error_name,
GHashTable *details,
- EmpathyChatroom *room)
+ EmpathyChatroomManager *manager)
{
- if (new_status != TP_CONNECTION_STATUS_CONNECTED)
- return;
-
- empathy_join_muc (account,
- empathy_chatroom_get_room (room), TP_USER_ACTION_TIME_NOT_USER_ACTION);
+ account_join_chatrooms (account, manager);
}
static void
@@ -565,37 +592,14 @@ account_manager_chatroom_ready_cb (GObject *source_object,
for (l = accounts; l != NULL; l = g_list_next (l))
{
TpAccount *account = TP_ACCOUNT (l->data);
- TpConnection *conn;
- GList *chatrooms, *p;
- conn = tp_account_get_connection (account);
+ /* Try to join all rooms if we're connected */
+ account_join_chatrooms (account, chatroom_manager);
- chatrooms = empathy_chatroom_manager_get_chatrooms (
- chatroom_manager, account);
-
- for (p = chatrooms; p != NULL; p = p->next)
- {
- EmpathyChatroom *room = EMPATHY_CHATROOM (p->data);
-
- if (!empathy_chatroom_get_auto_connect (room))
- continue;
-
- if (conn == NULL)
- {
- g_signal_connect (G_OBJECT (account), "status-changed",
- G_CALLBACK (account_status_changed_cb), room);
- }
- else
- {
- empathy_join_muc (account,
- empathy_chatroom_get_room (room),
- TP_USER_ACTION_TIME_NOT_USER_ACTION);
- }
- }
-
- g_list_free (chatrooms);
+ /* And/or join them on (re)connection */
+ tp_g_signal_connect_object (account, "status-changed",
+ G_CALLBACK (account_status_changed_cb), chatroom_manager, 0);
}
-
g_list_free (accounts);
}