Code refactoring
----------------

+ accounts.py line 648 remove redundant setMovie statement
+ adjust web view spacing and margins for widgets (relative to window borders)
+ check if QEvent.DynamicPropertyChange happens after the property changed

+ do not kill greenlets but interrupt commands instead (sipsimple)
- refactor how models/dialogs/windows are created and where are they kept
- blink/contacts.py GoogleContactsManager.stop_adding_contacts is always False
- rename GoogleContactsManager to GoogleContactManager
- rename GoogleContactsGroup to GoogleContactGroup
- rename contact_model.google_contacts_group to google_contact_group
- integrate GoogleContactManager into ContactModel?
- GoogleContactsManager use defaultdict for entries_map (see update_contacts)
- race condition in GoogleContactsManager with stop_adding_contacts
- GoogleContactManager.enable_captcha should be decorated to run in the gui thread
- GoogleContactManager._set_captcha_image should be decorated to run in the gui thread
- _authorize_google_account from google dialog needs refactoring
- saving settings should be probably done in an auxiliary thread not the green thread
- rename main_window.google_contacts_dialog to something else

Issues
------

Investigate this exception:

sip:nwpsefvl@10.0.0.1:52067 52067
sip:nwpsefvl@10.0.0.1:52067 52067
sip:nwpsefvl@10.0.0.1;transport=tcp None
Traceback (most recent call last):
  File "/usr/lib/python2.5/site-packages/twisted/internet/base.py", line 778, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File "/usr/lib/pymodules/python2.5/eventlet/hubs/twistedr.py", line 158, in call_if_greenlet_alive
    return func(*args1, **kwargs1)
  File "/usr/lib/pymodules/python2.5/eventlet/proc.py", line 571, in _run
    result = function(*args, **kwargs)
  File "/home/dan/work/voip/python-sipsimple/sipsimple/account.py", line 683, in _handle_commands
    handler(command)
  File "/home/dan/work/voip/python-sipsimple/sipsimple/account.py", line 720, in _CH_register
    txtRecord=bonjour.TXTRecord(items=txtdata))
  File "/home/dan/work/voip/blink-qt/sipsimple/bonjour.py", line 1125, in DNSServiceRegister
TypeError: an integer is required

Presence
--------

- Is picking the most recent timestamp a good winning method?
- Calculate user idleness
- Add a GUI element for the offline note
- Delete own icon if we don't get anything back from XCAP?
- Unify settings for inbound and outbound presence