diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2014-11-02 20:40:40 +0100 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2014-11-02 20:40:40 +0100 |
commit | 8e2d33d3a5d17531a36e629bcf4c0bc36cbf1cfe (patch) | |
tree | 5def29ecbadc8873d62ebea6badc27c99b874bfe /src/email-autocompleter.vala | |
download | arctica-greeter-8e2d33d3a5d17531a36e629bcf4c0bc36cbf1cfe.tar.gz arctica-greeter-8e2d33d3a5d17531a36e629bcf4c0bc36cbf1cfe.tar.bz2 arctica-greeter-8e2d33d3a5d17531a36e629bcf4c0bc36cbf1cfe.zip |
Imported Upstream version 14.04.10
Diffstat (limited to 'src/email-autocompleter.vala')
-rw-r--r-- | src/email-autocompleter.vala | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/email-autocompleter.vala b/src/email-autocompleter.vala new file mode 100644 index 0000000..d11fb30 --- /dev/null +++ b/src/email-autocompleter.vala @@ -0,0 +1,79 @@ +/* -*- Mode: Vala; indent-tabs-mode: nil; tab-width: 4 -*- + * + * Copyright (C) 2012 Canonical Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +public class EmailAutocompleter +{ + private Gtk.Entry entry; + private string[] domains; + private string prevText = ""; + + private void entry_changed () + { + if (entry.text.length < prevText.length) + { + /* Do nothing on erases of text */ + prevText = entry.text; + return; + } + + prevText = entry.text; + + int first_at = entry.text.index_of ("@"); + if (first_at != -1) + { + int second_at = entry.text.index_of ("@", first_at + 1); + if (second_at == -1) + { + /* We have exactly one @ */ + string text_after_at = entry.text.slice (first_at + 1, entry.text.length); + + /* Find first prefix match */ + int match = -1; + for (int i = 0; match == -1 && i < domains.length; ++i) + { + if (domains[i].has_prefix (text_after_at)) + match = i; + } + + if (match != -1) + { + /* Calculate the suffix part we need to add */ + var best_match = domains[match]; + var text_to_add = best_match.slice (text_after_at.length, best_match.length); + if (text_to_add.length > 0) + { + entry.text = entry.text + text_to_add; + /* TODO This is quite ugly/hacky :-/ */ + Timeout.add (0, () => + { + entry.select_region (entry.text.length - text_to_add.length, entry.text.length); + return false; + }); + } + } + } + } + } + + public EmailAutocompleter (Gtk.Entry e, string[] email_domains) + { + entry = e; + domains = email_domains; + entry.changed.connect (entry_changed); + } +} |