Module: gears.connection
Object oriented way to connect objects.
All AwesomeWM objects have a emit_signal method. They allow to attach business logic to a property value change or random types of events.
The default way to attach business logic to signals is to use connect_signal. It allows to call a function when the signal is emitted. This remains the most common way to perform a connection. However, it is very verbose to use that construct alongside the declarative widget system. gears.connection is much easier to integrate in such constructs:
wibox.widget {
    {
        {
            id        = "my_graph",
            max_value = 30,
            widget    = wibox.widget.graph
        },
        {
            id     = "my_label",
            align  = "center",
            valign = "center",
            widget = wibox.widget.textbox,
        },
        layout = wibox.layout.stack
    },
    id            = "my_progress",
    max_value     = 30,
    min_value     = 0,
    widget        = wibox.container.radialprogressbar,
    -- Set the value of all 3 widgets.
    gears.connection {
        source          = my_source_object,
        source_property = "value",
        callback        = function(_, _, value)
            my_graph:add_value(value)
            my_label.text = value .. "mB/s"
            my_progress.value = value
        end
    },
}
Limitations
- When used directly as a value to a declarative object
    (
text = gears.connection{...}), it is necessary to manually disconnect the connectio if you want it to stop being auto-updated. 
Info:
- Copyright: 2019-2020 Emmanuel Lepage-Vallee
 - 
                    Originally authored by: Emmanuel Lepage-Vallee <elv1313@gmail.com>
(Full contributors list available on our github project) 
Constructors
| gears.connection {[args]} | Create a new gears.connection object. | |
Object properties
| initiate | boolean | If the property should be set when the target object is defined. | |
| enabled | boolean | Turn this connection on or off. | |
| signals | table | A list of source object signals. | |
| signal | string | The (source) signal to monitor. | |
| target | gears.object | The object for the right side object of the connection. | |
| target_property | string | The target object property to set when the source property changes. | |
| target_method | string | Rather than use a property, call a method. | |
| source_class | class or string | Use a whole class rather than an object as source. | |
| source | gears.object | The source object (connection left hand side). | |
| source_property | string | The source object(s)/class property. | |
| sources | gears.object | A list of source objects (connection left hand side). | |
| callback | function | A function called when the source changes. | |
Object methods
| :append_source_object (obj) | Add a source object. | |
| :remove_source_object (obj) | Remove a source object. | |
| :has_source_object (obj) | 
        Return true when obj is already a source object.
       | 
    |
| :disconnect () | Disconnect this object. | |
| :reconnect () | Reconnect this object. | |
| :emit_signal (name, ...) | Emit a signal. | Inherited from gears.object | 
| :connect_signal (name, func) | Connect to a signal. | Inherited from gears.object | 
| :weak_connect_signal (name, func) | Connect to a signal weakly. | Inherited from gears.object | 
Constructors
- gears.connection {[args]}
 - 
    Create a new gears.connection object.
    
Parameters:
- args
        
- initiate boolean If the property should be set when the target object is defined.
 - enabled boolean Turn this connection on or off.
 - signals boolean A list of source object signals.
 - signal string The (source) signal to monitor.
 - target gears.object The object for the right side object of the connection.
 - target_property string The target object property to set when the source property changes.
 - target_method string Rather than use a property, call a method.
 - source_class class or string Use a whole class rather than an object as source.
 - source gears.object The source object (connection left hand side).
 - source_property string The source object(s)/class property.
 - sources gears.object A list of source objects (connection left hand side).
 - callback function A function called when the source changes.
 
 
 - args
        
 
Object properties
- initiate boolean · 1 signal
 - 
    If the property should be set when the target object is defined. 
It is enabled by default for convinience.
Type constraints:
- string boolean initiate (default true)
 
Usage:
-- When source changes, target is updated. my_source_object.foo = 42 gears.connection { source = my_source_object, source_property = "foo", target = my_target_object1, target_property = "bar" } gears.connection { source = my_source_object, source_property = "foo", initiate = false, target = my_target_object2, target_property = "bar" } -- my_target_object1 should be initialized, but not my_target_object2. assert(my_target_object1.bar == 42) assert(my_target_object2.bar == nil)
Click to display more Emit signals:
property::gears.connection.initiateWhen the gears.connection.initiate value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuestring The new value affected to the property.
 - enabled boolean · 1 signal
 - 
    Turn this connection on or off. 
See also:
Usage:
-- When source changes, target is updated. my_source_object.foo = 42 local conn1 = gears.connection { source = my_source_object, source_property = "foo", target = my_target_object1, target_property = "bar" } local conn2 = gears.connection { source = my_source_object, source_property = "foo", target = my_target_object2, target_property = "bar" } conn1.enabled = true conn2.enabled = false -- conn1 should be enabled, but not conn2. assert(my_target_object1.bar == 42) assert(my_target_object2.bar == nil)
Click to display more Emit signals:
property::gears.connection.enabledWhen the gears.connection.enabled value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valueenabled The new value affected to the property.
 - signals table · 1 signal
 - 
    A list of source object signals.
    
See also:
Click to display more Emit signals:
property::gears.connection.signalsWhen the gears.connection.signals value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuesignals The new value affected to the property.
 - signal string · 1 signal
 - 
    The (source) signal to monitor. 
Note that signals and source_property are also provided to simplify common use cases.
See also:
Click to display more Emit signals:
property::gears.connection.signalWhen the gears.connection.signal value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuestring The new value affected to the property.
 - target gears.object · 1 signal
 - 
    The object for the right side object of the connection. 
When used in a widget declarative tree, this is implicit and is the parent object.
See also:
Usage:
-- When source changes, target is updated. my_source_object.foo = 42 local conn = gears.connection { source = my_source_object, source_property = "foo", target = my_target_object, target_property = "bar" } -- This works because initiate is
trueby default. assert(my_target_object.bar == 42) -- This works because the source objectfoois connected to -- the target objectbarproperty. my_source_object.foo = 1337 assert(my_target_object.bar == 1337)
Click to display more Emit signals:
property::gears.connection.targetWhen the gears.connection.target value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuetarget The new value affected to the property.
 - target_property string · 1 signal
 - 
    The target object property to set when the source property changes.
    
See also:
Click to display more Emit signals:
property::gears.connection.target_propertyWhen the gears.connection.target_property value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuetarget_property The new value affected to the property.
 - target_method string · 1 signal
 - 
    Rather than use a property, call a method. 
See also:
Usage:
-- When source changes, target is updated. -- Declare a method. function my_target_object:my_method() -- do something end local conn = gears.connection { source = my_source_object, source_property = "foo", target = my_target_object, target_method = "my_method" }
Click to display more Emit signals:
property::gears.connection.target_methodWhen the gears.connection.target_method value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuetarget_method The new value affected to the property.
 - source_class class or string · 1 signal
 - 
    Use a whole class rather than an object as source. 
Many classes, like client, tag, screen and naughty.notification provide class level signals. When any instance of those classes emit a signal, it is forwarded to the class level signals.
See also:
Usage:
local conn = gears.connection { source_class = client, signals = {"focused", "property::name"}, initiate = false, callback = function() -- do something end } -- This emit the
focusedsignal. screen[1].clients[1]:activate{} -- Changing the name emitsproperty::name. screen[1].clients[1].name = "bar"
Click to display more Emit signals:
property::gears.connection.source_classWhen the gears.connection.source_class value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuesource_class The new value affected to the property.
 - source gears.object · 1 signal
 - 
    The source object (connection left hand side).
    
See also:
Click to display more Emit signals:
property::gears.connection.sourceWhen the gears.connection.source value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuesource The new value affected to the property.
 - source_property string · 1 signal
 - 
    The source object(s)/class property.
     
Click to display more Emit signals:
property::gears.connection.source_propertyWhen the gears.connection.source_property value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuesource_property The new value affected to the property.
 - sources gears.object · 1 signal
 - 
    A list of source objects (connection left hand side). 
If many objects have the same signal, it's not necessary to make multiple gears.connection. They can share the same.
See also:
Click to display more Emit signals:
property::gears.connection.sourcesWhen the gears.connection.sources value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuesources The new value affected to the property.
 - callback function · 1 signal
 - 
A function called when the source changes.
local w = wibox.widget { -- Get the current cliently focused name. text = gears.connection { source_class = client, signals = {"focused", "property::name"}, initiate = false, callback = function(source, target, sig_arg1, ...) --luacheck: no unused args -- Since the class signal first arg is the source, this works! assert(source == sig_arg1) -- All widgets with IDs are visible from this callback! assert(target == my_textbox) -- get_children_by_id can also be used! assert(get_children_by_id("my_textbox")[1] == target) if not source then return "Nothing!" end return "Name: " .. source.name .. "!" end }, id = "my_textbox", widget = wibox.widget.textbox }The callback arguments are:
callback = function(source, target, sig_arg1, ...) /\ /\ /\ /\ | | | | The client -| | | | It will be the widget -| | | Signal first argument, the client -| | All other signal arguments -|
Click to display more Emit signals:
property::gears.connection.callbackWhen the gears.connection.callback value changes.selfgears.connection The object which changed (useful when connecting many object to the same callback).new_valuecallback The new value affected to the property.
 
Object methods
- :append_source_object (obj)
 - 
    Add a source object. 
Parameters:
- obj gears.object The object.
 
See also:
Usage:
-- When source changes, target is updated. local conn = gears.connection { source = my_source_object1, target = my_target_object1, } conn:append_source_object(my_source_object1) assert(conn:has_source_object(my_source_object1)) conn:append_source_object(my_source_object2) conn:remove_source_object(my_source_object1)
 - :remove_source_object (obj)
 - 
    Remove a source object.
    
Parameters:
- obj gears.object The object.
 
See also:
 - :has_source_object (obj)
 - 
    Return true when 
objis already a source object.Parameters:
- obj gears.object The object.
 
See also:
 - :disconnect ()
 - 
    Disconnect this object.
    
See also:
 - :reconnect ()
 - 
    Reconnect this object.
    
See also:
 - :emit_signal (name, ...) · Inherited from gears.object
 - 
    Emit a signal.
    
Parameters:
- name string The name of the signal.
 - ... Extra arguments for the callback functions. Each connected function receives the object as first argument and then any extra arguments that are given to emit_signal().
 
 - :connect_signal (name, func) · Inherited from gears.object
 - 
    Connect to a signal.
    
Parameters:
- name string The name of the signal.
 - func function The callback to call when the signal is emitted.
 
 - :weak_connect_signal (name, func) · Inherited from gears.object
 - 
    Connect to a signal weakly. 
This allows the callback function to be garbage collected and automatically disconnects the signal when that happens.
Warning: Only use this function if you really, really, really know what you are doing.
Parameters:
- name string The name of the signal.
 - func function The callback to call when the signal is emitted.