From 6f1198e75d862090a1468e97b15d677a8ad51a0b Mon Sep 17 00:00:00 2001 From: Ksaper Date: Sun, 5 Feb 2023 02:17:46 +0200 Subject: [PATCH] Add support for passing in a template for the app widget --- widget/app_launcher/init.lua | 249 +++++++++++++++++++---------------- 1 file changed, 135 insertions(+), 114 deletions(-) diff --git a/widget/app_launcher/init.lua b/widget/app_launcher/init.lua index cc5a90f..f659d8e 100644 --- a/widget/app_launcher/init.lua +++ b/widget/app_launcher/init.lua @@ -94,146 +94,155 @@ local function select_app(self, x, y) if widgets then self._private.active_widget = widgets[1] if self._private.active_widget ~= nil then + if self.app_template == nil then + self._private.active_widget:get_children_by_id("background_role")[1].bg = self.app_selected_color + local name_widget = self._private.active_widget:get_children_by_id("name_role")[1] + if name_widget then + name_widget.markup = string.format("%s", self.app_name_selected_color, name_widget.text) + end + local generic_name_widget = self._private.active_widget:get_children_by_id("generic_name_role")[1] + if generic_name_widget then + generic_name_widget.markup = string.format("%s", self.app_name_selected_color, generic_name_widget.text) + end + end + self._private.active_widget:emit_signal("selected") self._private.active_widget.selected = true - self._private.active_widget:get_children_by_id("background_role")[1].bg = self.app_selected_color - local name_widget = self._private.active_widget:get_children_by_id("name_role")[1] - if name_widget then - name_widget.markup = string.format("%s", self.app_name_selected_color, name_widget.text) - end - local generic_name_widget = self._private.active_widget:get_children_by_id("generic_name_role")[1] - if generic_name_widget then - generic_name_widget.markup = string.format("%s", self.app_name_selected_color, generic_name_widget.text) - end end end end local function unselect_app(self) if self._private.active_widget ~= nil then - self._private.active_widget.selected = false + if self.app_template == nil then self._private.active_widget:get_children_by_id("background_role")[1].bg = self.app_normal_color - local name_widget = self._private.active_widget:get_children_by_id("name_role")[1] - if name_widget then - name_widget.markup = string.format("%s", self.app_name_normal_color, name_widget.text) - end - local generic_name_widget = self._private.active_widget:get_children_by_id("generic_name_role")[1] - if generic_name_widget then - generic_name_widget.markup = string.format("%s", self.app_name_normal_color, generic_name_widget.text) + local name_widget = self._private.active_widget:get_children_by_id("name_role")[1] + if name_widget then + name_widget.markup = string.format("%s", self.app_name_normal_color, name_widget.text) + end + local generic_name_widget = self._private.active_widget:get_children_by_id("generic_name_role")[1] + if generic_name_widget then + generic_name_widget.markup = string.format("%s", self.app_name_normal_color, generic_name_widget.text) + end end + self._private.active_widget:emit_signal("unselected") + self._private.active_widget.selected = false self._private.active_widget = nil end end -local function create_app_widget(self, entry) - local icon = self.app_show_icon == true and - { - widget = wibox.widget.imagebox, - id = "icon_role", - halign = self.app_icon_halign, - forced_width = self.app_icon_width, - forced_height = self.app_icon_height, - image = entry.icon - } or nil +local function create_app_widget(self, app) + local app_widget = nil - local name = self.app_show_name == true and - { - widget = wibox.widget.textbox, - id = "name_role", - font = self.app_name_font, - markup = string.format("%s", self.app_name_normal_color, entry.name) - } or nil - - local generic_name = entry.generic_name ~= nil and self.app_show_generic_name == true and - { - widget = wibox.widget.textbox, - id = "generic_name_role", - font = self.app_name_font, - markup = entry.generic_name ~= "" and " (" .. entry.generic_name .. ")" or "" - } or nil - - local app = wibox.widget - { - widget = wibox.container.background, - id = "background_role", - forced_width = self.app_width, - forced_height = self.app_height, - shape = self.app_shape, - bg = self.app_normal_color, + if self.app_template == nil then + local icon = self.app_show_icon == true and { - widget = wibox.container.margin, - margins = self.app_content_padding, + widget = wibox.widget.imagebox, + id = "icon_role", + halign = self.app_icon_halign, + forced_width = self.app_icon_width, + forced_height = self.app_icon_height, + image = app.icon + } or nil + + local name = self.app_show_name == true and + { + widget = wibox.widget.textbox, + id = "name_role", + font = self.app_name_font, + markup = string.format("%s", self.app_name_normal_color, app.name) + } or nil + + local generic_name = app.generic_name ~= nil and self.app_show_generic_name == true and + { + widget = wibox.widget.textbox, + id = "generic_name_role", + font = self.app_name_font, + markup = app.generic_name ~= "" and " (" .. app.generic_name .. ")" or "" + } or nil + + app_widget = wibox.widget + { + widget = wibox.container.background, + id = "background_role", + forced_width = self.app_width, + forced_height = self.app_height, + shape = self.app_shape, + bg = self.app_normal_color, { - -- Using this hack instead of container.place because that will fuck with the name/icon halign - layout = wibox.layout.align.vertical, - expand = "outside", - nil, + widget = wibox.container.margin, + margins = self.app_content_padding, { - layout = wibox.layout.fixed.vertical, - spacing = self.app_content_spacing, - icon, + -- Using this hack instead of container.place because that will fuck with the name/icon halign + layout = wibox.layout.align.vertical, + expand = "outside", + nil, { - widget = wibox.container.place, - halign = self.app_name_halign, + layout = wibox.layout.fixed.vertical, + spacing = self.app_content_spacing, + icon, { - layout = wibox.layout.fixed.horizontal, - spacing = self.app_name_generic_name_spacing, - name, - generic_name + widget = wibox.container.place, + halign = self.app_name_halign, + { + layout = wibox.layout.fixed.horizontal, + spacing = self.app_name_generic_name_spacing, + name, + generic_name + } } - } - }, - nil + }, + nil + } } } - } - function app:spawn() - if entry.terminal == true then - awful.spawn.with_shell(AWESOME_SENSIBLE_TERMINAL_PATH .. " -e " .. entry.executable) - else - awful.spawn(entry.executable) + app_widget:connect_signal("mouse::enter", function() + local widget = capi.mouse.current_wibox + if widget then + widget.cursor = "hand2" + end + + if app_widget.selected then + app_widget:get_children_by_id("background_role")[1].bg = self.app_selected_hover_color + else + app_widget:get_children_by_id("background_role")[1].bg = self.app_normal_hover_color + end + end) + + app_widget:connect_signal("mouse::leave", function() + local widget = capi.mouse.current_wibox + if widget then + widget.cursor = "left_ptr" + end + + if app_widget.selected then + app_widget:get_children_by_id("background_role")[1].bg = self.app_selected_color + else + app_widget:get_children_by_id("background_role")[1].bg = self.app_normal_color + end + end) + else + app_widget = self.app_template(app) + + local icon = app_widget:get_children_by_id("icon_role")[1] + if icon then + icon.image = app.icon end - - if self.hide_on_launch then - self:hide() + local name = app_widget:get_children_by_id("name_role")[1] + if name then + name.text = app.name + end + local generic_name = app_widget:get_children_by_id("generic_name_role")[1] + if generic_name then + generic_name.text = app.generic_name + end + local command = app_widget:get_children_by_id("command_role")[1] + if command then + command.text = app.executable end end - app:connect_signal("mouse::enter", function(_self) - local widget = capi.mouse.current_wibox - if widget then - widget.cursor = "hand2" - end - - local app = _self - if app.selected then - app:get_children_by_id("background_role")[1].bg = self.app_selected_hover_color - else - local is_opaque = color.is_opaque(self.app_normal_color) - local is_dark = color.is_dark(self.app_normal_color) - local app_normal_color = color.hex_to_rgba(self.app_normal_color) - local hover_color = (is_dark or is_opaque) and - color.rgba_to_hex(color.multiply(app_normal_color, 2.5)) or - color.rgba_to_hex(color.multiply(app_normal_color, 0.5)) - app:get_children_by_id("background_role")[1].bg = self.app_normal_hover_color - end - end) - - app:connect_signal("mouse::leave", function(_self) - local widget = capi.mouse.current_wibox - if widget then - widget.cursor = "left_ptr" - end - - local app = _self - if app.selected then - app:get_children_by_id("background_role")[1].bg = self.app_selected_color - else - app:get_children_by_id("background_role")[1].bg = self.app_normal_color - end - end) - - app:connect_signal("button::press", function(app, _, __, button) + app_widget:connect_signal("button::press", function(app, _, __, button) if button == 1 then if self._private.active_widget == app or not self.select_before_spawn then app:spawn() @@ -248,7 +257,19 @@ local function create_app_widget(self, entry) end end) - return app + function app_widget:spawn() + if app.terminal == true then + awful.spawn.with_shell(AWESOME_SENSIBLE_TERMINAL_PATH .. " -e " .. app.executable) + else + awful.spawn(app.executable) + end + + if self.hide_on_launch then + self:hide() + end + end + + return app_widget end local function search(self, text)