[smuxi/experiments/configurable_message_patterns: 1/7] Engine(-IRC|-XMPP), Frontend-GNOME: implemented multi identity support (closes: #428)



commit 823c66815eef41600c4683aff056cf78d0b83e34
Author: Mirco Bauer <meebey meebey net>
Date:   Sun Feb 9 20:26:46 2014 +0100

    Engine(-IRC|-XMPP), Frontend-GNOME: implemented multi identity support (closes: #428)

 src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs |   22 ++-
 .../Protocols/Xmpp/XmppProtocolManager.cs          |    8 +-
 src/Engine/Config/Config.cs                        |   28 ++-
 src/Engine/Config/ServerModel.cs                   |   20 ++-
 src/Frontend-GNOME/Views/MenuWidget.cs             |    4 +-
 src/Frontend-GNOME/Views/ServerWidget.cs           |   73 +++++++-
 .../gtk-gui/Smuxi.Frontend.Gnome.ServerWidget.cs   |  194 +++++++++++++-------
 src/Frontend-GNOME/gtk-gui/gui.stetic              |  108 ++++++++++-
 8 files changed, 356 insertions(+), 101 deletions(-)
---
diff --git a/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs 
b/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
index e8812f9..fa27aa5 100644
--- a/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
+++ b/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
@@ -1,7 +1,7 @@
 /*
  * Smuxi - Smart MUltipleXed Irc
  *
- * Copyright (c) 2005-2013 Mirco Bauer <meebey meebey net>
+ * Copyright (c) 2005-2014 Mirco Bauer <meebey meebey net>
  *
  * Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
  *
@@ -48,6 +48,7 @@ namespace Smuxi.Engine
         private int             _Port;
         private string          _Network;
         private string[]        _Nicknames;
+        string _Realname;
         private int             _CurrentNickname;
         private string          _Username;
         private string          _Password;
@@ -396,8 +397,8 @@ namespace Smuxi.Engine
                 builder.AppendEventPrefix().AppendText(_("Logging in..."));
                 Session.AddMessageToChat(Chat, builder.ToMessage());
 
-                string realname = (string) Session.UserConfig["Connection/Realname"];
-                if (realname.Trim().Length == 0) {
+                string realname = _Realname;
+                if (realname == null || realname.Trim().Length == 0) {
                     realname = "unset";
                 }
                 if (!Regex.IsMatch(_Username, "^[a-z0-9]+$", RegexOptions.IgnoreCase)) {
@@ -2459,6 +2460,16 @@ namespace Smuxi.Engine
             } else {
                 _Network = server.Network;
             }
+            if (String.IsNullOrEmpty(server.Nickname)) {
+                _Nicknames = (string[]) config["Connection/Nicknames"];
+            } else {
+                _Nicknames = server.Nickname.Split(' ');
+            }
+            if (String.IsNullOrEmpty(server.Realname)) {
+                _Realname = (string) config["Connection/Realname"];
+            } else {
+                _Realname = server.Realname;
+            }
             if (String.IsNullOrEmpty(server.Username)) {
                 _Username = (string) config["Connection/Username"];
             } else {
@@ -2479,11 +2490,6 @@ namespace Smuxi.Engine
                 }
             }
 
-            // global fallbacks
-            if (_Nicknames == null) {
-                _Nicknames = (string[]) config["Connection/Nicknames"];
-            }
-
             // add fallbacks if only one nick was specified, else we get random
             // number nicks when nick collisions happen
             if (_Nicknames.Length == 1) {
diff --git a/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs 
b/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
index 707d360..a9084fc 100644
--- a/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
+++ b/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
@@ -1,7 +1,7 @@
 /*
  * Smuxi - Smart MUltipleXed Irc
  *
- * Copyright (c) 2005-2013 Mirco Bauer <meebey meebey net>
+ * Copyright (c) 2005-2014 Mirco Bauer <meebey meebey net>
  * Copyright (c) 2011 Tuukka Hastrup <Tuukka Hastrup iki fi>
  * Copyright (c) 2013-2014 Oliver Schneider <smuxi oli-obk de>
  *
@@ -2487,7 +2487,11 @@ namespace Smuxi.Engine
         [MethodImpl(MethodImplOptions.Synchronized)]
         void ApplyConfig(UserConfig config, XmppServerModel server)
         {
-            Nicknames = (string[]) config["Connection/Nicknames"];
+            if (String.IsNullOrEmpty(server.Nickname)) {
+                Nicknames = (string[]) config["Connection/Nicknames"];
+            } else {
+                Nicknames = new string[] { server.Nickname };
+            }
 
             if (server.Username.Contains("@")) {
                 var jid_user = server.Username.Split('@')[0];
diff --git a/src/Engine/Config/Config.cs b/src/Engine/Config/Config.cs
index b02f6dd..4ab2a86 100644
--- a/src/Engine/Config/Config.cs
+++ b/src/Engine/Config/Config.cs
@@ -1,13 +1,7 @@
 /*
- * $Id$
- * $URL$
- * $Rev$
- * $Author$
- * $Date$
- *
  * Smuxi - Smart MUltipleXed Irc
  *
- * Copyright (c) 2005-2006 Mirco Bauer <meebey meebey net>
+ * Copyright (c) 2005-2014 Mirco Bauer <meebey meebey net>
  *
  * Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
  *
@@ -325,6 +319,8 @@ namespace Smuxi.Engine
             Get(prefix + "Hostname", "irc.oftc.net");
             Get(prefix + "Port", 6667);
             Get(prefix + "Network", "OFTC");
+            Get(prefix + "Nickname", String.Empty);
+            Get(prefix + "Realname", String.Empty);
             Get(prefix + "Username", String.Empty);
             Get(prefix + "Password", String.Empty);
             Get(prefix + "UseEncryption", false);
@@ -340,6 +336,8 @@ namespace Smuxi.Engine
             Get(prefix + "Hostname", "irc.gimp.org");
             Get(prefix + "Port", 6667);
             Get(prefix + "Network", "GIMPNet");
+            Get(prefix + "Nickname", String.Empty);
+            Get(prefix + "Realname", String.Empty);
             Get(prefix + "Username", String.Empty);
             Get(prefix + "Password", String.Empty);
             Get(prefix + "UseEncryption", false);
@@ -349,6 +347,8 @@ namespace Smuxi.Engine
             Get(prefix + "Hostname", "irc.geekshed.net");
             Get(prefix + "Port", 6667);
             Get(prefix + "Network", "GeekShed");
+            Get(prefix + "Nickname", String.Empty);
+            Get(prefix + "Realname", String.Empty);
             Get(prefix + "Username", String.Empty);
             Get(prefix + "Password", String.Empty);
             Get(prefix + "UseEncryption", false);
@@ -358,6 +358,8 @@ namespace Smuxi.Engine
             Get(prefix + "Hostname", "irc.efnet.org");
             Get(prefix + "Port", 6667);
             Get(prefix + "Network", "EFnet");
+            Get(prefix + "Nickname", String.Empty);
+            Get(prefix + "Realname", String.Empty);
             Get(prefix + "Username", String.Empty);
             Get(prefix + "Password", String.Empty);
             Get(prefix + "UseEncryption", false);
@@ -367,6 +369,8 @@ namespace Smuxi.Engine
             Get(prefix + "Hostname", "irc.ircnet.org");
             Get(prefix + "Port", 6667);
             Get(prefix + "Network", "IRCnet");
+            Get(prefix + "Nickname", String.Empty);
+            Get(prefix + "Realname", String.Empty);
             Get(prefix + "Username", String.Empty);
             Get(prefix + "Password", String.Empty);
             Get(prefix + "UseEncryption", false);
@@ -376,6 +380,8 @@ namespace Smuxi.Engine
             Get(prefix + "Hostname", "irc.freenode.net");
             Get(prefix + "Port", 6667);
             Get(prefix + "Network", "freenode");
+            Get(prefix + "Nickname", String.Empty);
+            Get(prefix + "Realname", String.Empty);
             Get(prefix + "Username", String.Empty);
             Get(prefix + "Password", String.Empty);
             Get(prefix + "UseEncryption", false);
@@ -446,7 +452,7 @@ namespace Smuxi.Engine
 #endif
                 }
                 if (String.IsNullOrEmpty(realname)) {
-                    realname = "http://www.smuxi.org/";;
+                    realname = "Your Name";
                 }
                 LoadUserEntry(user, "Connection/Realname", realname);
                 LoadUserEntry(user, "Connection/Encoding", String.Empty);
@@ -545,6 +551,10 @@ namespace Smuxi.Engine
                                       Get(dprefix + server + "/Encoding", null));
                             LoadEntry(sprefix + server + "/AutoConvertUTF8",
                                       Get(dprefix + server + "/AutoConvertUTF8", null));
+                            LoadEntry(sprefix + server + "/Nickname",
+                                      Get(dprefix + server + "/Nickname", null));
+                            LoadEntry(sprefix + server + "/Realname",
+                                      Get(dprefix + server + "/Realname", null));
                             LoadEntry(sprefix + server + "/Username",
                                       Get(dprefix + server + "/Username", null));
                             LoadEntry(sprefix + server + "/Password",
@@ -571,6 +581,8 @@ namespace Smuxi.Engine
                     LoadEntry(sprefix+"Network", String.Empty);
                     LoadEntry(sprefix+"Encoding", null);
                     LoadEntry(sprefix+"AutoConvertUTF8", null);
+                    LoadEntry(sprefix+"Nickname", String.Empty);
+                    LoadEntry(sprefix+"Realname", String.Empty);
                     LoadEntry(sprefix+"Username", String.Empty);
                     LoadEntry(sprefix+"Password", String.Empty);
                     LoadEntry(sprefix+"UseEncryption", false);
diff --git a/src/Engine/Config/ServerModel.cs b/src/Engine/Config/ServerModel.cs
index d8994b5..ca1d9c1 100644
--- a/src/Engine/Config/ServerModel.cs
+++ b/src/Engine/Config/ServerModel.cs
@@ -1,7 +1,7 @@
 /*
  * Smuxi - Smart MUltipleXed Irc
  *
- * Copyright (c) 2007, 2010 Mirco Bauer <meebey meebey net>
+ * Copyright (c) 2007, 2010, 2012-2014 Mirco Bauer <meebey meebey net>
  *
  * Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
  *
@@ -36,6 +36,8 @@ namespace Smuxi.Engine
         public string Hostname { get; set; }
         public int Port { get; set; }
         public string Network { get; set; }
+        public string Nickname { get; set; }
+        public string Realname { get; set; }
         public string Username { get; set; }
         public string Password { get; set; }
         public bool OnStartupConnect { get; set; }
@@ -77,6 +79,12 @@ namespace Smuxi.Engine
                         ServerID = (string)e.Value;
                         foundServerID = true;
                         break;
+                    case "_Username":
+                        Username = (string) e.Value;
+                        break;
+                    case "_Realname":
+                        Realname = (string) e.Value;
+                        break;
                     // UseEncryption and ValidateServerCertificate were forgotten
                     // when moving from autoserialization to manual serialization.
                     // To prevent crashes when git users' updated engines receive a ServerModel
@@ -115,6 +123,12 @@ namespace Smuxi.Engine
             if (ServerID != null) {
                 info.AddValue("_ServerID", ServerID);
             }
+            if (Nickname != null) {
+                info.AddValue("_Nickname", Nickname);
+            }
+            if (Realname != null) {
+                info.AddValue("_Realname", Realname);
+            }
             info.AddValue("_Protocol", Protocol);
             info.AddValue("_Hostname", Hostname);
             info.AddValue("_Port", Port);
@@ -151,6 +165,8 @@ namespace Smuxi.Engine
             Hostname    = (string) config[ConfigKeyPrefix + "Hostname"];
             Port        = (int)    config[ConfigKeyPrefix + "Port"];
             Network     = (string) config[ConfigKeyPrefix + "Network"];
+            Nickname = (string) config[ConfigKeyPrefix + "Nickname"];
+            Realname = (string) config[ConfigKeyPrefix + "Realname"];
             Username    = (string) config[ConfigKeyPrefix + "Username"];
             Password    = (string) config[ConfigKeyPrefix + "Password"];
             UseEncryption = (bool) config[ConfigKeyPrefix + "UseEncryption"];
@@ -170,6 +186,8 @@ namespace Smuxi.Engine
             config[ConfigKeyPrefix + "Hostname"] = Hostname;
             config[ConfigKeyPrefix + "Port"]     = Port;
             config[ConfigKeyPrefix + "Network"]  = Network;
+            config[ConfigKeyPrefix + "Nickname"]  = Nickname;
+            config[ConfigKeyPrefix + "Realname"]  = Realname;
             config[ConfigKeyPrefix + "Username"] = Username;
             config[ConfigKeyPrefix + "Password"] = Password;
             config[ConfigKeyPrefix + "UseEncryption"] = UseEncryption;
diff --git a/src/Frontend-GNOME/Views/MenuWidget.cs b/src/Frontend-GNOME/Views/MenuWidget.cs
index 1e6106d..e40bf66 100644
--- a/src/Frontend-GNOME/Views/MenuWidget.cs
+++ b/src/Frontend-GNOME/Views/MenuWidget.cs
@@ -1,6 +1,6 @@
 // Smuxi - Smart MUltipleXed Irc
 //
-// Copyright (c) 2012 Mirco Bauer <meebey meebey net>
+// Copyright (c) 2012-2014 Mirco Bauer <meebey meebey net>
 //
 // Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
 //
@@ -225,6 +225,8 @@ namespace Smuxi.Frontend.Gnome
                             // which we skip by setting this to null, see:
                             // ServerModel.GetObjectData()
                             server.ServerID = null;
+                            server.Nickname = null;
+                            server.Realname = null;
                         }
                         Frontend.Session.Connect(server, Frontend.FrontendManager);
                     } catch (Exception ex) {
diff --git a/src/Frontend-GNOME/Views/ServerWidget.cs b/src/Frontend-GNOME/Views/ServerWidget.cs
index 37e78ca..b464a97 100644
--- a/src/Frontend-GNOME/Views/ServerWidget.cs
+++ b/src/Frontend-GNOME/Views/ServerWidget.cs
@@ -1,6 +1,6 @@
 // Smuxi - Smart MUltipleXed Irc
 // 
-// Copyright (c) 2010-2013 Mirco Bauer <meebey meebey net>
+// Copyright (c) 2010-2014 Mirco Bauer <meebey meebey net>
 // 
 // Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
 // 
@@ -72,6 +72,18 @@ namespace Smuxi.Frontend.Gnome
             }
         }
 
+        public Gtk.Entry NicknameEntry {
+            get {
+                return f_NicknameEntry;
+            }
+        }
+
+        public Gtk.Entry RealnameEntry {
+            get {
+                return f_RealnameEntry;
+            }
+        }
+
         public Gtk.CheckButton OnStartupConnectCheckButton {
             get {
                 return f_OnStartupConnectCheckButton;
@@ -94,7 +106,29 @@ namespace Smuxi.Frontend.Gnome
             }
         }
 
-        public bool ShowPassword {
+        public bool ShowNickname {
+            set {
+                // Smuxi < 0.11 does not support server specific nickname
+                if (Frontend.EngineVersion < new Version(0, 11)) {
+                    value = false;
+                }
+                f_NicknameLabel.Visible = value;
+                f_NicknameEntry.Visible = value;
+            }
+        }
+
+        public bool ShowRealname {
+            set {
+                // Smuxi < 0.11 does not support server specific realname
+                if (Frontend.EngineVersion < new Version(0, 11)) {
+                    value = false;
+                }
+                f_RealnameLabel.Visible = value;
+                f_RealnameEntry.Visible = value;
+            }
+        }
+
+       public bool ShowPassword {
             set {
                 f_PasswordLabel.Visible = value;
                 f_PasswordEntry.Visible = value;
@@ -135,6 +169,18 @@ namespace Smuxi.Frontend.Gnome
             ServerID = server.ServerID;
             f_HostnameEntry.Text = server.Hostname;
             f_NetworkComboBoxEntry.Entry.Text = server.Network;
+            if (String.IsNullOrEmpty(server.Nickname)) {
+                var defaultNicknames = (string[]) Frontend.UserConfig["Connection/Nicknames"];
+                f_NicknameEntry.Text = String.Join(" ", defaultNicknames);
+            } else {
+                f_NicknameEntry.Text = server.Nickname;
+            }
+            if (String.IsNullOrEmpty(server.Realname)) {
+                var defaultRealname = (string) Frontend.UserConfig["Connection/Realname"];
+                f_RealnameEntry.Text = defaultRealname;
+            } else {
+                f_RealnameEntry.Text = server.Realname;
+            }
             f_UsernameEntry.Text = server.Username;
             // HACK: Twitter username is part of the PKEY, not allowed to change
             if (server.Protocol == "Twitter") {
@@ -173,6 +219,8 @@ namespace Smuxi.Frontend.Gnome
                 server.Hostname = server.Username;
             }
             server.Password = f_PasswordEntry.Text;
+            server.Nickname = f_NicknameEntry.Text.Trim();
+            server.Realname = f_RealnameEntry.Text.Trim();
             server.UseEncryption = f_UseEncryptionCheckButton.Active;
             server.ValidateServerCertificate =
                 f_ValidateServerCertificateCheckButton.Active;
@@ -247,6 +295,11 @@ namespace Smuxi.Frontend.Gnome
             f_UseEncryptionCheckButton.Clicked += delegate {
                 CheckUseEncryptionCheckButton();
             };
+
+            var defaultNicknames = (string[]) Frontend.UserConfig["Connection/Nicknames"];
+            f_NicknameEntry.Text = String.Join(" ", defaultNicknames);
+            var defaultRealname = (string) Frontend.UserConfig["Connection/Realname"];
+            f_RealnameEntry.Text = defaultRealname;
         }
 
         protected virtual void CheckIgnoreOnConnectCommandsCheckButton()
@@ -301,6 +354,8 @@ namespace Smuxi.Frontend.Gnome
                 case "IRC":
                     ShowHostname = true;
                     ShowNetwork = true;
+                    ShowNickname = true;
+                    ShowRealname = true;
                     ShowPassword = true;
                     SupportUseEncryption = true;
 
@@ -313,6 +368,8 @@ namespace Smuxi.Frontend.Gnome
                 case "Facebook":
                     ShowHostname = false;
                     ShowNetwork = false;
+                    ShowNickname = false;
+                    ShowRealname = false;
                     ShowPassword = true;
                     SupportUseEncryption = true;
                     f_HostnameEntry.Text = "chat.facebook.com";
@@ -321,6 +378,8 @@ namespace Smuxi.Frontend.Gnome
                 case "XMPP":
                     ShowHostname = true;
                     ShowNetwork = false;
+                    ShowNickname = false;
+                    ShowRealname = false;
                     ShowPassword = true;
                     SupportUseEncryption = true;
                 
@@ -337,6 +396,8 @@ namespace Smuxi.Frontend.Gnome
                 case "MSNP":
                     ShowHostname = false;
                     ShowNetwork = false;
+                    ShowNickname = false;
+                    ShowRealname = false;
                     ShowPassword = true;
                     SupportUseEncryption = false;
 
@@ -351,6 +412,8 @@ namespace Smuxi.Frontend.Gnome
                 case "Twitter":
                     ShowHostname = false;
                     ShowNetwork = false;
+                    ShowNickname = false;
+                    ShowRealname = false;
                     ShowPassword = false;
                     SupportUseEncryption = true;
                     // engine always uses https
@@ -366,6 +429,8 @@ namespace Smuxi.Frontend.Gnome
                 case "Campfire":
                     ShowHostname = true;
                     ShowNetwork = false;
+                    ShowNickname = false;
+                    ShowRealname = false;
                     ShowPassword = true;
                     SupportUseEncryption = true;
                     // engine always uses https
@@ -382,6 +447,8 @@ namespace Smuxi.Frontend.Gnome
                 case "JabbR":
                     ShowHostname = true;
                     ShowNetwork = false;
+                    ShowNickname = false;
+                    ShowRealname = false;
                     ShowPassword = true;
                     SupportUseEncryption = true;
 
@@ -398,6 +465,8 @@ namespace Smuxi.Frontend.Gnome
                 default:
                     ShowHostname = true;
                     ShowNetwork = true;
+                    ShowNickname = true;
+                    ShowRealname = true;
                     ShowPassword = true;
                     SupportUseEncryption = true;
 
diff --git a/src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.ServerWidget.cs 
b/src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.ServerWidget.cs
index 887016f..af5cdd5 100644
--- a/src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.ServerWidget.cs
+++ b/src/Frontend-GNOME/gtk-gui/Smuxi.Frontend.Gnome.ServerWidget.cs
@@ -9,8 +9,12 @@ namespace Smuxi.Frontend.Gnome
                private global::Gtk.Label f_HostnameLabel;
                private global::Gtk.ComboBoxEntry f_NetworkComboBoxEntry;
                private global::Gtk.Label f_NetworkLabel;
+               private global::Gtk.Entry f_NicknameEntry;
+               private global::Gtk.Label f_NicknameLabel;
                private global::Gtk.Label f_PasswordLabel;
                private global::Gtk.ComboBox f_ProtocolComboBox;
+               private global::Gtk.Entry f_RealnameEntry;
+               private global::Gtk.Label f_RealnameLabel;
                private global::Gtk.Entry f_UsernameEntry;
                private global::Gtk.HBox hbox10;
                private global::Gtk.Entry f_HostnameEntry;
@@ -31,7 +35,7 @@ namespace Smuxi.Frontend.Gnome
                private global::Gtk.CheckButton f_IgnoreOnConnectCommandsCheckButton;
                private global::Gtk.ScrolledWindow scrolledwindow1;
                private global::Gtk.TextView f_OnConnectCommandsTextView;
-        
+
                protected virtual void Build ()
                {
                        global::Stetic.Gui.Initialize (this);
@@ -43,7 +47,7 @@ namespace Smuxi.Frontend.Gnome
                        this.vbox16.Name = "vbox16";
                        this.vbox16.Spacing = 5;
                        // Container child vbox16.Gtk.Box+BoxChild
-                       this.table2 = new global::Gtk.Table (((uint)(5)), ((uint)(2)), false);
+                       this.table2 = new global::Gtk.Table (((uint)(7)), ((uint)(2)), false);
                        this.table2.Name = "table2";
                        this.table2.RowSpacing = ((uint)(5));
                        this.table2.ColumnSpacing = ((uint)(5));
@@ -81,33 +85,83 @@ namespace Smuxi.Frontend.Gnome
                        w3.XOptions = ((global::Gtk.AttachOptions)(4));
                        w3.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
+                       this.f_NicknameEntry = new global::Gtk.Entry ();
+                       this.f_NicknameEntry.CanFocus = true;
+                       this.f_NicknameEntry.Name = "f_NicknameEntry";
+                       this.f_NicknameEntry.IsEditable = true;
+                       this.f_NicknameEntry.InvisibleChar = '●';
+                       this.table2.Add (this.f_NicknameEntry);
+                       global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.table2 
[this.f_NicknameEntry]));
+                       w4.TopAttach = ((uint)(3));
+                       w4.BottomAttach = ((uint)(4));
+                       w4.LeftAttach = ((uint)(1));
+                       w4.RightAttach = ((uint)(2));
+                       w4.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w4.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child table2.Gtk.Table+TableChild
+                       this.f_NicknameLabel = new global::Gtk.Label ();
+                       this.f_NicknameLabel.Name = "f_NicknameLabel";
+                       this.f_NicknameLabel.Xalign = 0F;
+                       this.f_NicknameLabel.LabelProp = global::Mono.Unix.Catalog.GetString ("Nickname:");
+                       this.table2.Add (this.f_NicknameLabel);
+                       global::Gtk.Table.TableChild w5 = ((global::Gtk.Table.TableChild)(this.table2 
[this.f_NicknameLabel]));
+                       w5.TopAttach = ((uint)(3));
+                       w5.BottomAttach = ((uint)(4));
+                       w5.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w5.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child table2.Gtk.Table+TableChild
                        this.f_PasswordLabel = new global::Gtk.Label ();
                        this.f_PasswordLabel.Name = "f_PasswordLabel";
                        this.f_PasswordLabel.Xalign = 0F;
                        this.f_PasswordLabel.LabelProp = global::Mono.Unix.Catalog.GetString ("_Password:");
                        this.f_PasswordLabel.UseUnderline = true;
                        this.table2.Add (this.f_PasswordLabel);
-                       global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.table2 
[this.f_PasswordLabel]));
-                       w4.TopAttach = ((uint)(4));
-                       w4.BottomAttach = ((uint)(5));
+                       global::Gtk.Table.TableChild w6 = ((global::Gtk.Table.TableChild)(this.table2 
[this.f_PasswordLabel]));
+                       w6.TopAttach = ((uint)(6));
+                       w6.BottomAttach = ((uint)(7));
                        // Container child table2.Gtk.Table+TableChild
                        this.f_ProtocolComboBox = new global::Gtk.ComboBox ();
                        this.f_ProtocolComboBox.Name = "f_ProtocolComboBox";
                        this.table2.Add (this.f_ProtocolComboBox);
-                       global::Gtk.Table.TableChild w5 = ((global::Gtk.Table.TableChild)(this.table2 
[this.f_ProtocolComboBox]));
-                       w5.LeftAttach = ((uint)(1));
-                       w5.RightAttach = ((uint)(2));
+                       global::Gtk.Table.TableChild w7 = ((global::Gtk.Table.TableChild)(this.table2 
[this.f_ProtocolComboBox]));
+                       w7.LeftAttach = ((uint)(1));
+                       w7.RightAttach = ((uint)(2));
+                       // Container child table2.Gtk.Table+TableChild
+                       this.f_RealnameEntry = new global::Gtk.Entry ();
+                       this.f_RealnameEntry.CanFocus = true;
+                       this.f_RealnameEntry.Name = "f_RealnameEntry";
+                       this.f_RealnameEntry.IsEditable = true;
+                       this.f_RealnameEntry.InvisibleChar = '●';
+                       this.table2.Add (this.f_RealnameEntry);
+                       global::Gtk.Table.TableChild w8 = ((global::Gtk.Table.TableChild)(this.table2 
[this.f_RealnameEntry]));
+                       w8.TopAttach = ((uint)(4));
+                       w8.BottomAttach = ((uint)(5));
+                       w8.LeftAttach = ((uint)(1));
+                       w8.RightAttach = ((uint)(2));
+                       w8.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w8.YOptions = ((global::Gtk.AttachOptions)(4));
+                       // Container child table2.Gtk.Table+TableChild
+                       this.f_RealnameLabel = new global::Gtk.Label ();
+                       this.f_RealnameLabel.Name = "f_RealnameLabel";
+                       this.f_RealnameLabel.Xalign = 0F;
+                       this.f_RealnameLabel.LabelProp = global::Mono.Unix.Catalog.GetString ("Realname:");
+                       this.table2.Add (this.f_RealnameLabel);
+                       global::Gtk.Table.TableChild w9 = ((global::Gtk.Table.TableChild)(this.table2 
[this.f_RealnameLabel]));
+                       w9.TopAttach = ((uint)(4));
+                       w9.BottomAttach = ((uint)(5));
+                       w9.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w9.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
                        this.f_UsernameEntry = new global::Gtk.Entry ();
                        this.f_UsernameEntry.Name = "f_UsernameEntry";
                        this.f_UsernameEntry.IsEditable = true;
                        this.f_UsernameEntry.InvisibleChar = '●';
                        this.table2.Add (this.f_UsernameEntry);
-                       global::Gtk.Table.TableChild w6 = ((global::Gtk.Table.TableChild)(this.table2 
[this.f_UsernameEntry]));
-                       w6.TopAttach = ((uint)(3));
-                       w6.BottomAttach = ((uint)(4));
-                       w6.LeftAttach = ((uint)(1));
-                       w6.RightAttach = ((uint)(2));
+                       global::Gtk.Table.TableChild w10 = ((global::Gtk.Table.TableChild)(this.table2 
[this.f_UsernameEntry]));
+                       w10.TopAttach = ((uint)(5));
+                       w10.BottomAttach = ((uint)(6));
+                       w10.LeftAttach = ((uint)(1));
+                       w10.RightAttach = ((uint)(2));
                        // Container child table2.Gtk.Table+TableChild
                        this.hbox10 = new global::Gtk.HBox ();
                        this.hbox10.Name = "hbox10";
@@ -117,8 +171,8 @@ namespace Smuxi.Frontend.Gnome
                        this.f_HostnameEntry.IsEditable = true;
                        this.f_HostnameEntry.InvisibleChar = '●';
                        this.hbox10.Add (this.f_HostnameEntry);
-                       global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hbox10 
[this.f_HostnameEntry]));
-                       w7.Position = 0;
+                       global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.hbox10 
[this.f_HostnameEntry]));
+                       w11.Position = 0;
                        // Container child hbox10.Gtk.Box+BoxChild
                        this.hbox11 = new global::Gtk.HBox ();
                        this.hbox11.Name = "hbox11";
@@ -129,8 +183,8 @@ namespace Smuxi.Frontend.Gnome
                        this.f_PortLabel.LabelProp = global::Mono.Unix.Catalog.GetString ("_Port:");
                        this.f_PortLabel.UseUnderline = true;
                        this.hbox11.Add (this.f_PortLabel);
-                       global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.hbox11 
[this.f_PortLabel]));
-                       w8.Position = 0;
+                       global::Gtk.Box.BoxChild w12 = ((global::Gtk.Box.BoxChild)(this.hbox11 
[this.f_PortLabel]));
+                       w12.Position = 0;
                        // Container child hbox11.Gtk.Box+BoxChild
                        this.f_PortSpinButton = new global::Gtk.SpinButton (0, 65535, 1);
                        this.f_PortSpinButton.Name = "f_PortSpinButton";
@@ -139,17 +193,17 @@ namespace Smuxi.Frontend.Gnome
                        this.f_PortSpinButton.ClimbRate = 1;
                        this.f_PortSpinButton.Numeric = true;
                        this.hbox11.Add (this.f_PortSpinButton);
-                       global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.hbox11 
[this.f_PortSpinButton]));
-                       w9.Position = 1;
+                       global::Gtk.Box.BoxChild w13 = ((global::Gtk.Box.BoxChild)(this.hbox11 
[this.f_PortSpinButton]));
+                       w13.Position = 1;
                        this.hbox10.Add (this.hbox11);
-                       global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.hbox10 
[this.hbox11]));
-                       w10.Position = 1;
+                       global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.hbox10 
[this.hbox11]));
+                       w14.Position = 1;
                        this.table2.Add (this.hbox10);
-                       global::Gtk.Table.TableChild w11 = ((global::Gtk.Table.TableChild)(this.table2 
[this.hbox10]));
-                       w11.TopAttach = ((uint)(1));
-                       w11.BottomAttach = ((uint)(2));
-                       w11.LeftAttach = ((uint)(1));
-                       w11.RightAttach = ((uint)(2));
+                       global::Gtk.Table.TableChild w15 = ((global::Gtk.Table.TableChild)(this.table2 
[this.hbox10]));
+                       w15.TopAttach = ((uint)(1));
+                       w15.BottomAttach = ((uint)(2));
+                       w15.LeftAttach = ((uint)(1));
+                       w15.RightAttach = ((uint)(2));
                        // Container child table2.Gtk.Table+TableChild
                        this.hbox2 = new global::Gtk.HBox ();
                        this.hbox2.Name = "hbox2";
@@ -161,8 +215,8 @@ namespace Smuxi.Frontend.Gnome
                        this.f_PasswordEntry.Visibility = false;
                        this.f_PasswordEntry.InvisibleChar = '●';
                        this.hbox2.Add (this.f_PasswordEntry);
-                       global::Gtk.Box.BoxChild w12 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.f_PasswordEntry]));
-                       w12.Position = 0;
+                       global::Gtk.Box.BoxChild w16 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.f_PasswordEntry]));
+                       w16.Position = 0;
                        // Container child hbox2.Gtk.Box+BoxChild
                        this.f_ShowPasswordCheckButton = new global::Gtk.CheckButton ();
                        this.f_ShowPasswordCheckButton.CanFocus = true;
@@ -171,16 +225,16 @@ namespace Smuxi.Frontend.Gnome
                        this.f_ShowPasswordCheckButton.DrawIndicator = true;
                        this.f_ShowPasswordCheckButton.UseUnderline = true;
                        this.hbox2.Add (this.f_ShowPasswordCheckButton);
-                       global::Gtk.Box.BoxChild w13 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.f_ShowPasswordCheckButton]));
-                       w13.Position = 1;
+                       global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.hbox2 
[this.f_ShowPasswordCheckButton]));
+                       w17.Position = 1;
                        this.table2.Add (this.hbox2);
-                       global::Gtk.Table.TableChild w14 = ((global::Gtk.Table.TableChild)(this.table2 
[this.hbox2]));
-                       w14.TopAttach = ((uint)(4));
-                       w14.BottomAttach = ((uint)(5));
-                       w14.LeftAttach = ((uint)(1));
-                       w14.RightAttach = ((uint)(2));
-                       w14.XOptions = ((global::Gtk.AttachOptions)(4));
-                       w14.YOptions = ((global::Gtk.AttachOptions)(4));
+                       global::Gtk.Table.TableChild w18 = ((global::Gtk.Table.TableChild)(this.table2 
[this.hbox2]));
+                       w18.TopAttach = ((uint)(6));
+                       w18.BottomAttach = ((uint)(7));
+                       w18.LeftAttach = ((uint)(1));
+                       w18.RightAttach = ((uint)(2));
+                       w18.XOptions = ((global::Gtk.AttachOptions)(4));
+                       w18.YOptions = ((global::Gtk.AttachOptions)(4));
                        // Container child table2.Gtk.Table+TableChild
                        this.label21 = new global::Gtk.Label ();
                        this.label21.Name = "label21";
@@ -188,9 +242,9 @@ namespace Smuxi.Frontend.Gnome
                        this.label21.LabelProp = global::Mono.Unix.Catalog.GetString ("_Username:");
                        this.label21.UseUnderline = true;
                        this.table2.Add (this.label21);
-                       global::Gtk.Table.TableChild w15 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label21]));
-                       w15.TopAttach = ((uint)(3));
-                       w15.BottomAttach = ((uint)(4));
+                       global::Gtk.Table.TableChild w19 = ((global::Gtk.Table.TableChild)(this.table2 
[this.label21]));
+                       w19.TopAttach = ((uint)(5));
+                       w19.BottomAttach = ((uint)(6));
                        // Container child table2.Gtk.Table+TableChild
                        this.label5 = new global::Gtk.Label ();
                        this.label5.Name = "label5";
@@ -199,9 +253,9 @@ namespace Smuxi.Frontend.Gnome
                        this.label5.UseUnderline = true;
                        this.table2.Add (this.label5);
                        this.vbox16.Add (this.table2);
-                       global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.vbox16 
[this.table2]));
-                       w17.Position = 0;
-                       w17.Expand = false;
+                       global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.vbox16 
[this.table2]));
+                       w21.Position = 0;
+                       w21.Expand = false;
                        // Container child vbox16.Gtk.Box+BoxChild
                        this.f_OnStartupConnectCheckButton = new global::Gtk.CheckButton ();
                        this.f_OnStartupConnectCheckButton.CanFocus = true;
@@ -211,10 +265,10 @@ namespace Smuxi.Frontend.Gnome
                        this.f_OnStartupConnectCheckButton.UseUnderline = true;
                        this.f_OnStartupConnectCheckButton.Xalign = 0F;
                        this.vbox16.Add (this.f_OnStartupConnectCheckButton);
-                       global::Gtk.Box.BoxChild w18 = ((global::Gtk.Box.BoxChild)(this.vbox16 
[this.f_OnStartupConnectCheckButton]));
-                       w18.Position = 1;
-                       w18.Expand = false;
-                       w18.Fill = false;
+                       global::Gtk.Box.BoxChild w22 = ((global::Gtk.Box.BoxChild)(this.vbox16 
[this.f_OnStartupConnectCheckButton]));
+                       w22.Position = 1;
+                       w22.Expand = false;
+                       w22.Fill = false;
                        // Container child vbox16.Gtk.Box+BoxChild
                        this.f_UseEncryptionCheckButton = new global::Gtk.CheckButton ();
                        this.f_UseEncryptionCheckButton.CanFocus = true;
@@ -223,10 +277,10 @@ namespace Smuxi.Frontend.Gnome
                        this.f_UseEncryptionCheckButton.DrawIndicator = true;
                        this.f_UseEncryptionCheckButton.UseUnderline = true;
                        this.vbox16.Add (this.f_UseEncryptionCheckButton);
-                       global::Gtk.Box.BoxChild w19 = ((global::Gtk.Box.BoxChild)(this.vbox16 
[this.f_UseEncryptionCheckButton]));
-                       w19.Position = 2;
-                       w19.Expand = false;
-                       w19.Fill = false;
+                       global::Gtk.Box.BoxChild w23 = ((global::Gtk.Box.BoxChild)(this.vbox16 
[this.f_UseEncryptionCheckButton]));
+                       w23.Position = 2;
+                       w23.Expand = false;
+                       w23.Fill = false;
                        // Container child vbox16.Gtk.Box+BoxChild
                        this.f_ValidateServerCertificateCheckButton = new global::Gtk.CheckButton ();
                        this.f_ValidateServerCertificateCheckButton.CanFocus = true;
@@ -235,10 +289,10 @@ namespace Smuxi.Frontend.Gnome
                        this.f_ValidateServerCertificateCheckButton.DrawIndicator = true;
                        this.f_ValidateServerCertificateCheckButton.UseUnderline = true;
                        this.vbox16.Add (this.f_ValidateServerCertificateCheckButton);
-                       global::Gtk.Box.BoxChild w20 = ((global::Gtk.Box.BoxChild)(this.vbox16 
[this.f_ValidateServerCertificateCheckButton]));
-                       w20.Position = 3;
-                       w20.Expand = false;
-                       w20.Fill = false;
+                       global::Gtk.Box.BoxChild w24 = ((global::Gtk.Box.BoxChild)(this.vbox16 
[this.f_ValidateServerCertificateCheckButton]));
+                       w24.Position = 3;
+                       w24.Expand = false;
+                       w24.Fill = false;
                        // Container child vbox16.Gtk.Box+BoxChild
                        this.vbox2 = new global::Gtk.VBox ();
                        this.vbox2.Name = "vbox2";
@@ -254,10 +308,10 @@ namespace Smuxi.Frontend.Gnome
                        this.label37.LabelProp = global::Mono.Unix.Catalog.GetString ("_On Connect 
Commands:");
                        this.label37.UseUnderline = true;
                        this.hbox3.Add (this.label37);
-                       global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.label37]));
-                       w21.Position = 0;
-                       w21.Expand = false;
-                       w21.Fill = false;
+                       global::Gtk.Box.BoxChild w25 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.label37]));
+                       w25.Position = 0;
+                       w25.Expand = false;
+                       w25.Fill = false;
                        // Container child hbox3.Gtk.Box+BoxChild
                        this.f_IgnoreOnConnectCommandsCheckButton = new global::Gtk.CheckButton ();
                        this.f_IgnoreOnConnectCommandsCheckButton.CanFocus = true;
@@ -266,13 +320,13 @@ namespace Smuxi.Frontend.Gnome
                        this.f_IgnoreOnConnectCommandsCheckButton.DrawIndicator = true;
                        this.f_IgnoreOnConnectCommandsCheckButton.UseUnderline = true;
                        this.hbox3.Add (this.f_IgnoreOnConnectCommandsCheckButton);
-                       global::Gtk.Box.BoxChild w22 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.f_IgnoreOnConnectCommandsCheckButton]));
-                       w22.Position = 1;
+                       global::Gtk.Box.BoxChild w26 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.f_IgnoreOnConnectCommandsCheckButton]));
+                       w26.Position = 1;
                        this.vbox2.Add (this.hbox3);
-                       global::Gtk.Box.BoxChild w23 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox3]));
-                       w23.Position = 0;
-                       w23.Expand = false;
-                       w23.Fill = false;
+                       global::Gtk.Box.BoxChild w27 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox3]));
+                       w27.Position = 0;
+                       w27.Expand = false;
+                       w27.Fill = false;
                        // Container child vbox2.Gtk.Box+BoxChild
                        this.scrolledwindow1 = new global::Gtk.ScrolledWindow ();
                        this.scrolledwindow1.WidthRequest = 350;
@@ -287,18 +341,20 @@ namespace Smuxi.Frontend.Gnome
                        this.f_OnConnectCommandsTextView.WrapMode = ((global::Gtk.WrapMode)(2));
                        this.scrolledwindow1.Add (this.f_OnConnectCommandsTextView);
                        this.vbox2.Add (this.scrolledwindow1);
-                       global::Gtk.Box.BoxChild w25 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.scrolledwindow1]));
-                       w25.Position = 1;
+                       global::Gtk.Box.BoxChild w29 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.scrolledwindow1]));
+                       w29.Position = 1;
                        this.vbox16.Add (this.vbox2);
-                       global::Gtk.Box.BoxChild w26 = ((global::Gtk.Box.BoxChild)(this.vbox16 [this.vbox2]));
-                       w26.Position = 4;
+                       global::Gtk.Box.BoxChild w30 = ((global::Gtk.Box.BoxChild)(this.vbox16 [this.vbox2]));
+                       w30.Position = 4;
                        this.Add (this.vbox16);
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
                        }
                        this.f_HostnameLabel.MnemonicWidget = this.f_HostnameEntry;
                        this.f_NetworkLabel.MnemonicWidget = this.f_NetworkComboBoxEntry;
+                       this.f_NicknameLabel.MnemonicWidget = this.f_NicknameEntry;
                        this.f_PasswordLabel.MnemonicWidget = this.f_PasswordEntry;
+                       this.f_RealnameLabel.MnemonicWidget = this.f_RealnameEntry;
                        this.f_PortLabel.MnemonicWidget = this.f_PortSpinButton;
                        this.label21.MnemonicWidget = this.f_UsernameEntry;
                        this.label5.MnemonicWidget = this.f_ProtocolComboBox;
diff --git a/src/Frontend-GNOME/gtk-gui/gui.stetic b/src/Frontend-GNOME/gtk-gui/gui.stetic
index ecb1367..837beed 100644
--- a/src/Frontend-GNOME/gtk-gui/gui.stetic
+++ b/src/Frontend-GNOME/gtk-gui/gui.stetic
@@ -3772,7 +3772,7 @@ Click "Forward" to begin.</property>
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="Smuxi.Frontend.Gnome.ServerWidget" design-size="380 374">
+  <widget class="Gtk.Bin" id="Smuxi.Frontend.Gnome.ServerWidget" design-size="380 466">
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
@@ -3782,7 +3782,7 @@ Click "Forward" to begin.</property>
         <child>
           <widget class="Gtk.Table" id="table2">
             <property name="MemberName" />
-            <property name="NRows">5</property>
+            <property name="NRows">7</property>
             <property name="NColumns">2</property>
             <property name="RowSpacing">5</property>
             <property name="ColumnSpacing">5</property>
@@ -3851,6 +3851,50 @@ Click "Forward" to begin.</property>
               </packing>
             </child>
             <child>
+              <widget class="Gtk.Entry" id="f_NicknameEntry">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="IsEditable">True</property>
+                <property name="InvisibleChar">●</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">3</property>
+                <property name="BottomAttach">4</property>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="f_NicknameLabel">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">Nickname:</property>
+                <property name="MnemonicWidget">f_NicknameEntry</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">3</property>
+                <property name="BottomAttach">4</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
               <widget class="Gtk.Label" id="f_PasswordLabel">
                 <property name="MemberName" />
                 <property name="Xalign">0</property>
@@ -3859,8 +3903,8 @@ Click "Forward" to begin.</property>
                 <property name="MnemonicWidget">f_PasswordEntry</property>
               </widget>
               <packing>
-                <property name="TopAttach">4</property>
-                <property name="BottomAttach">5</property>
+                <property name="TopAttach">6</property>
+                <property name="BottomAttach">7</property>
                 <property name="AutoSize">False</property>
                 <property name="XExpand">True</property>
                 <property name="XFill">True</property>
@@ -3889,14 +3933,58 @@ Click "Forward" to begin.</property>
               </packing>
             </child>
             <child>
+              <widget class="Gtk.Entry" id="f_RealnameEntry">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="IsEditable">True</property>
+                <property name="InvisibleChar">●</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">4</property>
+                <property name="BottomAttach">5</property>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="f_RealnameLabel">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">Realname:</property>
+                <property name="MnemonicWidget">f_RealnameEntry</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">4</property>
+                <property name="BottomAttach">5</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
               <widget class="Gtk.Entry" id="f_UsernameEntry">
                 <property name="MemberName" />
                 <property name="IsEditable">True</property>
                 <property name="InvisibleChar">●</property>
               </widget>
               <packing>
-                <property name="TopAttach">3</property>
-                <property name="BottomAttach">4</property>
+                <property name="TopAttach">5</property>
+                <property name="BottomAttach">6</property>
                 <property name="LeftAttach">1</property>
                 <property name="RightAttach">2</property>
                 <property name="AutoSize">False</property>
@@ -4006,8 +4094,8 @@ Click "Forward" to begin.</property>
                 </child>
               </widget>
               <packing>
-                <property name="TopAttach">4</property>
-                <property name="BottomAttach">5</property>
+                <property name="TopAttach">6</property>
+                <property name="BottomAttach">7</property>
                 <property name="LeftAttach">1</property>
                 <property name="RightAttach">2</property>
                 <property name="AutoSize">True</property>
@@ -4030,8 +4118,8 @@ Click "Forward" to begin.</property>
                 <property name="MnemonicWidget">f_UsernameEntry</property>
               </widget>
               <packing>
-                <property name="TopAttach">3</property>
-                <property name="BottomAttach">4</property>
+                <property name="TopAttach">5</property>
+                <property name="BottomAttach">6</property>
                 <property name="AutoSize">False</property>
                 <property name="XExpand">True</property>
                 <property name="XFill">True</property>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]