LINUX.ORG.RU

Добавить иконку к текстовому виджету awesome wm

 ,


1

1

Привет, лор!

Учусь писать простейший интерактивный виджет для панели. Получается либо просто текст, либо одна иконка. Как их объединить в один? Опубликовал в этом репозитории: https://github.com/inaugur/wsimple

★★

Один виджет — один тип. Но ты можешь объединить два виджета в один wibox.layout, и возвращать из функции его:

local mywidget = wibox.widget {
  layout = wibox.layout.fixed.horizontal,
  { widget = wibox.widget.imagebox,
    image = "/path/to/image" or theme.mywidget_image or nil,
    id = "image"
  },
  { widget = wibox.widget.textbox,
    text = "default text" or theme.mywidget_text,
    id = "text"
  }
}

А в функции обновления данных делаешь так:

function mywidget:update()
  self:get_children_by_id("image")[1].image = "/path/to/another/image" or theme.mywidget_another_image or nil
  self:get_children_by_id("text")[1].text = "new text"
  self:emit_signal("widget::redraw_needed")
end

Читай отсюда и до посинения просветления.

mord0d ★★★★★
()
Ответ на: комментарий от rmu

всё работает

Ещё бы оно не работало. ☺ Это упрощённый/обобщённый вариант половины моих виджетов.

// Не забывай помечать темы решёнными. Нам профита никакого, а нашедшие твою тему увидят, что в ней есть решение и не будут плодить дубликаты.

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от mord0d

Пометил. Появилась другая проблема - как цвет текста в таком случае менять? set_markup непонятно как применять.

rmu ★★
() автор топика
Ответ на: комментарий от rmu

как цвет текста в таком случае менять? set_markup непонятно как применять.

mywidget.markup = "<span color='#ff0000'>TEXT</span>"

Или более элегантно:

mywidget.markup = string.format("<span color='%s'>%s</span>", (theme.mywidget_color or "#ff0000"), "TEXT")
mord0d ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.