Disable splash screen, use status bar instead #1028

issue graingert opened this issue on April 3, 2012
  1. graingert commented at 4:18 PM on April 3, 2012: contributor

    Instead of using a splash screen, load the entire interface straight away.

    Initially disable all actions requiring a loaded blockchain, then when the block chain has done loading enable those actions.

    This will allow users to read their address book, see previous transactions that have already been confirmed and generate addresses, without waiting for the blockchain to load.

  2. laanwj commented at 4:24 PM on April 3, 2012: member

    Yes, some phases of the initialization process could be moved to after the UI is shown.

    Especially now that the UI is no longer dependent on the wallet for settings.

  3. graingert commented at 4:27 PM on April 3, 2012: contributor

    Perhaps the simplest temporary solution is an "in ui" splash screen.

    Replace the main panel with an image and loading bar, until loading is complete.

    Then in a later iteration the loading bar can then be moved to the status bar, and the main interface can be added.

  4. laanwj commented at 4:29 PM on April 3, 2012: member

    Right, that's a possibility. On the other hand, if we're going to implement this better do it right, otherwise we end up with temporary solutions to temporary solutions. The whole splash screen thing was already a temporary solution for the "loading is slow" problem,

  5. Diapolo commented at 4:39 PM on April 3, 2012: none

    I agree, this should be well planned to not have a different GUI with each release...

  6. graingert commented at 4:41 PM on April 3, 2012: contributor

    It's better than having a different gui in the same release

  7. sipa commented at 10:56 AM on April 4, 2012: member

    I like this idea. How hard is it to implement?

  8. laanwj commented at 11:23 AM on April 4, 2012: member

    It will be easier to do once #1019 is merged, as it constructs the main dialog before the AppInit2, and changes the message box function used in AppInit2 to work across threads, so that it will be possible (though this has to be handled carefully) to do (most of) AppInit2 in another thread instead of the UI one. The core can then notify the UI code when certain functions become available (by changing InitMessage to have a state field). (and the opposite can be done when shutting down...)

  9. rebroad commented at 10:54 PM on April 17, 2012: contributor

    Probably not the place for this, but +1. (Is there a place for +1s on suggestions for improvement?). Sounds like this should be easy to implement. e.g. if one deletes the blk0001.dat but not the wallet.dat and runs the bitcoin client, they still see the transactions, etc, but simply don't have the block chain. This would be no different to that scenario, surely (except would only need to load it from disk rather than from the network).

  10. graingert commented at 11:18 PM on April 17, 2012: contributor

    That's an interesting step towards an spvSent from Samsung Mobile

    -------- Original message -------- Subject: Re: [bitcoin] Disable splash screen, use status bar instead (#1028) From: rebroad
    To: tagrain@gmail.com CC:

    Probably not the place for this, but +1. (Is there a place for +1s on suggestions for improvement?). Sounds like this should be easy to implement. e.g. if one deletes the blk0001.dat but not the wallet.dat and runs the bitcoin client, they still see the transactions, etc, but simply don't have the block chain. This would be no different to that scenario, surely (except would only need to load it from disk rather than from the network).--- Reply to this email directly or view it on GitHub:https://github.com/bitcoin/bitcoin/issues/1028#issuecomment-5188021

  11. laanwj commented at 5:45 AM on April 18, 2012: member

    That wouldn't work with orphaned transactions. It needs the block chain to verify which transactions in wallet.dat are real and which are invalidated.

    And NO +1s here! We already know this is a good idea. What we need to get this realized is someone to implement it.

  12. ghost assigned laanwj on Sep 21, 2012
  13. Diapolo commented at 9:11 PM on May 7, 2013: none

    @laanwj IMHO we should close this now, as splashscreen is full of life :).

  14. sipa commented at 9:14 PM on May 7, 2013: member

    I'm not convinced about this. Having the full application window being available earlier would be good in my opinion, even if it's not fully functional initially.

    Then again, I don't want to throw away the nice splash screen either...

  15. gmaxwell commented at 9:21 PM on May 7, 2013: contributor

    Any time I try the GUI I'm astounded that people find it tolerable at all. The splash screen monopolizes my interface for what seems like an eon. There must be a shortage of tar and feathers. :P Of course, it doesn't have to be one or the other, it could be displayed for N seconds and go away even if the software isn't up yet.

  16. laanwj commented at 6:00 AM on May 8, 2013: member

    @gmaxwell: How is that in any way GUI specific? If you start bitcoind you have the same delay before you can use the interface. And the splash screen doesnt monopolize at all; it doesn't have "stay on top" enabled, you can do something else (just not with bitcoin) while it loads.

  17. gmaxwell commented at 6:06 AM on May 8, 2013: contributor

    @laanwj Must be some crazy interaction with my windowmanger— it stays on top, pinned to all workspaces and is immovable! I'd commented on it before and somehow had the impression that this was expected (and I boggled that anyone found it tolerable— but I don't use the GUI except for testing)

  18. laanwj commented at 6:07 AM on May 8, 2013: member

    Ok in that case I agree with "tar and feathers", thanks for explaining. Maybe we can detect that combination somehow; what distribution and window manager?

  19. gmaxwell commented at 6:09 AM on May 8, 2013: contributor

    Xmonad, I'm looking into it now.

  20. jonasschnelli commented at 6:38 AM on May 8, 2013: contributor

    i agree with @sipa. Splashscreens are somethings from the last century. A splashscreen always reminds me to a bad startup/thread design. :) Maybe we could try getting the main-window earlier and show the block/db init there somewhere. But I would also say it's not trivial because some features in the main-window must be disabled during the init-process. @laanwj having the big-picture: how complicate would it be? Without knowing to much from the core, is it worth to have a look at it?

  21. laanwj commented at 2:07 PM on May 8, 2013: member

    Arguably the two most used programs in the world, MS Word and MS Excel have a splash screen. Even the most recent versions.

    I'm not saying that it is preferable, but "some things from the last century" is not true either. In any case we should decide on things because they make sense, not because they are hip or not.

    In any case, you're welcome to try. Big picture:

    1. You'll have to move the AppInit2 call to its own QThread

    2. This thread has to tell the UI thread (through Qt signals) when certain functionality becomes available, so that the WalletModel / ClientModel can be constructed and passed into BitcoinGUI at the appropriate time. 2.1) When in init phase, the progress bar should be updated to display the current init message, and maybe give an indication how far the process is along.

    3. BitcoinGUI is designed so that it will work with the WalletModel / ClientModel set to NULL initially. However, it wlll display nonsense. An empty transaction list and balance, at the very least. This should be hidden / changed to a "loading..." message. An possibility would be to show the splash screen image (as it looks nicer than text) inside the interface when it's loading...

  22. graingert commented at 2:21 PM on May 8, 2013: contributor

    It would be possible to fake this functionality by building a splashscreen that looks and acts (re-size, translate, minimize etc) like the bitcoin-qt gui with everything greyed out other than the loading bar.

  23. jonasschnelli commented at 2:47 PM on May 8, 2013: contributor

    hmm... i don't know where's the user benefit when having a disabled gui instead of showing a nice splash screen. What could the user do during the init process? change settings? Including a splash screen within the bitcoin-qt gui looks like a 50-50 solution and will probably looks bad. Maybe we should stick with the current solution and try to improve and speedup the init process. :)

  24. laanwj commented at 2:56 PM on May 8, 2013: member

    The only advantage would be that it could be incremental. Ie, information about the wallet could be displayed as soon as the wallet is initialized, information about the block chain could be displayed as soon as the block chain is initialized (but I suppose it needs information about the blockchain to determine which transactions are confirmed and/or orphaned in the wallet, so I'm not even sure how useful this is).

    The user would be unable to do anything before the whole thing is loaded; even changing (non-UI) options is a bad idea while the initialization is in progress.

    All in all, it wouldn't be a big win. @graingert 's suggestion would accomplish basically the same :) I agree with speeding up the initialization process is the best idea and this is also where most progress has been made over the last versions.

  25. jonasschnelli commented at 3:00 PM on May 8, 2013: contributor

    one plus could be the thing that @graingert mentioned: "read their address book".

  26. gmaxwell commented at 3:43 PM on May 8, 2013: contributor

    @laanwj Would making the splash screen go away when you click on it be bad?

  27. sipa commented at 3:52 PM on May 8, 2013: member

    @laanwj @gmaxwell I'd like that as well (also xmonad user)...

  28. laanwj commented at 4:33 PM on May 8, 2013: member

    I think that would be fine, there are more programs that do that.

  29. Squeezle42 commented at 8:13 AM on July 31, 2013: none

    I also encounter the problem, that while loading, I have the non-dismiss-able splash screen. Expected or normal program reaction to me, for long loading system type process would be, start loading in background, with icon in taskbar, or similiar, indicating task is proceeding as normal. User uses system.

    Initialized app is then ready when needed. Often, since I use linux, there are few system resets, so at startup is replaced with, "I expect to use soon, start services" or, otherwise always on.

    What I encounter, is a topmost splash the persists over all else, although normal actions not covered by the splash are still usable.

  30. laanwj commented at 10:40 AM on October 24, 2013: member

    @Squeezle42 use the -nosplash option

    I'm closing this issue as we don't really want to replace the splash screen with a visible but dysfunctional main window.

  31. laanwj closed this on Oct 24, 2013

  32. suprnurd referenced this in commit 1e2d61ad0d on Dec 5, 2017
  33. suprnurd referenced this in commit ec239ffa36 on Dec 5, 2017
  34. ptschip referenced this in commit 520b682e6e on Apr 14, 2018
  35. MarcoFalke locked this on Sep 8, 2021

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-04-17 18:16 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me