Commit graph

180 commits

Author SHA1 Message Date
Daniel Eklöf
97ff63044f module/i3: cleanup 2019-02-10 12:29:33 +01:00
Daniel Eklöf
d631e47a5e module/i3: detect 'current' workspace while iterating workspaces 2019-02-10 12:29:33 +01:00
Daniel Eklöf
330ad48dfd module/i3: handle 'label' like an extra workspace called 'current' 2019-02-10 12:29:33 +01:00
Daniel Eklöf
a3be2839e5 module/i3: avoid calling json_object_get_int() multiple times 2019-02-10 12:29:33 +01:00
Daniel Eklöf
83db675e01 module/i3: subscribe *before* requesting initial workspace list
This ensures we don't have a race, where we might miss workspace
changes between the initial list and subscribing.
2019-02-10 12:29:33 +01:00
Daniel Eklöf
be4765fadd module/i3: 'dynlist' -> 'workspaces' 2019-02-10 12:29:33 +01:00
Daniel Eklöf
4100922b7a module/i3: allow 'content' to also contain a regular 'label'
Previously, the 'content' of i3 was a map, where the keys where i3
workspace names, mapping to a particle template.

Now, that configuration type is still allowed. But we also allow a
variant where the 'content' is a list, of either 1 or 2 entries.

Both entries *must* be dictionaries. The key is either 'dynlist',
which is the same as the dictionary-only type of
configuration. I.e. it maps to a dictionary where the keys are
workspace names, mapping to particle templates.

If the key is *not* dynlist, then it is assumed to be a particle name,
and we treat that as a "regular" label, that will be appended after
the workspace dynlist when instantiating the content.

This particle will be instantiated with, for now, the title and
application of the _currently focused_ workspace.
2019-02-10 12:29:33 +01:00
Daniel Eklöf
d565fbe2f0 module/i3: track active window title and application name
This is done on a per-workspace basis.

Note that the initial state is currently not detected. I.e. we
retrieve the initial workspace list, but we don't get the currently
focused window.
2019-02-10 12:29:33 +01:00
Daniel Eklöf
5ed6e0acbc module/i3: look for I3SOCK env variable before reading X properties 2019-02-10 12:29:33 +01:00
Daniel Eklöf
b6e61f9c7e modules: use calloc() instead of malloc()
In cases where it makes sense, use calloc() instead of malloc():

* When allocating large objects with many members, many for which
  NULL/0 is a good default value.
* Arrays etc where we explicitly initialize to NULL anyway.
2019-02-09 11:11:31 +01:00
Daniel Eklöf
7ff0f5a2f3 cmake: need CMake >= 3.13 since we use target_link_options() 2019-02-07 12:26:05 +01:00
Daniel Eklöf
ae5029826b cmake: break out bar stuff to separate CMakeLists.txt 2019-02-07 12:06:16 +01:00
Daniel Eklöf
a831490462 modules: fix strncpy calls to ensure strings are NULL-terminated 2019-02-06 18:10:06 +01:00
Daniel Eklöf
dbce871d27 module/i3: dynamically grow receive buffer when needed 2019-02-06 16:30:46 +01:00
Daniel Eklöf
70499654a3 module/i3: delay bar refresh until all received events have been processed
This fixes an issue where switching between empty workspaces (or one
empty, one non-empty) momentarily flashed two workspaces.

I.e. we immediately rendered the new workspace, and then re-rendered
when the first workspace was destroyed.
2019-02-06 15:39:11 +01:00
Daniel Eklöf
727d7b343f cmake: initial support for building wayland-only, or x11-only 2019-02-03 20:05:44 +01:00
Daniel Eklöf
f3b225adf7 make: let pkg_check_module() create targets 2019-02-03 19:27:03 +01:00
Daniel Eklöf
8e769b491a module/i3: try SWAYSOCK before falling back to I3_SOCKET_PATH 2019-02-03 12:20:59 +01:00
Daniel Eklöf
f37dfbc727 module/mpd: free strdup:ed path string 2019-01-29 20:58:55 +01:00
Daniel Eklöf
8d1afd027b module/xkb: initialize indicators
This fixes a bug where we tried to free invalid indicator names.
2019-01-27 22:05:00 +01:00
Daniel Eklöf
452c4b6015 plugins: export a const function pointer interface struct 2019-01-26 18:32:04 +01:00
Daniel Eklöf
18ba3723d4 module/i3: avoid stack-allocating large buffers
This fixes a stack-overflow issue with musl (which uses small stacks).
2019-01-26 13:19:02 +01:00
Daniel Eklöf
a827cc80d4 cmake: make sure we can find i3/ipc.h
There's no pkg-config file shipped with i3, so our only option is to
manually look for the file (and assume it can be found in the "normal"
include paths).
2019-01-26 12:30:14 +01:00
Daniel Eklöf
9e2ebf3cab module/network: thrd_t isn't an integer in musl 2019-01-20 14:30:39 +01:00
Daniel Eklöf
2b3d432164 cmake: we don't *really* need 3.13 2019-01-20 13:07:38 +01:00
Daniel Eklöf
4f5e22e231 module/xwindow: de-registering events from active window may fail
De-registering events from the previous active window may fail (when
the previous window has been destroyed).

Catch this early, and only log a debug message. This avoids having a
normal occurrence polluting the output with error messages.
2019-01-20 12:04:29 +01:00
Daniel Eklöf
d86c9914e5 module/mpd: silence overflow warning 2019-01-20 11:35:20 +01:00
Daniel Eklöf
cffb007009 module/alsa: handle failure(s) to attach to card or find mixer 2019-01-19 19:58:02 +01:00
Daniel Eklöf
fbb6cd47c4 module/xkb: log all available layouts at startup 2019-01-19 18:54:31 +01:00
Daniel Eklöf
dff3104c85 misc: make use of the xcb-aux library 2019-01-19 18:47:34 +01:00
Daniel Eklöf
9d5bbe0566 misc: xcb_connect() always returns a non-NULL pointer
Instead, we need to check if xcb_connection_has_error() says something
went wrong. We also need to call xcb_disconnect() on the disfunctional
XCB connection object.
2019-01-19 18:45:15 +01:00
Daniel Eklöf
406d6b3b83 module/backlight: fix logging name 2019-01-19 17:06:23 +01:00
Daniel Eklöf
174b1f05e0 module/xkb: log initial state 2019-01-19 17:05:34 +01:00
Daniel Eklöf
502c2bd746 module/network: remove debug logging 2019-01-19 17:01:38 +01:00
Daniel Eklöf
e6745f55dd module/mpd: socket may already exist, but not be connectable 2019-01-19 17:00:08 +01:00
Daniel Eklöf
cecd5d3e6f module/mpd: use inotify, when possible, to watch for MPD socket creation
When we're connecting to a unix domain socket, use inotify to watch
for it's creation, instead of trying to re-connect over and over
again.
2019-01-19 13:49:58 +01:00
Daniel Eklöf
4ff9af1ebd module/xkb: add define for debug logging, but don't enable it 2019-01-19 13:49:44 +01:00
Daniel Eklöf
01be29d660 module/xkb: update scroll lock state on indicator state notify event 2019-01-19 13:22:40 +01:00
Daniel Eklöf
925dfb736a module/xkb: implement indicator state
For now, we only expose caps-, num- and scroll-lock, as booleans.
2019-01-19 12:30:07 +01:00
Daniel Eklöf
1bbdaf145f module/xwindow: add missing break to switch case 2019-01-17 20:17:04 +01:00
Daniel Eklöf
85d1971ac3 module/i3: read socket path from root window's I3_SOCKET_PATH property
This way, we don't have to execute another process just to get the
path.
2019-01-16 17:22:13 +01:00
Daniel Eklöf
77f8e6fa28 xcb: xcb_error() no longer prefixes error message with "XCB: " 2019-01-16 16:27:25 +01:00
Daniel Eklöf
bf558eca1b module/xwindow: log X errors 2019-01-16 16:26:27 +01:00
Daniel Eklöf
c5309abbd0 module/xwindow: don't crash if there is no active window 2019-01-16 16:24:56 +01:00
Daniel Eklöf
fae2e5cb18 xcb: add xcb_error(), a generic describe-an-x-error function
By default, generates an error message with the major/minor opcodes,
the error code and sequence number.

If available, it will use xcb-errors to generate an even better
description.
2019-01-15 20:44:21 +01:00
Daniel Eklöf
b0e384b2f3 module/xwindow: don't crash if window doesn't have a correctly sized PID property 2019-01-15 19:18:01 +01:00
Daniel Eklöf
d264a6a067 module/xwindow: correct logging "module" (name) 2019-01-15 19:17:37 +01:00
Daniel Eklöf
0d591fe5a1 allow plugins to be compiled into the f00bar main binary 2019-01-14 20:57:03 +01:00
Daniel Eklöf
2f83ed1fc3 particle/dynlist: compile as a shared library 2019-01-13 21:43:56 +01:00
Daniel Eklöf
4a26664d8d particles: remove config-verify.h from particle.h 2019-01-13 17:41:39 +01:00