void CompositorSettings::setCompositor(QWaylandCompositor *compositor)
{
    Q_D(CompositorSettings);

    if (d->compositor == compositor)
        return;

    if (d->compositor)
        disconnect(compositor, SIGNAL(defaultInputDeviceChanged()),
                   this, SLOT(_q_setupKeymap()));

    if (compositor) {
        connect(compositor, SIGNAL(defaultInputDeviceChanged()),
                this, SLOT(_q_setupKeymap()));
        d->_q_setupKeymap();
    }

    d->compositor = compositor;
    Q_EMIT compositorChanged();
}
void CompositorSettings::setKeymap(Keymap *keymap)
{
    Q_D(CompositorSettings);

    if (d->keymap == keymap)
        return;

    if (d->keymap) {
        disconnect(keymap, SIGNAL(rulesChanged()),
                   this, SLOT(_q_setupKeymap()));
        disconnect(keymap, SIGNAL(modelChanged()),
                   this, SLOT(_q_setupKeymap()));
        disconnect(keymap, SIGNAL(layoutChanged()),
                   this, SLOT(_q_setupKeymap()));
        disconnect(keymap, SIGNAL(variantChanged()),
                   this, SLOT(_q_setupKeymap()));
        disconnect(keymap, SIGNAL(optionsChanged()),
                   this, SLOT(_q_setupKeymap()));
    }

    if (keymap) {
        connect(keymap, SIGNAL(rulesChanged()),
                this, SLOT(_q_setupKeymap()));
        connect(keymap, SIGNAL(modelChanged()),
                this, SLOT(_q_setupKeymap()));
        connect(keymap, SIGNAL(layoutChanged()),
                this, SLOT(_q_setupKeymap()));
        connect(keymap, SIGNAL(variantChanged()),
                this, SLOT(_q_setupKeymap()));
        connect(keymap, SIGNAL(optionsChanged()),
                this, SLOT(_q_setupKeymap()));

        d->_q_setupKeymap();
    }

    d->keymap = keymap;
    Q_EMIT keymapChanged();
}