1 /*
2 This file is part of the KDE libraries
3 SPDX-FileCopyrightText: 1999 Reginald Stadlbauer <reggie@kde.org>
4 SPDX-FileCopyrightText: 1999 Simon Hausmann <hausmann@kde.org>
5 SPDX-FileCopyrightText: 2000 Nicolas Hadacek <haadcek@kde.org>
6 SPDX-FileCopyrightText: 2000 Kurt Granroth <granroth@kde.org>
7 SPDX-FileCopyrightText: 2000 Michael Koch <koch@kde.org>
8 SPDX-FileCopyrightText: 2001 Holger Freyther <freyther@kde.org>
9 SPDX-FileCopyrightText: 2002 Ellis Whitehead <ellis@kde.org>
10 SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn@kde.org>
11 SPDX-FileCopyrightText: 2003 Andras Mantia <amantia@kde.org>
12 SPDX-FileCopyrightText: 2005-2006 Hamish Rodda <rodda@kde.org>
13
14 SPDX-License-Identifier: LGPL-2.0-only
15 */
16
17 #include "ktogglefullscreenaction.h"
18
19 #include "ktoggleaction_p.h"
20
21 #include <QEvent>
22 #include <QWidget>
23
24 class KToggleFullScreenActionPrivate : public KToggleActionPrivate
25 {
26 Q_DECLARE_PUBLIC(KToggleFullScreenAction)
27
28 public:
KToggleFullScreenActionPrivate(KToggleFullScreenAction * qq)29 KToggleFullScreenActionPrivate(KToggleFullScreenAction *qq)
30 : KToggleActionPrivate(qq)
31 {
32 }
33
updateTextsAndIcon()34 void updateTextsAndIcon()
35 {
36 Q_Q(KToggleFullScreenAction);
37
38 if (q->isChecked()) {
39 q->setText(KToggleFullScreenAction::tr("Exit F&ull Screen Mode", "@action:inmenu"));
40 q->setIconText(KToggleFullScreenAction::tr("Exit Full Screen", "@action:intoolbar"));
41 q->setToolTip(KToggleFullScreenAction::tr("Exit full screen mode", "@info:tooltip"));
42 q->setIcon(QIcon::fromTheme(QStringLiteral("view-restore")));
43 } else {
44 q->setText(KToggleFullScreenAction::tr("F&ull Screen Mode", "@action:inmenu"));
45 q->setIconText(KToggleFullScreenAction::tr("Full Screen", "@action:intoolbar"));
46 q->setToolTip(KToggleFullScreenAction::tr("Display the window in full screen", "@info:tooltip"));
47 q->setIcon(QIcon::fromTheme(QStringLiteral("view-fullscreen")));
48 }
49 }
50
51 QWidget *window = nullptr;
52 };
53
KToggleFullScreenAction(QObject * parent)54 KToggleFullScreenAction::KToggleFullScreenAction(QObject *parent)
55 : KToggleAction(*new KToggleFullScreenActionPrivate(this), parent)
56 {
57 Q_D(KToggleFullScreenAction);
58
59 d->updateTextsAndIcon();
60 }
61
KToggleFullScreenAction(QWidget * window,QObject * parent)62 KToggleFullScreenAction::KToggleFullScreenAction(QWidget *window, QObject *parent)
63 : KToggleAction(*new KToggleFullScreenActionPrivate(this), parent)
64 {
65 Q_D(KToggleFullScreenAction);
66
67 d->updateTextsAndIcon();
68 setWindow(window);
69 }
70
71 KToggleFullScreenAction::~KToggleFullScreenAction() = default;
72
setWindow(QWidget * window)73 void KToggleFullScreenAction::setWindow(QWidget *window)
74 {
75 Q_D(KToggleFullScreenAction);
76
77 if (d->window) {
78 d->window->removeEventFilter(this);
79 }
80
81 d->window = window;
82
83 if (d->window) {
84 d->window->installEventFilter(this);
85 }
86 }
87
slotToggled(bool checked)88 void KToggleFullScreenAction::slotToggled(bool checked)
89 {
90 Q_D(KToggleFullScreenAction);
91
92 KToggleAction::slotToggled(checked);
93 d->updateTextsAndIcon();
94 }
95
eventFilter(QObject * object,QEvent * event)96 bool KToggleFullScreenAction::eventFilter(QObject *object, QEvent *event)
97 {
98 Q_D(KToggleFullScreenAction);
99
100 if (object == d->window) {
101 if (event->type() == QEvent::WindowStateChange) {
102 if (d->window->isFullScreen() != isChecked()) {
103 activate(QAction::Trigger);
104 }
105 }
106 }
107
108 return false;
109 }
110
setFullScreen(QWidget * window,bool set)111 void KToggleFullScreenAction::setFullScreen(QWidget *window, bool set)
112 {
113 if (set) {
114 window->setWindowState(window->windowState() | Qt::WindowFullScreen);
115 } else {
116 window->setWindowState(window->windowState() & ~Qt::WindowFullScreen);
117 }
118 }
119