/* This file is part of the KDE libraries SPDX-FileCopyrightText: 1999 Reginald Stadlbauer SPDX-FileCopyrightText: 1999 Simon Hausmann SPDX-FileCopyrightText: 2000 Nicolas Hadacek SPDX-FileCopyrightText: 2000 Kurt Granroth SPDX-FileCopyrightText: 2000 Michael Koch SPDX-FileCopyrightText: 2001 Holger Freyther SPDX-FileCopyrightText: 2002 Ellis Whitehead SPDX-FileCopyrightText: 2002 Joseph Wenninger SPDX-FileCopyrightText: 2003 Andras Mantia SPDX-FileCopyrightText: 2005-2006 Hamish Rodda SPDX-License-Identifier: LGPL-2.0-only */ #include "ktoggletoolbaraction.h" #include #include #include #include #include "kmainwindow.h" #include "ktoolbar.h" class KToggleToolBarActionPrivate { public: KToggleToolBarActionPrivate(KToggleToolBarAction *q) : toolBar(nullptr) , beingToggled(false) { const bool authorized = KAuthorized::authorizeAction(QStringLiteral("options_show_toolbar")); q->setEnabled(authorized); q->setVisible(authorized); } QPointer toolBar; bool beingToggled; }; KToggleToolBarAction::KToggleToolBarAction(KToolBar *toolBar, const QString &text, QObject *parent) : KToggleAction(text, parent) , d(new KToggleToolBarActionPrivate(this)) { d->toolBar = toolBar; d->toolBar->installEventFilter(this); d->beingToggled = true; setChecked(d->toolBar->isVisible()); d->beingToggled = false; } KToggleToolBarAction::~KToggleToolBarAction() = default; bool KToggleToolBarAction::eventFilter(QObject *watched, QEvent *event) { if (d->beingToggled) { return false; } d->beingToggled = true; if (watched == d->toolBar) { switch (event->type()) { case QEvent::Hide: if (isChecked()) { setChecked(false); } break; case QEvent::Show: if (!isChecked()) { setChecked(true); } break; default: break; } } d->beingToggled = false; return false; } KToolBar *KToggleToolBarAction::toolBar() { return d->toolBar; } void KToggleToolBarAction::slotToggled(bool checked) { if (!d->beingToggled && d->toolBar && checked != d->toolBar->isVisible()) { d->beingToggled = true; d->toolBar->setVisible(checked); d->beingToggled = false; QMainWindow *mw = d->toolBar->mainWindow(); if (mw && qobject_cast(mw)) { static_cast(mw)->setSettingsDirty(); } } KToggleAction::slotToggled(checked); } #include "moc_ktoggletoolbaraction.cpp"