blocking gui process

Russell Shaw rjshaw at netspace.net.au
Fri Jun 4 20:07:46 PDT 2010


Johannes Buchner wrote:
> Hi!
> 
> I was wondering if it would be possible to architect GUIs so that their
> process can be blocked while the user doesn't interact with them.
> That would make it possible to swap the process out completely (e.g.
> while it is on a different workspace).
> 
> In reality, a program will often have some background threads running.
> But still, I'd be interested.

X events are got by select() or poll(), so if there's no mouse
movement over an application window, the process is "blocked".

>  -- somewhat unrelated musings follow --
> 
> I also thought a bit on how to architect GUIs with strict separation
> of concern in mind: There would be a frontend concerned with the view.
> A backend concerned with the control, and a shared data model. How the 
> frontend is structured would be one part, how it is styled another. A
> third part would be declarative rules (that idea I had from ) on how the
> data may be modified, and what consequences that has for other parts of
> the data (events may be launched). The frontend maybe also needs a
> imperative part for events, wikipedia suggests UML state machines. 
> How are desktop applications written nowadays, when compared to the web,
> where separation of concern is done nicely sometimes:
> 
>  what     |  web   |  guis
>  ---------------------------------------------------------------
> style     |  css   |  program calls gui toolkit*
> structure |  html  |  program calls gui toolkit**
> behaviour |  js    |  program shows different parts when it
>                    |  gets callbacks; calling gui toolkit
> correctness| js    |  program has ifs in signal callbacks
> backend   | server |  some tier separate from the gui code (hopefully)
> 
> * css for guis is coming, and there is glade
> ** sometimes there is xml. Sometimes IDEs provide a code generator.
> Since it is often not roundtrip-able, eventually you edit the code and
> can't use the gui editor anymore.
> 
> I would suggest that
> (1) gui toolkits have a declarative styling language (like javacss)
>         * reloading at runtime would be nice and possible
> (2) gui toolkits have a declarative structure description language
>     (like glade)
>         * reloading at runtime would be nice and possible
> (3) the program describes what valid operations on the data model are,
>     using in a declarative rules framework / inference engine (like
>     drools, see [2])
> (4) the backend sees the data model and the events fired by the rules.
>     The frontend also just sees the data and the events fired by the
>     rules. the frontend is only represents the data (MVC).
> (5) While we're at it, the frontend will need something like gettext to
>     get i18n strings, stored in e.g. a text file.
> 
> That would give us a true next generation GUI toolkit. Note that at
> no point I said this couldn't be built on top of an existing GUI
> toolkit.
> 
> I'd be interested in feedback from Xorg and toolkit devs.

Constructing GUIs with a declarative language is all well and good
for non-programmers and artistic types, but as soon as you want to
create a custom action or widget such as eg a dynamically created
tear-off menu, it's a total pain to dig into all kinds of parser/interpreter
machinery, reverse engineer everything because it's rarely documented,
and then actually do the task that should've taken 2 hours instead
of 2 weeks or months. Forget UML XML CSS JAVA(SCRIPT) PYTHON C++ and
all kinds of OOP crap and just write the fundamentals in non-OOP C.
This is no easy task for someone starting out, but is a doable solution.
You'll end up with a fraction of the code and infinite flexibility.



More information about the xorg mailing list