lookup : removes the lock during a lookup
- search_entry stays always sensitive during a lookup. A spinner
notifies about an ongoing lookup. If the user activate the
search_entry during an ongoing lookup, the lookup is avoided and
the spinner is disabled.
- adds some space around the search entry.
Change-Id: I131bad09064f8f286fd00d97188d3c2e9264044b
Tuleap: #1295
diff --git a/src/ringmainwindow.cpp b/src/ringmainwindow.cpp
index 2bdf87e..68297ce 100644
--- a/src/ringmainwindow.cpp
+++ b/src/ringmainwindow.cpp
@@ -125,9 +125,11 @@
GtkWidget *radiobutton_account_settings;
GtkWidget *account_creation_wizard;
GtkWidget *account_migration_view;
+ GtkWidget *spinner_lookup;
/* Pending ring usernames lookup for the search entry */
QMetaObject::Connection username_lookup;
+ std::string pending_username_lookup;
/* The webkit_chat_container is created once, then reused for all chat views */
GtkWidget *webkit_chat_container;
@@ -507,9 +509,9 @@
{
auto priv = RING_MAIN_WINDOW_GET_PRIVATE(self);
- const auto *number_entered = gtk_entry_get_text(GTK_ENTRY(priv->search_entry));
+ const auto *querry = gtk_entry_get_text(GTK_ENTRY(priv->search_entry));
- URI uri = URI(number_entered);
+ URI uri = URI(querry);
// make sure the userinfo part isn't empty, only specifying a protocol isn't enough
@@ -537,12 +539,9 @@
if (lookup_username)
{
- gtk_widget_set_sensitive(priv->search_entry, FALSE);
- gtk_widget_set_sensitive(priv->button_new_conversation, FALSE);
- gtk_entry_set_text(
- GTK_ENTRY(priv->search_entry),
- _("looking up RingID")
- );
+ gtk_spinner_start(GTK_SPINNER(priv->spinner_lookup));
+ priv->pending_username_lookup = std::string(querry);
+ gtk_entry_set_text(GTK_ENTRY(priv->search_entry), "");
QString username_to_lookup = uri.format(
URI::Section::USER_INFO |
@@ -555,14 +554,11 @@
&NameDirectory::instance(),
&NameDirectory::registeredNameFound,
[self, priv, username_to_lookup] (G_GNUC_UNUSED const Account* account, NameDirectory::LookupStatus status, const QString& address, const QString& name) {
- if (username_to_lookup.compare(name) != 0)
- {
- //That is not our lookup.
- return;
- }
- gtk_widget_set_sensitive(priv->search_entry, TRUE);
- gtk_widget_set_sensitive(priv->button_new_conversation, TRUE);
+ auto name_qbarray = name.toLatin1();
+ if ( strcmp(priv->pending_username_lookup.data(), name_qbarray.data()) != 0 )
+ return;
+
gtk_entry_set_text(GTK_ENTRY(priv->search_entry), "");
switch(status)
@@ -619,6 +615,8 @@
break;
}
}
+ priv->pending_username_lookup = "";
+ gtk_spinner_stop(GTK_SPINNER(priv->spinner_lookup));
}
);
@@ -626,6 +624,8 @@
}
else
{
+ priv->pending_username_lookup = "";
+ gtk_spinner_stop(GTK_SPINNER(priv->spinner_lookup));
process_search_entry_contact_method(self, uri);
}
}
@@ -1269,6 +1269,7 @@
gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), RingMainWindow, radiobutton_general_settings);
gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), RingMainWindow, radiobutton_media_settings);
gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), RingMainWindow, radiobutton_account_settings);
+ gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), RingMainWindow, spinner_lookup);
}
GtkWidget *