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 | if (!mimeData) { | ||||
402 | return; | ||||
403 | } | ||||
404 | #if HAVE_X11 | ||||
405 | if (KWindowSystem::isPlatformX11()) { | ||||
406 | bool ok; | ||||
407 | | ||||
408 | const QList<WId> &ids = TaskManager::XWindowTasksModel::winIdsFromMimeData(mimeData, &ok); | ||||
409 | | ||||
410 | if (!ok) { | ||||
411 | return; | ||||
412 | } | ||||
413 | | ||||
414 | QString newActivity = itemId.toString(); | ||||
415 | const QStringList &runningActivities = m_activities.runningActivities(); | ||||
416 | | ||||
417 | if (!runningActivities.contains(newActivity)) { | ||||
418 | return; | ||||
419 | } | ||||
420 | | ||||
421 | for (const auto &id : ids) { | ||||
422 | QStringList activities = KWindowInfo(id, NET::Properties(), NET::WM2Activities).activities(); | ||||
423 | | ||||
424 | if (modifiers & Qt::ControlModifier) { // 'copy' => add to activity | ||||
425 | if (!activities.contains(newActivity)) | ||||
426 | activities << newActivity; | ||||
427 | } else { // 'move' to activity | ||||
428 | // if on only one activity, set it to only the new activity | ||||
429 | // if on >1 activity, remove it from the current activity and add it to the new activity | ||||
430 | const QString currentActivity = m_activities.currentActivity(); | ||||
431 | activities.removeAll(currentActivity); | ||||
432 | activities << newActivity; | ||||
433 | } | ||||
434 | KWindowSystem::setOnActivities(id, activities); | ||||
435 | } | ||||
436 | } | ||||
437 | #endif | ||||
438 | } | ||||
439 | | ||||
395 | bool SwitcherBackend::shouldShowSwitcher() const | 440 | bool SwitcherBackend::shouldShowSwitcher() const | ||
396 | { | 441 | { | ||
397 | return m_shouldShowSwitcher; | 442 | return m_shouldShowSwitcher; | ||
Context not available. |