Compare commits

...

7 Commits
master ... fork

Author SHA1 Message Date
Xavier Del Campo Romero 10a280745f
Merge branch 'multiline-input' into fork 2023-08-05 02:38:28 +02:00
Xavier Del Campo Romero 335c82d7a2
Merge branch 'cmake' into fork 2023-08-05 02:38:22 +02:00
Xavier Del Campo Romero e8aeda31b6
browsertab.cpp: Use multi-line input when required
Some Gemini sites such as Station or BBS allow multi-line posts.
2023-08-05 02:33:02 +02:00
Xavier Del Campo Romero 31c7b6b737
Add CMake-based build system 2023-08-05 02:17:54 +02:00
Xavier Del Campo Romero 038d978696
Merge branch 'settings-scrollarea' into fork 2023-08-01 10:55:34 +02:00
Xavier Del Campo Romero 1de21ea366
settingsdialog.ui: Move "Generic" widgets to QScrollArea
This would allow smaller screens (think of mobile devices such as the
PinePhone or Librem 5) to be able to fit the settings dialog, and
therefore use it.
2023-08-01 10:54:11 +02:00
Xavier Del Campo Romero 84ca6d4b37
Try QScroller::grabGesture 2023-08-01 09:28:17 +02:00
6 changed files with 529 additions and 286 deletions

176
CMakeLists.txt Normal file
View File

@ -0,0 +1,176 @@
cmake_minimum_required(VERSION 3.13)
if(NOT KRISTALL_VERSION)
execute_process(COMMAND git describe --tags --abbrev=0
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
OUTPUT_VARIABLE KRISTALL_CMAKE_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(COMMAND git describe --tags
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
OUTPUT_VARIABLE KRISTALL_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
# CMake requires the following format for versions:
# <major>[.<minor>[.<patch>[.<tweak>]]]]
string(REPLACE "V" "" KRISTALL_CMAKE_VERSION ${KRISTALL_CMAKE_VERSION})
project(kristall VERSION ${KRISTALL_CMAKE_VERSION} LANGUAGES CXX)
set(QT_VERSION_MAJOR 5)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
# QXmpp requires C++17.
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS
Multimedia MultimediaWidgets Network Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS
Multimedia MultimediaWidgets Network Widgets REQUIRED)
set(PROJECT_SOURCES
src/browsertab.cpp
src/certificatehelper.cpp
src/cryptoidentity.cpp
src/dialogs/certificateiodialog.cpp
src/dialogs/certificatemanagementdialog.cpp
src/dialogs/certificateselectiondialog.cpp
src/dialogs/newidentitiydialog.cpp
src/dialogs/settingsdialog.cpp
src/documentoutlinemodel.cpp
src/documentstyle.cpp
src/favouritecollection.cpp
src/identitycollection.cpp
src/ioutil.cpp
src/localization.cpp
src/main.cpp
src/mainwindow.cpp
src/renderers/htmlrenderer.cpp
src/renderers/markdownrenderer.cpp
src/renderers/renderhelpers.cpp
src/renderers/textstyleinstance.cpp
src/widgets/browsertabbar.cpp
src/widgets/browsertabwidget.cpp
src/widgets/kristalltextbrowser.cpp
src/widgets/mediaplayer.cpp
src/mimeparser.cpp
src/protocolhandler.cpp
src/protocols/abouthandler.cpp
src/protocols/filehandler.cpp
src/protocols/fingerclient.cpp
src/protocols/geminiclient.cpp
src/protocols/gopherclient.cpp
src/protocols/webclient.cpp
src/protocolsetup.cpp
src/renderers/geminirenderer.cpp
src/renderers/gophermaprenderer.cpp
src/renderers/plaintextrenderer.cpp
src/ssltrust.cpp
src/tabbrowsinghistory.cpp
src/trustedhost.cpp
src/trustedhostcollection.cpp
src/widgets/elidelabel.cpp
src/widgets/searchbar.cpp
src/widgets/ssltrusteditor.cpp
src/widgets/favouritepopup.cpp
src/widgets/favouritebutton.cpp
src/cachehandler.cpp
src/widgets/searchbox.cpp
src/browsertab.ui
src/dialogs/certificateiodialog.ui
src/dialogs/certificatemanagementdialog.ui
src/dialogs/certificateselectiondialog.ui
src/dialogs/newidentitiydialog.ui
src/dialogs/settingsdialog.ui
src/mainwindow.ui
src/widgets/mediaplayer.ui
src/widgets/ssltrusteditor.ui
src/fonts.qrc
lib/BreezeStyleSheets/breeze.qrc
src/builtins.qrc
src/icons.qrc
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(${PROJECT_NAME}
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
if(ANDROID)
add_library(${PROJECT_NAME} SHARED
${PROJECT_SOURCES}
)
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else()
add_executable(${PROJECT_NAME}
${PROJECT_SOURCES}
)
endif()
endif()
message(STATUS "Building Kristall ${KRISTALL_VERSION}")
target_compile_definitions(${PROJECT_NAME} PUBLIC
KRISTALL_VERSION=${KRISTALL_VERSION})
add_subdirectory(lib/luis-l-gist)
target_link_libraries(${PROJECT_NAME} PRIVATE luis-l-gist)
find_package(PkgConfig REQUIRED)
pkg_check_modules(cmark IMPORTED_TARGET cmark)
if(cmark_FOUND)
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::cmark)
else()
add_subdirectory(lib/cmark)
target_link_libraries(${PROJECT_NAME} PRIVATE cmark)
endif()
pkg_check_modules(gumbo-parser IMPORTED_TARGET gumbo)
if(gumbo_FOUND)
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::gumbo-parser)
else()
add_subdirectory(lib/gumbo-parser)
target_link_libraries(${PROJECT_NAME} PRIVATE gumbo-parser)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Multimedia
Qt${QT_VERSION_MAJOR}::MultimediaWidgets
Qt${QT_VERSION_MAJOR}::Network
Qt${QT_VERSION_MAJOR}::Widgets)
target_include_directories(${PROJECT_NAME} PRIVATE src)
set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(${PROJECT_NAME})
endif()
find_package(OpenSSL 3.0 REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::SSL)
if(NOT UNIX)
target_link_libraries(${PROJECT_NAME} PRIVATE iconv)
endif()

24
lib/cmark/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,24 @@
cmake_minimum_required(VERSION 3.13)
project(cmark C)
set(sources
src/blocks.c
src/buffer.c
src/cmark.c
src/cmark_ctype.c
src/commonmark.c
src/houdini_href_e.c
src/houdini_html_e.c
src/houdini_html_u.c
src/inlines.c
src/iterator.c
src/node.c
src/references.c
src/render.c
src/scanners.c
src/utf8.c
src/html.c
src/xml.c)
add_library(${PROJECT_NAME} ${sources})
target_include_directories(${PROJECT_NAME} PUBLIC src)

17
lib/gumbo-parser/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,17 @@
cmake_minimum_required(VERSION 3.13)
project(gumbo-parser C)
set(sources
attribute.c
char_ref.c
error.c
gumbo-utf8.c
parser.c
string_buffer.c
string_piece.c
tag.c
tokenizer.c
util.c
vector.c
)
add_library(${PROJECT_NAME} ${sources})
target_include_directories(${PROJECT_NAME} PUBLIC include PRIVATE .)

7
lib/luis-l-gist/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,7 @@
cmake_minimum_required(VERSION 3.13)
project(luis-l-gist CXX)
add_library(${PROJECT_NAME} interactiveview.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC .)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::Widgets)

View File

@ -54,6 +54,7 @@
#include <QGraphicsPixmapItem>
#include <QGraphicsTextItem>
#include <QRegularExpression>
#include <QScroller>
#include <iconv.h>
BrowserTab::BrowserTab(MainWindow *mainWindow) : QWidget(nullptr),
@ -64,6 +65,7 @@ BrowserTab::BrowserTab(MainWindow *mainWindow) : QWidget(nullptr),
graphics_scene()
{
ui->setupUi(this);
QScroller::grabGesture(this, QScroller::TouchGesture);
connect( // connect with "this" as context, so the connection will die when the window is destroyed
kristall::globals().localization.get(), &Localization::translationChanged,
@ -870,6 +872,7 @@ void BrowserTab::on_inputRequired(const QString &query, const bool is_sensitive)
QInputDialog dialog{this};
dialog.setInputMode(QInputDialog::TextInput);
dialog.setOption(QInputDialog::UsePlainTextEditForTextInput);
dialog.setLabelText(query);
if (is_sensitive) dialog.setTextEchoMode(QLineEdit::Password);

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>1100</width>
<height>737</height>
<width>496</width>
<height>404</height>
</rect>
</property>
<property name="windowTitle">
@ -32,281 +32,303 @@
<string>Generic</string>
</attribute>
<layout class="QFormLayout" name="formLayout">
<item row="1" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Start Page:</string>
<item row="0" column="0" colspan="2">
<widget class="QScrollArea" name="scrollArea">
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="start_page">
<property name="placeholderText">
<string>about://blank</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_40">
<property name="text">
<string>Search engine:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="search_engine">
<property name="editable">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents_2">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>585</width>
<height>490</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_44">
<property name="text">
<string>Language</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="selected_language"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Start Page:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="start_page">
<property name="placeholderText">
<string>about://blank</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_40">
<property name="text">
<string>Search engine:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="search_engine">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_29">
<property name="text">
<string>Additional toolbar buttons</string>
</property>
</widget>
</item>
<item row="3" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_99">
<item>
<widget class="QCheckBox" name="enable_home_btn">
<property name="text">
<string>Home</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_newtab_btn">
<property name="text">
<string>New tab</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_root_btn">
<property name="text">
<string>Root (/)</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_parent_btn">
<property name="text">
<string>Parent (..)</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Startup Behaviour</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="session_restore_behaviour"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>UI Theme</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="ui_theme"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_34">
<property name="text">
<string>Icon Theme</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="icon_theme"/>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_1">
<property name="text">
<string>UI Density</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QComboBox" name="ui_density"/>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Enabled Protocols</string>
</property>
</widget>
</item>
<item row="8" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="enable_gemini">
<property name="text">
<string>Gemini</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_gopher">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Gopher</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_finger">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Finger</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_http">
<property name="text">
<string>HTTP</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_https">
<property name="text">
<string>HTTPS</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Unknown Scheme</string>
</property>
</widget>
</item>
<item row="9" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QRadioButton" name="scheme_os_default">
<property name="text">
<string>Use OS default handler</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="scheme_error">
<property name="text">
<string>Display error message</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</attribute>
</widget>
</item>
</layout>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_26">
<property name="text">
<string>Max. Number of Redirections</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QSpinBox" name="max_redirects">
<property name="value">
<number>5</number>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_27">
<property name="text">
<string>Redirection Handling</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QComboBox" name="redirection_mode"/>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_28">
<property name="text">
<string>Network Timeout</string>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="QSpinBox" name="network_timeout">
<property name="suffix">
<string> ms</string>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>90000</number>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="label_45">
<property name="text">
<string>Tab close behaviour</string>
</property>
</widget>
</item>
<item row="13" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<widget class="QRadioButton" name="tab_keep_window">
<property name="text">
<string>Keep window open</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup_10</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="tab_close_window">
<property name="text">
<string>Close window</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup_10</string>
</attribute>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_29">
<property name="text">
<string>Additional toolbar buttons</string>
</property>
</widget>
</item>
<item row="3" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_99">
<item>
<widget class="QCheckBox" name="enable_home_btn">
<property name="text">
<string>Home</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_newtab_btn">
<property name="text">
<string>New tab</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_root_btn">
<property name="text">
<string>Root (/)</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_parent_btn">
<property name="text">
<string>Parent (..)</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Startup Behaviour</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="session_restore_behaviour"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>UI Theme</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="ui_theme"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_34">
<property name="text">
<string>Icon Theme</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="icon_theme"/>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_1">
<property name="text">
<string>UI Density</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QComboBox" name="ui_density"/>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Enabled Protocols</string>
</property>
</widget>
</item>
<item row="8" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="enable_gemini">
<property name="text">
<string>Gemini</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_gopher">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Gopher</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_finger">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Finger</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_http">
<property name="text">
<string>HTTP</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enable_https">
<property name="text">
<string>HTTPS</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Unknown Scheme</string>
</property>
</widget>
</item>
<item row="9" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QRadioButton" name="scheme_os_default">
<property name="text">
<string>Use OS default handler</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="scheme_error">
<property name="text">
<string>Display error message</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</attribute>
</widget>
</item>
</layout>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_26">
<property name="text">
<string>Max. Number of Redirections</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QSpinBox" name="max_redirects">
<property name="value">
<number>5</number>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_27">
<property name="text">
<string>Redirection Handling</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QComboBox" name="redirection_mode"/>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_28">
<property name="text">
<string>Network Timeout</string>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="QSpinBox" name="network_timeout">
<property name="suffix">
<string> ms</string>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>90000</number>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_44">
<property name="text">
<string>Language</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="selected_language"/>
</item>
<item row="13" column="0">
<widget class="QLabel" name="label_45">
<property name="text">
<string>Tab close behaviour</string>
</property>
</widget>
</item>
<item row="13" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<widget class="QRadioButton" name="tab_keep_window">
<property name="text">
<string>Keep window open</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup_10</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="tab_close_window">
<property name="text">
<string>Close window</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup_10</string>
</attribute>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="display_tab">
@ -705,9 +727,9 @@
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>530</width>
<height>712</height>
<y>-351</y>
<width>570</width>
<height>783</height>
</rect>
</property>
<layout class="QFormLayout" name="style_scroll_layout">
@ -1619,9 +1641,6 @@
</customwidget>
</customwidgets>
<tabstops>
<tabstop>ui_theme</tabstop>
<tabstop>icon_theme</tabstop>
<tabstop>ui_density</tabstop>
<tabstop>enable_gemini</tabstop>
<tabstop>enable_gopher</tabstop>
<tabstop>enable_finger</tabstop>
@ -1629,9 +1648,6 @@
<tabstop>enable_https</tabstop>
<tabstop>scheme_os_default</tabstop>
<tabstop>scheme_error</tabstop>
<tabstop>max_redirects</tabstop>
<tabstop>redirection_mode</tabstop>
<tabstop>network_timeout</tabstop>
<tabstop>enable_home_btn</tabstop>
<tabstop>enable_newtab_btn</tabstop>
<tabstop>enable_root_btn</tabstop>
@ -1714,15 +1730,15 @@
</connection>
</connections>
<buttongroups>
<buttongroup name="buttonGroup_2"/>
<buttongroup name="buttonGroup_7"/>
<buttongroup name="buttonGroup_5"/>
<buttongroup name="buttonGroup"/>
<buttongroup name="buttonGroup_6"/>
<buttongroup name="buttonGroup_8"/>
<buttongroup name="buttonGroup_3"/>
<buttongroup name="buttonGroup_7"/>
<buttongroup name="buttonGroup_4"/>
<buttongroup name="buttonGroup_9"/>
<buttongroup name="buttonGroup_10"/>
<buttongroup name="buttonGroup_8"/>
<buttongroup name="buttonGroup_2"/>
<buttongroup name="buttonGroup_6"/>
<buttongroup name="buttonGroup_9"/>
</buttongroups>
</ui>