File indexing completed on 2024-04-28 15:32:15

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 1999 Reginald Stadlbauer <reggie@kde.org>
0004     SPDX-FileCopyrightText: 1999 Simon Hausmann <hausmann@kde.org>
0005     SPDX-FileCopyrightText: 2000 Nicolas Hadacek <haadcek@kde.org>
0006     SPDX-FileCopyrightText: 2000 Kurt Granroth <granroth@kde.org>
0007     SPDX-FileCopyrightText: 2000 Michael Koch <koch@kde.org>
0008     SPDX-FileCopyrightText: 2001 Holger Freyther <freyther@kde.org>
0009     SPDX-FileCopyrightText: 2002 Ellis Whitehead <ellis@kde.org>
0010     SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn@kde.org>
0011     SPDX-FileCopyrightText: 2003 Andras Mantia <amantia@kde.org>
0012     SPDX-FileCopyrightText: 2005-2006 Hamish Rodda <rodda@kde.org>
0013 
0014     SPDX-License-Identifier: LGPL-2.0-only
0015 */
0016 
0017 #include "ktogglefullscreenaction.h"
0018 
0019 #include "ktoggleaction_p.h"
0020 
0021 #include <QEvent>
0022 #include <QWidget>
0023 
0024 class KToggleFullScreenActionPrivate : public KToggleActionPrivate
0025 {
0026     Q_DECLARE_PUBLIC(KToggleFullScreenAction)
0027 
0028 public:
0029     KToggleFullScreenActionPrivate(KToggleFullScreenAction *qq)
0030         : KToggleActionPrivate(qq)
0031     {
0032     }
0033 
0034     void updateTextsAndIcon()
0035     {
0036         Q_Q(KToggleFullScreenAction);
0037 
0038         q->setText(KToggleFullScreenAction::tr("F&ull Screen Mode", "@action:inmenu"));
0039         q->setIconText(KToggleFullScreenAction::tr("Full Screen", "@action:intoolbar"));
0040         q->setToolTip(KToggleFullScreenAction::tr("Display the window in full screen", "@info:tooltip"));
0041         q->setIcon(QIcon::fromTheme(QStringLiteral("view-fullscreen")));
0042     }
0043 
0044     QWidget *window = nullptr;
0045 };
0046 
0047 KToggleFullScreenAction::KToggleFullScreenAction(QObject *parent)
0048     : KToggleAction(*new KToggleFullScreenActionPrivate(this), parent)
0049 {
0050     Q_D(KToggleFullScreenAction);
0051 
0052     d->updateTextsAndIcon();
0053 }
0054 
0055 KToggleFullScreenAction::KToggleFullScreenAction(QWidget *window, QObject *parent)
0056     : KToggleAction(*new KToggleFullScreenActionPrivate(this), parent)
0057 {
0058     Q_D(KToggleFullScreenAction);
0059 
0060     d->updateTextsAndIcon();
0061     setWindow(window);
0062 }
0063 
0064 KToggleFullScreenAction::~KToggleFullScreenAction() = default;
0065 
0066 void KToggleFullScreenAction::setWindow(QWidget *window)
0067 {
0068     Q_D(KToggleFullScreenAction);
0069 
0070     if (d->window) {
0071         d->window->removeEventFilter(this);
0072     }
0073 
0074     d->window = window;
0075 
0076     if (d->window) {
0077         d->window->installEventFilter(this);
0078     }
0079 }
0080 
0081 void KToggleFullScreenAction::slotToggled(bool checked)
0082 {
0083     KToggleAction::slotToggled(checked);
0084 }
0085 
0086 bool KToggleFullScreenAction::eventFilter(QObject *object, QEvent *event)
0087 {
0088     Q_D(KToggleFullScreenAction);
0089 
0090     if (object == d->window) {
0091         if (event->type() == QEvent::WindowStateChange) {
0092             if (d->window->isFullScreen() != isChecked()) {
0093                 activate(QAction::Trigger);
0094             }
0095         }
0096     }
0097 
0098     return false;
0099 }
0100 
0101 void KToggleFullScreenAction::setFullScreen(QWidget *window, bool set)
0102 {
0103     if (set) {
0104         window->setWindowState(window->windowState() | Qt::WindowFullScreen);
0105     } else {
0106         window->setWindowState(window->windowState() & ~Qt::WindowFullScreen);
0107     }
0108 }
0109 
0110 #include "moc_ktogglefullscreenaction.cpp"