If pin-tags is set, there is no format defined for tags that are not occupied.
However defining a format for unoccupied tags makes the pin-tags setting
redundant since then the label can just be set to empty to not show unoccupied
tags.
Following the above reasoning, the pin tags setting is removed, and
state_t::NONE is renamed to state_t::EMPTY. This way if a user wants to display
empty tags, they can specify the format, otherwise they can simply set the label
to an empty string.
The command strings were not updated since the event variable formats changed.
Also, the EVENT_PREFIX already contained a dash, so an extra character would be
erased when adding 1.
Don't move the cmd string into the check_send_cmd function since if the first
event doesn't match, the cmd string would have been modified when passed to
the function again to check if the second event matches.
Remove EVENT_SCROLL_{UP_DOWN} since it is not being used.
Change EVENT_PREFIX to include dash and event names to be just the name without
the prefix, for simplified parsing. Use check_send_cmd function to parse the
cmd, using the event name as the IPC command name, and the section after the
event name to be the argument. The format of a cmd would be "dwm-<event
name>-<arg>", so the cmd can easily be translated into an IPC command.
Call member functions for all dwmipc events for better organization and to avoid
cluttering the constructor. The dwmipc event functions are now just assigned to
a lambda that calls a member function.
Add update_tag_labels function for updating the tag labels based on their state
since this code is repetetive.
Add update_title_labels function since that code is also somewhat repetetive.
Move reconnect code to reconnect_dwm for better organization.
Use pointers to m_monitors array elements instead of holding onto indices, since
most of the time, a member of the Monitor element will need to be accessed.
These variables should always hold a valid address starting in the constructor,
so checks for nullptr should not be necessary. A monitor will always be active
and the bar will always be mapped onto a monitor.
Add some comments where needed.
Reorganize the constructor into a more logical format
Only subscribe to events if their labels are included in the default format.
Follow clang-tidy warnings and use trailing return types.
Move m_ipc->get_monitors to update_monitor_ref since in most cases where the
monitor references would need to be updated using geometry, m_ipc->get_monitors
would need to be called.
This fixes issue mihirlad55/polybar-dwm-module#4 where the title would not
update if the title of the currently focused window changed. The
focused_title_change_event is raised exactly when the focused window's
title changes, so this should automatically update the title using the callback
when necessary.
The module is currently working, but not fully stable. All tags specified in
config.cmake for internal/dwm are supported. This was implemented following the
i3 and bspwm modules. There is still some cleaning/refactoring to do to polish
the module up.