diff --git a/docs/89-NEWS.md b/docs/89-NEWS.md index 4b118781..ed991c8a 100644 --- a/docs/89-NEWS.md +++ b/docs/89-NEWS.md @@ -21,6 +21,15 @@ This document was last updated at commit v4.3-148-g795c792d1. * `naughty` was rewritten TODO TODO say more about this TODO TODO * The `rules` argument in `awful.spawn.once` and `.single_instance` is now optional +* The `wibox.container.background` now has a `border_strategy` property to + define how the content is resized when a border is present. +* The `wibox.container.margin` now allows tables in the `margins` property. +* The declarative widget systax now allows to directly use functions instead of + `{widget = myfunction}`. +* The `awful.widget.tasklist` now resize the client icons properly. +* The `awful.widget.tasklist` and `awful.widget.taglist` will now set the + `client` and `tag` properly respectively on each widget of the template + automatically. This reduces the amount of boilerplate code. ## Noteworthy fixes diff --git a/docs/config.ld b/docs/config.ld index 5a264241..e47df040 100644 --- a/docs/config.ld +++ b/docs/config.ld @@ -53,6 +53,8 @@ tparam_alias('screen_or_idx', 'screen|int') new_type("function", "Functions") -- Documentation for objects properties new_type("property", "Object properties", false, "Type") +-- Documentation for objects deprecated properties +new_type("deprecatedproperty", "Deprecated object properties", false, "Type") -- New type for signals new_type("signal", "Signals", false, "Arguments") -- New type for signals connections @@ -142,7 +144,8 @@ file = { } local no_prefix = { - property = true, signal = true, clientruleproperty = true + property = true, signal = true, clientruleproperty = true, + deprecatedproperty = true, } custom_display_name_handler = function(item, default_handler) @@ -153,7 +156,7 @@ custom_display_name_handler = function(item, default_handler) return name ~= "" and name or item.name end - if item.type == "deprecated" then + if item.type == "deprecated" or item.type == "deprecatedproperty" then return default_handler(item) .. " [deprecated]" end diff --git a/lib/awful/tooltip.lua b/lib/awful/tooltip.lua index 62970d96..5fb6db1f 100644 --- a/lib/awful/tooltip.lua +++ b/lib/awful/tooltip.lua @@ -465,7 +465,7 @@ end -- @param number function tooltip:set_border_width(val) - self.widget.shape_border_width = val + self.widget.border_width = val end --- The border color. @@ -476,7 +476,7 @@ end -- @param gears.color function tooltip:set_border_color(val) - self.widget.shape_border_color = val + self.widget.border_color = val end --- Set the margins around the left and right of the tooltip textbox @@ -679,23 +679,23 @@ function tooltip.new(args) self.widget = wibox.widget { { { - id = 'text_role', - font = font, + id = 'text_role', + font = font, widget = wibox.widget.textbox, }, - id = 'margin_role', - left = m_lr, - right = m_lr, - top = m_tb, + id = 'margin_role', + left = m_lr, + right = m_lr, + top = m_tb, bottom = m_tb, widget = wibox.container.margin, }, - id = 'background_role', - bg = bg, - shape = self._private.shape, - shape_border_width = border_width, - shape_border_color = border_color, - widget = wibox.container.background, + id = 'background_role', + bg = bg, + shape = self._private.shape, + border_width = border_width, + border_color = border_color, + widget = wibox.container.background, } self.textbox = self.widget:get_children_by_id('text_role')[1] self.marginbox = self.widget:get_children_by_id('margin_role')[1] diff --git a/lib/awful/widget/calendar_popup.lua b/lib/awful/widget/calendar_popup.lua index d4bc8128..df49c89c 100644 --- a/lib/awful/widget/calendar_popup.lua +++ b/lib/awful/widget/calendar_popup.lua @@ -39,14 +39,12 @@ local calendar_popup = { offset = 0, mt = {} } local properties = { "markup", "fg_color", "bg_color", "shape", "padding", "border_width", "border_color", "opacity" } local styles = { "year", "month", "yearheader", "monthheader", "header", "weekday", "weeknumber", "normal", "focus" } - --- The generic calendar style table. -- -- Each table property can also be defined by `beautiful.calendar_[flag]_[property]=val`. -- @beautiful beautiful.calendar_style -- @tparam cell_properties table Table of cell style properties - --- Cell properties. -- @field markup Markup function or format string -- @field fg_color Text foreground color @@ -69,8 +67,6 @@ local styles = { "year", "month", "yearheader", "monthheader", "header", "weekda -- @field focus Current day cell properties table -- @table cell_flags - - --- Create a container for the grid layout -- @tparam table tprops Table of calendar container properties. -- @treturn function Embedding function widget,flag,date -> widget @@ -98,20 +94,19 @@ local function embed(tprops) margins = props.padding + props.border_width, widget = wibox.container.margin }, - shape = props.shape or gears.shape.rectangle, - shape_border_color = props.border_color, - shape_border_width = props.border_width, - fg = props.fg_color, - bg = props.bg_color, - opacity = props.opacity, - widget = wibox.container.background + shape = props.shape or gears.shape.rectangle, + border_color = props.border_color, + border_width = props.border_width, + fg = props.fg_color, + bg = props.bg_color, + opacity = props.opacity, + widget = wibox.container.background } return out end return fn end - --- Parse the properties of the cell type and set default values -- @tparam string cell The cell type -- @tparam table args Table of properties to enforce @@ -165,7 +160,6 @@ local function parse_all_options(args) return props end - --- Make the geometry of a wibox -- @tparam widget widget Calendar widget -- @tparam object screen Screen where to display the calendar (default to focused) @@ -236,14 +230,12 @@ function calendar_popup:call_calendar(offset, position, screen) return self end - --- Toggle calendar visibility function calendar_popup:toggle() self:call_calendar(0) self.visible = not self.visible end - --- Attach the calendar to a widget to display at a specific position. -- -- local mytextclock = wibox.widget.textclock() @@ -286,7 +278,6 @@ function calendar_popup:attach(widget, position, args) return self end - --- Return a new calendar wibox by type. -- -- A calendar widget displaying a `month` or a `year` @@ -385,7 +376,6 @@ function calendar_popup.month(args) return get_cal_wibox("month", args) end - --- A year calendar wibox. -- -- It is highly customizable using the same options as for the widgets. diff --git a/lib/awful/widget/common.lua b/lib/awful/widget/common.lua index 8649dad0..35dbfb7c 100644 --- a/lib/awful/widget/common.lua +++ b/lib/awful/widget/common.lua @@ -62,6 +62,7 @@ local function default_template() return custom_template { widget_template = { id = 'background_role', + border_strategy = 'inner', widget = wibox.container.background, { widget = wibox.layout.fixed.horizontal, @@ -90,6 +91,19 @@ local function default_template() } end +-- Find all the childrens (without the hierarchy) and set a property. +function common._set_common_property(widget, property, value) + if widget["set_"..property] then + widget["set_"..property](widget, value) + end + + if widget.get_children then + for _, w in ipairs(widget:get_children()) do + common._set_common_property(w, property, value) + end + end +end + --- Common update method. -- @param w The widget. -- @tab buttons @@ -115,6 +129,10 @@ function common.list_update(w, buttons, label, data, objects, args) cache.create_callback(cache.primary, o, i, objects) end + if args and args.create_callback then + args.create_callback(cache.primary, o, i, objects) + end + data[o] = cache elseif cache.update_callback then cache.update_callback(cache.primary, o, i, objects) @@ -148,9 +166,9 @@ function common.list_update(w, buttons, label, data, objects, args) }) end - cache.bgb.shape = item_args.shape - cache.bgb.shape_border_width = item_args.shape_border_width - cache.bgb.shape_border_color = item_args.shape_border_color + cache.bgb.shape = item_args.shape + cache.bgb.border_width = item_args.shape_border_width + cache.bgb.border_color = item_args.shape_border_color end @@ -160,6 +178,14 @@ function common.list_update(w, buttons, label, data, objects, args) cache.ibm:set_margins(0) end + if item_args.icon_size and cache.ib then + cache.ib.forced_height = item_args.icon_size + cache.ib.forced_width = item_args.icon_size + elseif cache.ib then + cache.ib.forced_height = nil + cache.ib.forced_width = nil + end + w:add(cache.primary) end end diff --git a/lib/awful/widget/taglist.lua b/lib/awful/widget/taglist.lua index d806ada1..a384ed1d 100644 --- a/lib/awful/widget/taglist.lua +++ b/lib/awful/widget/taglist.lua @@ -261,6 +261,7 @@ function taglist.taglist_label(t, args) local shape = args.shape or theme.taglist_shape local shape_border_width = args.shape_border_width or theme.taglist_shape_border_width local shape_border_color = args.shape_border_color or theme.taglist_shape_border_color + local icon_size = args.icon_size or theme.taglist_icon_size -- TODO: Re-implement bg_resize local bg_resize = false -- luacheck: ignore local is_selected = false @@ -379,11 +380,17 @@ function taglist.taglist_label(t, args) shape = shape, shape_border_width = shape_border_width, shape_border_color = shape_border_color, + icon_size = icon_size, } return text, bg_color, bg_image, not taglist_disable_icon and icon or nil, other_args end +-- Remove some callback boilerplate from the user provided templates. +local function create_callback(w, t) + common._set_common_property(w, "tag", t) +end + local function taglist_update(s, w, buttons, filter, data, style, update_function, args) local tags = {} @@ -398,7 +405,10 @@ local function taglist_update(s, w, buttons, filter, data, style, update_functio local function label(c) return taglist.taglist_label(c, style) end - update_function(w, buttons, label, data, tags, args) + update_function(w, buttons, label, data, tags, { + widget_template = args.widget_template, + create_callback = create_callback, + }) end --- Create a new taglist widget. The last two arguments (update_function diff --git a/lib/awful/widget/tasklist.lua b/lib/awful/widget/tasklist.lua index 332927b5..bfe6a070 100644 --- a/lib/awful/widget/tasklist.lua +++ b/lib/awful/widget/tasklist.lua @@ -87,7 +87,13 @@ local timer = require("gears.timer") local gcolor = require("gears.color") local gstring = require("gears.string") local gdebug = require("gears.debug") +local dpi = require("beautiful").xresources.apply_dpi local base = require("wibox.widget.base") +local wfixed = require("wibox.layout.fixed") +local wmargin = require("wibox.container.margin") +local wtextbox = require("wibox.widget.textbox") +local clienticon = require("awful.widget.clienticon") +local wbackground = require("wibox.container.background") local function get_screen(s) return s and screen[s] @@ -247,6 +253,32 @@ local instances -- Public structures tasklist.filter, tasklist.source = {}, {} +-- This is the same template as awful.widget.common, but with an clienticon widget +local default_template = { + { + { + clienticon, + id = "icon_margin_role", + left = dpi(4), + widget = wmargin + }, + { + { + id = "text_role", + widget = wtextbox, + }, + id = "text_margin_role", + left = dpi(4), + right = dpi(4), + widget = wmargin + }, + fill_space = true, + layout = wfixed.horizontal + }, + id = "background_role", + widget = wbackground +} + local function tasklist_label(c, args, tb) if not args then args = {} end local theme = beautiful.get() @@ -279,6 +311,7 @@ local function tasklist_label(c, args, tb) local shape = args.shape or theme.tasklist_shape local shape_border_width = args.shape_border_width or theme.tasklist_shape_border_width local shape_border_color = args.shape_border_color or theme.tasklist_shape_border_color + local icon_size = args.icon_size or theme.tasklist_icon_size -- symbol to use to indicate certain client properties local sticky = args.sticky or theme.tasklist_sticky or "▪" @@ -394,11 +427,17 @@ local function tasklist_label(c, args, tb) shape = shape, shape_border_width = shape_border_width, shape_border_color = shape_border_color, + icon_size = icon_size, } return text, bg, bg_image, not tasklist_disable_icon and c.icon or nil, other_args end +-- Remove some callback boilerplate from the user provided templates. +local function create_callback(w, t) + common._set_common_property(w, "client", t) +end + local function tasklist_update(s, w, buttons, filter, data, style, update_function, args) local clients = {} @@ -415,7 +454,10 @@ local function tasklist_update(s, w, buttons, filter, data, style, update_functi local function label(c, tb) return tasklist_label(c, style, tb) end - update_function(w, buttons, label, data, clients, args) + update_function(w, buttons, label, data, clients, { + widget_template = args.widget_template or default_template, + create_callback = create_callback, + }) end --- Create a new tasklist widget. @@ -451,6 +493,7 @@ end -- @tparam[opt=nil] string args.style.bg_image_urgent -- @tparam[opt=nil] string args.style.bg_image_minimize -- @tparam[opt=nil] boolean args.style.tasklist_disable_icon +-- @tparam[opt=nil] number args.style.icon_size The size of the icon -- @tparam[opt=false] boolean args.style.disable_task_name -- @tparam[opt=nil] string args.style.font -- @tparam[opt=left] string args.style.align *left*, *right* or *center* diff --git a/lib/naughty/core.lua b/lib/naughty/core.lua index 57879115..98bbb08f 100644 --- a/lib/naughty/core.lua +++ b/lib/naughty/core.lua @@ -111,6 +111,17 @@ gtable.crush(naughty, require("naughty.constants")) -- @property expiration_paused -- @param[opt=false] boolean +--- A table with all active notifications. +-- +-- Please note that this list is kept up-to-date even in suspended mode. +-- +-- **Signal:** +-- +-- * property::active +-- +-- @property active +-- @param table + local properties = { suspended = false, expiration_paused = false @@ -129,6 +140,9 @@ local properties = { -- @field id Unique notification id based on a counter -- @table notifications naughty.notifications = { suspended = { }, _expired = {{}} } + +naughty._active = {} + screen.connect_for_each_screen(function(s) naughty.notifications[s] = { top_left = {}, @@ -315,12 +329,17 @@ function naughty.get_by_id(id) for _, notification in pairs(naughty.notifications[s][p]) do if notification.id == id then return notification - end + end end end end end +-- Use an explicit getter to make it read only. +function naughty.get_active() + return naughty._active +end + --- Set new notification timeout. -- -- This function is deprecated, use `notification:reset_timeout(new_timeout)`. @@ -380,6 +399,14 @@ local function cleanup(self, reason) n.idx = k end + -- Remove from the global active list. + for k, n in ipairs(naughty._active) do + if n == self then + table.remove(naughty._active, k) + naughty.emit_signal("property::active") + end + end + -- `self.timer.started` will be false if the expiration was paused. if self.timer and self.timer.started then self.timer:stop() @@ -439,8 +466,6 @@ end -- including, but not limited to, all `naughty.notification` properties. -- @signal request::preset - - -- Register a new notification object. local function register(notification, args) @@ -451,6 +476,7 @@ local function register(notification, args) local s = get_screen(args.screen or notification.preset.screen or screen.focused()) -- insert the notification to the table + table.insert(naughty._active, notification) table.insert(naughty.notifications[s][notification.position], notification) notification.idx = #naughty.notifications[s][notification.position] notification.screen = s @@ -464,6 +490,8 @@ local function register(notification, args) assert(rawget(notification, "preset")) + naughty.emit_signal("property::active") + -- return the notification return notification end diff --git a/lib/naughty/layout/legacy.lua b/lib/naughty/layout/legacy.lua index 04caa4ec..724278f4 100644 --- a/lib/naughty/layout/legacy.lua +++ b/lib/naughty/layout/legacy.lua @@ -241,10 +241,6 @@ local function set_escaped_text(self) if self.size_info then update_size(self) end end -naughty.connect_signal("property::text" ,set_escaped_text) -naughty.connect_signal("property::title",set_escaped_text) - - local function cleanup(self, _ --[[reason]], keep_visible) -- It is not a legacy notification if not self.box then return end diff --git a/lib/wibox/container/background.lua b/lib/wibox/container/background.lua index d7f8403a..a88d9dd7 100644 --- a/lib/wibox/container/background.lua +++ b/lib/wibox/container/background.lua @@ -14,6 +14,8 @@ local surface = require("gears.surface") local beautiful = require("beautiful") local cairo = require("lgi").cairo local gtable = require("gears.table") +local gshape = require("gears.shape") +local gdebug = require("gears.debug") local setmetatable = setmetatable local type = type local unpack = unpack or table.unpack -- luacheck: globals unpack (compatibility with Lua 5.1) @@ -30,8 +32,11 @@ end -- Prepare drawing the children of this widget function background:before_draw_children(context, cr, width, height) + local bw = self._private.shape_border_width or 0 + local shape = self._private.shape or (bw > 0 and gshape.rectangle or nil) + -- Redirect drawing to a temporary surface if there is a shape - if self._private.shape then + if shape then cr:push_group_with_content(cairo.Content.COLOR_ALPHA) end @@ -63,15 +68,17 @@ end -- Draw the border function background:after_draw_children(_, cr, width, height) - if not self._private.shape then + local bw = self._private.shape_border_width or 0 + local shape = self._private.shape or (bw > 0 and gshape.rectangle or nil) + + if not shape then return end -- Okay, there is a shape. Get it as a path. - local bw = self._private.shape_border_width or 0 cr:translate(bw, bw) - self._private.shape(cr, width - 2*bw, height - 2*bw, unpack(self._private.shape_args or {})) + shape(cr, width - 2*bw, height - 2*bw, unpack(self._private.shape_args or {})) cr:translate(-bw, -bw) if bw > 0 then @@ -126,7 +133,12 @@ end -- Layout this widget function background:layout(_, width, height) if self._private.widget then - return { base.place_widget_at(self._private.widget, 0, 0, width, height) } + local bw = self._private.border_strategy == "inner" and + self._private.shape_border_width or 0 + + return { base.place_widget_at( + self._private.widget, bw, bw, width-2*bw, height-2*bw + ) } end end @@ -136,7 +148,14 @@ function background:fit(context, width, height) return 0, 0 end - return base.fit_widget(self, context, self._private.widget, width, height) + local bw = self._private.border_strategy == "inner" and + self._private.shape_border_width or 0 + + local w, h = base.fit_widget( + self, context, self._private.widget, width - 2*bw, height - 2*bw + ) + + return w+2*bw, h+2*bw end --- The widget displayed in the background widget. @@ -207,7 +226,7 @@ function background:get_fg() return self._private.foreground end ---- The background shap e. +--- The background shape. -- -- Use `set_shape` to set additional shape paramaters. -- @@ -240,38 +259,85 @@ end --- When a `shape` is set, also draw a border. -- -- See `wibox.container.background.shape` for an usage example. --- @property shape_border_width +-- @deprecatedproperty shape_border_width -- @tparam number width The border width +-- @see border_width -function background:set_shape_border_width(width) +--- Add a border of a specific width. +-- +-- If the shape is set, the border will also be shaped. +-- +-- See `wibox.container.background.shape` for an usage example. +-- @property border_width +-- @tparam[opt=0] number width The border width. +-- @see border_color + +function background:set_border_width(width) if self._private.shape_border_width == width then return end self._private.shape_border_width = width self:emit_signal("widget::redraw_needed") end -function background:get_shape_border_width() +function background:get_border_width() return self._private.shape_border_width end +function background.get_shape_border_width(...) + gdebug.deprecate("Use `border_width` instead of `shape_border_width`", + {deprecated_in=5}) + + return background.get_border_width(...) +end + +function background.set_shape_border_width(...) + gdebug.deprecate("Use `border_width` instead of `shape_border_width`", + {deprecated_in=5}) + + background.set_border_width(...) +end + --- When a `shape` is set, also draw a border. -- -- See `wibox.container.background.shape` for an usage example. --- @property shape_border_color +-- @deprecatedproperty shape_border_color -- @param[opt=self._private.foreground] fg The border color, pattern or gradient -- @see gears.color +-- @see border_color -function background:set_shape_border_color(fg) +--- Set the color for the border. +-- +-- See `wibox.container.background.shape` for an usage example. +-- @property border_color +-- @param[opt=self._private.foreground] fg The border color, pattern or gradient +-- @see gears.color +-- @see border_width + +function background:set_border_color(fg) if self._private.shape_border_color == fg then return end self._private.shape_border_color = fg self:emit_signal("widget::redraw_needed") end -function background:get_shape_border_color() +function background:get_border_color() return self._private.shape_border_color end +function background.get_shape_border_color(...) + gdebug.deprecate("Use `border_color` instead of `shape_border_color`", + {deprecated_in=5}) + + return background.get_border_color(...) +end + +function background.set_shape_border_color(...) + gdebug.deprecate("Use `border_color` instead of `shape_border_color`", + {deprecated_in=5}) + + background.set_border_color(...) +end + function background:set_shape_clip(value) if value then return end require("gears.debug").print_warning("shape_clip property of background container was removed." @@ -284,6 +350,21 @@ function background:get_shape_clip() return true end +--- How the border width affects the contained widget. +-- +-- The valid values are: +-- +-- * *none*: Just apply the border, do not affect the content size (default). +-- * *inner*: Squeeze the size of the content by the border width. +-- +-- @property border_strategy +-- @param[opt="none"] string + +function background:set_border_strategy(value) + self._private.border_strategy = value + self:emit_signal("widget::layout_changed") +end + --- The background image to use -- If `image` is a function, it will be called with `(context, cr, width, height)` -- as arguments. Any other arguments passed to this method will be appended. diff --git a/lib/wibox/container/margin.lua b/lib/wibox/container/margin.lua index dcdd2f1b..632a007e 100644 --- a/lib/wibox/container/margin.lua +++ b/lib/wibox/container/margin.lua @@ -95,20 +95,30 @@ end --- Set all the margins to val. -- @property margins --- @tparam number val The margin value +-- @tparam number|table val The margin value. It can be a number or a table with +-- the *left*/*right*/*top*/*bottom* keys. function margin:set_margins(val) - if self._private.left == val and - self._private.right == val and - self._private.top == val and - self._private.bottom == val then - return + + if type(val) == "number" or not val then + if self._private.left == val and + self._private.right == val and + self._private.top == val and + self._private.bottom == val then + return + end + + self._private.left = val + self._private.right = val + self._private.top = val + self._private.bottom = val + elseif type(val) == "table" then + self._private.left = val.left or self._private.left + self._private.right = val.right or self._private.right + self._private.top = val.top or self._private.top + self._private.bottom = val.bottom or self._private.bottom end - self._private.left = val - self._private.right = val - self._private.top = val - self._private.bottom = val self:emit_signal("widget::layout_changed") end diff --git a/lib/wibox/widget/base.lua b/lib/wibox/widget/base.lua index 15096b1e..a0ddf551 100644 --- a/lib/wibox/widget/base.lua +++ b/lib/wibox/widget/base.lua @@ -420,6 +420,14 @@ function base.place_widget_at(widget, x, y, width, height) return base.place_widget_via_matrix(widget, matrix.create_translate(x, y), width, height) end +-- Check if `obj` can be called (either using the metacall or as a function) +local function is_callable(obj) + local t = type(obj) + return t == "function" or ( + t == "table" and getmetatable(obj) and getmetatable(obj).__call + ), t +end + -- Read the table, separate attributes from widgets. local function parse_table(t, leave_empty) local max = 0 @@ -491,9 +499,11 @@ local function drill(ids, content) local v, id2, e = widgets[k], id, nil if v then -- It is another declarative container, parse it. - if not v.is_widget then + if (not v.is_widget) and (v.widget or v.layout) then e, id2 = drill(ids, v) widgets[k] = e + elseif (not v.is_widget) and is_callable(v) then + widgets[k] = v() end base.check_widget(widgets[k]) @@ -599,13 +609,11 @@ end -- @param[opt=nil] ... Arguments passed to the contructor (if any). -- @treturn The new widget. function base.make_widget_from_value(wdg, ...) - local is_table = type(wdg) == "table" - local is_function = ((not is_table) and type(wdg) == "function") - or (is_table and getmetatable(wdg) and getmetatable(wdg).__call) + local is_function, t = is_callable(wdg) if is_function then wdg = wdg(...) - elseif is_table and not wdg.is_widget then + elseif t == "table" and not wdg.is_widget then wdg = base.make_widget_declarative(wdg) else assert(wdg.is_widget, "The argument is not a function, table, or widget.") diff --git a/tests/examples/awful/notification/corner.lua b/tests/examples/awful/notification/corner.lua new file mode 100644 index 00000000..9cbc9128 --- /dev/null +++ b/tests/examples/awful/notification/corner.lua @@ -0,0 +1,20 @@ +--DOC_HIDE_ALL +local naughty = require("naughty") --DOC_HIDE + +for _, pos in ipairs { + "top_left", + "top_middle", + "top_right", + "bottom_left", + "bottom_middle", + "bottom_right", +} do + naughty.notify { + title = pos, + position = pos, + text = "", + } +end + + +--DOC_HIDE vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 diff --git a/tests/examples/awful/popup/wiboxtypes.lua b/tests/examples/awful/popup/wiboxtypes.lua index 1a47c627..02e851cb 100644 --- a/tests/examples/awful/popup/wiboxtypes.lua +++ b/tests/examples/awful/popup/wiboxtypes.lua @@ -1,11 +1,13 @@ --DOC_GEN_IMAGE --DOC_HIDE_ALL --DOC_NO_USAGE +--DOC_NO_DASH require("_date") local awful = require("awful") local gears = require("gears") local wibox = require("wibox") local beautiful = require("beautiful") --DOC_HIDE +local look = require("_default_look") screen[1]._resize {width = 640, height = 480} @@ -23,36 +25,6 @@ c:geometry { c._old_geo = {c:geometry()} c:set_label("A client") -local wb = awful.wibar { - position = "top", -} - --- Create the same number of tags as the default config -awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, screen[1], awful.layout.layouts[1]) - --- Only bother with widgets that are visible by default -local mykeyboardlayout = awful.widget.keyboardlayout() -local mytextclock = wibox.widget.textclock() -local mylayoutbox = awful.widget.layoutbox(screen[1]) -local mytaglist = awful.widget.taglist(screen[1], awful.widget.taglist.filter.all, {}) -local mytasklist = awful.widget.tasklist(screen[1], awful.widget.tasklist.filter.currenttags, {}) - -wb:setup { - layout = wibox.layout.align.horizontal, - { -- Left widgets - layout = wibox.layout.fixed.horizontal, - awful.titlebar.widget.iconwidget(c), --looks close enough - mytaglist, - }, - mytasklist, -- Middle widget - { -- Right widgets - layout = wibox.layout.fixed.horizontal, - mykeyboardlayout, - mytextclock, - mylayoutbox, - }, -} - -- The popup awful.popup { widget = wibox.widget { @@ -112,37 +84,11 @@ local p10 = awful.popup { } require("gears.timer").run_delayed_calls_now() -p10:bind_to_widget(mytextclock) +p10:bind_to_widget(look.mytextclock) -- The titlebar -local top_titlebar = awful.titlebar(c, { - height = 20, - bg_normal = "#ff0000", -}) - -top_titlebar : setup { - { -- Left - awful.titlebar.widget.iconwidget(c), - layout = wibox.layout.fixed.horizontal - }, - { -- Middle - { -- Title - align = "center", - widget = awful.titlebar.widget.titlewidget(c) - }, - layout = wibox.layout.flex.horizontal - }, - { -- Right - awful.titlebar.widget.floatingbutton (c), - awful.titlebar.widget.maximizedbutton(c), - awful.titlebar.widget.stickybutton (c), - awful.titlebar.widget.ontopbutton (c), - awful.titlebar.widget.closebutton (c), - layout = wibox.layout.fixed.horizontal() - }, - layout = wibox.layout.align.horizontal -} +c:emit_signal("request::titlebars", "rules", {})--DOC_HIDE -- Normal wiboxes @@ -198,8 +144,8 @@ local function create_info(text, x, y, width, height) forced_width = width, forced_height = height, shape = gears.shape.rectangle, - shape_border_width = 1, - shape_border_color = beautiful.border_color, + border_width = 1, + border_color = beautiful.border_color, bg = "#ffff0055", widget = wibox.container.background }, {x = x, y = y}) @@ -228,7 +174,7 @@ create_info("awful.wibar", 200, 50, 100, 30) create_info("awful.titlebar", 250, 350, 100, 30) create_info("awful.tooltip", 30, 130, 100, 30) create_info("awful.popup", 450, 240, 100, 30) -create_info("Standard `wibox1`", 420, 420, 130, 30) +create_info("Standard `wibox`", 420, 420, 130, 30) create_line(250, 10, 250, 55) create_line(75, 100, 75, 135) diff --git a/tests/examples/awful/template.lua b/tests/examples/awful/template.lua index 17c56935..75c4feec 100644 --- a/tests/examples/awful/template.lua +++ b/tests/examples/awful/template.lua @@ -141,12 +141,12 @@ local function client_widget(c, col, label) }, layout = wibox.layout.stack }, - shape_border_width = bw, - shape_border_color = beautiful.border_color, - shape_clip = true, - fg = beautiful.fg_normal or "#000000", - bg = col, - shape = function(cr2, w, h) + border_width = bw, + border_color = beautiful.border_color, + shape_clip = true, + fg = beautiful.fg_normal or "#000000", + bg = col, + shape = function(cr2, w, h) return shape.rounded_rect(cr2, w, h, args.radius or 5) end, diff --git a/tests/examples/naughty/actions.lua b/tests/examples/naughty/actions.lua new file mode 100644 index 00000000..f21d73ef --- /dev/null +++ b/tests/examples/naughty/actions.lua @@ -0,0 +1,19 @@ +--DOC_NO_USAGE +--DOC_HIDE_ALL +-- local naughty = require("naughty") + +dbus.notify_send( + --[[data]] { + member = "Notify", + }, + --[[app_name]] "Notification demo", + --[[replaces_id]] nil, + --[[icon]] "", + --[[title]] "You got a message!", + --[[text]] "This is a message from above.\nAwesomeWM is your faith.", + {"Accept", "Dismiss", "Forward"}, + --[[hints]] {}, + --[[expire]] 5 +) + +--DOC_HIDE vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 diff --git a/tests/examples/naughty/colors.lua b/tests/examples/naughty/colors.lua new file mode 100644 index 00000000..2149e429 --- /dev/null +++ b/tests/examples/naughty/colors.lua @@ -0,0 +1,19 @@ + +local beautiful = require("beautiful") --DOC_HIDE + +local text = [[An important +notification +]] + +require("naughty").notify { + title = "Hello world!", + text = text, + icon = beautiful.icon, + bg = "#0000ff", + fg = "#ff0000", + font = "verdana 14", + border_width = 1, + border_color = "#ff0000" +} + +--DOC_HIDE vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 diff --git a/tests/examples/naughty/helloworld.lua b/tests/examples/naughty/helloworld.lua new file mode 100644 index 00000000..5c6daecc --- /dev/null +++ b/tests/examples/naughty/helloworld.lua @@ -0,0 +1,18 @@ +--DOC_HIDE_ALL +-- local naughty = require("naughty") + +dbus.notify_send( + --[[data]] { + member = "Notify", + }, + --[[app_name]] "Notification demo", + --[[replaces_id]] nil, + --[[icon]] "", + --[[title]] "Hello world!", + --[[text]] "The notification content", + --[[actions]] {}, + --[[hints]] {}, + --[[expire]] 5 +) + +--DOC_HIDE vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 diff --git a/tests/examples/naughty/shape.lua b/tests/examples/naughty/shape.lua new file mode 100644 index 00000000..b685b605 --- /dev/null +++ b/tests/examples/naughty/shape.lua @@ -0,0 +1,31 @@ + +local beautiful = require("beautiful") --DOC_HIDE +local gears = {shape=require("gears.shape")} --DOC_HIDE +local naughty = require("naughty") --DOC_HIDE + +local text = [[An important +notification +]] + +local shapes = { + gears.shape.rounded_rect, + gears.shape.hexagon, + gears.shape.octogon, + function(cr, w, h) + return gears.shape.infobubble(cr, w, h, 20, 10, w/2 - 10) + end +} + +for _, s in ipairs(shapes) do + naughty.notify { + title = "Hello world!", + text = text, + icon = beautiful.icon, + shape = s, + border_width = 3, + border_color = beautiful.bg_highlight, + margin = 15, + } +end + +--DOC_HIDE vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 diff --git a/tests/examples/naughty/template.lua b/tests/examples/naughty/template.lua new file mode 100644 index 00000000..1c2314f0 --- /dev/null +++ b/tests/examples/naughty/template.lua @@ -0,0 +1,55 @@ +local file_path, image_path = ... +require("_common_template")(...) +local wibox = require("wibox") + +-- For the connections +require("naughty") + +-- Create a screen +screen[1]._resize {x = 0, width = 800, height = 600} + +-- Let the test request a size and file format +loadfile(file_path)() + +-- Emulate the event loop for 10 iterations +for _ = 1, 10 do + awesome:emit_signal("refresh") +end + +local rect = {x1 = math.huge ,y1 = math.huge , x2 = -math.huge , y2 = -math.huge} + +-- Get the region with wiboxes +for _, d in ipairs(drawin.get()) do + local w = d.get_wibox and d:get_wibox() or nil + if w then + local geo = w:geometry() + rect.x1 = math.min(rect.x1, geo.x ) + rect.y1 = math.min(rect.y1, geo.y ) + rect.x2 = math.max(rect.x2, geo.x + geo.width + 2*w.border_width) + rect.y2 = math.max(rect.y2, geo.y + geo.height + 2*w.border_width) + end +end + +-- Get rid of invalid drawins. The shims are very permissive and wont deny this. +if rect.x1 == rect.x2 or rect.y1 == rect.y2 then return end + +local multi = wibox.layout { + forced_width = rect.x2 - rect.x1, + forced_height = rect.y2 - rect.y1, + layout = wibox.layout.manual +} + +-- Draw all normal wiboxes +for _, d in ipairs(drawin.get()) do + local w = d.get_wibox and d:get_wibox() or nil + if w then + local geo = w:geometry() + multi:add_at(w:to_widget(), {x = geo.x - rect.x1, y = geo.y - rect.y1}) + end +end + +wibox.widget.draw_to_svg_file( + multi, image_path..".svg", multi.forced_width, multi.forced_height +) + +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 diff --git a/tests/examples/shims/_default_look.lua b/tests/examples/shims/_default_look.lua new file mode 100644 index 00000000..87e7a508 --- /dev/null +++ b/tests/examples/shims/_default_look.lua @@ -0,0 +1,74 @@ +local awful = require("awful") +local wibox = require("wibox") +local beautiful = require("beautiful") +require("_date") + +-- Create the same number of tags as the default config +awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, screen[1], awful.layout.layouts[1]) +local mykeyboardlayout = awful.widget.keyboardlayout() +local mytextclock = wibox.widget.textclock() +local mylayoutbox = awful.widget.layoutbox(screen[1]) +local mytaglist = awful.widget.taglist(screen[1], awful.widget.taglist.filter.all, {}) +local mytasklist = awful.widget.tasklist(screen[1], awful.widget.tasklist.filter.currenttags, {}) + +local wb = awful.wibar { position = "top" } +wb:setup { + layout = wibox.layout.align.horizontal, + { + layout = wibox.layout.fixed.horizontal, + { + image = beautiful.awesome_icon, + widget = wibox.widget.imagebox, + }, + mytaglist, + }, + mytasklist, + { + layout = wibox.layout.fixed.horizontal, + mykeyboardlayout, + mytextclock, + mylayoutbox, + }, +} + + +client.connect_signal("request::titlebars", function(c) + local top_titlebar = awful.titlebar(c, { + height = 20, + bg_normal = beautiful.bg_normal, + }) + + top_titlebar : setup { + { -- Left + awful.titlebar.widget.iconwidget(c), + layout = wibox.layout.fixed.horizontal + }, + { -- Middle + { -- Title + align = "center", + widget = awful.titlebar.widget.titlewidget(c) + }, + layout = wibox.layout.flex.horizontal + }, + { -- Right + awful.titlebar.widget.floatingbutton (c), + awful.titlebar.widget.maximizedbutton(c), + awful.titlebar.widget.stickybutton (c), + awful.titlebar.widget.ontopbutton (c), + awful.titlebar.widget.closebutton (c), + layout = wibox.layout.fixed.horizontal() + }, + layout = wibox.layout.align.horizontal + } +end) + +require("gears.timer").run_delayed_calls_now() + +return { + mykeyboardlayout = mykeyboardlayout, + mytextclock = mytextclock , + mylayoutbox = mylayoutbox , + mytaglist = mytaglist , + mytasklist = mytasklist , + mywibox = wb, +} diff --git a/tests/examples/shims/awesome.lua b/tests/examples/shims/awesome.lua index 4d8f0323..3e97847a 100644 --- a/tests/examples/shims/awesome.lua +++ b/tests/examples/shims/awesome.lua @@ -13,12 +13,17 @@ local function _shim_fake_class() __newindex = function()end, } - obj._connect_signal = obj.connect_signal + obj._connect_signal = obj.connect_signal + obj._disconnect_signal = obj.disconnect_signal function obj.connect_signal(name, func) return obj._connect_signal(obj, name, func) end + function obj.disconnect_signal(name, func) + return obj._disconnect_signal(obj, name, func) + end + function obj.set_index_miss_handler(handler) meta.__index = handler end @@ -37,8 +42,18 @@ local function _shim_fake_class() return obj, meta end +local function forward_class(obj, class) + assert(obj.emit_signal) + local es = obj.emit_signal + function obj:emit_signal(name, ...) + es(obj, name, ...) + class.emit_signal(name, obj, ...) + end +end + local awesome = _shim_fake_class() awesome._shim_fake_class = _shim_fake_class +awesome._forward_class = forward_class -- Avoid c.screen = acreen.focused() to be called, all tests will fail awesome.startup = true diff --git a/tests/examples/shims/client.lua b/tests/examples/shims/client.lua index 8b3cdda3..bf76a426 100644 --- a/tests/examples/shims/client.lua +++ b/tests/examples/shims/client.lua @@ -25,6 +25,8 @@ end -- Create fake clients to move around function client.gen_fake(args) local ret = gears_obj() + awesome._forward_class(ret, client) + ret.data = {} ret.type = "normal" ret.valid = true @@ -33,6 +35,12 @@ function client.gen_fake(args) ret.icon_sizes = {{16,16}} ret.name = "Example Client" + -- This is a hack because there's a `:is_transient_for(c2)` method + -- and a `transient_for` property. It will cause a stack overflow + -- since the auto-alias will kick in if the property is allowed to + -- be `nil`. + ret.transient_for = false + -- Apply all properties for k,v in pairs(args or {}) do ret[k] = v @@ -140,13 +148,15 @@ function client.gen_fake(args) client.focus = ret + setmetatable(ret, { + __index = function(...) return meta.__index(...) end, + __newindex = function(...) return meta.__newindex(...) end + }) + client.emit_signal("manage", ret) assert(not args.screen or (args.screen == ret.screen)) - return setmetatable(ret, { - __index = function(...) return meta.__index(...) end, - __newindex = function(...) return meta.__newindex(...) end - }) + return ret end function client.get(s) diff --git a/tests/examples/shims/screen.lua b/tests/examples/shims/screen.lua index 09df1108..bf7f119c 100644 --- a/tests/examples/shims/screen.lua +++ b/tests/examples/shims/screen.lua @@ -5,6 +5,8 @@ screen._count = 0 local function create_screen(args) local s = gears_obj() + awesome._forward_class(s, screen) + s.data = {} s.valid = true @@ -17,10 +19,12 @@ local function create_screen(args) } function s._resize(args2) + local old = s.geometry geo.x = args2.x or geo.x geo.y = args2.y or geo.y geo.width = args2.width or geo.width geo.height = args2.height or geo.height + s:emit_signal("property::geometry", old) end s.outputs = { ["LVDS1"] = { @@ -132,6 +136,7 @@ screen._add_screen {width=320, height=240} screen._grid_vertical_margin = 10 screen._grid_horizontal_margin = 10 +screen.primary = screen[1] function screen.count() return screen._count diff --git a/tests/examples/shims/tag.lua b/tests/examples/shims/tag.lua index f445f485..60ef6b4a 100644 --- a/tests/examples/shims/tag.lua +++ b/tests/examples/shims/tag.lua @@ -2,13 +2,23 @@ local gears_obj = require("gears.object") local tag, meta = awesome._shim_fake_class() +local function has_selected_tag(s) + for _, t in ipairs(root._tags) do + if t.selected and ((not s) or s == t.screen) then + return true + end + end + return false +end + local function new_tag(_, args) local ret = gears_obj() + awesome._forward_class(ret, tag) ret.data = {} ret.name = args.name or "test" ret.activated = true - ret.selected = true + ret.selected = not has_selected_tag(args.screen) function ret:clients(_) --TODO handle new local list = {} diff --git a/tests/examples/wibox/awidget/tasklist/rounded.lua b/tests/examples/wibox/awidget/tasklist/rounded.lua index df75ecf1..247f7f71 100644 --- a/tests/examples/wibox/awidget/tasklist/rounded.lua +++ b/tests/examples/wibox/awidget/tasklist/rounded.lua @@ -26,9 +26,9 @@ end --DOC_HIDE filter = awful.widget.tasklist.filter.currenttags, buttons = tasklist_buttons, style = { - shape_border_width = 1, - shape_border_color = "#777777", - shape = gears.shape.rounded_bar, + border_width = 1, + border_color = "#777777", + shape = gears.shape.rounded_bar, }, layout = { spacing = 10, diff --git a/tests/examples/wibox/awidget/tasklist/windows10.lua b/tests/examples/wibox/awidget/tasklist/windows10.lua index 8ba40c9b..8bf59c19 100644 --- a/tests/examples/wibox/awidget/tasklist/windows10.lua +++ b/tests/examples/wibox/awidget/tasklist/windows10.lua @@ -52,17 +52,11 @@ end --DOC_HIDE widget = wibox.container.background, }, { - { - id = "clienticon", - widget = awful.widget.clienticon, - }, + awful.widget.clienticon, margins = 5, widget = wibox.container.margin }, nil, - create_callback = function(self, c, index, objects) --luacheck: no unused args - self:get_children_by_id("clienticon")[1].client = c - end, layout = wibox.layout.align.vertical, }, } diff --git a/tests/examples/wibox/container/background/shape.lua b/tests/examples/wibox/container/background/shape.lua index f4556dcf..bf8552d7 100644 --- a/tests/examples/wibox/container/background/shape.lua +++ b/tests/examples/wibox/container/background/shape.lua @@ -30,11 +30,11 @@ parent : setup { bottom = 3, widget = wibox.container.margin }, - shape = gears.shape.hexagon, - bg = beautiful.bg_normal, - shape_border_color = beautiful.border_color, - shape_border_width = beautiful.border_width, - widget = wibox.container.background + shape = gears.shape.hexagon, + bg = beautiful.bg_normal, + border_color = beautiful.border_color, + border_width = beautiful.border_width, + widget = wibox.container.background }, spacing = 10, layout = wibox.layout.fixed.vertical diff --git a/tests/examples/wibox/container/defaults/background.lua b/tests/examples/wibox/container/defaults/background.lua index 858f00a1..75813b71 100644 --- a/tests/examples/wibox/container/defaults/background.lua +++ b/tests/examples/wibox/container/defaults/background.lua @@ -17,11 +17,11 @@ return { valign = "center", widget = wibox.widget.textbox, }, - shape = gears.shape.circle, - shape_border_width = 5, - shape_border_color = "#ff0000", - bg = beautiful.bg_highlight, - widget = wibox.container.background + shape = gears.shape.circle, + border_width = 5, + border_color = "#ff0000", + bg = beautiful.bg_highlight, + widget = wibox.container.background } --DOC_HIDE vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 diff --git a/tests/examples/wibox/container/defaults/template.lua b/tests/examples/wibox/container/defaults/template.lua index e628a982..33bafa37 100644 --- a/tests/examples/wibox/container/defaults/template.lua +++ b/tests/examples/wibox/container/defaults/template.lua @@ -13,10 +13,10 @@ local container = wibox.widget { { { before, - shape_border_color = beautiful.border_color, - shape_border_width = beautiful.border_width, - shape = shape.rounded_rect, - widget = wibox.container.background, + border_color = beautiful.border_color, + border_width = beautiful.border_width, + shape = shape.rounded_rect, + widget = wibox.container.background, }, strategy = 'exact', width = 70, @@ -29,11 +29,11 @@ local container = wibox.widget { text = " ", widget = wibox.widget.textbox, }, - bg = beautiful.bg_normal, - shape_border_color = beautiful.border_color, - shape_border_width = beautiful.border_width, - widget = wibox.container.background, - shape = shape.transform(shape.arrow) + bg = beautiful.bg_normal, + border_color = beautiful.border_color, + border_width = beautiful.border_width, + widget = wibox.container.background, + shape = shape.transform(shape.arrow) : rotate_at(15,15,math.pi/2) : translate(0,-8) : scale(0.9, 0.9), @@ -46,10 +46,10 @@ local container = wibox.widget { { { after, - shape_border_color = beautiful.border_color, - shape_border_width = beautiful.border_width, - shape = shape.rounded_rect, - widget = wibox.container.background, + border_color = beautiful.border_color, + border_width = beautiful.border_width, + shape = shape.rounded_rect, + widget = wibox.container.background, }, strategy = 'exact', width = 70, diff --git a/tests/examples/wibox/container/rotate/angle.lua b/tests/examples/wibox/container/rotate/angle.lua index b6e71946..7deee84c 100644 --- a/tests/examples/wibox/container/rotate/angle.lua +++ b/tests/examples/wibox/container/rotate/angle.lua @@ -4,27 +4,27 @@ local wibox = require("wibox") --DOC_HIDE local gears = {shape = require("gears.shape")} --DOC_HIDE local beautiful = require("beautiful") --DOC_HIDE -local function create_arrow(text) --DOC_HIDE - return { --DOC_HIDE - { --DOC_HIDE - { --DOC_HIDE - text = text, --DOC_HIDE - align = "center", --DOC_HIDE - valign = "center", --DOC_HIDE - widget = wibox.widget.textbox, --DOC_HIDE - }, --DOC_HIDE - shape = gears.shape.arrow, --DOC_HIDE - bg = beautiful.bg_normal, --DOC_HIDE - shape_border_color = beautiful.border_color, --DOC_HIDE - shape_border_width = beautiful.border_width, --DOC_HIDE - widget = wibox.container.background --DOC_HIDE - }, --DOC_HIDE - strategy = 'exact', --DOC_HIDE - width = 70, --DOC_HIDE - height = 70, --DOC_HIDE - widget = wibox.container.constraint --DOC_HIDE - } --DOC_HIDE -end --DOC_HIDE +local function create_arrow(text) --DOC_HIDE + return { --DOC_HIDE + { --DOC_HIDE + { --DOC_HIDE + text = text, --DOC_HIDE + align = "center", --DOC_HIDE + valign = "center", --DOC_HIDE + widget = wibox.widget.textbox, --DOC_HIDE + }, --DOC_HIDE + shape = gears.shape.arrow, --DOC_HIDE + bg = beautiful.bg_normal, --DOC_HIDE + border_color = beautiful.border_color, --DOC_HIDE + border_width = beautiful.border_width, --DOC_HIDE + widget = wibox.container.background --DOC_HIDE + }, --DOC_HIDE + strategy = 'exact', --DOC_HIDE + width = 70, --DOC_HIDE + height = 70, --DOC_HIDE + widget = wibox.container.constraint --DOC_HIDE + } --DOC_HIDE +end --DOC_HIDE local normal = create_arrow("Normal") diff --git a/tests/examples/wibox/widget/calendar/fn_embed_cell.lua b/tests/examples/wibox/widget/calendar/fn_embed_cell.lua index a3eb9997..e1ca6c36 100644 --- a/tests/examples/wibox/widget/calendar/fn_embed_cell.lua +++ b/tests/examples/wibox/widget/calendar/fn_embed_cell.lua @@ -67,12 +67,12 @@ beautiful.bg_focus = "#b9214f" --DOC_HIDE margins = (props.padding or 2) + (props.border_width or 0), widget = wibox.container.margin }, - shape = props.shape, - shape_border_color = props.border_color or "#b9214f", - shape_border_width = props.border_width or 0, - fg = props.fg_color or "#999999", - bg = props.bg_color or default_bg, - widget = wibox.container.background + shape = props.shape, + border_color = props.border_color or "#b9214f", + border_width = props.border_width or 0, + fg = props.fg_color or "#999999", + bg = props.bg_color or default_bg, + widget = wibox.container.background } return ret end diff --git a/tests/test-awful-widget-button.lua b/tests/test-awful-widget-button.lua index 0b399f04..09c608de 100644 --- a/tests/test-awful-widget-button.lua +++ b/tests/test-awful-widget-button.lua @@ -69,7 +69,7 @@ table.insert(steps, function() awful.button({}, 1, nil, function () button:emit_signal_recursive("test::recursive") end) -)) + )) layout:connect_signal("test::recursive", function() got_called = true @@ -89,7 +89,7 @@ table.insert(steps, function() end) table.insert(steps, function() - assert(button._private.image ~= img) + if button._private.image == img then return end return true end) @@ -115,30 +115,30 @@ table.insert(steps, function() end) table.insert(steps, function() -assert(button._private.image ~= img) + if button._private.image == img then return end -return true + return true end) table.insert(steps, function() --- just make sure the button is not released for nothing -assert(button._private.image ~= img) + -- just make sure the button is not released for nothing + assert(button._private.image ~= img) --- test if the button is released when the mouse move out -awful.placement.right(mouse--[[, {parent = w}]]) -root.fake_input("button_release", 1) -awesome.sync() + -- test if the button is released when the mouse move out + awful.placement.right(mouse--[[, {parent = w}]]) + root.fake_input("button_release", 1) + awesome.sync() -return true + return true end) table.insert(steps, function() -assert(button._private.image == img) + assert(button._private.image == img) --- The button had plenty of clicks by now. Make sure everything worked -assert(got_called) + -- The button had plenty of clicks by now. Make sure everything worked + assert(got_called) -return true + return true end) runner.run_steps(steps)