From 72e4523e2fb27ee714c30c5aa135198f7b5d553d Mon Sep 17 00:00:00 2001 From: "Felix (xq) Queißner" Date: Thu, 11 Jun 2020 02:43:30 +0200 Subject: Slight improvements for client certificate display, permanent certs are now selectable with double click and have icons, adds changelog into application itself: about:updates --- src/about/updates.gemini | 38 ++++++++++++++++++++++++++++++ src/builtins.qrc | 1 + src/certificateselectiondialog.cpp | 10 ++++++++ src/certificateselectiondialog.hpp | 2 ++ src/certificateselectiondialog.ui | 6 ++++- src/icons.qrc | 1 + src/icons/certificate.svg | 1 + src/identitycollection.cpp | 47 +++++++++++++++++++------------------- src/mainwindow.cpp | 5 ++++ src/mainwindow.hpp | 2 ++ src/mainwindow.ui | 6 +++++ 11 files changed, 94 insertions(+), 25 deletions(-) create mode 100644 src/about/updates.gemini create mode 100644 src/icons/certificate.svg (limited to 'src') diff --git a/src/about/updates.gemini b/src/about/updates.gemini new file mode 100644 index 0000000..1e65272 --- /dev/null +++ b/src/about/updates.gemini @@ -0,0 +1,38 @@ +# Kristall Changelog + +## 0.3 +* Adds support for transient client certificates +* Adds support for permanent client certificates +* Added this changelog to the software itself + +## 0.2 +* Implement Ctrl+D/*Add to favourites* menu item +* Implement Ctrl+S/*Save as...* menu item +* Add display for "non-recognized files" +* Added support for gopher:// and gophermaps +* Added "go to home" menu +* Added support for video/* and audio/* via QMediaPlayer +* Added support for file:// scheme +* Added status bar with loading time, file size and mime type +* Added support for command line arguments +* Added option to render all text/* documents as plain text. +* Added option to render gopher maps with icons *OR* text only +* Fixed bug: Correct URL escaping for gemini requests. +* Added progress display in status bar with loading time and already transferred bytes +* Added support for finger:// protocol +* Added experimental *highlighting* and _underlining_ for text/gemini +* Desktop file is provided for integrating with XDG +* Fixed bug: Preformatted lines don't break anymore +* text/gemini parsing updated +* Added support for block quotes +* Added help file +* Added shortcut to focus URL bar +* Added possibility to save/load/share theme presets. Make everything colorful! +* Added a lot of context menus +* Added possibility to open links into a new tab +* Added possibility to open history and favourite items into new tab or same tab +* Added option to use your default OS protocol handler instead of displaying an error message. +* Improved image pan and zooming. Explore those graphics! + +## 0.1 +* Initial release \ No newline at end of file diff --git a/src/builtins.qrc b/src/builtins.qrc index fae4cc3..35f1fe7 100644 --- a/src/builtins.qrc +++ b/src/builtins.qrc @@ -2,5 +2,6 @@ about/easter-egg.gemini about/help.gemini + about/updates.gemini diff --git a/src/certificateselectiondialog.cpp b/src/certificateselectiondialog.cpp index e3aef35..66e758f 100644 --- a/src/certificateselectiondialog.cpp +++ b/src/certificateselectiondialog.cpp @@ -115,3 +115,13 @@ void CertificateSelectionDialog::on_use_selected_cert_clicked() qDebug() << "Tried to use an invalid identity when the button should not be enabled. This is a bug!"; } } + +void CertificateSelectionDialog::on_certificates_doubleClicked(const QModelIndex &index) +{ + this->cryto_identity = global_identities.getIdentity(index); + if(this->cryto_identity.isValid()) { + this->accept(); + } else { + qDebug() << "Tried to use an invalid identity when the button should not be enabled. This is a bug!"; + } +} diff --git a/src/certificateselectiondialog.hpp b/src/certificateselectiondialog.hpp index da43b0e..e628f5c 100644 --- a/src/certificateselectiondialog.hpp +++ b/src/certificateselectiondialog.hpp @@ -36,6 +36,8 @@ private slots: void on_use_selected_cert_clicked(); + void on_certificates_doubleClicked(const QModelIndex &index); + private: //! Creates an anonymous identity with a randomly chosen name that //! will time out on `timeout`, then accepts the dialog. diff --git a/src/certificateselectiondialog.ui b/src/certificateselectiondialog.ui index 0199982..0244001 100644 --- a/src/certificateselectiondialog.ui +++ b/src/certificateselectiondialog.ui @@ -35,7 +35,11 @@ - + + + true + + diff --git a/src/icons.qrc b/src/icons.qrc index 12e429a..7987c86 100644 --- a/src/icons.qrc +++ b/src/icons.qrc @@ -37,5 +37,6 @@ icons/help-box.svg icons/shield-outline.svg icons/shield-lock.svg + icons/certificate.svg diff --git a/src/icons/certificate.svg b/src/icons/certificate.svg new file mode 100644 index 0000000..f158c12 --- /dev/null +++ b/src/icons/certificate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/identitycollection.cpp b/src/identitycollection.cpp index 9955d3f..43683b2 100644 --- a/src/identitycollection.cpp +++ b/src/identitycollection.cpp @@ -2,6 +2,7 @@ #include #include +#include IdentityCollection::IdentityCollection(QObject *parent) : QAbstractItemModel(parent) @@ -152,14 +153,8 @@ QStringList IdentityCollection::groups() const return result; } -//QVariant IdentityCollection::headerData(int section, Qt::Orientation orientation, int role) const -//{ -// return QVariant { }; -//} - QModelIndex IdentityCollection::index(int row, int column, const QModelIndex &parent) const { - qDebug() << "index" << row << column << parent; if (not hasIndex(row, column, parent)) return QModelIndex(); @@ -182,7 +177,6 @@ QModelIndex IdentityCollection::index(int row, int column, const QModelIndex &pa QModelIndex IdentityCollection::parent(const QModelIndex &index) const { - qDebug() << "parent" << index; if (!index.isValid()) return QModelIndex(); @@ -207,37 +201,42 @@ int IdentityCollection::rowCount(const QModelIndex &parent) const else parentItem = static_cast(parent.internalPointer()); - int rc = parentItem->children.size(); - qDebug() << "row count for " << parent << rc; - return rc; + return parentItem->children.size(); } int IdentityCollection::columnCount(const QModelIndex &parent) const { - qDebug() << "column count" << parent; + Q_UNUSED(parent) return 1; } QVariant IdentityCollection::data(const QModelIndex &index, int role) const { - qDebug() << "data" << index << role; if (!index.isValid()) return QVariant(); - if (index.column() != 0) - return QVariant(); - - if (role != Qt::DisplayRole) - return QVariant(); - Node const *item = static_cast(index.internalPointer()); - switch(item->type) { - case Node::Root: return "root"; - case Node::Group: return static_cast(item)->title; - case Node::Identity: return static_cast(item)->identity.display_name; - default: - return "Unknown"; + if (role == Qt::DisplayRole) + { + switch(item->type) { + case Node::Root: return "root"; + case Node::Group: return static_cast(item)->title; + case Node::Identity: return static_cast(item)->identity.display_name; + default: + return "Unknown"; + } } + else if(role == Qt::DecorationRole) { + + switch(item->type) { + case Node::Root: return QVariant { }; + case Node::Group: return QIcon(":/icons/folder-open.svg"); + case Node::Identity: return QIcon(":/icons/certificate.svg"); + default: return QVariant { }; + } + } + + return QVariant(); } void IdentityCollection::relayout() diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9a56133..ec8af9c 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -457,3 +457,8 @@ void MainWindow::on_favourites_view_customContextMenuRequested(const QPoint &pos } } } + +void MainWindow::on_actionChangelog_triggered() +{ + this->addNewTab(true, QUrl("about:updates")); +} diff --git a/src/mainwindow.hpp b/src/mainwindow.hpp index 954ba5f..f125551 100644 --- a/src/mainwindow.hpp +++ b/src/mainwindow.hpp @@ -83,6 +83,8 @@ private slots: void on_favourites_view_customContextMenuRequested(const QPoint &pos); + void on_actionChangelog_triggered(); + private: void reloadTheme(); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 3955a40..782d0e3 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -206,6 +206,7 @@ Help + @@ -367,6 +368,11 @@ F1 + + + Changelog + + -- cgit v1.2.3