Changeset View
Changeset View
Standalone View
Standalone View
useractions.cpp
Show First 20 Lines • Show All 75 Lines • ▼ Show 20 Line(s) | |||||
76 | { | 76 | { | ||
77 | 77 | | |||
78 | UserActionsMenu::UserActionsMenu(QObject *parent) | 78 | UserActionsMenu::UserActionsMenu(QObject *parent) | ||
79 | : QObject(parent) | 79 | : QObject(parent) | ||
80 | , m_menu(NULL) | 80 | , m_menu(NULL) | ||
81 | , m_desktopMenu(NULL) | 81 | , m_desktopMenu(NULL) | ||
82 | , m_screenMenu(NULL) | 82 | , m_screenMenu(NULL) | ||
83 | , m_activityMenu(NULL) | 83 | , m_activityMenu(NULL) | ||
84 | , m_addTabsMenu(NULL) | | |||
85 | , m_switchToTabMenu(NULL) | 84 | , m_switchToTabMenu(NULL) | ||
86 | , m_scriptsMenu(NULL) | 85 | , m_scriptsMenu(NULL) | ||
87 | , m_resizeOperation(NULL) | 86 | , m_resizeOperation(NULL) | ||
88 | , m_moveOperation(NULL) | 87 | , m_moveOperation(NULL) | ||
89 | , m_maximizeOperation(NULL) | 88 | , m_maximizeOperation(NULL) | ||
90 | , m_shadeOperation(NULL) | 89 | , m_shadeOperation(NULL) | ||
91 | , m_keepAboveOperation(NULL) | 90 | , m_keepAboveOperation(NULL) | ||
92 | , m_keepBelowOperation(NULL) | 91 | , m_keepBelowOperation(NULL) | ||
93 | , m_fullScreenOperation(NULL) | 92 | , m_fullScreenOperation(NULL) | ||
94 | , m_noBorderOperation(NULL) | 93 | , m_noBorderOperation(NULL) | ||
95 | , m_minimizeOperation(NULL) | 94 | , m_minimizeOperation(NULL) | ||
96 | , m_closeOperation(NULL) | 95 | , m_closeOperation(NULL) | ||
97 | , m_removeFromTabGroup(NULL) | | |||
98 | , m_closeTabGroup(NULL) | | |||
99 | { | 96 | { | ||
100 | } | 97 | } | ||
101 | 98 | | |||
102 | UserActionsMenu::~UserActionsMenu() | 99 | UserActionsMenu::~UserActionsMenu() | ||
103 | { | 100 | { | ||
104 | discard(); | 101 | discard(); | ||
105 | } | 102 | } | ||
106 | 103 | | |||
▲ Show 20 Lines • Show All 264 Lines • ▼ Show 20 Line(s) | 256 | { | |||
371 | 368 | | |||
372 | m_maximizeOperation = m_menu->addAction(i18n("Ma&ximize")); | 369 | m_maximizeOperation = m_menu->addAction(i18n("Ma&ximize")); | ||
373 | setShortcut(m_maximizeOperation, QStringLiteral("Window Maximize")); | 370 | setShortcut(m_maximizeOperation, QStringLiteral("Window Maximize")); | ||
374 | m_maximizeOperation->setCheckable(true); | 371 | m_maximizeOperation->setCheckable(true); | ||
375 | m_maximizeOperation->setData(Options::MaximizeOp); | 372 | m_maximizeOperation->setData(Options::MaximizeOp); | ||
376 | 373 | | |||
377 | m_menu->addSeparator(); | 374 | m_menu->addSeparator(); | ||
378 | 375 | | |||
379 | // Actions for window tabbing | | |||
380 | if (false) { | | |||
381 | m_removeFromTabGroup = m_menu->addAction(i18n("&Untab")); | | |||
382 | setShortcut(m_removeFromTabGroup, QStringLiteral("Untab")); | | |||
383 | m_removeFromTabGroup->setData(Options::RemoveTabFromGroupOp); | | |||
384 | | ||||
385 | m_closeTabGroup = m_menu->addAction(i18n("Close Entire &Group")); | | |||
386 | m_closeTabGroup->setIcon(QIcon::fromTheme(QStringLiteral("window-close"))); | | |||
387 | setShortcut(m_closeTabGroup, QStringLiteral("Close TabGroup")); | | |||
388 | m_closeTabGroup->setData(Options::CloseTabGroupOp); | | |||
389 | | ||||
390 | m_menu->addSeparator(); | | |||
391 | } | | |||
392 | | ||||
393 | m_menu->addSeparator(); | | |||
394 | | ||||
395 | action = m_menu->addMenu(advancedMenu); | 376 | action = m_menu->addMenu(advancedMenu); | ||
396 | action->setText(i18n("&More Actions")); | 377 | action->setText(i18n("&More Actions")); | ||
397 | 378 | | |||
398 | m_menu->addSeparator(); | 379 | m_menu->addSeparator(); | ||
399 | 380 | | |||
400 | m_closeOperation = m_menu->addAction(i18n("&Close")); | 381 | m_closeOperation = m_menu->addAction(i18n("&Close")); | ||
401 | m_closeOperation->setIcon(QIcon::fromTheme(QStringLiteral("window-close"))); | 382 | m_closeOperation->setIcon(QIcon::fromTheme(QStringLiteral("window-close"))); | ||
402 | setShortcut(m_closeOperation, QStringLiteral("Window Close")); | 383 | setShortcut(m_closeOperation, QStringLiteral("Window Close")); | ||
403 | m_closeOperation->setData(Options::CloseOp); | 384 | m_closeOperation->setData(Options::CloseOp); | ||
404 | } | 385 | } | ||
405 | 386 | | |||
406 | void UserActionsMenu::discard() | 387 | void UserActionsMenu::discard() | ||
407 | { | 388 | { | ||
408 | delete m_menu; | 389 | delete m_menu; | ||
409 | m_menu = NULL; | 390 | m_menu = NULL; | ||
410 | m_desktopMenu = NULL; | 391 | m_desktopMenu = NULL; | ||
411 | m_multipleDesktopsMenu = nullptr; | 392 | m_multipleDesktopsMenu = nullptr; | ||
412 | m_screenMenu = NULL; | 393 | m_screenMenu = NULL; | ||
413 | m_activityMenu = NULL; | 394 | m_activityMenu = NULL; | ||
414 | m_switchToTabMenu = NULL; | 395 | m_switchToTabMenu = NULL; | ||
415 | m_addTabsMenu = NULL; | | |||
416 | m_scriptsMenu = NULL; | 396 | m_scriptsMenu = NULL; | ||
417 | } | 397 | } | ||
418 | 398 | | |||
419 | void UserActionsMenu::menuAboutToShow() | 399 | void UserActionsMenu::menuAboutToShow() | ||
420 | { | 400 | { | ||
421 | if (m_client.isNull() || !m_menu) | 401 | if (m_client.isNull() || !m_menu) | ||
422 | return; | 402 | return; | ||
423 | 403 | | |||
Show All 24 Lines | |||||
448 | m_fullScreenOperation->setEnabled(m_client->userCanSetFullScreen()); | 428 | m_fullScreenOperation->setEnabled(m_client->userCanSetFullScreen()); | ||
449 | m_fullScreenOperation->setChecked(m_client->isFullScreen()); | 429 | m_fullScreenOperation->setChecked(m_client->isFullScreen()); | ||
450 | m_noBorderOperation->setEnabled(m_client->userCanSetNoBorder()); | 430 | m_noBorderOperation->setEnabled(m_client->userCanSetNoBorder()); | ||
451 | m_noBorderOperation->setChecked(m_client->noBorder()); | 431 | m_noBorderOperation->setChecked(m_client->noBorder()); | ||
452 | m_minimizeOperation->setEnabled(m_client->isMinimizable()); | 432 | m_minimizeOperation->setEnabled(m_client->isMinimizable()); | ||
453 | m_closeOperation->setEnabled(m_client->isCloseable()); | 433 | m_closeOperation->setEnabled(m_client->isCloseable()); | ||
454 | m_shortcutOperation->setEnabled(m_client->rules()->checkShortcut(QString()).isNull()); | 434 | m_shortcutOperation->setEnabled(m_client->rules()->checkShortcut(QString()).isNull()); | ||
455 | 435 | | |||
456 | if (false) { | | |||
457 | initTabbingPopups(); | | |||
458 | m_addTabsMenu->setPalette(m_client->palette()); | | |||
459 | } else { | | |||
460 | delete m_addTabsMenu; | | |||
461 | m_addTabsMenu = 0; | | |||
462 | } | | |||
463 | | ||||
464 | // drop the existing scripts menu | 436 | // drop the existing scripts menu | ||
465 | delete m_scriptsMenu; | 437 | delete m_scriptsMenu; | ||
466 | m_scriptsMenu = NULL; | 438 | m_scriptsMenu = nullptr; | ||
zzag: We'll switch to nullptr in one go. See D23618. Revert this unrelated change. | |||||
467 | // ask scripts whether they want to add entries for the given Client | 439 | // ask scripts whether they want to add entries for the given Client | ||
468 | QList<QAction*> scriptActions = Scripting::self()->actionsForUserActionMenu(m_client.data(), m_scriptsMenu); | 440 | QList<QAction*> scriptActions = Scripting::self()->actionsForUserActionMenu(m_client.data(), m_scriptsMenu); | ||
469 | if (!scriptActions.isEmpty()) { | 441 | if (!scriptActions.isEmpty()) { | ||
470 | m_scriptsMenu = new QMenu(m_menu); | 442 | m_scriptsMenu = new QMenu(m_menu); | ||
471 | m_scriptsMenu->setPalette(m_client->palette()); | 443 | m_scriptsMenu->setPalette(m_client->palette()); | ||
472 | m_scriptsMenu->addActions(scriptActions); | 444 | m_scriptsMenu->addActions(scriptActions); | ||
473 | 445 | | |||
474 | QAction *action = m_scriptsMenu->menuAction(); | 446 | QAction *action = m_scriptsMenu->menuAction(); | ||
▲ Show 20 Lines • Show All 86 Lines • ▼ Show 20 Line(s) | 526 | { | |||
561 | } | 533 | } | ||
562 | 534 | | |||
563 | m_client->tabBehind(other, true); | 535 | m_client->tabBehind(other, true); | ||
564 | if (options->focusPolicyIsReasonable()) { | 536 | if (options->focusPolicyIsReasonable()) { | ||
565 | Workspace::self()->requestFocus(m_client); | 537 | Workspace::self()->requestFocus(m_client); | ||
566 | } | 538 | } | ||
567 | } | 539 | } | ||
568 | 540 | | |||
569 | void UserActionsMenu::rebuildTabGroupPopup() | | |||
570 | { | | |||
571 | Q_ASSERT(m_addTabsMenu); | | |||
572 | | ||||
573 | m_addTabsMenu->clear(); | | |||
574 | const auto &clientList = Workspace::self()->allClientList(); | | |||
575 | for (auto i = clientList.constBegin(), end = clientList.constEnd(); i != end; ++i) { | | |||
576 | if (*i == m_client.data() || (*i)->noBorder()) | | |||
577 | continue; | | |||
578 | m_addTabsMenu->addAction(shortCaption((*i)->caption()))->setData(QVariant::fromValue(*i)); | | |||
579 | } | | |||
580 | if (m_addTabsMenu->actions().isEmpty()) | | |||
581 | m_addTabsMenu->addAction(i18nc("There's no window available to be attached as tab to this one", "None available"))->setEnabled(false); | | |||
582 | } | | |||
583 | | ||||
584 | void UserActionsMenu::initTabbingPopups() | | |||
585 | { | | |||
586 | bool needTabManagers = false; | | |||
587 | Q_ASSERT(m_client); | | |||
588 | if (!m_client) | | |||
589 | return; | | |||
590 | if (m_client->tabGroup() && m_client->tabGroup()->count() > 1) { | | |||
591 | needTabManagers = true; | | |||
592 | if (!m_switchToTabMenu) { | | |||
593 | m_switchToTabMenu = new QMenu(i18n("Switch to Tab"), m_menu); | | |||
594 | connect(m_switchToTabMenu, &QMenu::triggered, this, &UserActionsMenu::selectPopupClientTab); | | |||
595 | connect(m_switchToTabMenu, &QMenu::aboutToShow, this, &UserActionsMenu::rebuildTabListPopup); | | |||
596 | m_menu->insertMenu(m_removeFromTabGroup, m_switchToTabMenu); | | |||
597 | } | | |||
598 | } else { | | |||
599 | delete m_switchToTabMenu; | | |||
600 | m_switchToTabMenu = 0; | | |||
601 | } | | |||
602 | | ||||
603 | if (!m_addTabsMenu) { | | |||
604 | m_addTabsMenu = new QMenu(i18n("&Attach as tab to"), m_menu); | | |||
605 | connect(m_addTabsMenu, &QMenu::triggered, this, &UserActionsMenu::entabPopupClient); | | |||
606 | connect(m_addTabsMenu, &QMenu::aboutToShow, this, &UserActionsMenu::rebuildTabGroupPopup); | | |||
607 | m_menu->insertMenu(m_removeFromTabGroup, m_addTabsMenu); | | |||
608 | } | | |||
609 | | ||||
610 | m_addTabsMenu->menuAction()->setEnabled(!m_client->isFullScreen()); | | |||
611 | m_removeFromTabGroup->setVisible(needTabManagers); | | |||
612 | m_closeTabGroup->setVisible(needTabManagers); | | |||
613 | } | | |||
614 | | ||||
615 | void UserActionsMenu::initDesktopPopup() | 541 | void UserActionsMenu::initDesktopPopup() | ||
616 | { | 542 | { | ||
617 | if (kwinApp()->operationMode() == Application::OperationModeWaylandOnly || | 543 | if (kwinApp()->operationMode() == Application::OperationModeWaylandOnly || | ||
618 | kwinApp()->operationMode() == Application::OperationModeXwayland) { | 544 | kwinApp()->operationMode() == Application::OperationModeXwayland) { | ||
619 | if (m_multipleDesktopsMenu) { | 545 | if (m_multipleDesktopsMenu) { | ||
620 | return; | 546 | return; | ||
621 | } | 547 | } | ||
622 | 548 | | |||
▲ Show 20 Lines • Show All 1328 Lines • Show Last 20 Lines |
We'll switch to nullptr in one go. See D23618. Revert this unrelated change.