feat: add Konsole recipe source and patches

This commit is contained in:
2026-05-07 07:54:52 +01:00
parent 171a96c6af
commit ab85eb7b3d
632 changed files with 713138 additions and 3 deletions
@@ -0,0 +1,371 @@
/*
SPDX-FileCopyrightText: 2007-2008 Robert Knight <robertknight@gmail.com>
SPDX-FileCopyrightText: 2018 Harald Sitter <sitter@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef EDITPROFILEDIALOG_H
#define EDITPROFILEDIALOG_H
#include <QtGlobal>
// KDE
#include <KNSCore/Entry>
#include <KPageDialog>
// Konsole
#include "colorscheme/ColorScheme.h"
#include "colorscheme/ColorSchemeEditor.h"
#include "colorscheme/ColorSchemeViewDelegate.h"
#include "konsoleprivate_export.h"
#include "profile/Profile.h"
#include "profile/ProfileGroup.h"
#include "Enumeration.h"
#include "FontDialog.h"
#include "LabelsAligner.h"
#include "keyboardtranslator/KeyboardTranslatorManager.h"
class KPluralHandlingSpinBox;
class KLocalizedString;
class QItemSelectionModel;
class QTextCodec;
namespace Ui
{
class EditProfileGeneralPage;
class EditProfileTabsPage;
class EditProfileAppearancePage;
class EditProfileScrollingPage;
class EditProfileKeyboardPage;
class EditProfileMousePage;
class EditProfileAdvancedPage;
}
namespace Konsole
{
/**
* A dialog which allows the user to edit a profile.
* After the dialog is created, it can be initialized with the settings
* for a profile using setProfile(). When the user makes changes to the
* dialog and accepts the changes, the dialog will update the
* profile in the SessionManager by calling the SessionManager's
* changeProfile() method.
*
* Some changes made in the dialog are preview-only changes which cause
* the SessionManager's changeProfile() method to be called with
* the persistent argument set to false. These changes are then
* un-done when the dialog is closed.
*/
class KONSOLEPRIVATE_EXPORT EditProfileDialog : public KPageDialog
{
Q_OBJECT
public:
/** Constructs a new dialog with the specified parent. */
explicit EditProfileDialog(QWidget *parent = nullptr);
~EditProfileDialog() override;
enum InitialProfileState {
ExistingProfile,
NewProfile,
};
/**
* Initializes the dialog with the settings for the specified session
* type.
*
* When the dialog closes, the profile will be updated in the SessionManager
* with the altered settings.
*
* @param profile The profile to be edited
* @param state Indicates whether @p profile is an already existing profile
* or a new one being created
*/
void setProfile(const Profile::Ptr &profile, InitialProfileState state = EditProfileDialog::ExistingProfile);
/**
* Selects the text in the profile name edit area.
* When the dialog is being used to create a new profile,
* this can be used to draw the user's attention to the profile name
* and make it easy for them to change it.
*/
void selectProfileName();
public Q_SLOTS:
// reimplemented
void accept() override;
// reimplemented
void reject() override;
private Q_SLOTS:
QSize sizeHint() const override;
// sets up the specified tab page if necessary
void preparePage(KPageWidgetItem *current, KPageWidgetItem *before = nullptr);
// saves changes to profile
void save();
// general page
void selectInitialDir();
void selectIcon();
void profileNameChanged(const QString &name);
void initialDirChanged(const QString &dir);
void startInSameDir(bool);
void commandChanged(const QString &command);
void semanticUpDown(bool);
void semanticInputClick(bool enable);
// tab page
void tabTitleFormatChanged(const QString &format);
void remoteTabTitleFormatChanged(const QString &format);
void tabColorChanged(const QColor &color);
void silenceSecondsChanged(int);
void terminalColumnsEntryChanged(int);
void terminalRowsEntryChanged(int);
void showTerminalSizeHint(bool);
void setDimWhenInactive(bool);
void setDimValue(int value);
void setBorderWhenActive(bool);
void setFocusBorderColor(const QColor &color);
void showEnvironmentEditor();
// appearance page
void setAntialiasText(bool enable);
void setBoldIntense(bool enable);
void useFontLineCharacters(bool enable);
void useFontBrailleCharacters(bool enable);
void newColorScheme();
void editColorScheme();
void saveColorScheme(const ColorScheme &scheme, bool isNewScheme);
void removeColorScheme();
void setVerticalLine(bool);
void setVerticalLineColumn(int);
// void focusBorderColor();
void focusBorderColorChanged(const QColor &color);
void toggleBlinkingCursor(bool);
void setCursorShape(int);
void autoCursorColor();
void customCursorColor();
void customCursorColorChanged(const QColor &);
void customCursorTextColorChanged(const QColor &);
void terminalMarginChanged(int margin);
void lineSpacingChanged(int);
void setTerminalCenter(bool enable);
void togglebidiRendering(bool);
void togglebidiTableDirOverride(bool);
void togglebidiLineLTR(bool);
void gotNewColorSchemes(const QList<KNSCore::Entry> &changedEntries);
/**
* Deletes the selected colorscheme from the user's home dir location
* so that the original one from the system-wide location can be used
* instead
*/
void resetColorScheme();
void colorSchemeSelected();
void previewColorScheme(const QModelIndex &index);
void showFontDialog();
void showEmojiFontDialog();
void toggleMouseWheelZoom(bool enable);
// scrolling page
void historyModeChanged(Enum::HistoryModeEnum mode);
void historySizeChanged(int);
void scrollFullPage();
void scrollHalfPage();
void toggleHighlightScrolledLines(bool enable);
void toggleReflowLines(bool enable);
void toggleScrollbarMarkerColor(QColor color);
void toggleScrollbarMarkerSize(double pSize);
// keyboard page
void editKeyBinding();
void newKeyBinding();
void keyBindingSelected();
void removeKeyBinding();
void resetKeyBindings();
// mouse page
void toggleUnderlineFiles(bool enable);
void toggleUnderlineLinks(bool);
void toggleOpenLinksByDirectClick(bool);
void textEditorCmdEditLineChanged(const QString &text);
void toggleCtrlRequiredForDrag(bool);
void toggleDropUrlsAsText(bool);
void toggleCopyTextToClipboard(bool);
void toggleCopyTextAsHTML(bool);
void toggleTrimLeadingSpacesInSelectedText(bool);
void toggleTrimTrailingSpacesInSelectedText(bool);
void pasteFromX11Selection();
void pasteFromClipboard();
void toggleAlternateScrolling(bool enable);
void toggleAllowColorFilter(bool enable);
void toggleAllowMouseTracking(bool allow);
void TripleClickModeChanged(int);
void wordCharactersChanged(const QString &);
// advanced page
void toggleBlinkingText(bool);
void toggleFlowControl(bool);
void updateUrlHintsModifier(bool);
void toggleReverseUrlHints(bool);
void setDefaultCodec(QTextCodec *);
void setTextEditorCombo(const Profile::Ptr &profile);
void toggleAllowLinkEscapeSequence(bool);
void linkEscapeSequenceTextsChanged();
void peekPrimaryKeySequenceChanged();
void toggleWordMode(bool mode);
void toggleWordModeAttr(bool mode);
void toggleWordModeAscii(bool mode);
void toggleWordModeBrahmic(bool mode);
void toggleIgnoreWcWidth(bool ignore);
private:
Q_DISABLE_COPY(EditProfileDialog)
enum PageID {
GeneralPage = 0,
TabsPage,
AppearancePage,
ScrollingPage,
KeyboardPage,
MousePage,
AdvancedPage,
PagesCount,
};
// initialize various pages of the dialog
void setupGeneralPage(const Profile::Ptr &profile);
void setupTabsPage(const Profile::Ptr &profile);
void setupAppearancePage(const Profile::Ptr &profile);
void setupKeyboardPage(const Profile::Ptr &profile);
void setupScrollingPage(const Profile::Ptr &profile);
void setupAdvancedPage(const Profile::Ptr &profile);
void setupMousePage(const Profile::Ptr &profile);
void setMessageGeneralPage(const QString &msg);
int maxSpinBoxWidth(const KPluralHandlingSpinBox *spinBox, const KLocalizedString &suffix);
// Returns the name of the colorScheme used in the current profile
const QString currentColorSchemeName() const;
// select @p selectedColorSchemeName after the changes are saved
// in the colorScheme editor
void updateColorSchemeList(const QString &selectedColorSchemeName = QString());
void updateColorSchemeButtons();
// Convenience method
KeyboardTranslatorManager *_keyManager = KeyboardTranslatorManager::instance();
// Updates the key bindings list widget on the Keyboard tab and selects
// @p selectKeyBindingsName
void updateKeyBindingsList(const QString &selectKeyBindingsName = QString());
void updateKeyBindingsButtons();
void showKeyBindingEditor(bool isNewTranslator);
void showColorSchemeEditor(bool isNewScheme);
void closeColorSchemeEditor();
void preview(Profile::Property prop, const QVariant &value);
void unpreview(Profile::Property prop);
void unpreviewAll();
void enableIfNonEmptySelection(QWidget *widget, QItemSelectionModel *selectionModel);
void updateCaption(const Profile::Ptr &profile);
void updateTransparencyWarning();
void updateFontPreview(QFont font);
void updateEmojiFontPreview(QFont font);
// Update _tempProfile in a way of respecting the apply button.
// When used with some previewed property, this method should
// always come after the preview operation.
void updateTempProfileProperty(Profile::Property, const QVariant &value);
// helper method for clearing all _tempProfile properties and marking it hidden
void resetTempProfile();
// Enable or disable apply button, used only within
// updateTempProfileProperty() or when toggling the default profile.
void updateButtonApply();
static QString groupProfileNames(const ProfileGroup::Ptr &group, int maxLength = -1);
struct ButtonGroupOption {
QAbstractButton *button;
int value;
};
struct ButtonGroupOptions {
QButtonGroup *group;
Profile::Property profileProperty;
bool preview;
QVector<ButtonGroupOption> buttons;
};
void setupButtonGroup(const ButtonGroupOptions &options, const Profile::Ptr &profile);
// returns false if:
// - the profile name is empty
// - the name matches the name of an already existing profile
// - the existing profile config file is read-only
// otherwise returns true.
bool isProfileNameValid();
Ui::EditProfileGeneralPage *_generalUi = nullptr;
Ui::EditProfileTabsPage *_tabsUi = nullptr;
Ui::EditProfileAppearancePage *_appearanceUi = nullptr;
Ui::EditProfileScrollingPage *_scrollingUi = nullptr;
Ui::EditProfileKeyboardPage *_keyboardUi = nullptr;
Ui::EditProfileMousePage *_mouseUi = nullptr;
Ui::EditProfileAdvancedPage *_advancedUi = nullptr;
using PageSetupMethod = void (EditProfileDialog::*)(const Profile::Ptr &);
struct Page {
Page(PageSetupMethod page = nullptr, bool update = false)
: setupPage(page)
, needsUpdate(update)
{
}
PageSetupMethod setupPage;
bool needsUpdate;
};
QMap<KPageWidgetItem *, Page> _pages;
KPageWidgetItem *_generalPageItem = nullptr;
Profile::Ptr _tempProfile;
Profile::Ptr _profile;
bool _isDefault = false;
Profile::PropertyMap _previewedProperties;
ColorSchemeEditor *_colorDialog = nullptr;
QDialogButtonBox *_buttonBox = nullptr;
FontDialog *_fontDialog = nullptr;
FontDialog *_emojiFontDialog = nullptr;
InitialProfileState _profileState = ExistingProfile;
};
}
#endif // EDITPROFILEDIALOG_H