diff --git a/CMakeLists.txt b/CMakeLists.txt index eb5f6b7..bfbf2fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,12 +35,16 @@ find_package(LibXml2 REQUIRED) set(PROJECT_SOURCES src/main.cpp src/maindialog.cpp src/maindialog.h src/maindialog.ui + src/layoutmodel.cpp src/layoutmodel.h + src/environment.cpp src/environment.h src/settings.cpp src/settings.h src/xml.cpp src/xml.h - src/appearance.cpp src/appearance.h src/appearance.ui src/find-themes.cpp src/find-themes.h + + src/appearance.cpp src/appearance.h src/appearance.ui + src/behaviour.cpp src/behaviour.h src/behaviour.ui ) set(PROJECT_OTHER_FILES .github/workflows/build.yml diff --git a/src/appearance.cpp b/src/appearance.cpp index 6b3641e..ab122a9 100644 --- a/src/appearance.cpp +++ b/src/appearance.cpp @@ -16,8 +16,6 @@ Appearance::~Appearance() void Appearance::activate() { - /* # APPEARANCE */ - /* Labwc Theme */ QStringList labwcThemes = findLabwcThemes(); ui->openboxTheme->addItems(labwcThemes); diff --git a/src/behaviour.cpp b/src/behaviour.cpp new file mode 100644 index 0000000..6939961 --- /dev/null +++ b/src/behaviour.cpp @@ -0,0 +1,29 @@ +#include "behaviour.h" +#include "find-themes.h" +#include "macros.h" +#include "settings.h" +#include "./ui_behaviour.h" + +Behaviour::Behaviour(QWidget *parent) : QWidget(parent), ui(new Ui::pageBehaviour) +{ + ui->setupUi(this); +} + +Behaviour::~Behaviour() +{ + delete ui; +} + +void Behaviour::activate() +{ + /* Placement Policy */ + QStringList policies = { "", "Automatic", "Cascade", "Center", "Cursor" }; + ui->placementPolicy->addItems(policies); + ui->placementPolicy->setCurrentIndex( + policies.indexOf(getStr("/labwc_config/placement/policy"))); +} + +void Behaviour::onApply() +{ + setStr("/labwc_config/placement/policy", TEXT(ui->placementPolicy)); +} diff --git a/src/behaviour.h b/src/behaviour.h new file mode 100644 index 0000000..6e42f5c --- /dev/null +++ b/src/behaviour.h @@ -0,0 +1,25 @@ +#ifndef BEHAVIOUR_H +#define BEHAVIOUR_H +#include + +QT_BEGIN_NAMESPACE +namespace Ui { +class pageBehaviour; +} +QT_END_NAMESPACE + +class Behaviour : public QWidget +{ + Q_OBJECT + +public: + Behaviour(QWidget *parent = nullptr); + ~Behaviour(); + + void activate(); + void onApply(); + +private: + Ui::pageBehaviour *ui; +}; +#endif // BEHAVIOUR_H diff --git a/src/behaviour.ui b/src/behaviour.ui new file mode 100644 index 0000000..6a0ab76 --- /dev/null +++ b/src/behaviour.ui @@ -0,0 +1,40 @@ + + + pageBehaviour + + + + 0 + 0 + 251 + 153 + + + + + 6 + + + 6 + + + 6 + + + 6 + + + + + Placement Policy + + + + + + + + + + + diff --git a/src/evdev-lst-layouts.h b/src/evdev-lst-layouts.h index 6f66049..7bbc275 100644 --- a/src/evdev-lst-layouts.h +++ b/src/evdev-lst-layouts.h @@ -79,10 +79,10 @@ static std::vector evdev_lst_layouts = { { "ba(unicode)", "Bosnian (with Bosnian digraphs)" }, { "ba(alternatequotes)", "Bosnian (with guillemets)" }, { "brai", "Braille" }, - { "brai(left_hand_invert)", "Braille (left-handed inverted thumb)" }, - { "brai(left_hand)", "Braille (left-handed)" }, - { "brai(right_hand_invert)", "Braille (right-handed inverted thumb)" }, - { "brai(right_hand)", "Braille (right-handed)" }, + { "brai(left_hand)", "Braille (one-handed, left)" }, + { "brai(left_hand_invert)", "Braille (one-handed, left, inverted thumb)" }, + { "brai(right_hand)", "Braille (one-handed, right)" }, + { "brai(right_hand_invert)", "Braille (one-handed, right, inverted thumb)" }, { "fr(bre)", "Breton (France)" }, { "bg", "Bulgarian" }, { "bg(bekl)", "Bulgarian (enhanced)" }, @@ -141,16 +141,18 @@ static std::vector evdev_lst_layouts = { { "us(colemak_dh_wide)", "English (Colemak-DH Wide)" }, { "us(colemak_dh)", "English (Colemak-DH)" }, { "us(dvorak)", "English (Dvorak)" }, - { "us(dvorak-mac)", "English (Dvorak, Macintosh)" }, + { "us(dvorak-mac)", "English (Dvorak, Macintosh, ANSI)" }, + { "us(dvorak-mac-iso)", "English (Dvorak, Macintosh, ISO)" }, { "us(dvorak-alt-intl)", "English (Dvorak, alt. intl.)" }, { "us(dvorak-intl)", "English (Dvorak, intl., with dead keys)" }, - { "us(dvorak-l)", "English (Dvorak, left-handed)" }, - { "us(dvorak-r)", "English (Dvorak, right-handed)" }, + { "us(dvorak-l)", "English (Dvorak, one-handed, left)" }, + { "us(dvorak-r)", "English (Dvorak, one-handed, right)" }, { "gh", "English (Ghana)" }, { "gh(gillbt)", "English (Ghana, GILLBT)" }, { "gh(generic)", "English (Ghana, multilingual)" }, { "in(eng)", "English (India, with rupee)" }, - { "us(mac)", "English (Macintosh)" }, + { "us(mac)", "English (Macintosh, ABC, ANSI)" }, + { "us(mac-iso)", "English (Macintosh, ABC, ISO)" }, { "ml(us-mac)", "English (Mali, US, Macintosh)" }, { "ml(us-intl)", "English (Mali, US, intl.)" }, { "nz", "English (New Zealand)" }, @@ -215,6 +217,8 @@ static std::vector evdev_lst_layouts = { { "ca(fr-legacy)", "French (Canada, legacy)" }, { "cd", "French (Democratic Republic of the Congo)" }, { "fr(dvorak)", "French (Dvorak)" }, + { "fr(ergol)", "French (Ergo‑L)" }, + { "fr(ergol_iso)", "French (Ergo‑L, ISO variant)" }, { "fr(mac)", "French (Macintosh)" }, { "ml(fr-oss)", "French (Mali, alt.)" }, { "ma(french)", "French (Morocco)" }, @@ -319,7 +323,6 @@ static std::vector evdev_lst_layouts = { { "it(nodeadkeys)", "Italian (no dead keys)" }, { "jp", "Japanese" }, { "jp(dvorak)", "Japanese (Dvorak)" }, - { "jp(kana86)", "Japanese (Kana 86)" }, { "jp(kana)", "Japanese (Kana)" }, { "jp(mac)", "Japanese (Macintosh)" }, { "jp(OADG109A)", "Japanese (OADG 109A)" }, @@ -533,6 +536,7 @@ static std::vector evdev_lst_layouts = { { "ke", "Swahili (Kenya)" }, { "tz", "Swahili (Tanzania)" }, { "se", "Swedish" }, + { "se(colemak)", "Swedish (Colemak)" }, { "se(dvorak)", "Swedish (Dvorak)" }, { "se(us_dvorak)", "Swedish (Dvorak, intl.)" }, { "se(mac)", "Swedish (Macintosh)" }, @@ -560,6 +564,7 @@ static std::vector evdev_lst_layouts = { { "in(tel-kagapa)", "Telugu (KaGaPa, phonetic)" }, { "in(tel-sarala)", "Telugu (Sarala)" }, { "th", "Thai" }, + { "th(mnc)", "Thai (Manoonchai)" }, { "th(pat)", "Thai (Pattachote)" }, { "th(tis)", "Thai (TIS-820.2538)" }, { "cn(tib)", "Tibetan" }, @@ -575,12 +580,14 @@ static std::vector evdev_lst_layouts = { { "tm(alt)", "Turkmen (Alt-Q)" }, { "ru(udm)", "Udmurt" }, { "ua", "Ukrainian" }, + { "ua(winkeysenhanced)", "Ukrainian (Windows Enhanced)" }, { "ua(winkeys)", "Ukrainian (Windows)" }, { "ua(homophonic)", "Ukrainian (homophonic)" }, { "ua(legacy)", "Ukrainian (legacy)" }, { "ua(macOS)", "Ukrainian (macOS)" }, { "ua(phonetic)", "Ukrainian (phonetic)" }, { "ua(typewriter)", "Ukrainian (typewriter)" }, + { "pk(pak_urdu_phonetic)", "Urdu (Pak Urdu Phonetic)" }, { "pk", "Urdu (Pakistan)" }, { "pk(urd-crulp)", "Urdu (Pakistan, CRULP)" }, { "pk(urd-nla)", "Urdu (Pakistan, NLA)" }, diff --git a/src/maindialog.cpp b/src/maindialog.cpp index 63b6892..b916baa 100644 --- a/src/maindialog.cpp +++ b/src/maindialog.cpp @@ -60,14 +60,8 @@ void MainDialog::deleteSelectedLayout(void) void MainDialog::activate() { - /* # APPEARANCE */ ui->pageAppearance->activate(); - - /* # BEHAVIOUR */ - QStringList policies = { "", "Automatic", "Cascade", "Center", "Cursor" }; - ui->placementPolicy->addItems(policies); - ui->placementPolicy->setCurrentIndex( - policies.indexOf(getStr("/labwc_config/placement/policy"))); + ui->pageBehaviour->activate(); /* # MOUSE & TOUCHPAD */ @@ -96,10 +90,10 @@ void MainDialog::activate() void MainDialog::onApply() { ui->pageAppearance->onApply(); + ui->pageBehaviour->onApply(); /* ~/.config/labwc/rc.xml */ setBool("/labwc_config/libinput/device/naturalScroll", TEXT(ui->naturalScroll)); - setStr("/labwc_config/placement/policy", TEXT(ui->placementPolicy)); xml_save(); /* ~/.config/labwc/environment */ diff --git a/src/maindialog.ui b/src/maindialog.ui index 9c583e2..c0cab4c 100644 --- a/src/maindialog.ui +++ b/src/maindialog.ui @@ -89,32 +89,7 @@ - - - - 6 - - - 6 - - - 6 - - - 6 - - - - - Placement Policy - - - - - - - - + @@ -258,6 +233,11 @@ QWidget
appearance.h
+ + Behaviour + QWidget +
behaviour.h
+
diff --git a/src/settings.cpp b/src/settings.cpp index 5364a4c..7279580 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -119,7 +119,15 @@ Setting::Setting(QString name, enum settingFileType fileType, enum settingValueT break; } } -}; +} + +void Setting::setValue(std::variant value) +{ + if (value != m_value) { + m_valueOrigin = LAB_VALUE_ORIGIN_CHANGED_IN_THIS_SESSION; + m_value = value; + } +} static std::shared_ptr retrieve(QString name) { @@ -185,6 +193,7 @@ void setInt(QString name, int value) info("'{} has changed to '{}'", name.toStdString(), value); xpath_add_node(name.toStdString().c_str()); xml_set_num(name.toStdString().c_str(), value); + setting->setValue(value); } } @@ -202,6 +211,7 @@ void setStr(QString name, QString value) info("'{} has changed to '{}'", name.toStdString(), value.toStdString()); xpath_add_node(name.toStdString().c_str()); xml_set(name.toStdString().c_str(), value.toStdString().c_str()); + setting->setValue(value); } } @@ -254,5 +264,6 @@ void setBool(QString name, QString value) info("'{} has changed to '{}'", name.toStdString(), value.toStdString()); xpath_add_node(name.toStdString().c_str()); xml_set(name.toStdString().c_str(), value.toStdString().c_str()); + setting->setValue(value); } } diff --git a/src/settings.h b/src/settings.h index 40abd91..22f4fe2 100644 --- a/src/settings.h +++ b/src/settings.h @@ -14,6 +14,7 @@ enum settingValueOrigin { LAB_VALUE_ORIGIN_UNKNOWN = 0, LAB_VALUE_ORIGIN_DEFAULT, LAB_VALUE_ORIGIN_USER_OVERRIDE, + LAB_VALUE_ORIGIN_CHANGED_IN_THIS_SESSION, }; enum settingValueType { @@ -37,6 +38,7 @@ class Setting public: Setting(QString name, enum settingFileType fileType, enum settingValueType valueType, std::variant defaultValue); + void setValue(std::variant value); private: QString m_name; @@ -62,8 +64,3 @@ void setInt(QString name, int value); void setStr(QString name, QString value); int parseBool(const char *str, int defaultValue); void setBool(QString name, QString value); - - - - -