[RFC] GTK+ 3 Migration - Alpha-grade Patchset

John Ralls jralls at ceridwen.us
Sat Feb 27 12:50:41 EST 2016

> On Feb 27, 2016, at 8:15 AM, Tobias Markus <tobias at miglix.eu> wrote:
> On Mo, 2016-02-22 at 22:57 +0100, Geert Janssens wrote:
>>> * I ported the core application code to use GtkApplication. It would be 
>>>   nice to change the main window - opened file relationship from the
>>>   current N:1 to a 1:1, i.e. each main window is separate and has
>>>   exactly one opened file. This would simplify the main window code.
>> Nice at first sight and from a coding point of view. I'm not
>> convinced yet it will also improve the user experience.
>> Unlike a text to a word processor, gnucash' data is not linear. For
>> example transactions (or more precisely splits) are organized into
>> accounts which are represented in account registers. There isn't one
>> single register in which you can edit *all* splits. Well, there is of
>> course (the general journal), but it's most difficult interface to
>> use to manipulate and interpret your data so registers per account
>> were implemented.
>> Then there are reports of all kinds, interfaces for invoices/bills,
>> budgets, scheduled transactions,...
>> Each of them has it's own user interface.
>> Having only one window would mean only one interface can be visible
>> at a time. To quickly switch between interfaces tabs could be used.
>> Oh, wait, this is the default behavior of gnucash. Then suppose I
>> want to compare the contents of my bank account register to the
>> report I ran on it. Or I want to compare my credit card register with
>> my bank account register. These are real life situations. I can't do
>> this with one window with tabs. And I know users who definitely
>> prefer each tab to be in a separate window instead for this very
>> reason.
> I agree. I think this area might benefit from some further thought.
>>>   It also seems more intuitive than the current behaviour, since
>> the
>>>   user does not expect that all windows change the opened file if
>> he
>>>   opens a file in one window.
>> I understand your reasoning. On the other hand the current gnucash
>> concept is that you can have only one file open at once. So all
>> windows belong to that file. So gnucash users do know that all
>> windows change the opened file. It's a different paradigm from
>> typical applications. It's worse even, gnucash currently *can't* have
>> multiple files open at once. The internal code just can't handle
>> that. (To be complete there is a hacky work around by opening multipe
>> instances of gnucash itself, but that's not relevant here).
>> I personally find this to be a design oversight from the early days.
>> But again that's the legacy we have now.
>> Having said all that, if we can come up with an elegant UX within a
>> single window interface allowing the interactions currently possible
>> with the multi-window interface, I wouldn't mind going for single-
>> window. I don't see that yet though...
> On the other hand, why not combine both approaches and offer both
> multi-window and multi-file workflows, i.e. 1 GtkApplication to 1 File
> and 1 GtkApplication to Many Gtk(Application)Windows?

That's a deeper problem than can be solved in the UI. The current state of libqof, engine, and backends is that GnuCash can handle only one file/database at a time. We call that a "session" and it's encapsulated in QofSession.

The current functionality, that one can use either one or multiple windows and that any tab can be separated to become its own window if the user wants, must be preserved.

If at some point we're able to have multiple sessions in a single GnuCash instance the UI will have to make very clear indeed which window goes with which session, but not worth worrying about until the core implementation is changed.

John Ralls

More information about the gnucash-devel mailing list