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 *