diff --git a/widget/app_launcher/init.lua b/widget/app_launcher/init.lua index 469e2e4..3a07e94 100644 --- a/widget/app_launcher/init.lua +++ b/widget/app_launcher/init.lua @@ -7,7 +7,7 @@ local gfilesystem = require("gears.filesystem") local wibox = require("wibox") local beautiful = require("beautiful") local color = require(tostring(...):match(".*bling") .. ".helpers.color") -local prompt = require(... .. ".prompt") +local prompt_widget = require(... .. ".prompt") local dpi = beautiful.xresources.apply_dpi local string = string local table = table @@ -563,6 +563,111 @@ local function generate_apps(self) end end +local function build_widget(self) + local widget = self.widget_template() + + self._private.prompt = widget:get_children_by_id("prompt_role")[1] or prompt_widget + { + prompt = self.prompt_label, + font = self.prompt_font, + reset_on_stop = self.reset_on_hide, + bg_cursor = beautiful.bg_normal or "#000000", + history_path = self.save_history == true and gfilesystem.get_cache_dir() .. "/history" or nil, + } + self._private.grid = widget:get_children_by_id("grid_role")[1] or wibox.widget + { + layout = wibox.layout.grid, + orientation = "horizontal", + homogeneous = true, + expand = self.expand_apps, + spacing = self.apps_spacing, + forced_num_cols = self.apps_per_column, + forced_num_rows = self.apps_per_row, + buttons = + { + awful.button({}, 4, function() self:scroll_up() end), + awful.button({}, 5, function() self:scroll_down() end) + } + } + self._private.widget = awful.popup + { + type = self.type, + visible = false, + ontop = true, + placement = self.placement, + border_width = self.border_width, + border_color = self.border_color, + shape = self.shape, + bg = self.background, + widget = self.widget_template() or + { + layout = wibox.layout.fixed.vertical, + { + widget = wibox.container.background, + forced_height = dpi(100), + bg = self.prompt_bg_color, + fg = self.prompt_text_color, + { + widget = wibox.container.margin, + margins = dpi(30), + { + widget = wibox.container.place, + halign = "left", + valign = "center", + { + layout = wibox.layout.fixed.horizontal, + spacing = dpi(10), + { + widget = wibox.widget.textbox, + font = self.prompt_icon_font, + markup = string.format("%s", args.prompt_icon_color, args.prompt_icon) + }, + self._private.prompt.textbox + } + } + } + }, + { + widget = wibox.container.margin, + margins = dpi(30), + self._private.grid + } + } + } + + self._private.prompt:connect_signal("text::changed", function(text) + if text == self._private.text then + return + end + + self._private.text = text + self._private.search_timer:again() + end) + + self._private.prompt:connect_signal("key::press", function(mod, key, cmd) + if key == "Escape" then + self:hide() + end + if key == "Return" then + if self._private.active_widget ~= nil then + self._private.active_widget:spawn() + end + end + if key == "Up" then + self:scroll_up() + end + if key == "Down" then + self:scroll_down() + end + if key == "Left" then + self:scroll_left() + end + if key == "Right" then + self:scroll_right() + end + end) +end + -- Sets favorites function app_launcher:set_favorites(favorites) self.favorites = favorites @@ -777,106 +882,6 @@ local function new(args) end } - - ret._private.prompt = prompt - { - prompt = ret.prompt_label, - font = ret.prompt_font, - reset_on_stop = ret.reset_on_hide, - bg_cursor = beautiful.bg_normal or "#000000", - history_path = ret.save_history == true and gfilesystem.get_cache_dir() .. "/history" or nil, - changed_callback = function(text) - if text == ret._private.text then - return - end - - ret._private.text = text - ret._private.search_timer:again() - end, - keypressed_callback = function(mod, key, cmd) - if key == "Escape" then - ret:hide() - end - if key == "Return" then - if ret._private.active_widget ~= nil then - ret._private.active_widget:spawn() - end - end - if key == "Up" then - ret:scroll_up() - end - if key == "Down" then - ret:scroll_down() - end - if key == "Left" then - ret:scroll_left() - end - if key == "Right" then - ret:scroll_right() - end - end - } - ret._private.grid = wibox.widget - { - layout = wibox.layout.grid, - orientation = "horizontal", - homogeneous = true, - expand = ret.expand_apps, - spacing = ret.apps_spacing, - forced_num_cols = ret.apps_per_column, - forced_num_rows = ret.apps_per_row, - buttons = - { - awful.button({}, 4, function() ret:scroll_up() end), - awful.button({}, 5, function() ret:scroll_down() end) - } - } - ret._private.widget = awful.popup - { - type = args.type, - visible = false, - ontop = true, - placement = ret.placement, - border_width = ret.border_width, - border_color = ret.border_color, - shape = ret.shape, - bg = ret.background, - widget = args.widget_template ~= nil and args.widget_template(ret._private.prompt.textbox, ret._private.grid) or - { - layout = wibox.layout.fixed.vertical, - { - widget = wibox.container.background, - forced_height = dpi(100), - bg = ret.prompt_bg_color, - fg = ret.prompt_text_color, - { - widget = wibox.container.margin, - margins = dpi(30), - { - widget = wibox.container.place, - halign = "left", - valign = "center", - { - layout = wibox.layout.fixed.horizontal, - spacing = dpi(10), - { - widget = wibox.widget.textbox, - font = ret.prompt_icon_font, - markup = string.format("%s", args.prompt_icon_color, args.prompt_icon) - }, - ret._private.prompt.textbox - } - } - } - }, - { - widget = wibox.container.margin, - margins = dpi(30), - ret._private.grid - } - } - } - if ret.rubato and ret.rubato.x then ret.rubato.x:subscribe(function(pos) ret._private.widget.x = pos @@ -921,6 +926,7 @@ local function new(args) end}) end) + build_widget(ret) generate_apps(ret) reset(ret)