96 lines
2.9 KiB
Lua
96 lines
2.9 KiB
Lua
----------------------------------
|
|
-- This is the bluetooth widget --
|
|
----------------------------------
|
|
|
|
-- Awesome libs
|
|
local awful = require('awful')
|
|
local dpi = require('beautiful').xresources.apply_dpi
|
|
local gears = require('gears')
|
|
local wibox = require('wibox')
|
|
|
|
-- Own libs
|
|
local bt_module = require('src.modules.bluetooth.init')
|
|
local hover = require('src.tools.hover')
|
|
|
|
local capi = {
|
|
awesome = awesome,
|
|
mouse = mouse,
|
|
}
|
|
|
|
-- Icon directory path
|
|
local icondir = gears.filesystem.get_configuration_dir() .. 'src/assets/icons/bluetooth/'
|
|
|
|
-- Returns the bluetooth widget
|
|
return function(s)
|
|
|
|
-- Get the bluetooth module
|
|
local bt_widget = bt_module { screen = s }
|
|
-- Create the bluetooth widget
|
|
local bluetooth_widget = wibox.widget {
|
|
{
|
|
{
|
|
{
|
|
id = 'icon',
|
|
image = gears.color.recolor_image(icondir .. 'bluetooth-off.svg', Theme_config.bluetooth.fg),
|
|
widget = wibox.widget.imagebox,
|
|
valign = 'center',
|
|
halign = 'center',
|
|
resize = false,
|
|
},
|
|
id = 'icon_layout',
|
|
widget = wibox.container.place,
|
|
},
|
|
id = 'icon_margin',
|
|
left = dpi(8),
|
|
right = dpi(8),
|
|
widget = wibox.container.margin,
|
|
},
|
|
bg = Theme_config.bluetooth.bg,
|
|
fg = Theme_config.bluetooth.fg,
|
|
shape = function(cr, width, height)
|
|
gears.shape.rounded_rect(cr, width, height, dpi(6))
|
|
end,
|
|
widget = wibox.container.background,
|
|
}
|
|
|
|
hover.bg_hover { widget = bluetooth_widget }
|
|
|
|
-- If bt_widget is nil then there is no bluetooth adapter and there shouldn't be done
|
|
-- anything besides returning the widget without any logic behind
|
|
if not bt_widget then
|
|
return bluetooth_widget
|
|
end
|
|
|
|
-- Create the awful.popup container for the module
|
|
local bluetooth_container = awful.popup {
|
|
widget = bt_widget,
|
|
ontop = true,
|
|
stretch = false,
|
|
visible = false,
|
|
screen = s,
|
|
border_color = Theme_config.bluetooth_controller.container_border_color,
|
|
border_width = Theme_config.bluetooth_controller.container_border_width,
|
|
bg = Theme_config.bluetooth_controller.container_bg,
|
|
}
|
|
|
|
-- When the status changes update the icon
|
|
bt_widget:connect_signal('bluetooth::status', function(status)
|
|
bluetooth_widget:get_children_by_id('icon')[1].image = gears.color.recolor_image(status._private.Adapter1.Powered and
|
|
icondir .. 'bluetooth-on.svg' or icondir .. 'bluetooth-off.svg', Theme_config.bluetooth.fg)
|
|
end)
|
|
|
|
-- On left click toggle the bluetooth container else toggle the bluetooth on/off
|
|
bluetooth_widget:connect_signal('button::press', function(_, _, _, key)
|
|
if key == 1 then
|
|
local geo = capi.mouse.current_wibox:geometry()
|
|
bluetooth_container.x = geo.x
|
|
bluetooth_container.y = geo.y + dpi(55)
|
|
bluetooth_container.visible = not bluetooth_container.visible
|
|
else
|
|
capi.awesome.emit_signal('toggle_bluetooth')
|
|
end
|
|
end)
|
|
|
|
return bluetooth_widget
|
|
end
|