diff --git a/src/gui/ctrl/ui-dispatcher.hpp b/src/gui/ctrl/ui-dispatcher.hpp index 603bf75cb..63f92d8f5 100644 --- a/src/gui/ctrl/ui-dispatcher.hpp +++ b/src/gui/ctrl/ui-dispatcher.hpp @@ -110,7 +110,7 @@ namespace ctrl { { dispatcher_.connect( [this]() { - queue_.invoke(); + queue_.invoke(); /////////////////////TICKET #1098 : ensure no exception escapes from here!! }); } diff --git a/src/gui/notification-service.cpp b/src/gui/notification-service.cpp index c9e539b05..d812311a1 100644 --- a/src/gui/notification-service.cpp +++ b/src/gui/notification-service.cpp @@ -113,7 +113,7 @@ namespace gui { void NotificationService::mutate (ID uiElement, DiffMessage&& diff) { - dispatch_->event ([=]() + dispatch_->event ([=]() //////////////////////////////////TODO care for error handling!!! { MutationMessage diffHolder{DiffMessage(diff)}; //////////////////////////////////TICKET #1066 : unnecessary repackaging; could get rid of MutationMessage altogether this->change (uiElement, diffHolder); diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index be6e3b6a4..28a8e8047 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -266,6 +266,11 @@ + + + + + @@ -513,7 +518,7 @@ - + @@ -828,597 +833,28 @@ - - - - - - -

- bisher können wir das GUI nur aktiv intern schließen, -

-

- indem wir ein GTK-Signal erzeugen, das das Hauptfenster schließt -

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- ...das war genau der Kern der "Plugin-Debatte". -

-

- Eine solche globale, flache, dynamisch gebundene Ebene -

-

- klingt nach wahnsinnigen Möglichkeiten, aber nur solange, bis man sich -

-

- eine einzige Funktion konkret durchdenkt: es läuft auf Spaghetti-Code hinaus -

- - -
- - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - -

- jede Facade-Funktion brauch einen Dispatcher -

-

- Das wird eine ganze Me -

- - -
- - - - - - - - - - - - - - - -

- bevor die Facade geöffnet wir -

- - -
-
-
- - - - - - - - -

- und arbeitet asynchron -

- - -
-
- - - - - - -

- Argument-Storage -

-

- organisieren -

- - -
- -
-
-
- - - - - - -

- brauche dedizierten Dispatcher -

- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - -

- ...könnte das am Ende nicht sinnvoll sein, -

-

- speziell den UI-Shutdown-Trigger über den neuen Mechanismus laufen zu lassen, -

-

- obwohl jener doch genau der Anlaß war, diesen neuen Mechanismus zu bauen. -

- - -
-
- - - - - - - - - - -

- wenn die Queue voll ist -

-

- wird erst alles Andere abgearbeitet -

- - -
-
- - - - - - -

- wenn UI-Thread blockt/verhungert, -

-

- kommt der rettende Shutdown gar nicht durch -

- - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- ...indem der NotificatonService nun vom UI-Manager gemanaged wird :) -

- - -
- -
-
-
- - - - - - -

- zieht komplett-Umbau -

-

- des Gui-top-Level nach sich -

- -
- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- ...nur eine heuristische Vermutung von mir -

-

- stützt sich auf folgenden Quellcode -

-

- -

-

- Application::Application(const Glib::ustring& application_id, Gio::ApplicationFlags flags) -

-

- : -

-

-   // Mark this class as non-derived to allow C++ vfuncs to be skipped. -

-

-   //Note that GApplication complains about "" but allows NULL (0), so we avoid passing "". -

-

-   Glib::ObjectBase(0), -

-

-   Gio::Application(Glib::ConstructParams(custom_class_init(), "application_id", (application_id.empty() ? 0 : application_id.c_str()), "flags", GApplicationFlags(flags), static_cast<char*>(0))), -

-

-   m_argc(0), -

-

-   m_argv(0) -

-

- { -

-

-   gtk_init(0, 0); -

-

- } -

- -
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -1431,9 +867,50 @@ - - + + + + + + + + + + + + + + + + + + +

+ ...das ist nützlich zur Diagnose, +

+
    +
  • + aber läßt sich das überhaupt auf IterSource übertragen? +
  • +
  • + war es überhaupt je gerechtferigt? zu starke Annahme über den Diff-Erzeuger! +
  • +
+ + +
+ +
+ + + + + + + + + @@ -1619,12 +1096,590 @@
+ + + + + + + + + - - + - - + + + + + + +

+ jede Facade-Funktion brauch einen Dispatcher +

+

+ Das wird eine ganze Me +

+ +
+ + + + + + + + + + + + + + + +

+ bevor die Facade geöffnet wir +

+ +
+
+
+ + + + + + + + +

+ und arbeitet asynchron +

+ +
+
+ + + + + + +

+ Argument-Storage +

+

+ organisieren +

+ +
+ +
+
+
+ + + + + + +

+ brauche dedizierten Dispatcher +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ ...könnte das am Ende nicht sinnvoll sein, +

+

+ speziell den UI-Shutdown-Trigger über den neuen Mechanismus laufen zu lassen, +

+

+ obwohl jener doch genau der Anlaß war, diesen neuen Mechanismus zu bauen. +

+ +
+
+ + + + + + + + + + +

+ wenn die Queue voll ist +

+

+ wird erst alles Andere abgearbeitet +

+ +
+
+ + + + + + +

+ wenn UI-Thread blockt/verhungert, +

+

+ kommt der rettende Shutdown gar nicht durch +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ bisher können wir das GUI nur aktiv intern schließen, +

+

+ indem wir ein GTK-Signal erzeugen, das das Hauptfenster schließt +

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ ...das war genau der Kern der "Plugin-Debatte". +

+

+ Eine solche globale, flache, dynamisch gebundene Ebene +

+

+ klingt nach wahnsinnigen Möglichkeiten, aber nur solange, bis man sich +

+

+ eine einzige Funktion konkret durchdenkt: es läuft auf Spaghetti-Code hinaus +

+ + +
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +

+ ...indem der NotificatonService nun vom UI-Manager gemanaged wird :) +

+ + +
+ +
+
+
+ + + + + + +

+ zieht komplett-Umbau +

+

+ des Gui-top-Level nach sich +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ ...nur eine heuristische Vermutung von mir +

+

+ stützt sich auf folgenden Quellcode +

+

+ +

+

+ Application::Application(const Glib::ustring& application_id, Gio::ApplicationFlags flags) +

+

+ : +

+

+   // Mark this class as non-derived to allow C++ vfuncs to be skipped. +

+

+   //Note that GApplication complains about "" but allows NULL (0), so we avoid passing "". +

+

+   Glib::ObjectBase(0), +

+

+   Gio::Application(Glib::ConstructParams(custom_class_init(), "application_id", (application_id.empty() ? 0 : application_id.c_str()), "flags", GApplicationFlags(flags), static_cast<char*>(0))), +

+

+   m_argc(0), +

+

+   m_argv(0) +

+

+ { +

+

+   gtk_init(0, 0); +

+

+ } +

+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2527,8 +2582,8 @@ - - + + @@ -2640,8 +2695,17 @@ - - + + + + + + + + + + +