Отображение более одной строки описания уведомления в области уведомлений с помощью расширения

avatar
kaanginam
8 августа 2021 в 18:02
67
1
0

В настоящее время я разрабатываю расширение, чтобы сделать уведомления в разделе уведомлений календаря одноразовыми. Цель состоит в том, чтобы уведомление расширялось, как это делает первоначальное уведомление на рабочем столе. Я изменил тип уведомления, добавленного в панель уведомлений, на класс NotificationBanner с класса NotificationMessage. В настоящее время я использую обходной путь, чтобы заставить эту работу работать, вот как выглядит моя функция расширения:

expand(animate) {
        this.expanded = true;
        this._actionBin.visible = this._actionBin.get_n_children() > 0;
        if (this._bodyStack.get_n_children() < 2) {
            this._expandedLabel = new MessageList.URLHighlighter(this._bodyText,
                true, this._useBodyMarkup);
            this.setExpandedBody(this._expandedLabel);
        }
        if (animate) {
            if (!this.clickedByButton && !this.forceExpansion) {
                // This is the usual way notifications are expanded, using the layout manager
                this._bodyStack.ease_property('@layout.expansion', 1, {
                    progress_mode: Clutter.AnimationMode.EASE_OUT_QUAD,
                    duration: MessageTray.ANIMATION_TIME,
                });
            }
            else if (this.forceExpansion || this.clickedByButton) {
                // When auto expanding or clicked by button, change height of body 
                oldHeight = this.bodyLabel.get_height();
                const lines = Math.ceil(this._bodyText.length / 54);
                this.bodyLabel.set_height(lines * this.bodyLabel.get_height());
            }
            this._actionBin.scale_y = 0;
            this._actionBin.ease({
                scale_y: 1,
                duration: MessageTray.ANIMATION_TIME,
                mode: Clutter.AnimationMode.EASE_OUT_QUAD,
            });
        } else {
            this._bodyStack.layout_manager.expansion = 1;
            this._actionBin.scale_y = 1;
        }
        this.emit('expanded');
    }

Как видите, у меня есть 2 варианта для этого расширения: Принудительно раскрыть все уведомления или заставить пользователя использовать кнопку для раскрытия. Текущее решение не является элегантным, оно просто изменяет высоту метки уведомления, которая управляет телом. Кроме того, в теле уведомления по-прежнему отображаются три точки, что означает, что тело все еще не развернуто. Я считаю, что это проблема с менеджером компоновки, поскольку правильный способ расширения — установить для message._bodyStack.layout_manager.expansion значение 1. Это не работает в случае расширения сообщения в области уведомлений. Кто-нибудь знаком с менеджером компоновки или может помочь мне найти другое решение? Вот изображение того, как выглядит мое текущее решение: Изображение автоматически развернутого уведомления в области уведомлений из-за расширения (обратите внимание, что три точки в конце первой строки все еще там)

Источник

Ответы (1)

avatar
kaanginam
8 августа 2021 в 19:04
0

Хорошо, я нашел решение, оно не связано с менеджером компоновки. Значение сообщения message.bodyLabel.clutter_text.ellipsize установлено на 3, что является основной причиной появления точек в уведомлении. Установка этого значения на 0 решает эту проблему. Мне все равно хотелось бы найти более элегантный подход к отображению тела, но и этого вполне достаточно.