diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/empathy-new-chatroom-dialog.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c index a09a5f710..29c886540 100644 --- a/src/empathy-new-chatroom-dialog.c +++ b/src/empathy-new-chatroom-dialog.c @@ -37,6 +37,7 @@ #include <libempathy/empathy-chatroom.h> #include <libempathy/empathy-utils.h> #include <libempathy/empathy-request-util.h> +#include <libempathy/empathy-gsettings.h> #include <libempathy-gtk/empathy-account-chooser.h> #include <libempathy-gtk/empathy-ui-utils.h> @@ -71,6 +72,8 @@ typedef struct { GtkWidget *button_join; GtkWidget *label_error_message; GtkWidget *viewport_error; + + GSettings *gsettings; } EmpathyNewChatroomDialog; enum { @@ -94,6 +97,8 @@ static void new_chatroom_dialog_model_add_columns (EmpathyNewC static void new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog); static void new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_account_ready_cb (EmpathyAccountChooser *combobox, + EmpathyNewChatroomDialog *dialog); static void new_chatroom_dialog_roomlist_destroy_cb (EmpathyTpRoomlist *room_list, EmpathyNewChatroomDialog *dialog); static void new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list, @@ -198,6 +203,8 @@ empathy_new_chatroom_dialog_show (GtkWindow *parent) gtk_box_pack_start (GTK_BOX (dialog->hbox_expander), dialog->throbber, TRUE, TRUE, 0); + dialog->gsettings = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA); + /* Account chooser for custom */ dialog->account_chooser = empathy_account_chooser_new (); empathy_account_chooser_set_filter (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser), @@ -208,6 +215,9 @@ empathy_new_chatroom_dialog_show (GtkWindow *parent) 1, 2, 0, 1); gtk_widget_show (dialog->account_chooser); + g_signal_connect (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser), "ready", + G_CALLBACK (new_chatroom_dialog_account_ready_cb), + dialog); g_signal_connect (GTK_COMBO_BOX (dialog->account_chooser), "changed", G_CALLBACK (new_chatroom_dialog_account_changed_cb), dialog); @@ -223,12 +233,32 @@ empathy_new_chatroom_dialog_show (GtkWindow *parent) } static void +new_chatroom_dialog_store_last_account (GSettings *gsettings, + EmpathyAccountChooser *account_chooser) +{ + TpAccount *account; + const char *account_path; + + account = empathy_account_chooser_get_account (account_chooser); + if (account == NULL) + return; + + account_path = tp_proxy_get_object_path (account); + DEBUG ("Storing account path '%s'", account_path); + + g_settings_set (gsettings, EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT, + "o", account_path); +} + +static void new_chatroom_dialog_response_cb (GtkWidget *widget, gint response, EmpathyNewChatroomDialog *dialog) { if (response == GTK_RESPONSE_OK) { new_chatroom_dialog_join (dialog); + new_chatroom_dialog_store_last_account (dialog->gsettings, + EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser)); } gtk_widget_destroy (widget); @@ -248,6 +278,8 @@ new_chatroom_dialog_destroy_cb (GtkWidget *widget, g_object_unref (dialog->account); } + g_clear_object (&dialog->gsettings); + g_free (dialog); } @@ -428,6 +460,44 @@ account_status_changed_cb (TpAccount *account, } static void +new_chatroom_dialog_select_last_account (GSettings *gsettings, + EmpathyAccountChooser *account_chooser) +{ + const gchar *account_path; + TpAccountManager *manager; + TpSimpleClientFactory *factory; + TpAccount *account; + TpConnectionStatus status; + + account_path = g_settings_get_string (gsettings, EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT); + DEBUG ("Selecting account path '%s'", account_path); + + manager = tp_account_manager_dup (); + factory = tp_proxy_get_factory (manager); + account = tp_simple_client_factory_ensure_account (factory, + account_path, + NULL, + NULL); + + if (account != NULL) { + status = tp_account_get_connection_status (account, NULL); + if (status == TP_CONNECTION_STATUS_CONNECTED) { + empathy_account_chooser_set_account (account_chooser, + account); + } + g_object_unref (account); + } + g_object_unref (manager); +} + +static void +new_chatroom_dialog_account_ready_cb (EmpathyAccountChooser *combobox, + EmpathyNewChatroomDialog *dialog) +{ + new_chatroom_dialog_select_last_account (dialog->gsettings, combobox); +} + +static void new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, EmpathyNewChatroomDialog *dialog) { |