sculpt: integrate global clipboard

Issue #3437
This commit is contained in:
Norman Feske 2019-06-27 22:49:12 +02:00 committed by Christian Helmuth
parent e4412a3e56
commit 605f9abf96
9 changed files with 59 additions and 10 deletions

View File

@ -3,6 +3,7 @@ _/pkg/wifi
_/pkg/depot_download
_/pkg/terminal
_/src/report_rom
_/src/clipboard
_/src/init
_/src/ram_fs
_/src/fs_rom

View File

@ -61,6 +61,7 @@ install_config {
<policy label="pointer -> xray"
report="global_keys_handler -> leitzentrale"/>
<policy label="pointer -> shape" report="shape"/>
<policy label="clipboard -> focus" report="nitpicker -> focus"/>
<policy label="drivers -> capslock" report="global_keys_handler -> capslock"/>
<policy label="runtime -> capslock" report="global_keys_handler -> capslock"/>
<policy label="drivers -> numlock" report="global_keys_handler -> numlock"/>
@ -112,6 +113,7 @@ install_config {
<rom name="drivers" label="drivers.config"/>
<rom name="deploy" label="manual_deploy.config"/>
<rom name="usb" label="usb.config"/>
<rom name="clipboard" label="clipboard.config"/>
<rom name="en_us.chargen"/>
<rom name="fr.chargen"/>
<rom name="de.chargen"/>
@ -369,6 +371,19 @@ install_config {
</route>
</start>
<start name="clipboard" priority="-2">
<resource name="RAM" quantum="2M"/>
<provides>
<service name="ROM"/> <service name="Report"/>
</provides>
<route>
<service name="ROM" label="config">
<child name="config_fs_rom" label="clipboard"/> </service>
<service name="ROM" label="focus"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="leitzentrale" caps="4000" priority="-2">
<binary name="init"/>
<resource name="RAM" quantum="164M"/>
@ -442,6 +457,12 @@ install_config {
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<service name="Report" label_suffix="-> shape"> <child name="pointer"/> </service>
<service name="Report" label="inspect terminal -> clipboard">
<child name="clipboard" label="leitzentrale -> manager -> fader -> -> clipboard"/> </service>
<service name="ROM" label="inspect terminal -> clipboard">
<child name="clipboard" label="leitzentrale -> manager -> fader -> -> clipboard"/> </service>
<service name="Report" label_suffix="-> clipboard"> <child name="clipboard"/> </service>
<service name="ROM" label_suffix="-> clipboard"> <child name="clipboard"/> </service>
<service name="Report" label="runtime_view -> hover">
<child name="report_rom"/> </service>
<service name="Report"> <child name="fs_report"/> </service>

View File

@ -0,0 +1,6 @@
<config verbose="no" match_labels="yes">
<flow from="leitzentrale" to="desktop" />
<flow from="desktop" to="leitzentrale" />
<policy label_prefix="leitzentrale" domain="leitzentrale"/>
<default-policy domain="desktop"/>
</config>

View File

@ -1,4 +1,4 @@
<config>
<config copy="yes" paste="yes">
<vfs>
<rom name="Vera.ttf"/>
<rom name="VeraMono.ttf"/>

View File

@ -930,6 +930,8 @@ void Sculpt::Main::_handle_nitpicker_mode()
_gui.font_size(text_size);
_fonts_config.generate([&] (Xml_generator &xml) {
xml.attribute("copy", true);
xml.attribute("paste", true);
xml.node("vfs", [&] () {
gen_named_node(xml, "rom", "Vera.ttf");
gen_named_node(xml, "rom", "VeraMono.ttf");

View File

@ -122,8 +122,13 @@ struct Sculpt::Route : List_model<Route>::Element
gen_named_node(xml, "service", Service::name_attr(required), [&] () {
if (required_label.valid())
xml.attribute("label", required_label);
if (required_label.valid()) {
if (selected_service->match_label == Service::Match_label::LAST)
xml.attribute("label_last", required_label);
else
xml.attribute("label", required_label);
}
selected_service->gen_xml(xml);
});

View File

@ -324,6 +324,9 @@ class Sculpt::Runtime_config
_pf_info { _r, Type::ROM, "platform information", "platform_info" },
_system { _r, Type::ROM, "system status", "config -> system" },
_report { _r, Type::REPORT, "system reports" },
_shape { _r, Type::REPORT, "pointer shape", "shape", Service::Match_label::LAST },
_copy { _r, Type::REPORT, "global clipboard", "clipboard", Service::Match_label::LAST },
_paste { _r, Type::ROM, "global clipboard", "clipboard", Service::Match_label::LAST },
_rm { _r, Type::RM, "custom virtual memory objects" },
_io_mem { _r, Type::IO_MEM, "raw hardware access" },
_io_port { _r, Type::IO_PORT, "raw hardware access" },

View File

@ -29,10 +29,13 @@ struct Sculpt::Service
RM, IO_MEM, IO_PORT, IRQ, REPORT, ROM, TERMINAL, TRACE,
USB, RTC, PLATFORM, VM, UNDEFINED };
Start_name server { }; /* invalid for parent service */
Type type;
Label label;
Info info;
enum class Match_label { EXACT, LAST };
Start_name server { }; /* invalid for parent service */
Type type;
Label label;
Info info;
Match_label match_label { Match_label::EXACT };
/**
* Return name attribute value of <service name="..."> node
@ -72,8 +75,11 @@ struct Sculpt::Service
/**
* Constructor for parent service
*/
Service(Type type, Info const &info, Label const &label = Label())
: type(type), label(label), info(info) { }
Service(Type type, Info const &info, Label const &label = Label(),
Match_label match_label = Match_label::EXACT)
:
type(type), label(label), info(info), match_label(match_label)
{ }
void gen_xml(Xml_generator &xml) const
{
@ -84,7 +90,7 @@ struct Sculpt::Service
if (!parent)
xml.attribute("name", server);
if (label.valid())
if (label.valid() && match_label == Match_label::EXACT)
xml.attribute("label", label);
});
}

View File

@ -91,6 +91,11 @@ void Sculpt::gen_terminal_start(Xml_generator &xml, Rom_name const &name,
gen_parent_route<Pd_session> (xml);
gen_parent_route<Log_session> (xml);
gen_parent_route<Timer::Session> (xml);
gen_parent_route<Report::Session>(xml);
gen_named_node(xml, "service", Rom_session::service_name(), [&] () {
xml.attribute("label", "clipboard");
xml.node("parent", [&] () { }); });
gen_named_node(xml, "service", Rom_session::service_name(), [&] () {
xml.attribute("label", "config");