summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Add missing 8_8_8_8 pixel types to QOpenGLTextureSean Harmer2014-07-242-0/+4
| | | | | | | Task-number: QTBUG-36843 Change-Id: Ief4ab9b00b075abe2e04c6d29c8d1279406b5033 Reviewed-by: Liang Qi <liang.qi@digia.com> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* QSettings: use QSaveFile and QLockFile to write the settingsOlivier Goffart2014-07-241-235/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | The old unix locking code is no longer working on unix since it locks on a file descriptor, but QSaveFile creates a new file, and as a result we get the lock on the wrong file. Also there is no need to keep the lock held only for reading as QSaveFile is atomic. It just needs to be held when doing a read before writing. As a result, since we don't hold the same lock, there could be a race with an application running an older version of Qt if they are writing on the same configuration file. [ChangeLog][QtCore][QSettings] Fixed data loss while writing the config to the disk fails. [ChangeLog][Important behavior changes] The locking mechanism inside QSettings has changed and is no longer compatible with the one of previous versions of Qt. There might be corruption if two applications running different versions of Qt are writing to the same config file at the same time. You must also now have write permissions in the directory containing the settings file in order to write settings Task-number: QTBUG-21739 Change-Id: I0844a5e96c8bc1e1222a3dac6cc48170ca77fe1b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Rewrite QRingBufferAlex Trotsenko2014-07-241-191/+88
| | | | | | | | | QRingBuffer is a fully inlined class used in many I/O classes. So, it must be as fast and small as possible. To this end, a lot of unnecessary special cases were replaced by generic structures. Change-Id: Ic189ced3b200924da158ce511d69d324337d01b6 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Android: fix Switch & CalendarView text appearancesJ-P Nurmi2014-07-241-10/+39
| | | | | | | | | | | | | | | | | This reverts the extractTextAppearanceInformations() changes done in f7ac2b4 and introduces another method extractTextAppearance() for extracting a specific TextAppearance. The problem was that extractTextAppearanceInformations() was overriding the TextAppearance attributes with TextView attributes. This resulted in wrong text colors for Switch & CalendarView: - Switch_switchTextAppearance - CalendarView_dateTextAppearance - CalendarView_weekDayTextAppearance Change-Id: Ib300b6eb14649319b2f07012803a4d031a717b50 Reviewed-by: BogDan Vatra <bogdan@kde.org>
* QFileDialog: emit urlsSelected+urlSelected in accept().David Faure2014-07-243-12/+17
| | | | | | | Not just filesSelected+fileSelected (which only happens for local files). Change-Id: Ife592c3c921231356f96cbc2871b6d724a15d2c8 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* QMainWindow:::restoreDockWidget(): Restore to correct screen.Friedemann Kleint2014-07-241-3/+5
| | | | | | | | | Use the placeholder top level geometry to determine the screen. Task-number: QTBUG-40155 Change-Id: If56b239200e9daf754b0963574367cf7891c5f40 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* Show timing of all executed SQL queriesRobin Burchell2014-07-241-3/+23
| | | | | | | | | This also coincidentally fixes logging of prepared queries, which previously weren't logged. Change-Id: I41b3559080662284699ac3dfa4fa4236342c61d2 Done-by: John Brooks <john.brooks@jollamobile.com> Reviewed-by: Kai Koehne <kai.koehne@digia.com>
* Make QTextStream respect QLocale with OmitGroupSeparatorsThiago Macieira2014-07-241-1/+1
| | | | | | | | | | | | The default in QTextStream is to use the C locale, so default QTextStream are not affected. When you set a QLocale on it, the default was to use group separators (which is the QLocale default too). This commit makes QTextStream respect a QLocale in which the OmitGroupSeparators option had been set. Task-number: QTBUG-39956 Change-Id: I00fbe12fca7f0287c7217deb487ded6582a03b52 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* QInputDialog: simplify signalForMember()Marc Mutz2014-07-231-8/+5
| | | | | | | | | Instead of playing clever tricks with the index variable, simply scan through the list of argument-carrying signals and, if nothing fits there, fall explicitly back to accepted(). Change-Id: I1be49ce601edb854cc1bab5be994b2c09fe31b3c Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* QSettings: use QStandardPaths to get XDG_CONFIG_HOME.David Faure2014-07-231-0/+6
| | | | | | | | | This allows to use the "test mode" of QStandardPaths in unittests, to stay away from the user's real settings. Change-Id: I1cb1f63a4bff35dfe236924c4dcd7cf761ee50c1 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Document that qHash(T) must be in T's namespace, due to ADLThiago Macieira2014-07-231-4/+4
| | | | | | | | | | | | Due to C++'s rule of Argument-Dependent Lookup, a call to an unqualified qHash(t) will look up qHash in T's namespace. So edit the docs saying that it must be "global qHash" to say that it should be in the type's namespace. Task-number: QTBUG-34912 Change-Id: I7a72800008ccb710b4bb814e42db7a95f385f53e Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Don't store QLibraryPrivate with empty file names in the global storeThiago Macieira2014-07-231-2/+2
| | | | | | | | | | | | | | | | They shouldn't exist in the first place. They exist in two cases only: 1) mistake by the user in the QLibrary or QPluginLoader constructors or setFileName 2) as a kludge for setLoadHints before a file name is set (we need to store the user's requested hints somewhere) This is important for the second case, as otherwise all QLibrary and QPluginLoader objects without a file name would share the setting. Task-number: QTBUG-39642 Change-Id: Iebff0252fd4d95a1d54caf338d4e2fff4de3b189 Reviewed-by: David Faure <david.faure@kdab.com>
* Fix a few more race conditions with QLibrary::LoadHintsThiago Macieira2014-07-234-22/+32
| | | | | | | | | | This commit makes replaces the loadHints member with a setter, a getter and an atomic variable. The setter will not set anything if the library has already been loaded. Task-number: QTBUG-39642 Change-Id: Ibb7692f16d80211b52aaf4dc88db1a989738a24d Reviewed-by: David Faure <david.faure@kdab.com>
* Slight doc improvementsFrederik Gladhorn2014-07-231-2/+2
| | | | | | Change-Id: I0c5f7cb7c0673357f13fe4eb1a9f9aba36f6d71e Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* Add accessible roles for web document, paragraph and sectionFrederik Gladhorn2014-07-236-0/+19
| | | | | | | | These roles seem wide-spread enough that it makes sense to add them. QtWebEngine will use them. Change-Id: I9c2d6ab23ada0607078bcd407a72ecae9f87eeea Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Fix accessibility test code to copy events also based on interfacesFrederik Gladhorn2014-07-231-9/+42
| | | | | | | | | | The previous code assumed that all events would have an object sent along with them. QtWebEngine breaks this assumption and the rest of the code is ready for the change, but using QTestAccesssible was not possible due to this. Change-Id: Idee21caf3076fbffd02d5e728f0c9cabf8712408 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Accessibility Linux: send children changed notificationsFrederik Gladhorn2014-07-232-1/+17
| | | | | | | | | The badly named ObjectReorder actually stands for any of this object's children may have changed. This event is used in webengine and should trigger the ATs to drop their caches (eg when loading a new website). Change-Id: I44080f8d43c1161285d9ace4891fe18531f16e09 Reviewed-by: Andras Becsi <andras.becsi@digia.com>
* Support setting a default severity level for QLoggingCategoryKai Koehne2014-07-235-35/+95
| | | | | | | | | | | | | | | | | | | | | | | | | Allow to alter the default configuration for categories by passing a message type: All message types with lower severity are disabled in this category. This is useful for libraries, which shouldn't mess with the category registry itself: Setting rules, a category filter ... might cause conflicts and ordering problems, so this API should be reserved to the specific application. For the Qt categories, we have code in the default category filter that disables the 'debug' category. However, this is hardcoded, and there's no way so far for other libraries to get the same behavior. With this patch one can get the same behavior: Q_LOGGING_CATEGORY(DRIVER_USB_EVENTS, "driver.usb.events", QtWarningMsg); [ChangeLog][QtCore][Logging] Added QtMsgType argument to QLoggingCategory constructor and Q_LOGGING_CATEGORY macro that controls the default category configuration. Change-Id: Ib2902f755f9f7285d79888ec30e8f3cef95ae628 Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
* QInputDialog: use a switch instead of a string pointer tableMarc Mutz2014-07-231-10/+25
| | | | | | | | | | | Effects on Linux AMD64 GCC 4.9-trunk -O2 stripped release: text: -72B data: -64B relocs: -4 Change-Id: Ie312e12ba42f58fa5dd61da1e64b9c22bf4738b2 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* QDebugStateSaver: Fix trailing space issuesKai Koehne2014-07-231-1/+8
| | | | | | | | | | | | | | ~QDebug() removes any trailing space if autoInsertSpaces() is true. However, if one uses QDebugStateSaver the global autoInsertSpaces might be false, but a space was added by a custom operator<<. Explicitly check for this in QDebugStateSaverPrivate::restoreState. Remove any trailing space if the local state asks for adding trailing spaces, but the original one doesn't. Add a trailing space if the local state doesn't ask for one, but the global state does. Change-Id: I243b5c76d5ed2c1ec4820da35ab6e254da1551d9 Reviewed-by: David Faure <david.faure@kdab.com>
* iOS: Let QScreen manage UIWindow and root view-controllerTor Arne Vestbø2014-07-237-54/+64
| | | | | | | | | | Instead of having the application delegate set up a UIWindow and root view-controller, we move the responsibility to QScreen, since in a multi screen scenario we will need one UIWindow per screen, as well as one root viewcontroller per window. Change-Id: If5b0d44b8f8a697d830b33b4fe420bff56a7629b Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
* QLockFile/Windows: Determine host name from environment variable COMPUTERNAME.Friedemann Kleint2014-07-231-9/+16
| | | | | | | | Useful when using shared directories. Task-number: QTBUG-39967 Change-Id: I2c082e33133b00306378b6ff58478e94119e6a0e Reviewed-by: David Faure <david.faure@kdab.com>
* Keep global state of debug stream (QImage, QPixmap, and QIcon)Kai Koehne2014-07-233-24/+30
| | | | | | | Make sure that the stream's formatting settings are preserved. Change-Id: Ib13b5e0b36b2ef801da2d2d5c240d28dc1b04653 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* QDoc: Fixed section title offset in QML basic type pages.Jerome Pasion2014-07-231-0/+1
| | | | | | | | | | -QML basic type page layout is now separate from the other doc page layouts, but the section offset was incorrect. -the offset is the same as the QML type pages. Change-Id: I422e97eebe58a87c11607f2c8c5aedb10abbda7e Task-number: QTBUG-40335 Reviewed-by: Martin Smith <martin.smith@digia.com>
* QDoc: Restored QML basic type pages' table of contents.Jerome Pasion2014-07-231-0/+2
| | | | | | | | | -QDoc in 5.4 processed QML basic types as separate pages but the ToC wasn't added. Change-Id: I5a887158bacef923e765accac7ee5ca7c2c7a12b Task-number: QTBUG-40335 Reviewed-by: Martin Smith <martin.smith@digia.com>
* Be more specific in "Loading logging rules" debug outputKai Koehne2014-07-231-1/+1
| | | | | Change-Id: I8a6f1797cbcfabc6df76ce17115a678f729ac711 Reviewed-by: hjk <hjk121@nokiamail.com>
* Introduce Q_DECL_UNUSED_MEMBER for clangKai Koehne2014-07-233-7/+15
| | | | | | | | | | | | | | | | Since version 3.2, clang warns about unused member variables (-Wunused-private-field). Marking such members with Q_DECL_UNUSED_MEMBER will silence this warning. This is a cleaner way than using Q_UNUSED() somewhere in the class methods (like we did previously in qloggingcategory.cpp). It mirrors Q_DECL_UNUSED for unused variables, which however can't be used unconditionally for member variables because e.g. gcc will complain. Change-Id: I2afff683a7c3bae3bdcd684e5085a643887bb2a0 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: hjk <hjk121@nokiamail.com>
* rcc: String literal conversion cleanupKai Koehne2014-07-232-8/+8
| | | | | | | | Replace QString::fromUtf8 with QString::fromLatin1 for ascii strings. Also optimize use of QT_VERSION_STR. Change-Id: I13c683499c56cb4ac4d2bbd9b6b53c337917e347 Reviewed-by: hjk <hjk121@nokiamail.com>
* Make QRingBuffer::append() not leave empty arrays in buffer listAlex Trotsenko2014-07-231-3/+7
| | | | | Change-Id: I4c5af33488a70996299289ec2b953b7bf3b2c428 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Add QFileDevice::MemoryMapFlags::MapPrivateOption flag.Simon Sasburg2014-07-234-7/+36
| | | | | | | | | | Passing this flag to QFileDevice::map() will allow writes to the mapped memory without modifying the file that was mapped. These writes will be lost when the memory is unmapped. Change-Id: I7d46b044fc370585de8c06fdb4059f1f1be12d7d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Fix warnings about integer conversion in qloggingregistry.cpp.Friedemann Kleint2014-07-221-3/+3
| | | | | | | | | io\qloggingregistry.cpp(134) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data io\qloggingregistry.cpp(138) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data io\qloggingregistry.cpp(142) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data Change-Id: Ic9787aa8acb5cb4440c62bbb143f7c2b7fdad385 Reviewed-by: Kai Koehne <kai.koehne@digia.com>
* QDebug: Add a doc section about formatting optionsKai Koehne2014-07-221-0/+12
| | | | | Change-Id: I43cb965f9f45e8a50c767c7e9035811c90e6aab3 Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
* Windows: Default to MS Shell Dlg 2Eskil Abrahamsen Blomfeldt2014-07-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Qt 4, the default font for unrecognized font families would be MS Shell Dlg 2, which is an alias for the default UI font on the system. However, QFont::defaultFamily() had not been updated to match this and would return MS Sans Serif instead, which was the default UI font on Windows 9x. This is a raster font and not really suitable for modern UIs. In Qt 5, the problem with defaultFamily() was fixed, but Arial would be returned as the default instead. Enter change afd6313755399b24fb97e56f730f9898a0fa8f5a which tried to revert the change to defaultFamily() and return MS Sans Serif again. However, since it changed the actual default family and not just the one returned by the function, this broke several tests which depended on having a scalable default font. This change sets the default family to MS Shell Dlg 2 like in Qt 4. The fact that defaultFamily() now reports the actual default is regarded as a bug fix, so we will not change this. Fixes some XFAILs in qtdeclarative. [ChangeLog][Windows] Set default fallback font to MS Shell Dlg 2 instead of Arial. Task-number: QTBUG-39961 Change-Id: Ib08dfc7f2c00475d54d565bb933d1d2f8a3a3d90 Reviewed-by: Andy Shaw <andy.shaw@digia.com>
* Improve debug output of QImage, QPixmap and QIcon.Friedemann Kleint2014-07-213-3/+33
| | | | | | Task-number: QTBUG-38858 Change-Id: Ie45d595478f971c7ed973d911c65484d947d2a60 Reviewed-by: Alessandro Portale <alessandro.portale@digia.com>
* Improve debugging output for QLoggingCategoryKai Koehne2014-07-211-6/+6
| | | | | | | | | Make sure that the source the rules are loaded from is printed before any syntax errors. Change-Id: Id7ced1a346dd0d8501eab93ac00e1f432ca6b703 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: hjk <hjk121@nokiamail.com>
* Add example qtlogging.conf file to QLoggingCategory documentationKai Koehne2014-07-211-1/+7
| | | | | | Change-Id: I0ceeb8afa711cc7bc1378287b0d550871e5bfd9d Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: hjk <hjk121@nokiamail.com>
* iOS: Detect external screen connections and expose as additional QScreenTor Arne Vestbø2014-07-214-24/+87
| | | | | | | | The additional QScreen can not be used for anything yet, since we don't set up a window and root view controller for it. Change-Id: I335b796bdd89fc58a27ec4e20c5ed355be0cab66 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* iOS: Add helper for getting the iOS platform integration instanceTor Arne Vestbø2014-07-216-4/+16
| | | | | Change-Id: I550d345ab0f8bcba1225c425464e198d43d9fda8 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* iOS: Fix compilation with Xcode6/iOS8 SDKTor Arne Vestbø2014-07-211-0/+1
| | | | | | | We were implicitly including OpenGLES/ES2/glext.h prior to iOS8. Change-Id: I353badb5c209b9ebc57c1718223c164590705064 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* iOS: Refactor qioswindow.mm into quiview.mm and quiview_accessibility.mmTor Arne Vestbø2014-07-216-380/+493
| | | | | Change-Id: Ib6297e37d67b2c0ea251ae054b8ff877af2673a5 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* Fusion style: Use QStyleHelper::dpiScaled() where applicable.Friedemann Kleint2014-07-211-57/+83
| | | | | | | | | | | | | | | | | When running unscaled on a high resolution display, some items are too small. This patch converts most values returned by QFusionStyle::pixelMetric() via QStyleHelper::dpiScaled(). Some adjustments have been done to RadioButton, CheckBox, Slider and SpinBox. On systems with 96dpi, FusionStyle should still look exactly as before this patch. Task-number: QTBUG-40277 Task-number: QTBUG-38858 Change-Id: I2683a8a4db615d01c08f4d6f559417b995c0eb1a Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
* Update bundled HarfBuzz-NG copy to 0.9.32Konstantin Ritt2014-07-2066-3396/+4289
| | | | | | | | | | - Unicode 7.0 support - New shapers - Multiple improvements in Arabic, Indic, and Hebrew shapers - Build fixes, optimizations, etc. Change-Id: I0ba14b619c3e6fb35cddd9d65e694af41197d6ae Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
* QRingBuffer: purge unused part of the apiAlex Trotsenko2014-07-181-33/+0
| | | | | | | Remove unused and untested class functions. Change-Id: I8eb963db0ae4be9b5cdde91f6747c4a1db4ea649 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Implement QApplication::topLevelAt() using QGuiApplication::topLevelAt().Friedemann Kleint2014-07-181-10/+3
| | | | | | | | Reducing code duplication, preparing for High-DPI support. Task-number: QTBUG-38858 Change-Id: Id0ed12db4b5cadd0eef79afd0ac62f58a7b01901 Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
* qdoc: Validate index file pathsTopi Reinio2014-07-181-1/+10
| | | | | | | | | | | Check for existence of the paths added by 'indexes' documentation configuration command, and generate warnings accordingly. Also, ensure that the strings added with 'depends' command contain no duplicates. Change-Id: I66a3d1b25907567bb5bfc72b78a8009d7bd8e067 Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* qdoc: Support use of \value command outside \enum topic.Topi Reinio2014-07-184-15/+31
| | | | | | | | | | | | | | | | | | | Even though qdoc accepts the \value command(s) anywhere in the documentation and generates tables for them, the produced output was invalid for documentation topics other than \enum. This change fixes the issue by not trying to resolve the enumeration values and removing the 'Value' column for generated tables when the \value command is used outside c++ enum documentation topic. This enables, for example, the use of the \value command for documenting acceptable values for QML enumeration properties, without having to use custom lists or tables. Task-number: QTBUG-35019 Change-Id: I597b2f9d7d03d4ab72f276752ddf53e1c405313c Reviewed-by: Jerome Pasion <jerome.pasion@digia.com> Reviewed-by: Martin Smith <martin.smith@digia.com>
* QItemSelectionModel: Sort persistent model indexes taking parent into account.Friedemann Kleint2014-07-171-3/+21
| | | | | | | | | | | When sorting a tree model with large sub-trees and and a large selection, the existing sort function would mix indexes of different parents, causing a fragmented selection, which slows down painting. Task-number: QTBUG-33954 Change-Id: Ia585fc1e5de9a1a3f6124a58c9c7c40fcbdbfb6a Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* QDoc: Allow the listing of uppercase- and lowercase-named items in list.Jerome Pasion2014-07-171-1/+1
| | | | | | | | | | -QML basic types are lowercase-named while object types are uppercased. -reference page for QML types should list both. -caveat: simple implementation means the uppercase items are listed first. Change-Id: I9092ad0cd9e79c4d3f8b794ac5d68879ce6338a5 Reviewed-by: Martin Smith <martin.smith@digia.com>
* RCC: Use macros not defined in qglobal.hhjk2014-07-161-12/+12
| | | | | | | | | This prevents conflicts in case of link time optimizations or precompiled headers are used since we don't include qglobal.h in the generated code. Change-Id: I4266c8ae38e6eafefd28b3bde5cb725a24d67ea0 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* rcc: Prevent CRLF conversion on Windows for -binaryKai Koehne2014-07-161-0/+9
| | | | | | | | | | | | | | | | | | | | Fix an issue on Windows where rcc -binary project.qrc >project.rcc resulted in a corrupted file (\n was automatically replaced with \r\n). This is caused by Qt using fwrite internally, which will automatically replace linefeed with carriage-return for streams opened in text mode. The fix forces stdout to binary mode in this case. Task-number: QTBUG-39422 Change-Id: Ib5b5e82db922dc389d160b0115dbafe8641c95fd Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Robert Loehning <robert.loehning@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: hjk <hjk121@nokiamail.com>