Add new window switcher on super+tab and smaller fixes
This commit is contained in:
@@ -43,7 +43,7 @@ return function(s)
|
||||
color = Theme_config.brightness_osd.bar_bg_active,
|
||||
background_color = Theme_config.brightness_osd.bar_bg,
|
||||
max_value = 100,
|
||||
value = 50,
|
||||
value = 0,
|
||||
forced_height = dpi(6),
|
||||
shape = function(cr, width, height)
|
||||
gears.shape.rounded_bar(cr, width, height, dpi(6))
|
||||
@@ -86,7 +86,9 @@ return function(s)
|
||||
[[ pkexec xfpm-power-backlight-helper --get-brightness ]],
|
||||
function(stdout)
|
||||
local brightness_value = math.floor((tonumber(stdout) - 1) / (BACKLIGHT_MAX_BRIGHTNESS - 1) * 100)
|
||||
brightness_osd_widget:get_children_by_id("progressbar")[1].value = stdout
|
||||
brightness_osd_widget:get_children_by_id("progressbar1")[1].value = brightness_value
|
||||
|
||||
awesome.emit_signal("update::backlight", brightness_value)
|
||||
|
||||
local icon = icondir .. "brightness"
|
||||
if brightness_value >= 0 and brightness_value < 34 then
|
||||
@@ -96,7 +98,7 @@ return function(s)
|
||||
elseif brightness_value >= 67 then
|
||||
icon = icon .. "-high"
|
||||
end
|
||||
brightness_osd_widget:get_children_by_id("icon"):set_image(gears.color.recolor_image(icon .. ".svg",
|
||||
brightness_osd_widget:get_children_by_id("icon")[1]:set_image(gears.color.recolor_image(icon .. ".svg",
|
||||
Theme_config.brightness_osd.icon_color))
|
||||
end
|
||||
)
|
||||
|
||||
@@ -15,6 +15,7 @@ local rubato = require("src.lib.rubato")
|
||||
local icondir = awful.util.getdir("config") .. "src/assets/icons/"
|
||||
|
||||
--- Signal bars widget for the notification-center
|
||||
---@diagnostic disable-next-line: undefined-doc-name
|
||||
---@return wibox.widget
|
||||
return function()
|
||||
|
||||
@@ -90,9 +91,8 @@ return function()
|
||||
}
|
||||
|
||||
awesome.connect_signal(
|
||||
"update::cpu_usage_widget",
|
||||
"update::cpu_usage",
|
||||
function(cpu_usage)
|
||||
--w:get_children_by_id("progressbar1")[1].value = cpu_usage
|
||||
tooltip.text = "CPU Usage: " .. cpu_usage .. "%"
|
||||
rubato_timer.target = cpu_usage
|
||||
end
|
||||
@@ -161,10 +161,17 @@ return function()
|
||||
}
|
||||
|
||||
awesome.connect_signal(
|
||||
"update::cpu_temp_widget",
|
||||
function(cpu_temp, cpu_temp_icon)
|
||||
--w:get_children_by_id("progressbar1")[1].value = cpu_temp
|
||||
w:get_children_by_id("icon1")[1].image = gears.color.recolor_image(cpu_temp_icon, color["Blue200"])
|
||||
"update::cpu_temp",
|
||||
function(cpu_temp)
|
||||
local temp_icon
|
||||
if cpu_temp < 50 then
|
||||
temp_icon = icondir .. "cpu/thermometer-low.svg"
|
||||
elseif cpu_temp >= 50 and cpu_temp < 80 then
|
||||
temp_icon = icondir .. "cpu/thermometer.svg"
|
||||
elseif cpu_temp >= 80 then
|
||||
temp_icon = icondir .. "cpu/thermometer-high.svg"
|
||||
end
|
||||
w:get_children_by_id("icon1")[1].image = gears.color.recolor_image(temp_icon, color["Blue200"])
|
||||
tooltip.text = "CPU Temp: " .. cpu_temp .. "°C"
|
||||
rubato_timer.target = cpu_temp
|
||||
end
|
||||
@@ -232,8 +239,8 @@ return function()
|
||||
|
||||
awesome.connect_signal(
|
||||
"update::ram_widget",
|
||||
function(ram_usage)
|
||||
--w:get_children_by_id("progressbar1")[1].value = ram_usage
|
||||
function(MemTotal, MemFree, MemAvailable)
|
||||
local ram_usage = math.floor(((MemTotal - MemAvailable) / MemTotal * 100) + 0.5)
|
||||
tooltip.text = "RAM Usage: " .. ram_usage .. "%"
|
||||
rubato_timer.target = ram_usage
|
||||
end
|
||||
@@ -300,11 +307,10 @@ return function()
|
||||
}
|
||||
|
||||
awesome.connect_signal(
|
||||
"update::gpu_usage_widget",
|
||||
"update::gpu_usage",
|
||||
function(gpu_usage)
|
||||
--w:get_children_by_id("progressbar1")[1].value = gpu_usage
|
||||
tooltip.text = "GPU Usage: " .. gpu_usage .. "%"
|
||||
rubato_timer.target = gpu_usage
|
||||
rubato_timer.target = tonumber(gpu_usage)
|
||||
end
|
||||
)
|
||||
elseif widget == "gpu_temp" then
|
||||
@@ -337,7 +343,7 @@ return function()
|
||||
{
|
||||
{ --Icon
|
||||
id = "icon1",
|
||||
image = gears.color.recolor_image(icondir .. "cpu/gpu.svg", color["Green200"]),
|
||||
image = gears.color.recolor_image(icondir .. "cpu/thermometer.svg", color["Green200"]),
|
||||
halign = "center",
|
||||
valign = "center",
|
||||
widget = wibox.widget.imagebox
|
||||
@@ -371,12 +377,27 @@ return function()
|
||||
}
|
||||
|
||||
awesome.connect_signal(
|
||||
"update::gpu_temp_widget",
|
||||
function(gpu_temp, gpu_temp_icon)
|
||||
--w:get_children_by_id("progressbar1")[1].value = gpu_temp
|
||||
w:get_children_by_id("icon1")[1].image = gears.color.recolor_image(gpu_temp_icon, color["Green200"])
|
||||
tooltip.text = "GPU Temp: " .. gpu_temp .. "°C"
|
||||
rubato_timer.target = gpu_temp
|
||||
"update::gpu_temp",
|
||||
function(gpu_temp)
|
||||
local temp_icon
|
||||
local temp_num = tonumber(gpu_temp)
|
||||
|
||||
if temp_num then
|
||||
|
||||
if temp_num < 50 then
|
||||
temp_icon = icondir .. "cpu/thermometer-low.svg"
|
||||
elseif temp_num >= 50 and temp_num < 80 then
|
||||
temp_icon = icondir .. "cpu/thermometer.svg"
|
||||
elseif temp_num >= 80 then
|
||||
temp_icon = icondir .. "cpu/thermometer-high.svg"
|
||||
end
|
||||
else
|
||||
temp_num = "NaN"
|
||||
temp_icon = icondir .. "cpu/thermometer-low.svg"
|
||||
end
|
||||
w:get_children_by_id("icon1")[1].image = gears.color.recolor_image(temp_icon, color["Green200"])
|
||||
tooltip.text = "GPU Temp: " .. temp_num .. "°C"
|
||||
rubato_timer.target = temp_num
|
||||
end
|
||||
)
|
||||
elseif widget == "volume" then
|
||||
@@ -587,7 +608,7 @@ return function()
|
||||
}
|
||||
|
||||
awesome.connect_signal(
|
||||
"update::backlight_widget",
|
||||
"update::backlight",
|
||||
function(backlight, backlight_icon)
|
||||
--w:get_children_by_id("progressbar1")[1].value = backlight
|
||||
w:get_children_by_id("icon1")[1].image = gears.color.recolor_image(backlight_icon, color["Pink200"])
|
||||
|
||||
@@ -4,46 +4,85 @@
|
||||
|
||||
-- Awesome Libs
|
||||
local awful = require("awful")
|
||||
local color = require("src.theme.colors")
|
||||
local dpi = require("beautiful").xresources.apply_dpi
|
||||
local gears = require("gears")
|
||||
local wibox = require("wibox")
|
||||
|
||||
local naughty = require("naughty")
|
||||
-- Icon directory path
|
||||
local icondir = awful.util.getdir("config") .. "src/assets/icons/window_switcher/"
|
||||
|
||||
return function(s)
|
||||
|
||||
-- Variable to check if client is selected
|
||||
|
||||
local list_update = function(widget, buttons, label, _, objects)
|
||||
widget:reset()
|
||||
for _, object in ipairs(objects) do
|
||||
|
||||
local function sort_objects()
|
||||
local objects_sorted = {}
|
||||
objects_sorted[1] = objects[1]
|
||||
local index = 2
|
||||
for _, object in ipairs(objects) do
|
||||
if object ~= nil or object ~= 0 then
|
||||
if object == client.focus then
|
||||
objects_sorted[1] = object
|
||||
else
|
||||
objects_sorted[index] = object
|
||||
index = index + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
index = 2
|
||||
if objects_sorted[1].pid == objects_sorted[2].pid then
|
||||
table.remove(objects_sorted, 2)
|
||||
end
|
||||
return objects_sorted
|
||||
end
|
||||
|
||||
local objects_sorted = sort_objects()
|
||||
|
||||
local selected = objects_sorted[1].pid
|
||||
|
||||
for _, object in ipairs(objects_sorted) do
|
||||
local window_element = wibox.widget {
|
||||
{
|
||||
{
|
||||
{ -- Icon
|
||||
{
|
||||
{ -- Icon
|
||||
{
|
||||
id = "icon",
|
||||
image = object.icon,
|
||||
valign = "center",
|
||||
halign = "center",
|
||||
widget = wibox.widget.imagebox
|
||||
},
|
||||
width = dpi(100),
|
||||
height = dpi(100),
|
||||
id = "icon_const",
|
||||
strategy = "exact",
|
||||
widget = wibox.container.constraint
|
||||
},
|
||||
{
|
||||
id = "icon",
|
||||
image = object.icon,
|
||||
{
|
||||
text = "Application",
|
||||
id = "label",
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
id = "place",
|
||||
valign = "center",
|
||||
halign = "center",
|
||||
widget = wibox.widget.imagebox
|
||||
widget = wibox.container.place
|
||||
},
|
||||
width = dpi(100),
|
||||
height = dpi(100),
|
||||
id = "icon_const",
|
||||
strategy = "exact",
|
||||
widget = wibox.container.constraint
|
||||
id = "layout1",
|
||||
spacing = dpi(10),
|
||||
layout = wibox.layout.fixed.vertical
|
||||
},
|
||||
{
|
||||
text = "Application",
|
||||
id = "label",
|
||||
valign = "center",
|
||||
align = "center",
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
id = "layout1",
|
||||
spacing = dpi(10),
|
||||
layout = wibox.layout.fixed.vertical
|
||||
id = "box",
|
||||
width = dpi(150),
|
||||
height = dpi(150),
|
||||
strategy = "exact",
|
||||
widget = wibox.container.constraint
|
||||
},
|
||||
id = "margin",
|
||||
margins = dpi(20),
|
||||
@@ -52,7 +91,8 @@ return function(s)
|
||||
shape = function(cr, width, height)
|
||||
gears.shape.rounded_rect(cr, width, height, dpi(12))
|
||||
end,
|
||||
bg = Theme_config.window_switcher.element_bg,
|
||||
border_color = Theme_config.window_switcher.border_color,
|
||||
border_width = Theme_config.window_switcher.border_width,
|
||||
fg = Theme_config.window_switcher.element_fg,
|
||||
widget = wibox.container.background
|
||||
}
|
||||
@@ -78,38 +118,122 @@ return function(s)
|
||||
end
|
||||
|
||||
window_element:buttons(create_buttons(buttons, object))
|
||||
local text, _ = label(object, window_element:get_children_by_id("label")[1])
|
||||
|
||||
local text, _ = label(object, window_element.margin.layout1.label)
|
||||
local i = 1
|
||||
local sel = nil
|
||||
|
||||
if object == client.focus then
|
||||
if text == nil or text == "" then
|
||||
window_element:get_children_by_id("label")[1].text = "Application"
|
||||
else
|
||||
local text_full = text:match(">(.-)<")
|
||||
if text_full then
|
||||
if object.class == nil then
|
||||
text = object.name
|
||||
local select_next = function()
|
||||
if #objects_sorted >= i then
|
||||
selected = objects_sorted[i].pid
|
||||
sel = selected
|
||||
|
||||
if object.valid then
|
||||
if selected == object.pid then
|
||||
window_element.border_color = Theme_config.window_switcher.selected_border_color
|
||||
window_element.fg = Theme_config.window_switcher.selected_fg
|
||||
window_element.bg = Theme_config.window_switcher.selected_bg
|
||||
else
|
||||
text = object.class:sub(1, 20)
|
||||
window_element.border_color = Theme_config.window_switcher.border_color
|
||||
window_element.fg = Theme_config.window_switcher.element_fg
|
||||
window_element.bg = Theme_config.window_switcher.bg
|
||||
end
|
||||
end
|
||||
window_element:get_children_by_id("label")[1].text = text
|
||||
end
|
||||
else
|
||||
if #objects_sorted > i then
|
||||
i = i + 1
|
||||
else
|
||||
i = 1
|
||||
end
|
||||
end
|
||||
|
||||
awesome.connect_signal(
|
||||
"window_switcher::select_next",
|
||||
select_next
|
||||
)
|
||||
|
||||
object:connect_signal(
|
||||
"unmanage",
|
||||
function(c)
|
||||
i = 1
|
||||
objects_sorted[1] = objects_sorted[#objects_sorted]
|
||||
objects_sorted[#objects_sorted] = nil
|
||||
if objects_sorted[1] then
|
||||
selected = objects_sorted[1].pid
|
||||
end
|
||||
-- remove object from table
|
||||
for _, object in ipairs(objects) do
|
||||
if object.pid == c.pid then
|
||||
table.remove(objects, _)
|
||||
break
|
||||
end
|
||||
end
|
||||
for _, object in ipairs(objects_sorted) do
|
||||
if object.pid == c.pid then
|
||||
table.remove(objects_sorted, _)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
awesome.connect_signal(
|
||||
"window_switcher::raise",
|
||||
function()
|
||||
if objects_sorted[i] then
|
||||
if object.valid then
|
||||
if sel == object.pid then
|
||||
object:jump_to()
|
||||
end
|
||||
|
||||
-- Reset window switcher
|
||||
i = 1
|
||||
selected = objects_sorted[i].pid
|
||||
sel = selected
|
||||
if selected == object.pid then
|
||||
window_element.border_color = Theme_config.window_switcher.selected_border_color
|
||||
window_element.fg = Theme_config.window_switcher.selected_fg
|
||||
window_element.bg = Theme_config.window_switcher.bg
|
||||
else
|
||||
window_element.border_color = Theme_config.window_switcher.border_color
|
||||
window_element.fg = Theme_config.window_switcher.element_fg
|
||||
window_element.bg = Theme_config.window_switcher.selected_bg
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
if text == nil or text == "" then
|
||||
window_element:get_children_by_id("label")[1].text = "Application"
|
||||
else
|
||||
local text_full = text:match(">(.-)<")
|
||||
if text_full then
|
||||
if object.class == nil then
|
||||
text = object.name
|
||||
else
|
||||
text = object.class:sub(1, 20)
|
||||
end
|
||||
end
|
||||
window_element:get_children_by_id("label")[1].text = object.name
|
||||
end
|
||||
if selected == object.pid then
|
||||
window_element.border_color = Theme_config.window_switcher.selected_border_color
|
||||
window_element.fg = Theme_config.window_switcher.selected_fg
|
||||
window_element.bg = Theme_config.window_switcher.selected_bg
|
||||
end
|
||||
|
||||
window_element:get_children_by_id("icon")[1]:set_image(xdg_icon_lookup:find_icon(object.class, 64))
|
||||
|
||||
widget:add(window_element)
|
||||
widget:set_spacing(dpi(6))
|
||||
widget:set_spacing(dpi(20))
|
||||
end
|
||||
return widget
|
||||
end
|
||||
|
||||
local window_switcher = awful.widget.tasklist(
|
||||
s,
|
||||
awful.widget.tasklist.filter.allscreen,
|
||||
awful.widget.tasklist.source.all_clients,
|
||||
awful.util.table.join(
|
||||
awful.button(
|
||||
{},
|
||||
@@ -133,21 +257,36 @@ return function(s)
|
||||
wibox.layout.fixed.horizontal()
|
||||
)
|
||||
|
||||
local window_switcher_margin = wibox.widget {
|
||||
window_switcher,
|
||||
margins = dpi(20),
|
||||
widget = wibox.container.margin
|
||||
}
|
||||
|
||||
local window_switcher_container = awful.popup {
|
||||
widget = wibox.container.background,
|
||||
ontop = true,
|
||||
visible = false,
|
||||
stretch = false,
|
||||
screen = s,
|
||||
shape = function(cr, width, height)
|
||||
gears.shape.rounded_rect(cr, width, height, dpi(12))
|
||||
end,
|
||||
widget = { window_switcher },
|
||||
placement = awful.placement.centered,
|
||||
bg = Theme_config.window_switcher.bg,
|
||||
border_color = Theme_config.window_switcher.border_color,
|
||||
border_width = Theme_config.window_switcher.border_width
|
||||
}
|
||||
|
||||
awesome.connect_signal(
|
||||
"toggle_window_switcher",
|
||||
function()
|
||||
window_switcher_container.visible = not window_switcher_container.visible
|
||||
end
|
||||
)
|
||||
|
||||
window_switcher_container:setup {
|
||||
window_switcher_margin,
|
||||
layout = wibox.layout.fixed.vertical
|
||||
}
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user