genode/repos/gems/sculpt/leitzentrale/default
Norman Feske 8e9cabf819 sculpt_manager: touch-screen compatibility
This patch makes Sculpt's leitzentrale GUI able to respond to touch events. It
formerly assumed that click/clack events are always preceded by hover reports
that identify the clicked-on widgets. For touch events, however, the most
up-to-date hover information referred to the previous click because there is no
motion without touching. So the GUI tended to identify the wrong widgets as
click targets.

The patch solved this problem by testing the freshness of the hover information
at the time of the click. If the hover information is older than the click, the
action is deferred until up-to-date hover information becomes available.

Fixes #4398
2022-02-15 10:16:51 +01:00

324 lines
13 KiB
Plaintext

<config>
<input name="leitzentrale_enabled" rom="leitzentrale" node="leitzentrale">
<attribute name="enabled" /> </input>
<output node="config">
<inline>
<parent-provides>
<service name="ROM"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
<service name="Report"/>
<service name="Gui"/>
<service name="Timer"/>
<service name="File_system"/>
</parent-provides>
<default-route> <any-service> <parent/> </any-service> </default-route>
<default caps="100"/>
<service name="Gui">
<default-policy> <child name="wm"/> </default-policy> </service>
<service name="Capture">
<default-policy> <child name="nitpicker"/> </default-policy> </service>
<service name="Event">
<default-policy> <child name="nitpicker"/> </default-policy> </service>
<service name="File_system">
<default-policy> <child name="fonts_fs"/> </default-policy> </service>
<service name="ROM">
<default-policy> <child name="report_rom"/> </default-policy> </service>
<service name="Report">
<default-policy> <child name="report_rom"/> </default-policy> </service>
</inline>
<if>
<has_value input="leitzentrale_enabled" value="yes" />
<then>
<inline>
<start name="fader">
<binary name="gui_fader"/>
<resource name="RAM" quantum="50M"/>
<provides> <service name="Gui"/> </provides>
<config initial_fade_in_steps="100" fade_in_steps="20" alpha="210"/>
<route>
<service name="Gui"> <child name="manager"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
</inline>
</then>
<else>
<inline>
<start name="fader">
<binary name="gui_fader"/>
<resource name="RAM" quantum="50M"/>
<provides> <service name="Gui"/> </provides>
<config fade_out_steps="30" alpha="0"/>
<route>
<service name="Gui"> <child name="manager"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
</inline>
</else>
</if>
<inline>
<start name="gui_fb">
<resource name="RAM" quantum="18M"/>
<provides> <service name="Framebuffer"/> <service name="Input"/> </provides>
<config/>
<route>
<service name="Gui"> <child name="fader"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="nitpicker" caps="200">
<resource name="RAM" quantum="10M"/>
<provides>
<service name="Gui"/> <service name="Capture"/> <service name="Event"/>
</provides>
<config focus="rom" request_input="yes" request_framebuffer="yes">
<background color="#272f45"/>
<domain name="default" layer="1" content="client" label="no" hover="always" focus="click"/>
<default-policy domain="default"/>
<capture/>
<event/>
<report clicked="yes"/>
</config>
<route>
<service name="Input"> <child name="gui_fb"/> </service>
<service name="Framebuffer"> <child name="gui_fb"/> </service>
<service name="ROM" label="focus"> <child name="report_rom"/> </service>
<service name="Report"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="report_rom" caps="200">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Report"/>
<service name="ROM"/>
</provides>
<config verbose="no">
<policy label="decorator -> window_layout" report="manager -> window_layout"/>
<policy label="wm -> resize_request" report="manager -> window_layout"/>
<policy label="wm -> focus" report="manager -> wm_focus"/>
<policy label="decorator -> pointer" report="wm -> pointer"/>
<policy label="manager -> window_list" report="wm -> window_list"/>
<policy label="manager -> decorator_margins" report="decorator -> decorator_margins"/>
<policy label="manager -> clicked" report="nitpicker -> clicked"/>
<policy label="nitpicker -> focus" report="manager -> focus"/>
<policy label="runtime -> leitzentrale -> menu_view -> dialog"
report="manager -> menu_dialog"/>
<policy label="runtime -> leitzentrale -> network_view -> dialog"
report="manager -> network_dialog"/>
<policy label="runtime -> leitzentrale -> settings_view -> dialog"
report="manager -> settings_dialog"/>
<policy label="runtime -> leitzentrale -> file_browser_view -> dialog"
report="manager -> file_browser_dialog"/>
<policy label="runtime -> leitzentrale -> popup_view -> dialog"
report="manager -> popup_dialog"/>
<policy label="runtime -> leitzentrale -> panel_view -> dialog"
report="manager -> panel_dialog"/>
<policy label="runtime -> leitzentrale -> runtime_view -> dialog"
report="manager -> runtime_dialog"/>
<policy label="manager -> menu_view_hover"
report="runtime -> leitzentrale -> menu_view -> hover"/>
<policy label="manager -> network_view_hover"
report="runtime -> leitzentrale -> network_view -> hover"/>
<policy label="manager -> settings_view_hover"
report="runtime -> leitzentrale -> settings_view -> hover"/>
<policy label="manager -> file_browser_view_hover"
report="runtime -> leitzentrale -> file_browser_view -> hover"/>
<policy label="manager -> runtime_view_hover"
report="runtime -> leitzentrale -> runtime_view -> hover"/>
<policy label="manager -> panel_view_hover"
report="runtime -> leitzentrale -> panel_view -> hover"/>
<policy label="manager -> popup_view_hover"
report="runtime -> leitzentrale -> popup_view -> hover"/>
</config>
</start>
<start name="wm" caps="300">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Gui"/> <service name="Report"/> <service name="ROM"/>
</provides>
<config>
<policy label_prefix="decorator" role="decorator"/>
<default-policy/>
</config>
<route>
<service name="ROM" label="resize_request"> <child name="report_rom"/> </service>
<service name="ROM" label="focus"> <child name="report_rom"/> </service>
<service name="Report"> <child name="report_rom"/> </service>
<service name="Gui"> <child name="nitpicker"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="decorator" caps="350">
<binary name="themed_decorator"/>
<resource name="RAM" quantum="10M"/>
<config>
<libc/>
<vfs>
<dir name="theme">
<inline name="metadata">
<theme>
<aura top="5" bottom="5" left="5" right="5"/>
<decor top="6" bottom="6" left="6" right="6"/>
</theme>
</inline>
<rom name="default.png"/>
</dir>
<dir name="dev"> <log/> </dir>
</vfs>
<policy label="log" decoration="yes" motion="20"/>
<policy label="runtime -> leitzentrale -> settings_view" decoration="no" motion="20"/>
<policy label="runtime -> leitzentrale -> file_browser_view" decoration="no" motion="30"/>
<policy label="runtime -> leitzentrale -> network_view" decoration="no" motion="20"/>
<policy label="runtime -> leitzentrale -> runtime_view" decoration="no" motion="30"/>
<policy label="runtime -> leitzentrale -> menu_view" decoration="no" motion="30"/>
<policy label="runtime -> leitzentrale -> popup_view" decoration="no" motion="20"/>
<policy label="runtime -> leitzentrale -> panel_view" decoration="no" motion="20"/>
<policy label_prefix="logo" decoration="no"/>
<default-policy/>
</config>
<route>
<service name="ROM" label="default.png"> <parent label="drop_shadow.png"/> </service>
<service name="ROM" label="window_layout"> <child name="report_rom"/> </service>
<service name="ROM" label="pointer"> <child name="report_rom"/> </service>
<service name="Report" label="decorator_margins"> <child name="report_rom"/> </service>
<service name="Report" label="hover"> <child name="report_rom"/> </service>
<service name="Gui"> <child name="wm"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="config_fs_report">
<binary name="fs_report"/>
<resource name="RAM" quantum="2M"/>
<provides> <service name="Report"/> </provides>
<config> <vfs> <fs/> </vfs> </config>
<route>
<service name="File_system"> <parent label="config"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="manager" caps="300">
<binary name="sculpt_manager"/>
<resource name="RAM" quantum="3M"/>
<provides> <service name="Gui"/> </provides>
<config/>
<route>
<service name="Report" label="runtime_config">
<child name="config_fs_report" label="managed -> runtime"/> </service>
<service name="Report" label="deploy_config">
<child name="config_fs_report" label="managed -> deploy"/> </service>
<service name="Report" label="wifi_config">
<child name="config_fs_report" label="managed -> wifi"/> </service>
<service name="Report" label="fonts_config">
<child name="config_fs_report" label="managed -> fonts"/> </service>
<service name="Report" label="nic_router_config">
<child name="config_fs_report" label="managed -> nic_router"/> </service>
<service name="Report" label="fb_drv_config">
<child name="config_fs_report" label="managed -> fb_drv"/> </service>
<service name="Report" label="event_filter_config">
<child name="config_fs_report" label="managed -> event_filter"/> </service>
<service name="Report" label="installation_config">
<child name="config_fs_report" label="managed -> installation"/> </service>
<service name="Report" label="depot_query">
<child name="config_fs_report" label="managed -> depot_query"/> </service>
<service name="Report"> <child name="report_rom"/> </service>
<service name="ROM" label_prefix="report ->"> <parent/> </service>
<service name="ROM" label_suffix="_hover"> <child name="report_rom"/> </service>
<service name="ROM" label="window_list"> <child name="report_rom"/> </service>
<service name="ROM" label="decorator_margins"> <child name="report_rom"/> </service>
<service name="ROM" label="clicked"> <child name="report_rom"/> </service>
<service name="Gui"> <parent/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="fonts_fs" caps="100">
<binary name="vfs"/>
<resource name="RAM" quantum="4M"/>
<provides> <service name="File_system"/> </provides>
<route>
<service name="ROM" label="config">
<parent label="config -> managed/fonts"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="log_terminal">
<binary name="terminal"/>
<resource name="RAM" quantum="8M"/>
<provides> <service name="Terminal"/> </provides>
<config>
<initial width="400"/>
<palette>
<color index="0" value="#2f3953"/>
<color index="8" value="#2f3953"/>
</palette>
<vfs>
<rom name="VeraMono.ttf"/>
<dir name="fonts">
<dir name="monospace">
<ttf name="regular" path="/VeraMono.ttf" size_px="10"/>
</dir>
</dir>
</vfs>
</config>
<route>
<service name="Gui"> <child name="wm" label="log"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="log" caps="100">
<binary name="stdin2out"/>
<resource name="RAM" quantum="2M" />
<config>
<libc stdin="/report/log" stdout="/dev/terminal"/>
<vfs>
<dir name="dev"> <terminal/> </dir>
<dir name="report"> <fs label="report"/> </dir>
</vfs>
</config>
<route>
<service name="File_system"> <parent label="report"/> </service>
<any-service> <child name="log_terminal"/> <parent/> </any-service>
</route>
</start>
<start name="backdrop" caps="150">
<resource name="RAM" quantum="4M" />
<config width="300" height="150">
<libc/>
<vfs> <rom name="genode_logo.png"/> </vfs>
<fill color="#272f45"/>
<image png="genode_logo.png" anchor="bottom_right" alpha="100"
xpos="-20" ypos="-20" />
</config>
<route>
<service name="Gui"> <child name="wm" label="logo"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
</inline>
</output>
</config>