воскресенье, 7 марта 2010 г.

Подводные камни в восстановлении предыдущего положения окна

Это перевод A subtlety in restoring previous window position. Автор: Реймонд Чен.

Частой возможностью многих приложений является сохранение своего положения на экране и размещение себя на том же самом месте в следующий запуск. Будучи реализованной наивно, программа просто восстанавливает себя по сохранённым координатам без каких-либо условий.

Но с такой реализацией вы встретитесь с проблемами в юзабилити. Если пользователь запустит две копии вашей программы, то их окна разместятся в точности друг под другом на экране. Если только пользователь не следит внимательно за панелью задач, ему покажется, что второй запуск не произошёл. Теперь вещи становятся интересными.

В зависимости от того, что делает программа, вторая копия может встретить отказ в доступе (sharing violation), или она может просто открыть вторую копию документа для правки, или же будет играть две копии песни, приводя к странному эху из-за несинхронизированности двух запусков. Ещё более забавно, что когда пользователь щёлкнет по кнопке "Стоп", музыка продолжит играть! Почему? Потому что только вторая копия остановила воспроизведение. Первая копия продолжает играть.

Я знаю одного пользователя, который не так уж редко запускает четыре копии мультимедийного проигрывателя, что приводит к ужасной какофонии звуков с последующим смятением пользователя, когда он пытается исправить проблему, что обычно выражается в постоянном нажатии на кнопку "Стоп" самого верхнего окна. Это останавливает последний экземпляр, но остальные продолжают играть...

Если вторая копия открывает документ, то пользователь может переключиться с редактора, а потом переключиться к первой копии - и подумать, что все изменения были потеряны. Или пользователь может не заметить этого и в результате сделать конфликтующие изменения в первой копию. Когда эти документы будут сохранены - произойдёт множество плохих вещей.

Мораль истории: если ваша программа сохраняет и восстанавливает положение на экране, вам лучше бы проверить, не расположено ли уже окно от предыдущей копии по этим же координатам. Если так - то переместите своё окно куда-нибудь ещё, так что оно не займёт ровно то же самое место.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.