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