Начин за превъртане на уиджетите на оформлението с помощта на мишката?

Можете ли да ми помогнете как да превъртя съдържанието на оформление с помощта на мишката? Или е възможно?

Създадох този notification-center приспособление и използвах wibox.layout.fixed.vertical() за съхраняване на джаджите/известията. Проблемът ми е, че твърде много джаджи ще заемат цялото пространство и няма да има достатъчно място за показване на другите джаджи. Така че се опитвам да направя джаджата вътре в wibox.layout.fixed.vertical() да може да се превърта, но винаги стигам до задънена улица. Опитах и ​​wibox.container.scroll, но както се казва в документацията:

Please note that mouse events do not propagate to widgets inside of the scroll container.

Това е простият код, който използвам:

-- Layout
local notifbox_layout = wibox.layout.fixed.vertical()

-- Add these textbox widgets to layout
-- Make this widgets scrollable if there's too many of them
notifbox_layout:insert(1, wibox.widget.textbox('String 1'))
notifbox_layout:insert(1, wibox.widget.textbox('String 2'))
notifbox_layout:insert(1, wibox.widget.textbox('String 3'))
notifbox_layout:insert(1, wibox.widget.textbox('String 4'))
notifbox_layout:insert(1, wibox.widget.textbox('String 5'))

-- Mouse event
notifbox_layout:buttons(
    gears.table.join(
        awful.button(
            {},
            4,
            nil,
            function()
                -- some magic here to scroll up
            end
        ),
        awful.button(
            {},
            5,
            nil,
            function()
                -- some magic here to scroll down
            end
        )
    )
)

Това е центърът за уведомяване, в който няма достатъчно място за показване на другите приспособления

Съжалявам, ако го обясних лошо. Всъщност не съм толкова добър в английския.


person Community    schedule 27.02.2020    source източник


Отговори (1)


Няма значение. Опитах отговора на Uli Schlachter тук . И работи идеално. Модифицирах го малко и тогава изглежда така.

local w = wibox{ x = 100, y = 100, width = 100, height = 20, visible = true }

my_wiget = function()
    return some_widget
end

local own_widget = wibox.widget.base.make_widget()
local offset_x, offset_y = -20, 0
function own_widget:layout(context, width, height)
    -- No idea how to pick good widths and heights for the inner widget.
    return { wibox.widget.base.place_widget_at(my_widget(), offset_x, offset_y, 200, 40) }
end

own_widget:buttons(
    awful.util.table.join(
        awful.button(
            {},
            4,
            function()
                if offset_y <= 490 then
                    offset_y = offset_y + 5
                end
                own_widget:emit_signal("widget::layout_changed")
            end
        ),
        awful.button(
            {},
            5,
            function()
                if offset_y >= 5 then
                    offset_y = offset_y - 5
                end
                own_widget:emit_signal("widget::layout_changed")
            end
        )
    )
)

w:set_widget(own_widget)

person Community    schedule 06.03.2020