diff --git a/repos/gems/recipes/raw/motif_wm/wm.config b/repos/gems/recipes/raw/motif_wm/wm.config
index 0ec71f3c7..deca1999d 100644
--- a/repos/gems/recipes/raw/motif_wm/wm.config
+++ b/repos/gems/recipes/raw/motif_wm/wm.config
@@ -6,6 +6,7 @@
+
@@ -18,6 +19,10 @@
+
+
+
+
@@ -40,7 +45,7 @@
-
+
@@ -50,6 +55,7 @@
+
diff --git a/repos/gems/recipes/raw/wm/wm.config b/repos/gems/recipes/raw/wm/wm.config
index 4e8fa62bb..01641e340 100644
--- a/repos/gems/recipes/raw/wm/wm.config
+++ b/repos/gems/recipes/raw/wm/wm.config
@@ -6,6 +6,7 @@
+
@@ -48,6 +49,7 @@
+
@@ -72,7 +74,7 @@
-
+
@@ -82,6 +84,7 @@
+
diff --git a/repos/gems/run/launcher.run b/repos/gems/run/launcher.run
index cfe5ef73a..385d08146 100644
--- a/repos/gems/run/launcher.run
+++ b/repos/gems/run/launcher.run
@@ -105,6 +105,7 @@ install_config {
+
@@ -142,7 +143,7 @@ install_config {
-
+
@@ -152,8 +153,9 @@ install_config {
-
-
+
+
+
diff --git a/repos/gems/run/mixer_gui_qt_test.run b/repos/gems/run/mixer_gui_qt_test.run
index 76134c6f5..cd1a4bf1b 100644
--- a/repos/gems/run/mixer_gui_qt_test.run
+++ b/repos/gems/run/mixer_gui_qt_test.run
@@ -79,9 +79,7 @@ append config {
-
-
-
+
diff --git a/repos/gems/run/sculpt/launcher/arora b/repos/gems/run/sculpt/launcher/arora
index 32a1737f6..810e8aaaf 100644
--- a/repos/gems/run/sculpt/launcher/arora
+++ b/repos/gems/run/sculpt/launcher/arora
@@ -2,7 +2,7 @@
-
+
diff --git a/repos/gems/run/sculpt/launcher/config_editor b/repos/gems/run/sculpt/launcher/config_editor
index 0b88be586..d83a2d504 100644
--- a/repos/gems/run/sculpt/launcher/config_editor
+++ b/repos/gems/run/sculpt/launcher/config_editor
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/repos/gems/run/sculpt/launcher/firefox@vbox b/repos/gems/run/sculpt/launcher/firefox@vbox
index b06c9c160..74548bd98 100644
--- a/repos/gems/run/sculpt/launcher/firefox@vbox
+++ b/repos/gems/run/sculpt/launcher/firefox@vbox
@@ -3,7 +3,7 @@
-
+
diff --git a/repos/gems/run/sculpt/launcher/vm b/repos/gems/run/sculpt/launcher/vm
index 5cd90f615..ce6236898 100644
--- a/repos/gems/run/sculpt/launcher/vm
+++ b/repos/gems/run/sculpt/launcher/vm
@@ -4,7 +4,7 @@
-
+
diff --git a/repos/gems/run/sculpt/launcher/wm b/repos/gems/run/sculpt/launcher/wm
index 9973164ca..62b341fe5 100644
--- a/repos/gems/run/sculpt/launcher/wm
+++ b/repos/gems/run/sculpt/launcher/wm
@@ -2,5 +2,6 @@
+
diff --git a/repos/gems/run/sculpt/leitzentrale.config b/repos/gems/run/sculpt/leitzentrale.config
index fc16cb0d7..a56f75269 100644
--- a/repos/gems/run/sculpt/leitzentrale.config
+++ b/repos/gems/run/sculpt/leitzentrale.config
@@ -107,7 +107,7 @@
-
+
diff --git a/repos/gems/run/tiled_wm.run b/repos/gems/run/tiled_wm.run
index 4730f9728..9e5a6a743 100644
--- a/repos/gems/run/tiled_wm.run
+++ b/repos/gems/run/tiled_wm.run
@@ -122,9 +122,7 @@ append config {
-
-
-
+
@@ -148,9 +146,7 @@ append config {
-
-
-
+
@@ -171,9 +167,7 @@ append config {
-
-
-
+
@@ -194,9 +188,7 @@ append config {
-
-
-
+
@@ -216,9 +208,7 @@ append config {
-
-
-
+
diff --git a/repos/gems/run/wm.run b/repos/gems/run/wm.run
index 1de182d0c..0ccfe8203 100644
--- a/repos/gems/run/wm.run
+++ b/repos/gems/run/wm.run
@@ -74,7 +74,7 @@ install_config {
-
+
diff --git a/repos/gems/src/server/wm/main.cc b/repos/gems/src/server/wm/main.cc
index ba7be47d9..b18c2416f 100644
--- a/repos/gems/src/server/wm/main.cc
+++ b/repos/gems/src/server/wm/main.cc
@@ -22,6 +22,7 @@
/* local includes */
#include
+#include
namespace Wm {
@@ -110,6 +111,8 @@ struct Wm::Main
Genode::Signal_handler resize_request_handler =
{ env.ep(), *this, &Main::handle_resize_request_update };
+ Report_forwarder _report_forwarder { env, heap };
+
Main(Genode::Env &env) : env(env)
{
pointer_reporter.enabled(true);
diff --git a/repos/gems/src/server/wm/report_forwarder.h b/repos/gems/src/server/wm/report_forwarder.h
new file mode 100644
index 000000000..ce57de6a0
--- /dev/null
+++ b/repos/gems/src/server/wm/report_forwarder.h
@@ -0,0 +1,102 @@
+/*
+ * \brief Report service for intercepting shape reports
+ * \author Norman Feske
+ * \date 2019-02-18
+ *
+ * This report service has the sole purpose of applying the same labeling
+ * policy to an application's shape report as done for the application's
+ * 'Nitpicker' session. This consistency is needed by the pointer to correlate
+ * the currently hovered nitpicker session with the reported shapes.
+ */
+
+/*
+ * Copyright (C) 2015-2019 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU Affero General Public License version 3.
+ */
+
+#ifndef _REPORT_FORWARDER_H_
+#define _REPORT_FORWARDER_H_
+
+/* Genode includes */
+#include
+#include
+
+namespace Wm { struct Report_forwarder; }
+
+
+struct Wm::Report_forwarder
+{
+ struct Session : Genode::Rpc_object
+ {
+ Genode::Env &_env;
+ Report::Connection _connection;
+
+ Session(Genode::Env &env, Genode::Session_label const &label)
+ : _env(env), _connection(env, label.string())
+ { _env.ep().manage(*this); }
+
+ ~Session() { _env.ep().dissolve(*this); }
+
+ void upgrade(Genode::Session::Resources const &resources)
+ {
+ _connection.upgrade(resources);
+ }
+
+
+ /*******************************
+ ** Report::Session interface **
+ *******************************/
+
+ Genode::Dataspace_capability dataspace() override
+ {
+ return _connection.dataspace();
+ }
+
+ void submit(Genode::size_t length) override
+ {
+ _connection.submit(length);
+ }
+
+ void response_sigh(Genode::Signal_context_capability sigh) override
+ {
+ _connection.response_sigh(sigh);
+ }
+
+ Genode::size_t obtain_response() override
+ {
+ return _connection.obtain_response();
+ }
+ };
+
+ struct Root : Genode::Root_component
+ {
+ Genode::Env &_env;
+ Genode::Allocator &_alloc;
+
+ Session *_create_session(char const *args) override
+ {
+ return new (md_alloc()) Session(_env, Genode::label_from_args(args));
+ }
+
+ void _upgrade_session(Session *session, const char *args) override
+ {
+ session->upgrade(Genode::session_resources_from_args(args));
+ }
+
+ Root(Genode::Env &env, Genode::Allocator &alloc)
+ :
+ Genode::Root_component(env.ep(), alloc),
+ _env(env), _alloc(alloc)
+ {
+ _env.parent().announce(env.ep().manage(*this));
+ }
+
+ } _root;
+
+ Report_forwarder(Genode::Env &env, Genode::Allocator &alloc)
+ : _root(env, alloc) { }
+};
+
+#endif /* _REPORT_FORWARDER_H_ */
diff --git a/repos/libports/run/qt5_common.inc b/repos/libports/run/qt5_common.inc
index d5503ee41..9f20514aa 100644
--- a/repos/libports/run/qt5_common.inc
+++ b/repos/libports/run/qt5_common.inc
@@ -156,7 +156,7 @@ proc qt5_start_nodes { feature_arg } {
-
+
@@ -166,6 +166,7 @@ proc qt5_start_nodes { feature_arg } {
+
diff --git a/repos/libports/run/qt5_textedit.run b/repos/libports/run/qt5_textedit.run
index 35a0861f4..0251d5370 100644
--- a/repos/libports/run/qt5_textedit.run
+++ b/repos/libports/run/qt5_textedit.run
@@ -96,9 +96,7 @@ append config {
-
-
-
+
@@ -119,9 +117,7 @@ append config {
-
-
-
+