1 /*
2 SPDX-FileCopyrightText: 2008 Chani Armitage <chani@kde.org>
3 SPDX-FileCopyrightText: 2008, 2009 Aaron Seigo <aseigo@kde.org>
4 SPDX-FileCopyrightText: 2010 Marco Martin <mart@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.0-or-later
7 */
8
9 #include "dropmenu.h"
10 #include "containmentinterface.h"
11
12 #include <QAction>
13 #include <QApplication>
14 #include <QJSValue>
15 #include <QList>
16 #include <QMenu>
17 #include <QUrl>
18
19 #include <KIO/DropJob>
20 #include <KLocalizedString>
21
DropMenu(KIO::DropJob * dropJob,const QPoint & dropPoint,ContainmentInterface * parent)22 DropMenu::DropMenu(KIO::DropJob *dropJob, const QPoint &dropPoint, ContainmentInterface *parent)
23 : QObject(parent)
24 , m_dropPoint(dropPoint)
25 , m_dropJob(dropJob)
26 {
27 if (!dropJob) {
28 m_menu = new QMenu(i18n("Content dropped"));
29 if (m_menu->winId()) {
30 m_menu->windowHandle()->setTransientParent(parent->window());
31 }
32 connect(m_menu, &QMenu::aboutToHide, this, &QObject::deleteLater);
33 } else {
34 connect(m_dropJob, &QObject::destroyed, this, &QObject::deleteLater);
35 }
36 }
37
~DropMenu()38 DropMenu::~DropMenu()
39 {
40 if (m_menu) {
41 delete m_menu;
42 }
43 }
44
urls() const45 QList<QUrl> DropMenu::urls() const
46 {
47 return m_urls;
48 }
49
setUrls(const QList<QUrl> & urls)50 void DropMenu::setUrls(const QList<QUrl> &urls)
51 {
52 m_urls = urls;
53 }
54
dropPoint() const55 QPoint DropMenu::dropPoint() const
56 {
57 return m_dropPoint;
58 }
59
show()60 void DropMenu::show()
61 {
62 if (m_dropJob) {
63 m_dropJob->setApplicationActions(m_dropActions);
64 m_dropJob->showMenu(m_dropPoint);
65 } else if (m_menu) {
66 m_menu->addActions(m_dropActions);
67 m_menu->popup(m_dropPoint);
68 }
69 }
70
addAction(QAction * action)71 void DropMenu::addAction(QAction *action)
72 {
73 m_dropActions << action;
74 }
75
isDropjobMenu() const76 bool DropMenu::isDropjobMenu() const
77 {
78 return (m_dropJob ? true : false);
79 }
80
setMultipleMimetypes(bool multipleMimetypes)81 void DropMenu::setMultipleMimetypes(bool multipleMimetypes)
82 {
83 if (m_multipleMimetypes != multipleMimetypes) {
84 m_multipleMimetypes = multipleMimetypes;
85 }
86 }
87
isMultipleMimetypes() const88 bool DropMenu::isMultipleMimetypes() const
89 {
90 return m_multipleMimetypes;
91 }
92
93 #include "moc_dropmenu.cpp"
94