Программирование → Требования и советы для создания расширений в GNOME Shell

Один из разработчиков GNOME Shell опубликовал в своем блоге статью с советами по созданию расширений в GNOME Shell. Очень жаль, что команда не очень хорошо поработала над документацией, из-за чего новые разработчики постоянно натыкаются на одинаковые ошибки, которые представлены в статье.

Не делайте ничего в init()

init() тут должно быть все, что происходит при первом запуске. Например сюда нельзя вносить изменения UI или что-нибудь подобное, что должно делаться в enable().

Отменить все изменения UI в disable()

Если делали какие либо изменения UI в enable(), не забудьте в дальнейшем их отключить с помощью disable().

Удалите все возможные обратные вызовы

Если пишете расширение, необходимо отключить все сигналы и удалить все майнлупы. Так, если например используете сигнал global.display.connect('window-created', onWindowCreated); нужно сделать его отключение:

let _windowCreatedId;
 
function enable() {
    _windowCreatedId = global.display.connect('window-created', onWindowCreated);
}
 
function disable() {
    global.display.disconnect(_windowCreatedId);
}


То же самое касается майнлупов. Например код будет не правильным:

function buttonPressed() {
    // This code will crash the Shell, do not use it!
    let session = new Soup.SessionAsync();
    let message = Soup.form_request_new_for_hash('GET', 'http://example.com', {'beans': 'sauce'});
    session.queue_message(message, function() {
        log('soup is so easy!');
    });
}


Исправим, чтобы получить правильное поведение и не увидеть краша.

const session = new Soup.SessionAsync();
 
// This makes the session work under a proxy. The funky syntax here
// is required because of another libsoup quirk, where there's a gobject
// property called 'add-feature', designed as a construct property for
// C convenience.
Soup.Session.prototype.add_feature.call(session, new Soup.ProxyResolverDefault());
 
function buttonPressed() {
    let message = Soup.form_request_new_for_hash('GET', 'http://example.com', {'beans': 'sauce'});
    session.queue_message(message, function() {
        log('soup is so easy!');
    });
}


Отступы

Пишите код правильно и последовательно, чтобы не пришлось выяснять какие скобки чему предназначены.

Удаляйте нерабочий или закомментированный код

Если используете современные VCS, например Git, всегда сможете получить удаленный код обратно.
  • avatar
  • pashtuun
  • 1678
  • +13
  • 25 февраля 2012, 10:18

Комментариум (1)

RSS свернуть / развернуть
+
+1
avatar

terra

  • 02 марта 2012, 00:33

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Тут мы пока в ленивых потугах «хеловордами» осторожно делимся, а pashtuun «сковородкой ап-асфальт» на путь истиный «Gnome3 Development» наставляет =))

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.