Установил себе  свежевыпущенный Thunderbird 3, полюбовался вкладками и пошёл искать расширение аналогичное расширению Павла Власова Close Tab by Double Click для Firefox. И не нашёл.
Удивился сильно (вроде не самая сложная вещь), пожал плечами и пошёл писать своё.

Не так-то и всё просто, как казалось.

19-12-2009 13:20:34
Посмотрел tabmail.xml и пару расширений, которые работают с вкладками в TB (скажем, Fast Close Tabs или New Tab King) и написал самый простой вариант:

Выделить код

Код:

<?xml version="1.0"?>
  <overlay id="CloseTabByDoubleClick-overlay"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  
  <script type="application/x-javascript">
    <![CDATA[
        var closeTabByDoubleClick = {
            init : function() {
                let tabmail = document.getElementById('tabmail');
                tabmail.addEventListener('dblclick', closeTabByDoubleClick.clicked, false);
            },
            clicked : function() {
                let tabmail = document.getElementById('tabmail');
                tabmail.removeCurrentTab();
            }
        }
        window.addEventListener('load', closeTabByDoubleClick.init, false);
    ]]>
  </script>
  

</overlay>

В этом варианте плохо то, что обработчик навешивается на слишком большой объект - tabmail. Щелкаешь дважды по письму - оно открывается и тут же закрывается. Если же аккуратно открыть письмо (правый клик в списке, затем выбрать в попапе "открыть в другой вкладке"), то письмо открывается и его можно закрыть двойным щелчком по любому месту панели (самому табу, по свободному месту).

Сижу вот, перечитываю tabmail.xml и пытаюсь понять - то ли ковырять в сторону удаления события после обработки двойного клика в "ненужных" местах, толи куда-то перевешивать обработчик (в цикле для всех вкладок добавлять обработчики двойного клика?) в другое место.

Есть какие-либо идеи?

19-12-2009 13:38:40
Плюс, оказывается, кликать по пустому месту на панели - не самый лучший вариант, гораздо лучше реализовывать двойной клик только по самой вкладке. Дело в том, что tabmail.removeCurrentTab в случае фокуса на вкладке со списком ящиков не закрывает её.

questor
Как-то так, наверное:

Выделить код

Код:

isTab: function(node) {
    for(; node; node = node.parentNode)
        if(node.localName == "tab")
            return true;
    return false;
},
clicked : function(event) {
    if(!closeTabByDoubleClick.isTab(event.originalTarget)) // В данном случае this не указывает на closeTabByDoubleClick
        return;
    let tabmail = document.getElementById('tabmail');
    tabmail.removeCurrentTab();
}

О, какое простое и изящное решение! Спасибо.

19-12-2009 19:12:22
Собралось без проблем. Если кому-то надо - выложил себе на сайт.

PS Опубликовал на AMO.

О, какое большое спасибо, как не хватало!

Так выложите его на АМО - люди только обрадуются!

И за ссылочку на Close Tab by Double Click - тоже моя благодарность. Скорее всего, потестирую и включу в свою сборку. До этого у меня с целью исполнения ТОЛЬКО этой функции стояло TabclickingOptions, но оно давно уже не обновлялось, а в TabMixLite CE слишком много ненужного пользователям функционала.

Выложил на AMO: https://addons.mozilla.org/ru/thunderbird/addon/55539

+1

Хорошо, что сделали его пока что экспериментальным: может выявится конфликт с другими дополнениями или утечка памяти. Пусть себе потестируется.