There's quite a bit of logic for managing input and output in
main.c right now. That code is already a bit too complicated,
but will get even more complicated going forward if we want
to add udev support, etc.
In an effort to keep things from getting too unwieldly, this
commit breaks out a lot of the logic into a new
ply-device-manager class.
A subsequent commit will make main.c use the new class.
Everywhere we call show_theme we call show_messages immediately,
afterward.
Since showing the messages on the theme is arguable part of showing
it, this commit moves show_messages into the show_theme function.
Right now show_default_splash and show_detailed_splash,
load the relevant splash and then show it.
This commit drops the "show" part and renames the functions to
load_default_splash and load_detailed_splash, respectively.
It, of course, also updates the callers to call show_theme
explicitly.
This refactorization will make it easier to later move device
management out of main.c
Now that main.c is attaching seat objects to the boot splash,
instead of the seat's individual components, we can drop the
apis that allow doing things piecewise.
ply_boot_splash_t currently gets notified about displays and keyboard
objects to pass along to the splash plugins.
Now that we have a ply_seat_t object that can encapsulate display
and keyboard objects, we should add support to ply_boot_splash_t for
using it.
This commit does that. For now, it does it without changing the plugin
interface (which is still in terms of displays and keyboards).
Note, this commit only adds support for seat objects to
ply_boot_splash_t. It doesn't actually change any of the calling code
to use that support. That will come in a subsequent commit.
Right now we maintain parallel lists of displays in several different
layers of code.
This commit introduces a "seat" object to encapsulate a set of displays,
and associated input device.
A subsequently commit will actually change the code over to use the
seat object.
start_boot_splash is a convenience function that's going to
get in the way in the future. It also has the annoying
"boolean argument" problem that load_theme had.
This commit gets rid of start_boot_splash entirely.
load_theme currently takes a boolean that if true, will
make it load the built-in "details" plugin if the main plugin
fails to load.
Boolean arguments are hard to read, so this commit drops it.
We already have the details theme "built" in, so there's
little point in loading the details.so plugin when we want
details internally.
This commit fixes that.
Right now start_boot_splash loads the theme, then
shows it.
It's going to be useful in the future to preload the
theme, so this commit breaks the two operations out
into two functions, load_theme and show_theme,
and makes start_boot_splash just call those two
functions.
This commit drops the aging fallback code for when
/sys/class/tty/console/active is unavailable.
This should have no impact for people running recent kernels, and
minimal impact for people running old kernels.
Now that debugging keybindings are gone, ply-boot-splash is really
just a wrapper around splash plugins. As such, it doesn't really
make sense to be mucking with terminal objects from it.
This commit moves that mucking to main until I can find a better
destination for it.
The boot splash currently lets the user hit ctrl-L to refresh,
ctrl-T to force text mode, and ctrl-V to toggle verbose messages.
These easter eggs are undocumented and really only used when I
was first writing plymouth.
These days it's just taking up space, so drop it.
Currently terminals are created in the main file and passed
down to other layers, with no direct reference maintained in
the main file.
There are points when we need to get references to all those
terminals again, and we have to fish them out from other layers.
This commit makes it all more explicit, maintaining the terminals
in a hash table in the main state object.
Right now there's no easy way to know if a hash table is empty,
which I'm going to need in a future commit.
This commit adds a get_size method to return the number of items in
the hash table.
The name is passed in at construct time, but it gets canonicalized.
This commit adds api to get the final name. The api is also useful,
since it prevents callers that need the mapping from having to maintain
it separately, which will be good for a future clean up.
ply_renderer_new takes a path to a renderer plugin, or NULL to
try each one in turn.
It's cleaner to abstract the path behind an enum type, so this
commit makes that change.
Now it will be possible to instantiate specific renderers without
hardcoding the paths to plugins in more than one place.
both the default tty and whether or not displays should be added
are available in the global state object (as state->default_tty
and state->is_shown respectively), so they don't need to be parameters.
The latter one was a boolean, so having it as a parameter was confusing
at the call sites.
This commit drops the parameters.
libdrm's open functions are just wrappers around open(), and our
detection of which parameter to pass to drmOpen() is not 100%
reliable.
Simplify the code and just call open() directly.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=71590
The previous commit introduced a bug where the unlock screen won't
get shown if it's requested within the first 5 seconds of startup.
This commit fixes that by forcing a redraw if the state switches from
NORMAL.
Many machines these days can boot in 5 seconds or less.
In those cases, there's little point in showing a boot splash.
This commit introduces a StartupDelay option to the two step
plugin to prevent it from displaying anything for a few seconds.
If there's a file named background-tile.png in the theme
then it will get used as the background behind the other
content in place of the background gradient.
It can be useful to tile a group of pixels across the screen
(for e.g. backgrounds).
This commit adds API to pixel buffer to do that tiling.
A follow up commit will add support into ply-image so images can
be loaded from disk and then tiled on screen.
plymouth-update-initrd is a script that should probably be eventually
dropped. It was originally created to unpack and initrd and graft
plymouth in. Later, it just became a thin wrapper around mkinitrd.
These days, very few (any?) distros use mkinitrd. Change it to call
dracut instead.
Relevant irc log:
<newfo> this is SO WRONG:
http://cgit.freedesktop.org/plymouth/tree/scripts/plymouth-update-initrd
<newfo> it won't work on any distro
<newfo> would you mind updating that please?
<newfo> replace the mkinitrd line in
/usr/libexec/plymouth/plymouth-update-initrd to dracut -f
/boot/initramfs-$(uname -r).img $(uname -r)
<-- newfo has quit (Client Quit)
the X11 renderer is useful for testing themes without rebooting,
but it really only functions if the user puts --tty=/dev/tty or
similar. Furthermore, if a user neglects to do that really bad
stuff happens since plymouth will try to take over VT1.
This commit makes --tty=/dev/tty implied if $DISPLAY is set.
All the major modesetting drivers support the generic interface now, so
there's no reason to have driver specific code.
This commit drops all that extra code and hard codes the generic interface
Fix various warnings turned up with -Wall. After fixing these remaining
issues, plymouth now builds successfully with gcc 4.8 using
"-Werror -Wno-error=unused-result -Wno-error=sign-compare".