Files
sloposk/src/settings/Settings.cpp
T
ericek111andClaude Opus 5.5 ba2f17d665 Full keyboard mode, Ctrl/Alt/Super, dead keys, shift levels
- Full (iPad Pro) mode: every typing key from the keymap, number row,
  tab, caps lock, ctrl/super/alt; shifted symbol shown above and flickable
- Dead keys compose with the locale's XKB compose table
- Ctrl/Alt/Super stick like shift and turn keys into shortcuts; a tapped
  or held shift joins shortcuts and non-text keys, auto-shift and caps
  lock don't
- Auto-capitalization and caps lock only capitalize letters; the user's
  shift picks the keymap's shifted level
- Mode switch in settings keeps key size by resizing the window

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 21:29:24 +02:00

74 lines
2.2 KiB
C++

#include "Settings.h"
#include "layout/Layout.h"
#include <QSettings>
namespace {
constexpr auto AutoCapitalizeKey = "typing/autoCapitalize";
constexpr auto DoubleSpacePeriodKey = "typing/doubleSpacePeriod";
constexpr auto VisibleSectionsKey = "layout/visibleSections";
constexpr auto FullKeyboardKey = "layout/fullKeyboard";
}
Settings::Settings(QObject *parent)
: QObject(parent)
{
const QSettings store;
const TypingOptions defaults;
m_typing.autoCapitalize = store.value(AutoCapitalizeKey, defaults.autoCapitalize).toBool();
m_typing.doubleSpacePeriod = store.value(DoubleSpacePeriodKey, defaults.doubleSpacePeriod).toBool();
m_visibleSections = store.value(VisibleSectionsKey, QStringList{MainSectionId}).toStringList();
if (m_visibleSections.isEmpty())
m_visibleSections = {MainSectionId};
m_fullKeyboard = store.value(FullKeyboardKey, false).toBool();
}
void Settings::setFullKeyboard(bool full)
{
if (full == m_fullKeyboard)
return;
m_fullKeyboard = full;
QSettings().setValue(FullKeyboardKey, full);
Q_EMIT fullKeyboardChanged();
}
void Settings::setSectionVisible(const QString &id, bool visible)
{
QStringList sections = m_visibleSections;
if (visible && !sections.contains(id))
sections.append(id);
else if (!visible)
sections.removeAll(id);
if (sections == m_visibleSections || sections.isEmpty())
return;
m_visibleSections = sections;
QSettings().setValue(VisibleSectionsKey, m_visibleSections);
Q_EMIT visibleSectionsChanged();
}
void Settings::setAutoCapitalize(bool enabled)
{
TypingOptions options = m_typing;
options.autoCapitalize = enabled;
setTypingOptions(options);
}
void Settings::setDoubleSpacePeriod(bool enabled)
{
TypingOptions options = m_typing;
options.doubleSpacePeriod = enabled;
setTypingOptions(options);
}
void Settings::setTypingOptions(const TypingOptions &options)
{
if (options == m_typing)
return;
m_typing = options;
QSettings store;
store.setValue(AutoCapitalizeKey, m_typing.autoCapitalize);
store.setValue(DoubleSpacePeriodKey, m_typing.doubleSpacePeriod);
Q_EMIT typingOptionsChanged();
}