Advantages:
- Building description is more readable (top to bottom)
- Build step is extracted from package step
- Abstraction layers are not mixed within the tools ("Scripts describe
how to build, Npm calls scripts, Make calls Npm" instead of "Make
describes build, calls Npm")
- No duplication of package description in Makefile and package.json
I had issues getting the focus to display when moving between windows, even after setting the values according to the README.md, due to the border size in my theme being 0 (or unnoticeable). I noticed that other people had similar issues online, also using Krohnkite. I figured I'd share my solution here.
The links to KDE API are dead, and can't find any alternatives. These
documents are not really necessary, but added for the sake of deepening
the understanding of the KWin API. Now the docs are gone, so the links
should be too.
A problem with adjusting nested LayoutPart was that adjustments were
"duplicated". For example, if two HalfSplit parts were nested, resizing
one window will adjust both parts instead of one. This behavior is not
desirable.
So, to fix this, ILayoutPart#adjust now returns a RectDelta, to change
how outer parts behave. For example, an inner part can remove a field in
RectDelta(e.g. north) to prevent outer parts from reusing the field for
another adjustment. So, the duplicated adjustment can be fixed by
"consuming" delta values in inner parts.
Implemented only `apply`. Need to work on `adjust` and shortcuts.
It's unclear if the split ratio values should be derived from window
weights, or keep them independently in the layout. I think the latter is
more practical. Maybe both, but let's see what can be done.
This implements rotation of master of Tile layout. Not implementing
rotation for stack at this point, because it requires an access to
window list, which isn't possible atm.
This is a little timer-based hack that make the script work without
compositor.
This is not a "true" solution, because, rarely, it takes longer than
50ms to get "windowShown" signal after "windowAdded", and, if this
happens, the window *might* freeze. If the delay is longer, it ruins the
experience.
I also tried to get the state of compositor through
`option.compositingInitialized`, but it seems like the property is
removed in the actual code. I couldn't find any other reasonable
methods.
The original logic relied on the fact that each layout instance carries
around predefined class IDs. However, this is cumbersome and pretty
hacky in terms of design. Also, it's not easy to declare multiple
layouts using a single layout class(ILayout).
In the new method, IConfig instances are reponsible for providing ID,
order, and factory of each layout. That is, the mapping b/w the
layout ID and the actual layout is only known to IConfig. This allow
clear separation of responsibility.
Note: there's another solution which might work better: layout
expression. This is an over-engineering in the current state of the
script, but once the support for external config file is implemented,
this can be pretty useful.
RotateLayoutPart allows rotating its child LayoutPart (and also supports
layout adjustment).
Note that "rotation" here isn't real degree-based rotation. This is an
intentional decision to preserve stack-growing direction (top-to-bottom,
left-to-right).
Resizing one window adjusted windows in both stacks. This was because
all tiles were passed for adjustment to either ones. This was fixed by
passing only tiles that belong to each of the stack.