diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/empathy-account-assistant.c | 9 | ||||
-rw-r--r-- | src/empathy-accounts-dialog.c | 59 | ||||
-rw-r--r-- | src/empathy-main-window.ui | 2 | ||||
-rw-r--r-- | src/empathy.c | 72 |
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); } |