parent
0e0b6bdde7
commit
ee423e5bf1
|
@ -19,20 +19,22 @@
|
||||||
#include "main_window.h"
|
#include "main_window.h"
|
||||||
|
|
||||||
|
|
||||||
enum { THREAD_STACK_SIZE = 2 * 1024 * sizeof(long) };
|
enum { SIGNAL_EP_STACK_SIZE = 16*1024 };
|
||||||
|
|
||||||
|
|
||||||
struct Report_thread : Genode::Thread
|
struct Report_handler
|
||||||
{
|
{
|
||||||
QMember<Report_proxy> proxy;
|
QMember<Report_proxy> proxy;
|
||||||
|
|
||||||
Genode::Attached_rom_dataspace channels_rom;
|
Genode::Attached_rom_dataspace channels_rom;
|
||||||
|
|
||||||
Genode::Signal_receiver sig_rec;
|
Genode::Entrypoint sig_ep;
|
||||||
Genode::Signal_dispatcher<Report_thread> channels_dispatcher;
|
Genode::Signal_handler<Report_handler> channels_handler;
|
||||||
|
|
||||||
Genode::Lock _report_lock { Genode::Lock::LOCKED };
|
Genode::Lock _report_lock { Genode::Lock::LOCKED };
|
||||||
|
|
||||||
|
bool window_connected { false };
|
||||||
|
|
||||||
void _report(char const *data, size_t size)
|
void _report(char const *data, size_t size)
|
||||||
{
|
{
|
||||||
Genode::Xml_node node(data, size);
|
Genode::Xml_node node(data, size);
|
||||||
|
@ -42,34 +44,25 @@ struct Report_thread : Genode::Thread
|
||||||
_report_lock.lock();
|
_report_lock.lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handle_channels(unsigned)
|
void _handle_channels()
|
||||||
{
|
{
|
||||||
|
if (!window_connected)
|
||||||
|
return;
|
||||||
|
|
||||||
channels_rom.update();
|
channels_rom.update();
|
||||||
|
|
||||||
if (channels_rom.valid())
|
if (channels_rom.valid())
|
||||||
_report(channels_rom.local_addr<char>(), channels_rom.size());
|
_report(channels_rom.local_addr<char>(), channels_rom.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
Report_thread(Genode::Env &env)
|
Report_handler(Genode::Env &env)
|
||||||
:
|
:
|
||||||
Genode::Thread(env, "report_thread", THREAD_STACK_SIZE),
|
|
||||||
channels_rom(env, "channel_list"),
|
channels_rom(env, "channel_list"),
|
||||||
channels_dispatcher(sig_rec, *this, &Report_thread::_handle_channels)
|
sig_ep(env, SIGNAL_EP_STACK_SIZE, "signal ep",
|
||||||
|
Genode::Affinity::Location()),
|
||||||
|
channels_handler(sig_ep, *this, &Report_handler::_handle_channels)
|
||||||
{
|
{
|
||||||
channels_rom.sigh(channels_dispatcher);
|
channels_rom.sigh(channels_handler);
|
||||||
}
|
|
||||||
|
|
||||||
void entry() override
|
|
||||||
{
|
|
||||||
using namespace Genode;
|
|
||||||
while (true) {
|
|
||||||
Signal sig = sig_rec.wait_for_signal();
|
|
||||||
int num = sig.num();
|
|
||||||
|
|
||||||
Signal_dispatcher_base *dispatcher;
|
|
||||||
dispatcher = dynamic_cast<Signal_dispatcher_base *>(sig.context());
|
|
||||||
dispatcher->dispatch(num);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void connect_window(Main_window *win)
|
void connect_window(Main_window *win)
|
||||||
|
@ -77,6 +70,8 @@ struct Report_thread : Genode::Thread
|
||||||
QObject::connect(proxy, SIGNAL(report_changed(void *,void const*)),
|
QObject::connect(proxy, SIGNAL(report_changed(void *,void const*)),
|
||||||
win, SLOT(report_changed(void *, void const*)),
|
win, SLOT(report_changed(void *, void const*)),
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
|
|
||||||
|
window_connected = true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -107,10 +102,10 @@ void Libc::Component::construct(Libc::Env &env)
|
||||||
int argc = 1;
|
int argc = 1;
|
||||||
char const *argv[] = { "mixer_gui_qt", 0 };
|
char const *argv[] = { "mixer_gui_qt", 0 };
|
||||||
|
|
||||||
Report_thread *report_thread;
|
Report_handler *report_handler;
|
||||||
try { report_thread = new Report_thread(env); }
|
try { report_handler = new Report_handler(env); }
|
||||||
catch (...) {
|
catch (...) {
|
||||||
Genode::error("Could not create Report_thread");
|
Genode::error("Could not create Report_handler");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,8 +116,7 @@ void Libc::Component::construct(Libc::Env &env)
|
||||||
QMember<Main_window> main_window(env);
|
QMember<Main_window> main_window(env);
|
||||||
main_window->show();
|
main_window->show();
|
||||||
|
|
||||||
report_thread->connect_window(main_window);
|
report_handler->connect_window(main_window);
|
||||||
report_thread->start();
|
|
||||||
|
|
||||||
app.connect(&app, SIGNAL(lastWindowClosed()), SLOT(quit()));
|
app.connect(&app, SIGNAL(lastWindowClosed()), SLOT(quit()));
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/env.h>
|
#include <base/env.h>
|
||||||
#include <base/printf.h>
|
|
||||||
#include <base/lock.h>
|
#include <base/lock.h>
|
||||||
#include <util/xml_node.h>
|
#include <util/xml_node.h>
|
||||||
|
|
||||||
|
|
|
@ -21,11 +21,12 @@ struct Main
|
||||||
{
|
{
|
||||||
Libc::Env &env;
|
Libc::Env &env;
|
||||||
|
|
||||||
Genode_signal_dispatcher dispatcher { env };
|
Genode::Entrypoint signal_ep { env, 0x4000, "signal ep",
|
||||||
|
Genode::Affinity::Location() };
|
||||||
|
|
||||||
QApplication &app { qt5_initialization(env) };
|
QApplication &app { qt5_initialization(env) };
|
||||||
|
|
||||||
QMember<Panel> widget { env, dispatcher.signal_receiver() };
|
QMember<Panel> widget { env, signal_ep };
|
||||||
|
|
||||||
Main(Libc::Env &env) : env(env)
|
Main(Libc::Env &env) : env(env)
|
||||||
{
|
{
|
||||||
|
|
|
@ -86,10 +86,10 @@ void App_bar::_handle_apps()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
App_bar::App_bar(Genode::Env &env, Genode::Signal_receiver &sig_rec)
|
App_bar::App_bar(Genode::Env &env, Genode::Entrypoint &sig_ep)
|
||||||
:
|
:
|
||||||
_apps(env, "apps"), _content_request(env, "content_request"),
|
_apps(env, "apps"), _content_request(env, "content_request"),
|
||||||
_apps_proxy(sig_rec)
|
_apps_proxy(sig_ep)
|
||||||
{
|
{
|
||||||
_content_request.enabled(true);
|
_content_request.enabled(true);
|
||||||
|
|
||||||
|
@ -116,10 +116,10 @@ void Panel::_wifi_toggled(bool checked)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Panel::Panel(Genode::Env &env, Genode::Signal_receiver &sig_rec)
|
Panel::Panel(Genode::Env &env, Genode::Entrypoint &sig_ep)
|
||||||
:
|
:
|
||||||
_overlay(env, "overlay"), _overlay_request(env, "overlay_request"),
|
_overlay(env, "overlay"), _overlay_request(env, "overlay_request"),
|
||||||
_panel_button("Panel"), _app_bar(env, sig_rec)
|
_panel_button("Panel"), _app_bar(env, sig_ep)
|
||||||
{
|
{
|
||||||
_layout->addWidget(_panel_button);
|
_layout->addWidget(_panel_button);
|
||||||
_layout->addWidget(new Spacer(), 1);
|
_layout->addWidget(new Spacer(), 1);
|
||||||
|
|
|
@ -77,7 +77,7 @@ class App_bar : public Compound_widget<QWidget, QHBoxLayout>
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
App_bar(Genode::Env &, Genode::Signal_receiver &);
|
App_bar(Genode::Env &, Genode::Entrypoint &);
|
||||||
~App_bar();
|
~App_bar();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ class Panel : public Compound_widget<QWidget, QHBoxLayout>
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Panel(Genode::Env &, Genode::Signal_receiver &);
|
Panel(Genode::Env &, Genode::Entrypoint &);
|
||||||
~Panel();
|
~Panel();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -41,25 +41,25 @@ typedef Genode::String<32> Name;
|
||||||
* Genode signal to queued Qt signal proxy
|
* Genode signal to queued Qt signal proxy
|
||||||
*/
|
*/
|
||||||
class Genode_signal_proxy : public QObject,
|
class Genode_signal_proxy : public QObject,
|
||||||
public Genode::Signal_dispatcher<Genode_signal_proxy>
|
public Genode::Signal_handler<Genode_signal_proxy>
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Genode_signal_proxy(Genode::Signal_receiver &sig_rec)
|
Genode_signal_proxy(Genode::Entrypoint &sig_ep)
|
||||||
:
|
:
|
||||||
Genode::Signal_dispatcher<Genode_signal_proxy>(
|
Genode::Signal_handler<Genode_signal_proxy>(
|
||||||
sig_rec, *this, &Genode_signal_proxy::handle_genode_signal)
|
sig_ep, *this, &Genode_signal_proxy::handle_genode_signal)
|
||||||
{
|
{
|
||||||
connect(this, SIGNAL(internal_signal()),
|
connect(this, SIGNAL(internal_signal()),
|
||||||
this, SIGNAL(signal()),
|
this, SIGNAL(signal()),
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* called by signal dispatcher / emits internal signal in context of
|
/* called by signal handler / emits internal signal in context of
|
||||||
* signal-dispatcher thread */
|
* signal-entrypoint thread */
|
||||||
void handle_genode_signal(unsigned = 0) { Q_EMIT internal_signal(); }
|
void handle_genode_signal() { Q_EMIT internal_signal(); }
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
|
||||||
|
@ -71,41 +71,6 @@ class Genode_signal_proxy : public QObject,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Genode signal dispatcher thread
|
|
||||||
*/
|
|
||||||
class Genode_signal_dispatcher : public Genode::Thread
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
|
|
||||||
Genode::Signal_receiver _sig_rec;
|
|
||||||
|
|
||||||
void entry()
|
|
||||||
{
|
|
||||||
/* dispatch signals */
|
|
||||||
while (true) {
|
|
||||||
Genode::Signal sig = _sig_rec.wait_for_signal();
|
|
||||||
Genode::Signal_dispatcher_base *dispatcher {
|
|
||||||
dynamic_cast<Genode::Signal_dispatcher_base *>(sig.context()) };
|
|
||||||
|
|
||||||
if (dispatcher)
|
|
||||||
dispatcher->dispatch(sig.num());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
Genode_signal_dispatcher(Genode::Env &env)
|
|
||||||
:
|
|
||||||
Genode::Thread(env, "signal_dispatcher", 0x4000)
|
|
||||||
{
|
|
||||||
start();
|
|
||||||
}
|
|
||||||
|
|
||||||
Genode::Signal_receiver &signal_receiver() { return _sig_rec; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Qt initialization
|
* Qt initialization
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -48,7 +48,7 @@ class QNitpickerPlatformWindow : public QObject, public QPlatformWindow
|
||||||
bool _framebuffer_changed;
|
bool _framebuffer_changed;
|
||||||
bool _geometry_changed;
|
bool _geometry_changed;
|
||||||
Framebuffer::Mode _current_mode;
|
Framebuffer::Mode _current_mode;
|
||||||
Genode::Signal_receiver &_signal_receiver;
|
Genode::Entrypoint &_signal_ep;
|
||||||
Nitpicker::Session::View_handle _view_handle;
|
Nitpicker::Session::View_handle _view_handle;
|
||||||
Input::Session_client _input_session;
|
Input::Session_client _input_session;
|
||||||
Genode::Attached_dataspace _ev_buf;
|
Genode::Attached_dataspace _ev_buf;
|
||||||
|
@ -66,8 +66,8 @@ class QNitpickerPlatformWindow : public QObject, public QPlatformWindow
|
||||||
_mouse_position.y() - geometry().y());
|
_mouse_position.y() - geometry().y());
|
||||||
}
|
}
|
||||||
|
|
||||||
Genode::Signal_dispatcher<QNitpickerPlatformWindow> _input_signal_dispatcher;
|
Genode::Signal_handler<QNitpickerPlatformWindow> _input_signal_handler;
|
||||||
Genode::Signal_dispatcher<QNitpickerPlatformWindow> _mode_changed_signal_dispatcher;
|
Genode::Signal_handler<QNitpickerPlatformWindow> _mode_changed_signal_handler;
|
||||||
|
|
||||||
QVector<QWindowSystemInterface::TouchPoint> _touch_points { 16 };
|
QVector<QWindowSystemInterface::TouchPoint> _touch_points { 16 };
|
||||||
QTouchDevice *_touch_device;
|
QTouchDevice *_touch_device;
|
||||||
|
@ -82,18 +82,18 @@ class QNitpickerPlatformWindow : public QObject, public QPlatformWindow
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
|
|
||||||
void _handle_input(unsigned int);
|
void _handle_input();
|
||||||
void _handle_mode_changed(unsigned int);
|
void _handle_mode_changed();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
|
||||||
void _input(unsigned int);
|
void _input();
|
||||||
void _mode_changed(unsigned int);
|
void _mode_changed();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
QNitpickerPlatformWindow(Genode::Env &env, QWindow *window,
|
QNitpickerPlatformWindow(Genode::Env &env, QWindow *window,
|
||||||
Genode::Signal_receiver &signal_receiver,
|
Genode::Entrypoint &signal_ep,
|
||||||
int screen_width, int screen_height);
|
int screen_width, int screen_height);
|
||||||
|
|
||||||
~QNitpickerPlatformWindow();
|
~QNitpickerPlatformWindow();
|
||||||
|
|
|
@ -16,11 +16,9 @@ SRC_CC += main.cpp \
|
||||||
qnitpickerintegration.cpp \
|
qnitpickerintegration.cpp \
|
||||||
qnitpickerplatformwindow.cpp \
|
qnitpickerplatformwindow.cpp \
|
||||||
qnitpickerwindowsurface.cpp \
|
qnitpickerwindowsurface.cpp \
|
||||||
qsignalhandlerthread.cpp \
|
|
||||||
moc_qnitpickerplatformwindow.cpp \
|
moc_qnitpickerplatformwindow.cpp \
|
||||||
moc_qnitpickerwindowsurface.cpp \
|
moc_qnitpickerwindowsurface.cpp \
|
||||||
moc_qnitpickerintegrationplugin.cpp \
|
moc_qnitpickerintegrationplugin.cpp
|
||||||
moc_qsignalhandlerthread.cpp
|
|
||||||
|
|
||||||
ifeq ($(CONTRIB_DIR),)
|
ifeq ($(CONTRIB_DIR),)
|
||||||
|
|
||||||
|
|
|
@ -40,15 +40,6 @@ struct Qt_launchpad_namespace::Local_env : Genode::Env
|
||||||
Pd_session_capability pd_session_cap() override { return genode_env.pd_session_cap(); }
|
Pd_session_capability pd_session_cap() override { return genode_env.pd_session_cap(); }
|
||||||
Id_space<Parent::Client> &id_space() override { return genode_env.id_space(); }
|
Id_space<Parent::Client> &id_space() override { return genode_env.id_space(); }
|
||||||
|
|
||||||
/*
|
|
||||||
* \deprecated
|
|
||||||
*
|
|
||||||
* Emulation of deprecated part of the 'Env' interface. To be
|
|
||||||
* removed once they are removed from 'Genode::Env'.
|
|
||||||
*/
|
|
||||||
Pd_session &ram() override { return pd(); }
|
|
||||||
Pd_session_capability ram_session_cap() override { return pd_session_cap(); }
|
|
||||||
|
|
||||||
Session_capability session(Parent::Service_name const &service_name,
|
Session_capability session(Parent::Service_name const &service_name,
|
||||||
Parent::Client::Id id,
|
Parent::Client::Id id,
|
||||||
Parent::Session_args const &session_args,
|
Parent::Session_args const &session_args,
|
||||||
|
@ -88,7 +79,7 @@ void Libc::Component::construct(Libc::Env &env)
|
||||||
|
|
||||||
QApplication a(argc, (char**)argv);
|
QApplication a(argc, (char**)argv);
|
||||||
|
|
||||||
Qt_launchpad launchpad(local_env, env.ram().avail_ram().value);
|
Qt_launchpad launchpad(local_env, env.pd().avail_ram().value);
|
||||||
|
|
||||||
Genode::Attached_rom_dataspace config(env, "config");
|
Genode::Attached_rom_dataspace config(env, "config");
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ void Qt_launchpad::_avail_quota_update()
|
||||||
{
|
{
|
||||||
static Genode::size_t _avail = 0;
|
static Genode::size_t _avail = 0;
|
||||||
|
|
||||||
Genode::size_t new_avail = _env.ram().avail_ram().value;
|
Genode::size_t new_avail = _env.pd().avail_ram().value;
|
||||||
|
|
||||||
if (new_avail != _avail)
|
if (new_avail != _avail)
|
||||||
quota(new_avail);
|
quota(new_avail);
|
||||||
|
|
|
@ -232,5 +232,5 @@ void QNitpickerViewWidget::focusInEvent(QFocusEvent *)
|
||||||
QNitpickerPlatformWindow *platform_window =
|
QNitpickerPlatformWindow *platform_window =
|
||||||
dynamic_cast<QNitpickerPlatformWindow*>(window()->windowHandle()->handle());
|
dynamic_cast<QNitpickerPlatformWindow*>(window()->windowHandle()->handle());
|
||||||
|
|
||||||
platform_window->nitpicker().focus(*nitpicker);
|
platform_window->nitpicker().focus(nitpicker->rpc_cap());
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,7 +127,7 @@ void PluginStarter::_start_plugin(QString &file_name, QByteArray const &file_buf
|
||||||
"ram_quota").ulong_value(0) +
|
"ram_quota").ulong_value(0) +
|
||||||
file_size;
|
file_size;
|
||||||
|
|
||||||
if (((long)_env->ram().avail_ram().value - (long)ram_quota) <
|
if (((long)_env->pd().avail_ram().value - (long)ram_quota) <
|
||||||
QPluginWidget::PRESERVED_RAM_QUOTA) {
|
QPluginWidget::PRESERVED_RAM_QUOTA) {
|
||||||
Genode::error("Cannot donate ", ram_quota, " bytes of RAM to the plugin (quota exceeded).");
|
Genode::error("Cannot donate ", ram_quota, " bytes of RAM to the plugin (quota exceeded).");
|
||||||
_plugin_loading_state = RAM_QUOTA_EXCEEDED_ERROR;
|
_plugin_loading_state = RAM_QUOTA_EXCEEDED_ERROR;
|
||||||
|
@ -180,7 +180,7 @@ void PluginStarter::_start_plugin(QString &file_name, QByteArray const &file_buf
|
||||||
} else {
|
} else {
|
||||||
Genode::size_t ram_quota = Arg_string::find_arg(_args.constData(), "ram_quota").ulong_value(0);
|
Genode::size_t ram_quota = Arg_string::find_arg(_args.constData(), "ram_quota").ulong_value(0);
|
||||||
|
|
||||||
if (((long)_env->ram().avail_ram().value - (long)ram_quota) <
|
if (((long)_env->pd().avail_ram().value - (long)ram_quota) <
|
||||||
QPluginWidget::PRESERVED_RAM_QUOTA) {
|
QPluginWidget::PRESERVED_RAM_QUOTA) {
|
||||||
_plugin_loading_state = RAM_QUOTA_EXCEEDED_ERROR;
|
_plugin_loading_state = RAM_QUOTA_EXCEEDED_ERROR;
|
||||||
return;
|
return;
|
||||||
|
@ -235,7 +235,7 @@ void PluginStarter::run()
|
||||||
QString file_name = _plugin_url.path().remove("/");
|
QString file_name = _plugin_url.path().remove("/");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Rom_connection rc(_env, file_name.toLatin1().constData());
|
Rom_connection rc(*_env, file_name.toLatin1().constData());
|
||||||
|
|
||||||
Dataspace_capability rom_ds = rc.dataspace();
|
Dataspace_capability rom_ds = rc.dataspace();
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,11 @@ QPlatformIntegration *QNitpickerIntegrationPlugin::create(const QString& system,
|
||||||
Q_UNUSED(paramList);
|
Q_UNUSED(paramList);
|
||||||
if (system.toLower() == "nitpicker") {
|
if (system.toLower() == "nitpicker") {
|
||||||
assert(_env != nullptr);
|
assert(_env != nullptr);
|
||||||
return new QNitpickerIntegration(*_env);
|
Genode::Entrypoint *signal_ep =
|
||||||
|
new Genode::Entrypoint(*_env, 2*1024*sizeof(Genode::addr_t),
|
||||||
|
"QPA signal handler",
|
||||||
|
Genode::Affinity::Location());
|
||||||
|
return new QNitpickerIntegration(*_env, *signal_ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -27,8 +27,8 @@ QT_BEGIN_NAMESPACE
|
||||||
static constexpr bool verbose = false;
|
static constexpr bool verbose = false;
|
||||||
|
|
||||||
|
|
||||||
QGenodeClipboard::QGenodeClipboard(Genode::Env &env, Genode::Signal_receiver &sig_rcv)
|
QGenodeClipboard::QGenodeClipboard(Genode::Env &env, Genode::Entrypoint &sig_ep)
|
||||||
: _clipboard_signal_dispatcher(sig_rcv, *this, &QGenodeClipboard::_handle_clipboard)
|
: _clipboard_signal_handler(sig_ep, *this, &QGenodeClipboard::_handle_clipboard)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ QGenodeClipboard::QGenodeClipboard(Genode::Env &env, Genode::Signal_receiver &si
|
||||||
|
|
||||||
_clipboard_ds = new Genode::Attached_rom_dataspace(env, "clipboard");
|
_clipboard_ds = new Genode::Attached_rom_dataspace(env, "clipboard");
|
||||||
|
|
||||||
_clipboard_ds->sigh(_clipboard_signal_dispatcher);
|
_clipboard_ds->sigh(_clipboard_signal_handler);
|
||||||
_clipboard_ds->update();
|
_clipboard_ds->update();
|
||||||
|
|
||||||
} catch (...) { }
|
} catch (...) { }
|
||||||
|
@ -63,7 +63,7 @@ QGenodeClipboard::~QGenodeClipboard()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QGenodeClipboard::_handle_clipboard(unsigned int)
|
void QGenodeClipboard::_handle_clipboard()
|
||||||
{
|
{
|
||||||
emitChanged(QClipboard::Clipboard);
|
emitChanged(QClipboard::Clipboard);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ class QGenodeClipboard : public QPlatformClipboard
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Genode::Attached_rom_dataspace *_clipboard_ds = nullptr;
|
Genode::Attached_rom_dataspace *_clipboard_ds = nullptr;
|
||||||
Genode::Signal_dispatcher<QGenodeClipboard> _clipboard_signal_dispatcher;
|
Genode::Signal_handler<QGenodeClipboard> _clipboard_signal_handler;
|
||||||
|
|
||||||
Genode::Reporter *_clipboard_reporter = nullptr;
|
Genode::Reporter *_clipboard_reporter = nullptr;
|
||||||
|
|
||||||
|
@ -41,11 +41,11 @@ class QGenodeClipboard : public QPlatformClipboard
|
||||||
|
|
||||||
QMember<QMimeData> _mimedata;
|
QMember<QMimeData> _mimedata;
|
||||||
|
|
||||||
void _handle_clipboard(unsigned int);
|
void _handle_clipboard();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
QGenodeClipboard(Genode::Env &env, Genode::Signal_receiver &sig_rcv);
|
QGenodeClipboard(Genode::Env &env, Genode::Entrypoint &sig_ep);
|
||||||
~QGenodeClipboard();
|
~QGenodeClipboard();
|
||||||
QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard);
|
QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard);
|
||||||
void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard);
|
void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard);
|
||||||
|
|
|
@ -28,19 +28,12 @@ QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
static const bool verbose = false;
|
static const bool verbose = false;
|
||||||
|
|
||||||
Genode::Signal_receiver &QNitpickerIntegration::_signal_receiver()
|
|
||||||
{
|
|
||||||
static Genode::Signal_receiver _inst;
|
|
||||||
return _inst;
|
|
||||||
}
|
|
||||||
|
|
||||||
QNitpickerIntegration::QNitpickerIntegration(Genode::Env &env)
|
QNitpickerIntegration::QNitpickerIntegration(Genode::Env &env,
|
||||||
|
Genode::Entrypoint &signal_ep)
|
||||||
: _env(env),
|
: _env(env),
|
||||||
_signal_handler_thread(_signal_receiver()),
|
_signal_ep(signal_ep),
|
||||||
_nitpicker_screen(new QNitpickerScreen(env))
|
_nitpicker_screen(new QNitpickerScreen(env)) { }
|
||||||
{
|
|
||||||
_signal_handler_thread.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool QNitpickerIntegration::hasCapability(QPlatformIntegration::Capability cap) const
|
bool QNitpickerIntegration::hasCapability(QPlatformIntegration::Capability cap) const
|
||||||
|
@ -59,7 +52,7 @@ QPlatformWindow *QNitpickerIntegration::createPlatformWindow(QWindow *window) co
|
||||||
|
|
||||||
QRect screen_geometry = _nitpicker_screen->geometry();
|
QRect screen_geometry = _nitpicker_screen->geometry();
|
||||||
return new QNitpickerPlatformWindow(_env, window,
|
return new QNitpickerPlatformWindow(_env, window,
|
||||||
_signal_receiver(),
|
_signal_ep,
|
||||||
screen_geometry.width(),
|
screen_geometry.width(),
|
||||||
screen_geometry.height());
|
screen_geometry.height());
|
||||||
}
|
}
|
||||||
|
@ -102,7 +95,7 @@ QPlatformFontDatabase *QNitpickerIntegration::fontDatabase() const
|
||||||
#ifndef QT_NO_CLIPBOARD
|
#ifndef QT_NO_CLIPBOARD
|
||||||
QPlatformClipboard *QNitpickerIntegration::clipboard() const
|
QPlatformClipboard *QNitpickerIntegration::clipboard() const
|
||||||
{
|
{
|
||||||
static QGenodeClipboard cb(_env, _signal_receiver());
|
static QGenodeClipboard cb(_env, _signal_ep);
|
||||||
return &cb;
|
return &cb;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include <qpa/qplatforminputcontext.h>
|
#include <qpa/qplatforminputcontext.h>
|
||||||
|
|
||||||
#include "qnitpickerscreen.h"
|
#include "qnitpickerscreen.h"
|
||||||
#include "qsignalhandlerthread.h"
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -32,7 +31,7 @@ class QNitpickerIntegration : public QPlatformIntegration
|
||||||
|
|
||||||
Genode::Env &_env;
|
Genode::Env &_env;
|
||||||
|
|
||||||
QSignalHandlerThread _signal_handler_thread;
|
Genode::Entrypoint &_signal_ep;
|
||||||
|
|
||||||
QNitpickerScreen *_nitpicker_screen;
|
QNitpickerScreen *_nitpicker_screen;
|
||||||
|
|
||||||
|
@ -47,7 +46,8 @@ class QNitpickerIntegration : public QPlatformIntegration
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
QNitpickerIntegration(Genode::Env &env);
|
QNitpickerIntegration(Genode::Env &env,
|
||||||
|
Genode::Entrypoint &signal_ep);
|
||||||
|
|
||||||
void initialize() Q_DECL_OVERRIDE;
|
void initialize() Q_DECL_OVERRIDE;
|
||||||
bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
|
bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
|
||||||
|
|
|
@ -185,7 +185,7 @@ static Qt::Key translate_keycode(Input::Keycode key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QNitpickerPlatformWindow::_handle_input(unsigned int)
|
void QNitpickerPlatformWindow::_handle_input()
|
||||||
{
|
{
|
||||||
QList<Input::Event> touch_events;
|
QList<Input::Event> touch_events;
|
||||||
|
|
||||||
|
@ -316,7 +316,7 @@ void QNitpickerPlatformWindow::_handle_input(unsigned int)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QNitpickerPlatformWindow::_handle_mode_changed(unsigned int)
|
void QNitpickerPlatformWindow::_handle_mode_changed()
|
||||||
{
|
{
|
||||||
Framebuffer::Mode mode(_nitpicker_session.mode());
|
Framebuffer::Mode mode(_nitpicker_session.mode());
|
||||||
|
|
||||||
|
@ -432,7 +432,7 @@ QString QNitpickerPlatformWindow::_sanitize_label(QString label)
|
||||||
|
|
||||||
|
|
||||||
QNitpickerPlatformWindow::QNitpickerPlatformWindow(Genode::Env &env, QWindow *window,
|
QNitpickerPlatformWindow::QNitpickerPlatformWindow(Genode::Env &env, QWindow *window,
|
||||||
Genode::Signal_receiver &signal_receiver,
|
Genode::Entrypoint &signal_ep,
|
||||||
int screen_width, int screen_height)
|
int screen_width, int screen_height)
|
||||||
: QPlatformWindow(window),
|
: QPlatformWindow(window),
|
||||||
_env(env),
|
_env(env),
|
||||||
|
@ -442,16 +442,16 @@ QNitpickerPlatformWindow::QNitpickerPlatformWindow(Genode::Env &env, QWindow *wi
|
||||||
_framebuffer(0),
|
_framebuffer(0),
|
||||||
_framebuffer_changed(false),
|
_framebuffer_changed(false),
|
||||||
_geometry_changed(false),
|
_geometry_changed(false),
|
||||||
_signal_receiver(signal_receiver),
|
_signal_ep(signal_ep),
|
||||||
_view_handle(_create_view()),
|
_view_handle(_create_view()),
|
||||||
_input_session(env.rm(), _nitpicker_session.input_session()),
|
_input_session(env.rm(), _nitpicker_session.input_session()),
|
||||||
_ev_buf(env.rm(), _input_session.dataspace()),
|
_ev_buf(env.rm(), _input_session.dataspace()),
|
||||||
_resize_handle(!window->flags().testFlag(Qt::Popup)),
|
_resize_handle(!window->flags().testFlag(Qt::Popup)),
|
||||||
_decoration(!window->flags().testFlag(Qt::Popup)),
|
_decoration(!window->flags().testFlag(Qt::Popup)),
|
||||||
_egl_surface(EGL_NO_SURFACE),
|
_egl_surface(EGL_NO_SURFACE),
|
||||||
_input_signal_dispatcher(_signal_receiver, *this,
|
_input_signal_handler(_signal_ep, *this,
|
||||||
&QNitpickerPlatformWindow::_input),
|
&QNitpickerPlatformWindow::_input),
|
||||||
_mode_changed_signal_dispatcher(_signal_receiver, *this,
|
_mode_changed_signal_handler(_signal_ep, *this,
|
||||||
&QNitpickerPlatformWindow::_mode_changed),
|
&QNitpickerPlatformWindow::_mode_changed),
|
||||||
_touch_device(_init_touch_device())
|
_touch_device(_init_touch_device())
|
||||||
{
|
{
|
||||||
|
@ -461,9 +461,9 @@ QNitpickerPlatformWindow::QNitpickerPlatformWindow(Genode::Env &env, QWindow *wi
|
||||||
|
|
||||||
_nitpicker_session_label_list.append(_nitpicker_session_label);
|
_nitpicker_session_label_list.append(_nitpicker_session_label);
|
||||||
|
|
||||||
_input_session.sigh(_input_signal_dispatcher);
|
_input_session.sigh(_input_signal_handler);
|
||||||
|
|
||||||
_nitpicker_session.mode_sigh(_mode_changed_signal_dispatcher);
|
_nitpicker_session.mode_sigh(_mode_changed_signal_handler);
|
||||||
|
|
||||||
_adjust_and_set_geometry(geometry());
|
_adjust_and_set_geometry(geometry());
|
||||||
|
|
||||||
|
@ -475,12 +475,12 @@ QNitpickerPlatformWindow::QNitpickerPlatformWindow(Genode::Env &env, QWindow *wi
|
||||||
_nitpicker_session.execute();
|
_nitpicker_session.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(this, SIGNAL(_input(unsigned int)),
|
connect(this, SIGNAL(_input()),
|
||||||
this, SLOT(_handle_input(unsigned int)),
|
this, SLOT(_handle_input()),
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
|
|
||||||
connect(this, SIGNAL(_mode_changed(unsigned int)),
|
connect(this, SIGNAL(_mode_changed()),
|
||||||
this, SLOT(_handle_mode_changed(unsigned int)),
|
this, SLOT(_handle_mode_changed()),
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* \brief QPA signal handler thread
|
|
||||||
* \author Christian Prochaska
|
|
||||||
* \date 2015-09-18
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2015-2017 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "qsignalhandlerthread.h"
|
|
||||||
|
|
||||||
void QSignalHandlerThread::run()
|
|
||||||
{
|
|
||||||
for (;;) {
|
|
||||||
Genode::Signal s = _signal_receiver.wait_for_signal();
|
|
||||||
static_cast<Genode::Signal_dispatcher_base*>(s.context())->dispatch(s.num());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
/*
|
|
||||||
* \brief QPA signal handler thread
|
|
||||||
* \author Christian Prochaska
|
|
||||||
* \date 2015-09-18
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2015-2017 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 _QSIGNALHANDLERTHREAD_H_
|
|
||||||
#define _QSIGNALHANDLERTHREAD_H_
|
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/signal.h>
|
|
||||||
|
|
||||||
/* Qt includes */
|
|
||||||
#include <QThread>
|
|
||||||
|
|
||||||
class QSignalHandlerThread : public QThread
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
Genode::Signal_receiver &_signal_receiver;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
QSignalHandlerThread(Genode::Signal_receiver &signal_receiver)
|
|
||||||
: _signal_receiver(signal_receiver) { }
|
|
||||||
|
|
||||||
void run() override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* _QSIGNALHANDLERTHREAD_H_ */
|
|
Loading…
Reference in New Issue
Block a user