Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ set(PROJECT_SOURCES
src/appearance.cpp src/appearance.h src/appearance.ui
src/behaviour.cpp src/behaviour.h src/behaviour.ui
src/mouse.cpp src/mouse.h src/mouse.ui
src/language.cpp src/language.h src/language.ui
)
set(PROJECT_OTHER_FILES
.github/workflows/build.yml
Expand Down
5 changes: 3 additions & 2 deletions src/gen-layout-list → bin/gen-layout-list
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
from enum import Enum

HEADER="""#pragma once
#include <QString>
#include <vector>

// Auto-generated based on "/usr/share/X11/xkb/rules/evdev.lst"

struct layout
{
const char *code;
const char *description;
QString code;
QString description;
};

static std::vector<struct layout> evdev_lst_layouts = {"""
Expand Down
5 changes: 3 additions & 2 deletions src/evdev-lst-layouts.h
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#pragma once
#include <QString>
#include <vector>

// Auto-generated based on "/usr/share/X11/xkb/rules/evdev.lst"

struct layout
{
const char *code;
const char *description;
QString code;
QString description;
};

static std::vector<struct layout> evdev_lst_layouts = {
Expand Down
63 changes: 63 additions & 0 deletions src/language.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#include "language.h"
#include "evdev-lst-layouts.h"
#include "environment.h"
#include "find-themes.h"
#include "layoutmodel.h"
#include "macros.h"
#include "settings.h"
#include "./ui_language.h"

Language::Language(QWidget *parent) : QWidget(parent), ui(new Ui::pageLanguage)
{
ui->setupUi(this);

m_model = new LayoutModel(this);
ui->layoutView->setModel(m_model);
connect(ui->layoutAdd, &QPushButton::pressed, this, &Language::addSelectedLayout);
connect(ui->layoutRemove, &QPushButton::pressed, this, &Language::deleteSelectedLayout);
}

Language::~Language()
{
delete ui;
}

void Language::activate()
{
/* Keyboard Layout */
ui->layoutCombo->addItem(tr("Select layout to add..."));
for (auto layout : evdev_lst_layouts) {
ui->layoutCombo->addItem(layout.description);
}
}

void Language::onApply()
{
/*
* We include variants in XKB_DEFAULT_LAYOUT, for example
* "latam(deadtilde),ru(phonetic),gr", so XKB_DEFAULT_VARIANT is set to
* empty.
*/
QString layout = m_model->getXkbDefaultLayout();
if (!layout.isEmpty()) {
environmentSet("XKB_DEFAULT_LAYOUT", layout);
environmentSet("XKB_DEFAULT_VARIANT", "");
}
}

void Language::addSelectedLayout(void)
{
QString description = ui->layoutCombo->currentText();

for (auto layout : evdev_lst_layouts) {
if (description == layout.description) {
m_model->addLayout(layout.code, layout.description);
}
}
}

void Language::deleteSelectedLayout(void)
{
m_model->deleteLayout(ui->layoutView->currentIndex().row());
}

31 changes: 31 additions & 0 deletions src/language.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#ifndef LANGUAGE_H
#define LANGUAGE_H
#include <QWidget>
#include "layoutmodel.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class pageLanguage;
}
QT_END_NAMESPACE

class Language : public QWidget
{
Q_OBJECT

public:
Language(QWidget *parent = nullptr);
~Language();

void activate();
void onApply();

private slots:
void addSelectedLayout(void);
void deleteSelectedLayout(void);

private:
Ui::pageLanguage *ui;
LayoutModel *m_model;
};
#endif // LANGUAGE_H
85 changes: 85 additions & 0 deletions src/language.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>pageLanguage</class>
<widget class="QWidget" name="pageLanguage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>251</width>
<height>153</height>
</rect>
</property>
<layout class="QFormLayout" name="layPage3">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Keyboard Layout</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QVBoxLayout" name="multiKeyboardLayout">
<item>
<widget class="QListView" name="layoutView">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>72</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="layoutCombo"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="layoutAdd">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="layoutRemove">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
46 changes: 2 additions & 44 deletions src/maindialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@
#include <string>
#include <unistd.h>
#include "environment.h"
#include "evdev-lst-layouts.h"
#include "find-themes.h"
#include "layoutmodel.h"
#include "log.h"
#include "macros.h"
#include "maindialog.h"
Expand All @@ -19,21 +17,12 @@
MainDialog::MainDialog(QWidget *parent) : QDialog(parent), ui(new Ui::MainDialog)
{
ui->setupUi(this);

ui->list->setFixedWidth(ui->list->sizeHintForColumn(0) + 2 * ui->list->frameWidth());

m_model = new LayoutModel(this);
ui->layoutView->setModel(m_model);

QObject::connect(ui->buttonBox, &QDialogButtonBox::clicked, [&](QAbstractButton *button) {
if (ui->buttonBox->standardButton(button) == QDialogButtonBox::Apply) {
onApply();
}
});

connect(ui->layoutAdd, &QPushButton::pressed, this, &MainDialog::addSelectedLayout);
connect(ui->layoutRemove, &QPushButton::pressed, this, &MainDialog::deleteSelectedLayout);

activate();
}

Expand All @@ -43,51 +32,20 @@ MainDialog::~MainDialog()
xml_finish();
}

void MainDialog::addSelectedLayout(void)
{
const char *description = ui->layoutCombo->currentText().toLatin1().data();
for (auto layout : evdev_lst_layouts) {
if (!strcmp(description, layout.description)) {
m_model->addLayout(QString(layout.code), QString(layout.description));
}
}
}

void MainDialog::deleteSelectedLayout(void)
{
m_model->deleteLayout(ui->layoutView->currentIndex().row());
}

void MainDialog::activate()
{
ui->pageAppearance->activate();
ui->pageBehaviour->activate();
ui->pageMouse->activate();

/* # LANGUAGE */

/* Keyboard Layout */
ui->layoutCombo->addItem(tr("Select layout to add..."));
for (auto layout : evdev_lst_layouts) {
ui->layoutCombo->addItem(QString(layout.description));
}
ui->pageLanguage->activate();
}

void MainDialog::onApply()
{
ui->pageAppearance->onApply();
ui->pageBehaviour->onApply();
ui->pageMouse->onApply();

/*
* We include variants in XKB_DEFAULT_LAYOUT, for example "latam(deadtilde),ru(phonetic),gr",
* so XKB_DEFAULT_VARIANT is set to empty.
*/
QString layout = m_model->getXkbDefaultLayout();
if (!layout.isEmpty()) {
environmentSet("XKB_DEFAULT_LAYOUT", layout);
environmentSet("XKB_DEFAULT_VARIANT", "");
}
ui->pageLanguage->onApply();

// TODO: Get filename in a more consistent way - share common code with main.cpp
std::string config_home = std::getenv("HOME") + std::string("/.config/labwc");
Expand Down
7 changes: 0 additions & 7 deletions src/maindialog.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#ifndef MAINDIALOG_H
#define MAINDIALOG_H
#include <QDialog>
#include "layoutmodel.h"
#include "settings.h"

QT_BEGIN_NAMESPACE
Expand All @@ -19,14 +18,8 @@ class MainDialog : public QDialog
~MainDialog();
void activate();

private slots:
void addSelectedLayout(void);
void deleteSelectedLayout(void);

private:
LayoutModel *m_model;
void onApply();

Ui::MainDialog *ui;
};
#endif // MAINDIALOG_H
Loading