Changeset View
Changeset View
Standalone View
Standalone View
imports/activitymanager/switcherbackend.cpp
Context not available. | |||||
28 | #include <QX11Info> | 28 | #include <QX11Info> | ||
---|---|---|---|---|---|
29 | #include <QTimer> | 29 | #include <QTimer> | ||
30 | #include <QDateTime> | 30 | #include <QDateTime> | ||
31 | #include <QMimeData> | ||||
31 | 32 | | |||
32 | // Qml and QtQuick | 33 | // Qml and QtQuick | ||
33 | #include <QQuickImageProvider> | 34 | #include <QQuickImageProvider> | ||
Context not available. | |||||
39 | #include <KIO/PreviewJob> | 40 | #include <KIO/PreviewJob> | ||
40 | #include <KConfig> | 41 | #include <KConfig> | ||
41 | #include <KConfigGroup> | 42 | #include <KConfigGroup> | ||
43 | #include <KWindowSystem> | ||||
44 | #include <windowtasksmodel.h> | ||||
45 | #include <xwindowtasksmodel.h> | ||||
42 | 46 | | |||
43 | // X11 | 47 | // X11 | ||
44 | #include <X11/keysym.h> | 48 | #include <X11/keysym.h> | ||
Context not available. | |||||
392 | m_previousActivity = id; | 396 | m_previousActivity = id; | ||
393 | } | 397 | } | ||
394 | 398 | | |||
399 | void SwitcherBackend::drop(QMimeData * mimeData, int modifiers, const QVariant &itemId) | ||||
400 | { | ||||
401 | qDebug() << "SwitcherBackend::drop()"; | ||||
402 | if (!mimeData) { | ||||
403 | return; | ||||
404 | } | ||||
405 | #if HAVE_X11 | ||||
406 | if (KWindowSystem::isPlatformX11()) { | ||||
407 | bool ok; | ||||
408 | | ||||
409 | const QList<WId> &ids = TaskManager::XWindowTasksModel::winIdsFromMimeData(mimeData, &ok); | ||||
410 | | ||||
411 | if (!ok) { | ||||
412 | return; | ||||
413 | } | ||||
414 | | ||||
415 | QString newActivity = itemId.toString(); | ||||
416 | const QStringList &runningActivities = m_activities.runningActivities(); | ||||
417 | | ||||
418 | if (!runningActivities.contains(newActivity)) { | ||||
419 | return; | ||||
420 | } | ||||
421 | | ||||
422 | for (const auto &id : ids) { | ||||
423 | QStringList activities = KWindowInfo(id, NET::Properties(), NET::WM2Activities).activities(); | ||||
424 | | ||||
425 | if (modifiers & Qt::ControlModifier) { // 'copy' => add to activity | ||||
426 | if (!activities.contains(newActivity)) | ||||
427 | activities << newActivity; | ||||
428 | } else { // 'move' to activity | ||||
429 | // if on only one activity, set it to only the new activity | ||||
430 | // if on >1 activity, remove it from the current activity and add it to the new activity | ||||
431 | const QString currentActivity = m_activities.currentActivity(); | ||||
432 | activities.removeAll(currentActivity); | ||||
433 | activities << newActivity; | ||||
434 | } | ||||
435 | KWindowSystem::setOnActivities(id, activities); | ||||
436 | } | ||||
437 | } | ||||
438 | #endif | ||||
439 | } | ||||
440 | | ||||
395 | bool SwitcherBackend::shouldShowSwitcher() const | 441 | bool SwitcherBackend::shouldShowSwitcher() const | ||
396 | { | 442 | { | ||
397 | return m_shouldShowSwitcher; | 443 | return m_shouldShowSwitcher; | ||
Context not available. |