]> jfr.im git - irc/xchat.git/commitdiff
Improve behaviour of choosing which tabs to use when (re)connecting.
authorzed <redacted>
Fri, 2 Jan 2009 05:45:58 +0000 (05:45 +0000)
committerzed <redacted>
Fri, 2 Jan 2009 05:45:58 +0000 (05:45 +0000)
git-svn-id: svn://svn.code.sf.net/p/xchat/svn@1326 893a96be-7f27-4fdf-9d1e-6aeec9d3cce1

src/fe-gtk/servlistgui.c

index 2980bdfcd32d2029fa8ce0922e7109d7e25133ef..5ae0c4eba527ce575718ff916e01f384102ee9b1 100644 (file)
@@ -1014,10 +1014,37 @@ servlist_connect_cb (GtkWidget *button, gpointer userdata)
                return;
        }
 
-       if (!is_session (servlist_sess))
-               servlist_sess = NULL;
-       else if (servlist_sess->server->connected)
-               servlist_sess = NULL;
+       if (!is_session (servlist_sess))
+               servlist_sess = NULL;   /* open a new one */
+
+       {
+               GSList *list;
+               session *sess;
+               session *chosen = servlist_sess;
+
+               servlist_sess = NULL;   /* open a new one */
+
+               for (list = sess_list; list; list = list->next)
+               {
+                       sess = list->data;
+                       if (sess->server->network == selected_net)
+                       {
+                               servlist_sess = sess;
+                               if (sess->server->connected)
+                                       servlist_sess = NULL;   /* open a new one */
+                               break;
+                       }
+               }
+
+               /* use the chosen one, if it's empty */
+               if (!servlist_sess &&
+                         chosen &&
+                        !chosen->server->connected &&
+                         chosen->server->server_session->channel[0] == 0)
+               {
+                       servlist_sess = chosen;
+               }
+       }
 
        servlist_connect (servlist_sess, selected_net, TRUE);