From d9b91206c0291fa8aa58df572292784a4f8ff878 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Sat, 28 Oct 2017 22:02:32 +0200 Subject: Keep MUC join dialog open until joined, show errors --- .../ui/add_conversation/add_contact_dialog.vala | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 main/src/ui/add_conversation/add_contact_dialog.vala (limited to 'main/src/ui/add_conversation/add_contact_dialog.vala') diff --git a/main/src/ui/add_conversation/add_contact_dialog.vala b/main/src/ui/add_conversation/add_contact_dialog.vala new file mode 100644 index 00000000..102cf18a --- /dev/null +++ b/main/src/ui/add_conversation/add_contact_dialog.vala @@ -0,0 +1,58 @@ +using Gee; +using Gtk; + +using Dino.Entities; + +namespace Dino.Ui { + +[GtkTemplate (ui = "/im/dino/add_conversation/add_contact_dialog.ui")] +protected class AddContactDialog : Gtk.Dialog { + + public Account? account { + get { return account_combobox.selected; } + set { account_combobox.selected = value; } + } + + public string jid { + get { return jid_entry.text; } + set { jid_entry.text = value; } + } + + [GtkChild] private AccountComboBox account_combobox; + [GtkChild] private Button ok_button; + [GtkChild] private Button cancel_button; + [GtkChild] private Entry jid_entry; + [GtkChild] private Entry alias_entry; + [GtkChild] private CheckButton subscribe_checkbutton; + + private StreamInteractor stream_interactor; + + public AddContactDialog(StreamInteractor stream_interactor) { + Object(use_header_bar : 1); + this.stream_interactor = stream_interactor; + account_combobox.initialize(stream_interactor); + + cancel_button.clicked.connect(() => { close(); }); + ok_button.clicked.connect(on_ok_button_clicked); + jid_entry.changed.connect(on_jid_entry_changed); + } + + private void on_ok_button_clicked() { + string? alias = alias_entry.text == "" ? null : alias_entry.text; + Jid jid = new Jid(jid_entry.text); + stream_interactor.get_module(RosterManager.IDENTITY).add_jid(account, jid, alias); + if (subscribe_checkbutton.active) { + stream_interactor.get_module(PresenceManager.IDENTITY).request_subscription(account, jid); + } + close(); + } + + private void on_jid_entry_changed() { + Jid parsed_jid = Jid.parse(jid_entry.text); + bool sensitive = parsed_jid != null && parsed_jid.resourcepart == null && + stream_interactor.get_module(RosterManager.IDENTITY).get_roster_item(account, parsed_jid) == null; + ok_button.set_sensitive(sensitive); + } +} + +} -- cgit v1.2.3-70-g09d2