Advance Wayland and KDE package bring-up

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-14 10:51:06 +01:00
parent 51f3c21121
commit cf12defd28
15214 changed files with 20594243 additions and 269 deletions
@@ -0,0 +1,240 @@
/*
This file is part of the KDE libraries
SPDX-FileCopyrightText: 2000 Reginald Stadlbauer <reggie@kde.org>
SPDX-FileCopyrightText: 1997, 1998 Stephan Kulow <coolo@kde.org>
SPDX-FileCopyrightText: 1997, 1998 Sven Radej <radej@kde.org>
SPDX-FileCopyrightText: 1997, 1998 Mark Donohoe <donohoe@kde.org>
SPDX-FileCopyrightText: 1997, 1998 Matthias Ettrich <ettrich@kde.org>
SPDX-FileCopyrightText: 1999, 2000 Kurt Granroth <granroth@kde.org>
SPDX-FileCopyrightText: 2005-2006 Hamish Rodda <rodda@kde.org>
SPDX-License-Identifier: LGPL-2.0-only
*/
#ifndef KTOOLBAR_H
#define KTOOLBAR_H
#include <kxmlgui_export.h>
#include <QToolBar>
#include <memory>
class QDomElement;
class KConfigGroup;
class KConfig;
class KMainWindow;
class KXMLGUIClient;
/**
* @class KToolBar ktoolbar.h KToolBar
*
* @short Floatable toolbar with auto resize.
*
* A KDE-style toolbar.
*
* KToolBar can be used as a standalone widget, but KMainWindow
* provides easy factories and management of one or more toolbars.
*
* KToolBar uses a global config group to load toolbar settings on
* construction. It will reread this config group on a
* KApplication::appearanceChanged() signal.
*
* KToolBar respects Kiosk settings (see the KAuthorized namespace in the
* KConfig framework). In particular, system administrators can prevent users
* from moving toolbars with the "movable_toolbars" action, and from showing or
* hiding toolbars with the "options_show_toolbar" action. For example, to
* disable both, add the following the application or global configuration:
* @verbatim
[KDE Action Restrictions][$i]
movable_toolbars=false
options_show_toolbar=false
@endverbatim
*
* If you can't depend on KXmlGui but still want to integrate better with KDE,
* you can use QToolBar and:
* - Set ToolButtonStyle to Qt::ToolButtonFollowStyle, this will make QToolBar
* use the settings for "Main Toolbar"
* - Additionally set QToolBar::setProperty("otherToolbar", true) to use settings
* for "Other toolbars"; settings from "Other toolbars" will only work on widget
* styles derived from KStyle
*
* @author Reginald Stadlbauer <reggie@kde.org>
* @author Stephan Kulow <coolo@kde.org>
* @author Sven Radej <radej@kde.org>
* @author Hamish Rodda <rodda@kde.org>
*/
class KXMLGUI_EXPORT KToolBar : public QToolBar
{
Q_OBJECT
public:
/**
* Constructor.
*
* This constructor takes care of adding the toolbar to the mainwindow,
* if @p parent is a QMainWindow.
*
* Normally KDE applications do not call this directly, they either
* call KMainWindow::toolBar(), or they use XML-GUI and specify
* toolbars using XML.
*
* @param parent The standard toolbar parent (usually a KMainWindow)
* @param isMainToolBar True for the "main toolbar", false for other toolbars. Different settings apply.
* @param readConfig whether to apply the configuration (global and application-specific)
*/
explicit KToolBar(QWidget *parent, bool isMainToolBar = false, bool readConfig = true);
// KDE5: remove. The one below is preferred so that all debug output from init() shows the right objectName already,
// and so that isMainToolBar() and iconSizeDefault() return correct values during loading too.
/**
* Constructor.
*
* This constructor takes care of adding the toolbar to the mainwindow,
* if @p parent is a QMainWindow.
*
* Normally KDE applications do not call this directly, they either
* call KMainWindow::toolBar(), or they use XML-GUI and specify
* toolbars using XML.
*
* @param objectName The QObject name of this toolbar, required so that QMainWindow can save and load the toolbar position,
* and so that KToolBar can find out if it's the main toolbar.
* @param parent The standard toolbar parent (usually a KMainWindow)
* @param readConfig whether to apply the configuration (global and application-specific)
*/
explicit KToolBar(const QString &objectName, QWidget *parent, bool readConfig = true);
/**
* Alternate constructor with additional arguments, e.g. to choose in which area
* the toolbar should be auto-added. This is rarely used in KDE. When using XMLGUI
* you can specify this as an xml attribute instead.
*
* @param objectName The QObject name of this toolbar, required so that QMainWindow can save and load the toolbar position
* @param parentWindow The window that should be the parent of this toolbar
* @param area The position of the toolbar. Usually Qt::TopToolBarArea.
* @param newLine If true, start a new line in the dock for this toolbar.
* @param isMainToolBar True for the "main toolbar", false for other toolbars. Different settings apply.
* @param readConfig whether to apply the configuration (global and application-specific)
*/
KToolBar(const QString &objectName,
QMainWindow *parentWindow,
Qt::ToolBarArea area,
bool newLine = false,
bool isMainToolBar = false,
bool readConfig = true); // KDE5: remove, I don't think anyone is using this.
/**
* Destroys the toolbar.
*/
~KToolBar() override;
/**
* Returns the main window that this toolbar is docked with.
*/
KMainWindow *mainWindow() const;
/**
* Convenience function to set icon size
*/
void setIconDimensions(int size);
/**
* Returns the default size for this type of toolbar.
*
* @return the default size for this type of toolbar.
*/
int iconSizeDefault() const; // KDE5: hide from public API. Doesn't make sense to export this, and it isn't used.
/**
* Save the toolbar settings to group @p cg.
*/
void saveSettings(KConfigGroup &cg);
/**
* Read the toolbar settings from group @p cg
* and apply them.
*/
void applySettings(const KConfigGroup &cg);
/**
* Adds an XML gui client that uses this toolbar
* @since 4.8.1
*/
void addXMLGUIClient(KXMLGUIClient *client);
/**
* Removes an XML gui client that uses this toolbar
* @since 4.8.5
*/
void removeXMLGUIClient(KXMLGUIClient *client);
/**
* Load state from an XML @param element, called by KXMLGUIBuilder.
*/
void loadState(const QDomElement &element);
/**
* Save state into an XML @param element, called by KXMLGUIBuilder.
*/
void saveState(QDomElement &element) const;
/**
* Reimplemented to support context menu activation on disabled tool buttons.
*/
bool eventFilter(QObject *watched, QEvent *event) override;
/**
* Returns whether the toolbars are currently editable (drag & drop of actions).
*/
static bool toolBarsEditable();
/**
* Enable or disable toolbar editing via drag & drop of actions. This is
* called by KEditToolBar and should generally be set to disabled whenever
* KEditToolBar is not active.
*/
static void setToolBarsEditable(bool editable);
/**
* Returns whether the toolbars are locked (i.e., moving of the toobars disallowed).
*/
static bool toolBarsLocked();
/**
* Allows you to lock and unlock all toolbars (i.e., disallow/allow moving of the toobars).
*/
static void setToolBarsLocked(bool locked);
/**
* Emits a D-Bus signal to tell all toolbars in all applications, that the user settings have
* changed.
* @since 5.0
*/
static void emitToolbarStyleChanged();
protected Q_SLOTS:
virtual void slotMovableChanged(bool movable);
protected:
void contextMenuEvent(QContextMenuEvent *) override;
void actionEvent(QActionEvent *) override;
// Draggable toolbar configuration
void dragEnterEvent(QDragEnterEvent *) override;
void dragMoveEvent(QDragMoveEvent *) override;
void dragLeaveEvent(QDragLeaveEvent *) override;
void dropEvent(QDropEvent *) override;
void mousePressEvent(QMouseEvent *) override;
void mouseMoveEvent(QMouseEvent *) override;
void mouseReleaseEvent(QMouseEvent *) override;
private:
friend class KToolBarPrivate;
std::unique_ptr<class KToolBarPrivate> const d;
Q_PRIVATE_SLOT(d, void slotAppearanceChanged())
Q_PRIVATE_SLOT(d, void slotContextRight())
Q_PRIVATE_SLOT(d, void slotContextTextRight())
};
#endif