diff --git a/libkdecorations/kcommondecoration.cpp b/libkdecorations/kcommondecoration.cpp index e0e791864f..eb1e716db4 100644 --- a/libkdecorations/kcommondecoration.cpp +++ b/libkdecorations/kcommondecoration.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include @@ -41,37 +42,61 @@ /** @addtogroup kdecoration */ /** @{ */ -KCommonDecoration::KCommonDecoration(KDecorationBridge* bridge, KDecorationFactory* factory) - : m_previewWidget(0), - btnHideMinWidth(200), - btnHideLastWidth(0), - closing(false), - wrapper(new KCommonDecorationWrapper(this, bridge, factory)) +class KCommonDecorationPrivate +{ +public: + KCommonDecorationPrivate(KCommonDecoration *deco, KDecorationBridge *bridge, KDecorationFactory *factory); + ~KCommonDecorationPrivate(); + KCommonDecoration *q; + KCommonDecorationWrapper *wrapper; // delete wrapper; - do not do this, this object is actually owned and deleted by the wrapper + KCommonDecorationButton *button[NumButtons]; + KCommonDecoration::ButtonContainer buttonsLeft; + KCommonDecoration::ButtonContainer buttonsRight; + QPointer previewWidget; + int btnHideMinWidth; + int btnHideLastWidth; + bool closing; // for menu doubleclick closing... +}; +KCommonDecorationPrivate::KCommonDecorationPrivate(KCommonDecoration* deco, KDecorationBridge* bridge, KDecorationFactory* factory) + : q(deco) + , wrapper(new KCommonDecorationWrapper(deco, bridge, factory)) + , previewWidget() + , btnHideMinWidth(200) + , btnHideLastWidth(0) + , closing(false) { // sizeof(...) is calculated at compile time - memset(m_button, 0, sizeof(KCommonDecorationButton *) * NumButtons); - connect(wrapper, SIGNAL(keepAboveChanged(bool)), this, SIGNAL(keepAboveChanged(bool))); - connect(wrapper, SIGNAL(keepBelowChanged(bool)), this, SIGNAL(keepBelowChanged(bool))); - connect(wrapper, &KDecoration::decorationButtonsChanged, + memset(button, 0, sizeof(KCommonDecorationButton *) * NumButtons); +} + +KCommonDecorationPrivate::~KCommonDecorationPrivate() +{ + for (int n = 0; n < NumButtons; n++) { + if (button[n]) delete button[n]; + } +} + +KCommonDecoration::KCommonDecoration(KDecorationBridge* bridge, KDecorationFactory* factory) + : d(new KCommonDecorationPrivate(this, bridge, factory)) + +{ + connect(d->wrapper, SIGNAL(keepAboveChanged(bool)), this, SIGNAL(keepAboveChanged(bool))); + connect(d->wrapper, SIGNAL(keepBelowChanged(bool)), this, SIGNAL(keepBelowChanged(bool))); + connect(d->wrapper, &KDecoration::decorationButtonsChanged, this, &KCommonDecoration::decorationButtonsChanged); - connect(wrapper, &KDecoration::decorationButtonsChanged, + connect(d->wrapper, &KDecoration::decorationButtonsChanged, this, &KCommonDecoration::buttonsChanged); - connect(wrapper, &KDecoration::activeChanged, this, &KCommonDecoration::activeChange); - connect(wrapper, &KDecoration::captionChanged, this, &KCommonDecoration::captionChange); - connect(wrapper, &KDecoration::desktopChanged, this, &KCommonDecoration::desktopChange); - connect(wrapper, &KDecoration::shadeChanged, this, &KCommonDecoration::shadeChange); - connect(wrapper, &KDecoration::iconChanged, this, &KCommonDecoration::iconChange); - connect(wrapper, &KDecoration::maximizeChanged, this, &KCommonDecoration::maximizeChange); + connect(d->wrapper, &KDecoration::activeChanged, this, &KCommonDecoration::activeChange); + connect(d->wrapper, &KDecoration::captionChanged, this, &KCommonDecoration::captionChange); + connect(d->wrapper, &KDecoration::desktopChanged, this, &KCommonDecoration::desktopChange); + connect(d->wrapper, &KDecoration::shadeChanged, this, &KCommonDecoration::shadeChange); + connect(d->wrapper, &KDecoration::iconChanged, this, &KCommonDecoration::iconChange); + connect(d->wrapper, &KDecoration::maximizeChanged, this, &KCommonDecoration::maximizeChange); } KCommonDecoration::~KCommonDecoration() { - for (int n = 0; n < NumButtons; n++) { - if (m_button[n]) delete m_button[n]; - } - delete m_previewWidget; -// delete wrapper; - do not do this, this object is actually owned and deleted by the wrapper } QString KCommonDecoration::defaultButtonsLeft() const @@ -192,7 +217,7 @@ void KCommonDecoration::updateLayout() const r.getCoords(&r_x, &r_y, &r_x2, &r_y2); // layout preview widget - if (m_previewWidget) { + if (d->previewWidget) { const int borderLeft = layoutMetric(LM_BorderLeft); const int borderRight = layoutMetric(LM_BorderRight); const int borderBottom = layoutMetric(LM_BorderBottom); @@ -204,27 +229,27 @@ void KCommonDecoration::updateLayout() const int top = r_y + titleEdgeTop + titleHeight + titleEdgeBottom; int width = r_x2 - borderRight - left + 1; int height = r_y2 - borderBottom - top + 1; - m_previewWidget->setGeometry(left, top, width, height); - moveWidget(left, top, m_previewWidget); - resizeWidget(width, height, m_previewWidget); + d->previewWidget->setGeometry(left, top, width, height); + moveWidget(left, top, d->previewWidget.data()); + resizeWidget(width, height, d->previewWidget.data()); } // resize buttons... for (int n = 0; n < NumButtons; n++) { - if (m_button[n]) { - QSize newSize = QSize(layoutMetric(LM_ButtonWidth, true, m_button[n]), - layoutMetric(LM_ButtonHeight, true, m_button[n])); - if (newSize != m_button[n]->size()) - m_button[n]->setSize(newSize); + if (d->button[n]) { + QSize newSize = QSize(layoutMetric(LM_ButtonWidth, true, d->button[n]), + layoutMetric(LM_ButtonHeight, true, d->button[n])); + if (newSize != d->button[n]->size()) + d->button[n]->setSize(newSize); } } // layout buttons int y = r_y + layoutMetric(LM_TitleEdgeTop) + layoutMetric(LM_ButtonMarginTop); - if (m_buttonsLeft.count() > 0) { + if (d->buttonsLeft.count() > 0) { const int buttonSpacing = layoutMetric(LM_ButtonSpacing); int x = r_x + layoutMetric(LM_TitleEdgeLeft); - for (ButtonContainer::const_iterator it = m_buttonsLeft.begin(); it != m_buttonsLeft.end(); ++it) { + for (ButtonContainer::const_iterator it = d->buttonsLeft.constBegin(); it != d->buttonsLeft.constEnd(); ++it) { bool elementLayouted = false; if (*it) { if (!(*it)->isHidden()) { @@ -236,17 +261,17 @@ void KCommonDecoration::updateLayout() const x += layoutMetric(LM_ExplicitButtonSpacer); elementLayouted = true; } - if (elementLayouted && it != m_buttonsLeft.end()) + if (elementLayouted && it != d->buttonsLeft.end()) x += buttonSpacing; } } - if (m_buttonsRight.count() > 0) { + if (d->buttonsRight.count() > 0) { const int titleEdgeRightLeft = r_x2 - layoutMetric(LM_TitleEdgeRight) + 1; const int buttonSpacing = layoutMetric(LM_ButtonSpacing); - int x = titleEdgeRightLeft - buttonContainerWidth(m_buttonsRight); - for (ButtonContainer::const_iterator it = m_buttonsRight.begin(); it != m_buttonsRight.end(); ++it) { + int x = titleEdgeRightLeft - buttonContainerWidth(d->buttonsRight); + for (ButtonContainer::const_iterator it = d->buttonsRight.constBegin(); it != d->buttonsRight.constEnd(); ++it) { bool elementLayouted = false; if (*it) { if (!(*it)->isHidden()) { @@ -258,7 +283,7 @@ void KCommonDecoration::updateLayout() const x += layoutMetric(LM_ExplicitButtonSpacer); elementLayouted = true; } - if (elementLayouted && it != m_buttonsRight.end()) + if (elementLayouted && it != d->buttonsRight.end()) x += buttonSpacing; } } @@ -267,54 +292,51 @@ void KCommonDecoration::updateLayout() const void KCommonDecoration::updateButtons() const { for (int n = 0; n < NumButtons; n++) - if (m_button[n]) m_button[n]->update(); + if (d->button[n]) d->button[n]->update(); } void KCommonDecoration::resetButtons() const { for (int n = 0; n < NumButtons; n++) - if (m_button[n]) m_button[n]->reset(KCommonDecorationButton::ManualReset); + if (d->button[n]) d->button[n]->reset(KCommonDecorationButton::ManualReset); } void KCommonDecoration::resetLayout() { for (int n = 0; n < NumButtons; n++) { - if (m_button[n]) { - delete m_button[n]; - m_button[n] = 0; + if (d->button[n]) { + delete d->button[n]; + d->button[n] = nullptr; } } - m_buttonsLeft.clear(); - m_buttonsRight.clear(); + d->buttonsLeft.clear(); + d->buttonsRight.clear(); - delete m_previewWidget; - m_previewWidget = 0; + delete d->previewWidget.data(); + d->previewWidget.clear(); // shown instead of the window contents in decoration previews if (isPreview()) { - m_previewWidget = new QLabel(i18n("
%1
", visibleName()), widget()); - m_previewWidget->setAutoFillBackground(true); - m_previewWidget->show(); - - // fix double deletion, see buttonDestroyed() - connect(m_previewWidget, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); + d->previewWidget = QPointer(new QLabel(i18n("
%1
", visibleName()), widget())); + d->previewWidget->setAutoFillBackground(true); + d->previewWidget->show(); } - addButtons(m_buttonsLeft, + addButtons(d->buttonsLeft, options()->customButtonPositions() ? options()->titleButtonsLeft() : defaultButtonsLeft(), true); - addButtons(m_buttonsRight, + addButtons(d->buttonsRight, options()->customButtonPositions() ? options()->titleButtonsRight() : defaultButtonsRight(), false); updateLayout(); const int minTitleBarWidth = 35; - btnHideMinWidth = buttonContainerWidth(m_buttonsLeft, true) + buttonContainerWidth(m_buttonsRight, true) + + d->btnHideMinWidth = buttonContainerWidth(d->buttonsLeft, true) + buttonContainerWidth(d->buttonsRight, true) + layoutMetric(LM_TitleEdgeLeft, false) + layoutMetric(LM_TitleEdgeRight, false) + layoutMetric(LM_TitleBorderLeft, false) + layoutMetric(LM_TitleBorderRight, false) + minTitleBarWidth; - btnHideLastWidth = 0; + d->btnHideLastWidth = 0; } void KCommonDecoration::objDestroyed(QObject *obj) @@ -328,15 +350,13 @@ void KCommonDecoration::objDestroyed(QObject *obj) // have been the better approach, but changing the button array // would have been ABI incompatible & would have required creation // of kcommondecorationprivate instance. - // the same applies to m_previewWidget. + // the same applies to . for (int n = 0; n < NumButtons; n++) { - if (m_button[n] == obj) { - m_button[n] = 0; + if (d->button[n] == obj) { + d->button[n] = nullptr; break; } } - if (obj == m_previewWidget) - m_previewWidget = 0; } QRegion KCommonDecoration::region(KDecorationDefines::Region) @@ -346,12 +366,12 @@ QRegion KCommonDecoration::region(KDecorationDefines::Region) int KCommonDecoration::buttonsLeftWidth() const { - return buttonContainerWidth(m_buttonsLeft); + return buttonContainerWidth(d->buttonsLeft); } int KCommonDecoration::buttonsRightWidth() const { - return buttonContainerWidth(m_buttonsRight); + return buttonContainerWidth(d->buttonsRight); } int KCommonDecoration::buttonContainerWidth(const ButtonContainer &btnContainer, bool countHidden) const @@ -384,7 +404,7 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& KCommonDecorationButton *btn = 0; switch(s[n].toAscii()) { case 'M': // Menu button - if (!m_button[MenuButton]) { + if (!d->button[MenuButton]) { btn = createButton(MenuButton); if (!btn) break; btn->setTipText(i18nc("Button showing window actions menu", "Window Menu")); @@ -395,11 +415,11 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& // fix double deletion, see objDestroyed() connect(btn, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); - m_button[MenuButton] = btn; + d->button[MenuButton] = btn; } break; case 'N': // Application Menu button - if (!m_button[AppMenuButton]) { + if (!d->button[AppMenuButton]) { btn = createButton(AppMenuButton); if (!btn) break; btn->setTipText(i18nc("Button showing application menu", "Application Menu")); @@ -416,11 +436,11 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& // fix double deletion, see objDestroyed() connect(btn, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); - m_button[AppMenuButton] = btn; + d->button[AppMenuButton] = btn; } break; case 'S': // OnAllDesktops button - if (!m_button[OnAllDesktopsButton]) { + if (!d->button[OnAllDesktopsButton]) { btn = createButton(OnAllDesktopsButton); if (!btn) break; const bool oad = isOnAllDesktops(); @@ -432,11 +452,11 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& // fix double deletion, see objDestroyed() connect(btn, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); - m_button[OnAllDesktopsButton] = btn; + d->button[OnAllDesktopsButton] = btn; } break; case 'H': // Help button - if ((!m_button[HelpButton]) && providesContextHelp()) { + if ((!d->button[HelpButton]) && providesContextHelp()) { btn = createButton(HelpButton); if (!btn) break; btn->setTipText(i18n("Help")); @@ -445,11 +465,11 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& // fix double deletion, see objDestroyed() connect(btn, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); - m_button[HelpButton] = btn; + d->button[HelpButton] = btn; } break; case 'I': // Minimize button - if ((!m_button[MinButton]) && isMinimizable()) { + if ((!d->button[MinButton]) && isMinimizable()) { btn = createButton(MinButton); if (!btn) break; btn->setTipText(i18n("Minimize")); @@ -458,11 +478,11 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& // fix double deletion, see objDestroyed() connect(btn, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); - m_button[MinButton] = btn; + d->button[MinButton] = btn; } break; case 'A': // Maximize button - if ((!m_button[MaxButton]) && isMaximizable()) { + if ((!d->button[MaxButton]) && isMaximizable()) { btn = createButton(MaxButton); if (!btn) break; btn->setRealizeButtons(Qt::LeftButton | Qt::MidButton | Qt::RightButton); @@ -475,11 +495,11 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& // fix double deletion, see objDestroyed() connect(btn, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); - m_button[MaxButton] = btn; + d->button[MaxButton] = btn; } break; case 'X': // Close button - if ((!m_button[CloseButton]) && isCloseable()) { + if ((!d->button[CloseButton]) && isCloseable()) { btn = createButton(CloseButton); if (!btn) break; btn->setTipText(i18n("Close")); @@ -488,11 +508,11 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& // fix double deletion, see objDestroyed() connect(btn, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); - m_button[CloseButton] = btn; + d->button[CloseButton] = btn; } break; case 'F': // AboveButton button - if (!m_button[AboveButton]) { + if (!d->button[AboveButton]) { btn = createButton(AboveButton); if (!btn) break; bool above = keepAbove(); @@ -504,11 +524,11 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& // fix double deletion, see objDestroyed() connect(btn, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); - m_button[AboveButton] = btn; + d->button[AboveButton] = btn; } break; case 'B': // BelowButton button - if (!m_button[BelowButton]) { + if (!d->button[BelowButton]) { btn = createButton(BelowButton); if (!btn) break; bool below = keepBelow(); @@ -520,11 +540,11 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& // fix double deletion, see objDestroyed() connect(btn, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); - m_button[BelowButton] = btn; + d->button[BelowButton] = btn; } break; case 'L': // Shade button - if ((!m_button[ShadeButton]) && isShadeable()) { + if ((!d->button[ShadeButton]) && isShadeable()) { btn = createButton(ShadeButton); if (!btn) break; bool shaded = isSetShade(); @@ -536,7 +556,7 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& // fix double deletion, see objDestroyed() connect(btn, SIGNAL(destroyed(QObject*)), this, SLOT(objDestroyed(QObject*))); - m_button[ShadeButton] = btn; + d->button[ShadeButton] = btn; } break; case '_': // Spacer item @@ -548,7 +568,7 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& btn->setLeft(isLeft); btn->setSize(QSize(layoutMetric(LM_ButtonWidth, true, btn), layoutMetric(LM_ButtonHeight, true, btn))); // will be shown later on window registration - if (btn->type() == AppMenuButton && !isPreview() && !wrapper->menuAvailable()) { + if (btn->type() == AppMenuButton && !isPreview() && !d->wrapper->menuAvailable()) { btn->hide(); } else { btn->show(); @@ -563,15 +583,15 @@ void KCommonDecoration::addButtons(ButtonContainer &btnContainer, const QString& void KCommonDecoration::calcHiddenButtons() { - if (width() == btnHideLastWidth) + if (width() == d->btnHideLastWidth) return; - btnHideLastWidth = width(); + d->btnHideLastWidth = width(); //Hide buttons in the following order: - KCommonDecorationButton* btnArray[] = { m_button[HelpButton], m_button[AppMenuButton], m_button[ShadeButton], m_button[BelowButton], - m_button[AboveButton], m_button[OnAllDesktopsButton], m_button[MaxButton], - m_button[MinButton], m_button[MenuButton], m_button[CloseButton] + KCommonDecorationButton* btnArray[] = { d->button[HelpButton], d->button[AppMenuButton], d->button[ShadeButton], d->button[BelowButton], + d->button[AboveButton], d->button[OnAllDesktopsButton], d->button[MaxButton], + d->button[MinButton], d->button[MenuButton], d->button[CloseButton] }; const int buttonsCount = sizeof(btnArray) / sizeof(btnArray[ 0 ]); @@ -579,7 +599,7 @@ void KCommonDecoration::calcHiddenButtons() int count = 0; // Hide buttons - while (current_width < btnHideMinWidth && count < buttonsCount) { + while (current_width < d->btnHideMinWidth && count < buttonsCount) { if (btnArray[count]) { current_width += btnArray[count]->width(); if (btnArray[count]->isVisible()) @@ -594,7 +614,7 @@ void KCommonDecoration::calcHiddenButtons() if (! btnArray[i]->isHidden()) break; // all buttons shown... - if (btnArray[i]->type() != AppMenuButton || wrapper->menuAvailable()) + if (btnArray[i]->type() != AppMenuButton || d->wrapper->menuAvailable()) btnArray[i]->show(); } } @@ -625,12 +645,12 @@ QSize KCommonDecoration::minimumSize() const void KCommonDecoration::maximizeChange() { - if (m_button[MaxButton]) { - m_button[MaxButton]->setOn(maximizeMode() == MaximizeFull); - m_button[MaxButton]->setTipText((maximizeMode() != MaximizeFull) ? + if (d->button[MaxButton]) { + d->button[MaxButton]->setOn(maximizeMode() == MaximizeFull); + d->button[MaxButton]->setTipText((maximizeMode() != MaximizeFull) ? i18n("Maximize") : i18n("Restore")); - m_button[MaxButton]->reset(KCommonDecorationButton::StateChange); + d->button[MaxButton]->reset(KCommonDecorationButton::StateChange); } updateWindowShape(); widget()->update(); @@ -638,32 +658,32 @@ void KCommonDecoration::maximizeChange() void KCommonDecoration::desktopChange() { - if (m_button[OnAllDesktopsButton]) { - m_button[OnAllDesktopsButton]->setOn(isOnAllDesktops()); - m_button[OnAllDesktopsButton]->setTipText(isOnAllDesktops() ? + if (d->button[OnAllDesktopsButton]) { + d->button[OnAllDesktopsButton]->setOn(isOnAllDesktops()); + d->button[OnAllDesktopsButton]->setTipText(isOnAllDesktops() ? i18n("Not on all desktops") : i18n("On all desktops")); - m_button[OnAllDesktopsButton]->reset(KCommonDecorationButton::StateChange); + d->button[OnAllDesktopsButton]->reset(KCommonDecorationButton::StateChange); } } void KCommonDecoration::shadeChange() { - if (m_button[ShadeButton]) { + if (d->button[ShadeButton]) { bool shaded = isSetShade(); - m_button[ShadeButton]->setOn(shaded); - m_button[ShadeButton]->setTipText(shaded ? + d->button[ShadeButton]->setOn(shaded); + d->button[ShadeButton]->setTipText(shaded ? i18n("Unshade") : i18n("Shade")); - m_button[ShadeButton]->reset(KCommonDecorationButton::StateChange); + d->button[ShadeButton]->reset(KCommonDecorationButton::StateChange); } } void KCommonDecoration::iconChange() { - if (m_button[MenuButton]) { - m_button[MenuButton]->update(); - m_button[MenuButton]->reset(KCommonDecorationButton::IconChange); + if (d->button[MenuButton]) { + d->button[MenuButton]->update(); + d->button[MenuButton]->reset(KCommonDecorationButton::IconChange); } } @@ -680,38 +700,38 @@ void KCommonDecoration::captionChange() void KCommonDecoration::keepAboveChange(bool above) { - if (m_button[AboveButton]) { - m_button[AboveButton]->setOn(above); - m_button[AboveButton]->setTipText(above ? i18n("Do not keep above others") : i18n("Keep above others")); - m_button[AboveButton]->reset(KCommonDecorationButton::StateChange); + if (d->button[AboveButton]) { + d->button[AboveButton]->setOn(above); + d->button[AboveButton]->setTipText(above ? i18n("Do not keep above others") : i18n("Keep above others")); + d->button[AboveButton]->reset(KCommonDecorationButton::StateChange); } - if (m_button[BelowButton] && m_button[BelowButton]->isChecked()) { - m_button[BelowButton]->setOn(false); - m_button[BelowButton]->setTipText(i18n("Keep below others")); - m_button[BelowButton]->reset(KCommonDecorationButton::StateChange); + if (d->button[BelowButton] && d->button[BelowButton]->isChecked()) { + d->button[BelowButton]->setOn(false); + d->button[BelowButton]->setTipText(i18n("Keep below others")); + d->button[BelowButton]->reset(KCommonDecorationButton::StateChange); } } void KCommonDecoration::keepBelowChange(bool below) { - if (m_button[BelowButton]) { - m_button[BelowButton]->setOn(below); - m_button[BelowButton]->setTipText(below ? i18n("Do not keep below others") : i18n("Keep below others")); - m_button[BelowButton]->reset(KCommonDecorationButton::StateChange); + if (d->button[BelowButton]) { + d->button[BelowButton]->setOn(below); + d->button[BelowButton]->setTipText(below ? i18n("Do not keep below others") : i18n("Keep below others")); + d->button[BelowButton]->reset(KCommonDecorationButton::StateChange); } - if (m_button[AboveButton] && m_button[AboveButton]->isChecked()) { - m_button[AboveButton]->setOn(false); - m_button[AboveButton]->setTipText(i18n("Keep above others")); - m_button[AboveButton]->reset(KCommonDecorationButton::StateChange); + if (d->button[AboveButton] && d->button[AboveButton]->isChecked()) { + d->button[AboveButton]->setOn(false); + d->button[AboveButton]->setTipText(i18n("Keep above others")); + d->button[AboveButton]->reset(KCommonDecorationButton::StateChange); } } void KCommonDecoration::slotMaximize() { - if (m_button[MaxButton]) { - maximize(m_button[MaxButton]->lastMousePress()); + if (d->button[MaxButton]) { + maximize(d->button[MaxButton]->lastMousePress()); } } @@ -747,7 +767,7 @@ void KCommonDecoration::menuButtonPressed() t = new QTime; } if (lastClient == this && t->elapsed() <= QApplication::doubleClickInterval()) { - closing = true; + d->closing = true; } else { lastClient = this; t->start(); @@ -757,13 +777,13 @@ void KCommonDecoration::menuButtonPressed() doShowWindowMenu(); if (!f->exists(decoration())) // 'this' was deleted return; - m_button[MenuButton]->setDown(false); + d->button[MenuButton]->setDown(false); } } void KCommonDecoration::menuButtonReleased() { - if (closing) { + if (d->closing) { if (timer && timer->isActive()) { timer->stop(); } @@ -775,10 +795,10 @@ void KCommonDecoration::timerEvent(QTimerEvent *event) { if (timer && event->timerId() == timer->timerId()) { timer->stop(); - if (closing || !m_button[MenuButton]->isDown()) { + if (d->closing || !d->button[MenuButton]->isDown()) { return; } - closing = false; + d->closing = false; doShowWindowMenu(); return; } @@ -787,36 +807,36 @@ void KCommonDecoration::timerEvent(QTimerEvent *event) void KCommonDecoration::doShowWindowMenu() { - QRect menuRect = m_button[MenuButton]->rect(); - QPoint menutop = m_button[MenuButton]->mapToGlobal(menuRect.topLeft()); - QPoint menubottom = m_button[MenuButton]->mapToGlobal(menuRect.bottomRight()) + QPoint(0, 2); + QRect menuRect = d->button[MenuButton]->rect(); + QPoint menutop = d->button[MenuButton]->mapToGlobal(menuRect.topLeft()); + QPoint menubottom = d->button[MenuButton]->mapToGlobal(menuRect.bottomRight()) + QPoint(0, 2); showWindowMenu(QRect(menutop, menubottom)); } void KCommonDecoration::appMenuButtonPressed() { - QRect menuRect = m_button[AppMenuButton]->rect(); - wrapper->showApplicationMenu(m_button[AppMenuButton]->mapToGlobal(menuRect.bottomLeft())); + QRect menuRect = d->button[AppMenuButton]->rect(); + d->wrapper->showApplicationMenu(d->button[AppMenuButton]->mapToGlobal(menuRect.bottomLeft())); KDecorationFactory* f = factory(); if (!f->exists(decoration())) // 'this' was deleted return; - m_button[AppMenuButton]->setDown(false); + d->button[AppMenuButton]->setDown(false); } void KCommonDecoration::slotAppMenuAvailable() { - if (m_button[AppMenuButton]) { - m_button[AppMenuButton]->show(); + if (d->button[AppMenuButton]) { + d->button[AppMenuButton]->show(); updateLayout(); } } void KCommonDecoration::slotAppMenuUnavailable() { - if (m_button[AppMenuButton]) { - m_button[AppMenuButton]->hide(); + if (d->button[AppMenuButton]) { + d->button[AppMenuButton]->hide(); updateLayout(); } } @@ -1025,7 +1045,7 @@ QRect KCommonDecoration::titleRect() const QRect KCommonDecoration::transparentRect() const { - return wrapper->transparentRect(); + return d->wrapper->transparentRect(); } class KCommonDecorationButtonPrivate @@ -1154,229 +1174,229 @@ const KDecorationOptions* KCommonDecoration::options() } bool KCommonDecoration::isActive() const { - return wrapper->isActive(); + return d->wrapper->isActive(); } bool KCommonDecoration::isCloseable() const { - return wrapper->isCloseable(); + return d->wrapper->isCloseable(); } bool KCommonDecoration::isMaximizable() const { - return wrapper->isMaximizable(); + return d->wrapper->isMaximizable(); } KCommonDecoration::MaximizeMode KCommonDecoration::maximizeMode() const { - return wrapper->maximizeMode(); + return d->wrapper->maximizeMode(); } bool KCommonDecoration::isMinimizable() const { - return wrapper->isMinimizable(); + return d->wrapper->isMinimizable(); } bool KCommonDecoration::providesContextHelp() const { - return wrapper->providesContextHelp(); + return d->wrapper->providesContextHelp(); } int KCommonDecoration::desktop() const { - return wrapper->desktop(); + return d->wrapper->desktop(); } bool KCommonDecoration::isOnAllDesktops() const { - return wrapper->isOnAllDesktops(); + return d->wrapper->isOnAllDesktops(); } bool KCommonDecoration::isModal() const { - return wrapper->isModal(); + return d->wrapper->isModal(); } bool KCommonDecoration::isShadeable() const { - return wrapper->isShadeable(); + return d->wrapper->isShadeable(); } bool KCommonDecoration::isShade() const { - return wrapper->isShade(); + return d->wrapper->isShade(); } bool KCommonDecoration::isSetShade() const { - return wrapper->isSetShade(); + return d->wrapper->isSetShade(); } bool KCommonDecoration::keepAbove() const { - return wrapper->keepAbove(); + return d->wrapper->keepAbove(); } bool KCommonDecoration::keepBelow() const { - return wrapper->keepBelow(); + return d->wrapper->keepBelow(); } bool KCommonDecoration::isMovable() const { - return wrapper->isMovable(); + return d->wrapper->isMovable(); } bool KCommonDecoration::isResizable() const { - return wrapper->isResizable(); + return d->wrapper->isResizable(); } NET::WindowType KCommonDecoration::windowType(unsigned long supported_types) const { - return wrapper->windowType(supported_types); + return d->wrapper->windowType(supported_types); } QIcon KCommonDecoration::icon() const { - return wrapper->icon(); + return d->wrapper->icon(); } QString KCommonDecoration::caption() const { - return wrapper->caption(); + return d->wrapper->caption(); } void KCommonDecoration::showWindowMenu(const QRect &pos) { - return wrapper->showWindowMenu(pos); + return d->wrapper->showWindowMenu(pos); } void KCommonDecoration::showWindowMenu(QPoint pos) { - return wrapper->showWindowMenu(pos); + return d->wrapper->showWindowMenu(pos); } void KCommonDecoration::performWindowOperation(WindowOperation op) { - return wrapper->performWindowOperation(op); + return d->wrapper->performWindowOperation(op); } void KCommonDecoration::setMask(const QRegion& reg, int mode) { - return wrapper->setMask(reg, mode); + return d->wrapper->setMask(reg, mode); } void KCommonDecoration::clearMask() { - return wrapper->clearMask(); + return d->wrapper->clearMask(); } bool KCommonDecoration::isPreview() const { - return wrapper->isPreview(); + return d->wrapper->isPreview(); } QRect KCommonDecoration::geometry() const { - return wrapper->geometry(); + return d->wrapper->geometry(); } QRect KCommonDecoration::iconGeometry() const { - return wrapper->iconGeometry(); + return d->wrapper->iconGeometry(); } QRegion KCommonDecoration::unobscuredRegion(const QRegion& r) const { - return wrapper->unobscuredRegion(r); + return d->wrapper->unobscuredRegion(r); } WId KCommonDecoration::windowId() const { - return wrapper->windowId(); + return d->wrapper->windowId(); } int KCommonDecoration::width() const { - return wrapper->width(); + return d->wrapper->width(); } int KCommonDecoration::height() const { - return wrapper->height(); + return d->wrapper->height(); } void KCommonDecoration::processMousePressEvent(QMouseEvent* e) { - return wrapper->processMousePressEvent(e); + return d->wrapper->processMousePressEvent(e); } void KCommonDecoration::setMainWidget(QWidget* w) { - return wrapper->setMainWidget(w); + return d->wrapper->setMainWidget(w); } void KCommonDecoration::createMainWidget(Qt::WindowFlags flags) { - return wrapper->createMainWidget(flags); + return d->wrapper->createMainWidget(flags); } QWidget* KCommonDecoration::initialParentWidget() const { - return wrapper->initialParentWidget(); + return d->wrapper->initialParentWidget(); } Qt::WindowFlags KCommonDecoration::initialWFlags() const { - return wrapper->initialWFlags(); + return d->wrapper->initialWFlags(); } QWidget* KCommonDecoration::widget() { - return wrapper->widget(); + return d->wrapper->widget(); } const QWidget* KCommonDecoration::widget() const { - return wrapper->widget(); + return d->wrapper->widget(); } KDecorationFactory* KCommonDecoration::factory() const { - return wrapper->factory(); + return d->wrapper->factory(); } void KCommonDecoration::grabXServer() { - return wrapper->grabXServer(); + return d->wrapper->grabXServer(); } void KCommonDecoration::ungrabXServer() { - return wrapper->ungrabXServer(); + return d->wrapper->ungrabXServer(); } void KCommonDecoration::closeWindow() { - return wrapper->closeWindow(); + return d->wrapper->closeWindow(); } void KCommonDecoration::maximize(Qt::MouseButtons button) { - return wrapper->maximize(button); + return d->wrapper->maximize(button); } void KCommonDecoration::maximize(MaximizeMode mode) { - return wrapper->maximize(mode); + return d->wrapper->maximize(mode); } void KCommonDecoration::minimize() { - return wrapper->minimize(); + return d->wrapper->minimize(); } void KCommonDecoration::showContextHelp() { - return wrapper->showContextHelp(); + return d->wrapper->showContextHelp(); } void KCommonDecoration::setDesktop(int desktop) { - return wrapper->setDesktop(desktop); + return d->wrapper->setDesktop(desktop); } void KCommonDecoration::toggleOnAllDesktops() { - return wrapper->toggleOnAllDesktops(); + return d->wrapper->toggleOnAllDesktops(); } void KCommonDecoration::titlebarDblClickOperation() { - return wrapper->titlebarDblClickOperation(); + return d->wrapper->titlebarDblClickOperation(); } void KCommonDecoration::titlebarMouseWheelOperation(int delta) { - return wrapper->titlebarMouseWheelOperation(delta); + return d->wrapper->titlebarMouseWheelOperation(delta); } void KCommonDecoration::setShade(bool set) { - return wrapper->setShade(set); + return d->wrapper->setShade(set); } void KCommonDecoration::setKeepAbove(bool set) { - return wrapper->setKeepAbove(set); + return d->wrapper->setKeepAbove(set); } void KCommonDecoration::setKeepBelow(bool set) { - return wrapper->setKeepBelow(set); + return d->wrapper->setKeepBelow(set); } void KCommonDecoration::setAlphaEnabled(bool enabled) { - wrapper->wrapSetAlphaEnabled(enabled); + d->wrapper->wrapSetAlphaEnabled(enabled); } // *** end of wrapping of everything from KDecoration *** // const KDecoration* KCommonDecoration::decoration() const { - return wrapper; + return d->wrapper; } KDecoration* KCommonDecoration::decoration() { - return wrapper; + return d->wrapper; } // All copied from kdecoration.cpp diff --git a/libkdecorations/kcommondecoration.h b/libkdecorations/kcommondecoration.h index 766b796be3..78250d65da 100644 --- a/libkdecorations/kcommondecoration.h +++ b/libkdecorations/kcommondecoration.h @@ -422,23 +422,11 @@ private: int buttonContainerWidth(const ButtonContainer &btnContainer, bool countHidden = false) const; void addButtons(ButtonContainer &btnContainer, const QString& buttons, bool isLeft); - KCommonDecorationButton *m_button[NumButtons]; - - ButtonContainer m_buttonsLeft; - ButtonContainer m_buttonsRight; - - QWidget *m_previewWidget; - // button hiding for small windows void calcHiddenButtons(); - int btnHideMinWidth; - int btnHideLastWidth; - bool closing; // for menu doubleclick closing... - - KCommonDecorationWrapper* wrapper; - - KCommonDecorationPrivate *d; + const QScopedPointer d; + friend class KCommonDecorationPrivate; }; /**