diff --git a/gerrit-widget/gerrit.lua b/gerrit-widget/gerrit.lua index 10e839f..e2d0e02 100644 --- a/gerrit-widget/gerrit.lua +++ b/gerrit-widget/gerrit.lua @@ -8,11 +8,15 @@ -- @copyright 2019 Pavel Makhov ------------------------------------------------- +local awful = require("awful") local wibox = require("wibox") local watch = require("awful.widget.watch") local json = require("json") local spawn = require("awful.spawn") local naughty = require("naughty") +local gears = require("gears") +local beautiful = require("beautiful") + local path_to_icons = "/usr/share/icons/Arc/status/symbolic/" @@ -30,12 +34,37 @@ local function worker(args) local query = args.query or 'is:reviewer AND status:open AND NOT is:wip' local reviews - local notification_text local current_number_of_reviews local previous_number_of_reviews = 0 - gerrit_widget = wibox.widget{ - widget = wibox.widget.textbox + local rows = { + { + text = 'asdR', + widget = wibox.widget.textbox + }, + layout = wibox.layout.fixed.vertical, + } + + local popup = awful.popup{ + visible = true, + ontop = true, + visible = false, + shape = gears.shape.rounded_rect, + border_width = 1, + preferred_positions = top, + widget = {} + } + + gerrit_widget = wibox.widget { + --{ + id = txt, + widget = wibox.widget.textbox + --}, + --{ + -- image = os.getenv("HOME") .. '/.config/awesome/awesome-wm-widgets/gerrit-widget/Gerrit_icon.svg', + -- widget = wibox.widget.imagebox + --}, + --layout = wibox.layout.fixed.horizontal, } local function get_name_by_id(id) @@ -43,7 +72,7 @@ local function worker(args) if res == nil then res = '' spawn.easy_async(string.format(GET_USERNAME_CMD, host, id), function(stdout, stderr, reason, exit_code) - name_dict[tonumber(id)] = stdout + name_dict[tonumber(id)] = string.gsub(stdout, "\n", "") end) end return res @@ -66,27 +95,60 @@ local function worker(args) previous_number_of_reviews = current_number_of_reviews widget.text = current_number_of_reviews - notification_text = '' + count = #rows + for i=0, count do rows[i]=nil end for _, review in ipairs(reviews) do - notification_text = notification_text .. "" .. review.project ..' / ' .. get_name_by_id(review.owner._account_id) .. review.subject ..'\n' + local row = wibox.widget { + { + { + { + text = review.project .. ' / ' .. get_name_by_id(review.owner._account_id), + widget = wibox.widget.textbox + }, + { + text = review.subject, + widget = wibox.widget.textbox + }, + layout = wibox.layout.align.vertical + }, + margins = 5, + layout = wibox.container.margin + }, + widget = wibox.container.background + } + + row:connect_signal("button::release", function(_, _, _, button) + spawn.with_shell("google-chrome https://" .. host .. '/' .. review._number) + end) + + row:connect_signal("mouse::enter", function(c) + c:set_bg(beautiful.bg_focus) + end) + + row:connect_signal("mouse::leave", function(c) + c:set_bg(beautiful.bg_normal) + end) + + table.insert(rows, row) end + + popup:setup(rows) end - local notification - gerrit_widget:connect_signal("mouse::enter", function() - notification = naughty.notify{ - text = notification_text, - timeout = 20, - position = position, - width = (500) - } - end) + gerrit_widget:buttons( + awful.util.table.join( + awful.button({}, 1, function() + --awful.placement.top_right(w, { margins = {top = 25, right = 10}, parent = awful.screen.focused() }) + --w.visible = not w.visible + awful.placement.top_right(popup, { margins = { top = 25, right = 10}, parent = awful.screen.focused() }) + popup.visible = not popup.visible + --ww:move_next_to(gerrit_widget) + --awful.placement.next_to(ww, gerrit_widget) + end) + ) + ) - gerrit_widget:connect_signal("mouse::leave", function() - naughty.destroy(notification) - end) - - watch(string.format(GET_CHANGES_CMD, host, query:gsub(" ", "+")), 1, update_graphic, gerrit_widget) + watch(string.format(GET_CHANGES_CMD, host, query:gsub(" ", "+")), 5, update_graphic, gerrit_widget) return gerrit_widget end