Something that is often forgotten when writing your own GUI toolkit is the tight integration of the native toolkits with the typical available hardware (e.g. touchscreen, mouse with 1 button), the desktop environment (remembering open windows after reboot, allowing only one instance and opening multiple documents in the same instance), accessibility support and last not least an IME for languages with large symbolic alphabets that cannot be represented on a keyboard normally, like Chinese, Japanese, Korean.
By no means do I want to demotivate you :)
