--- b/plasma/desktop/shell/panelview.h 2011-04-01 03:52:43.000000000 -0700 +++ a/plasma/desktop/shell/panelview.h 2011-05-07 05:15:11.613316554 -0700 @@ -141,7 +141,7 @@ public Q_SLOTS: /** * Decides whether give focus to the panel */ - void statusUpdated(Plasma::ItemStatus newStatus); + void setStatus(Plasma::ItemStatus newStatus); /** * Pinches the min/max sizes of the containment to the current screen resolution @@ -240,7 +240,6 @@ private Q_SLOTS: void overlayMoved(PanelAppletOverlay *overlay); void panelDeleted(); void startAutoHide(); - void checkAutounhide(); /** * update the appearance of the unhide hinter @@ -270,7 +269,6 @@ private: GlowBar *m_glowBar; QTimer *m_mousePollTimer; QTimer *m_strutsTimer; - QTimer *m_rehideAfterAutounhideTimer; QTimeLine *m_timeLine; QGraphicsWidget *m_spacer; int m_spacerIndex; @@ -292,10 +290,7 @@ private: bool m_editing : 1; bool m_triggerEntered : 1; - bool m_respectStatus : 1; - static const int STRUTSTIMERDELAY = 200; - static const int AUTOUNHIDE_CHECK_DELAY = 3000; }; #endif --- a/plasma/desktop/shell/panelview.cpp 2011-04-01 03:52:43.000000000 -0700 +++ b/plasma/desktop/shell/panelview.cpp 2011-05-07 05:15:06.949943711 -0700 @@ -20,6 +20,7 @@ #include "panelview.h" #include +#include #include #include #include @@ -29,9 +30,8 @@ #include #endif -#include -#include #include +#include #include #include @@ -309,7 +309,6 @@ PanelView::PanelView(Plasma::Containment m_glowBar(0), m_mousePollTimer(0), m_strutsTimer(new QTimer(this)), - m_rehideAfterAutounhideTimer(new QTimer(this)), m_spacer(0), m_spacerIndex(-1), m_shadowWindow(0), @@ -319,8 +318,7 @@ PanelView::PanelView(Plasma::Containment m_visibilityMode(NormalPanel), m_lastHorizontal(true), m_editing(false), - m_triggerEntered(false), - m_respectStatus(true) + m_triggerEntered(false) { // KWin setup KWindowSystem::setOnAllDesktops(winId(), true); @@ -330,13 +328,11 @@ PanelView::PanelView(Plasma::Containment m_strutsTimer->setSingleShot(true); connect(m_strutsTimer, SIGNAL(timeout()), this, SLOT(updateStruts())); - // this timer controls checks to re-hide a panel after it's been unhidden - // for the user because, e.g., something is demanding attention - m_rehideAfterAutounhideTimer->setSingleShot(true); - connect(m_rehideAfterAutounhideTimer, SIGNAL(timeout()), this, SLOT(checkAutounhide())); - // Graphics view setup setFrameStyle(QFrame::NoFrame); + //setAutoFillBackground(true); + //setDragMode(QGraphicsView::RubberBandDrag); + //setCacheMode(QGraphicsView::CacheBackground); setInteractive(true); setAcceptDrops(true); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -356,20 +352,10 @@ PanelView::PanelView(Plasma::Containment const bool onScreen = panel->screen() < PlasmaApp::self()->corona()->numScreens(); const QRect screenRect = onScreen ? PlasmaApp::self()->corona()->screenGeometry(panel->screen()) : QRect(); - const int sw = screenRect.width(); - const int sh = screenRect.height(); - m_lastSeenSize = sizes.readEntry("lastsize", m_lastHorizontal ? sw : sh); - - if (onScreen) { - const QString last = m_lastHorizontal ? "Horizontal" + QString::number(sw) : - "Vertical" + QString::number(sh); - if (sizes.hasGroup(last)) { - KConfigGroup thisSize(&sizes, last); - resize(thisSize.readEntry("size", m_lastHorizontal ? QSize(sw, 27) : QSize(27, sh))); - } - } else { + if (!onScreen) { resize(panel->size().toSize()); } + m_lastSeenSize = sizes.readEntry("lastsize", m_lastHorizontal ? screenRect.width() : screenRect.height()); m_alignment = alignmentFilter((Qt::Alignment)viewConfig.readEntry("Alignment", (int)Qt::AlignLeft)); KConfigGroup sizeConfig(&viewConfig, (m_lastHorizontal ? "Horizontal" : "Vertical") + @@ -413,7 +399,7 @@ void PanelView::setContainment(Plasma::C disconnect(oldContainment); } - connect(containment, SIGNAL(newStatus(Plasma::ItemStatus)), this, SLOT(statusUpdated(Plasma::ItemStatus))); + connect(containment, SIGNAL(newStatus(Plasma::ItemStatus)), this, SLOT(setStatus(Plasma::ItemStatus))); connect(containment, SIGNAL(destroyed(QObject*)), this, SLOT(panelDeleted())); connect(containment, SIGNAL(toolBoxToggled()), this, SLOT(togglePanelController())); connect(containment, SIGNAL(appletAdded(Plasma::Applet *, const QPointF &)), this, SLOT(appletAdded(Plasma::Applet *))); @@ -436,6 +422,10 @@ void PanelView::setContainment(Plasma::C // ensure we aren't overlapping other panels const QRect screenRect = PlasmaApp::self()->corona()->screenGeometry(containment->screen()); + const QRegion availGeom = PlasmaApp::self()->corona()->availableScreenRegion(containment->screen()); + const int w = containment->size().width(); + const int h = containment->size().height(); + const int length = containment->formFactor() == Plasma::Horizontal ? w : h; View::setContainment(containment); @@ -448,11 +438,6 @@ void PanelView::setContainment(Plasma::C updateStruts(); checkShadow(); - - // if we are an autohiding panel, then see if the status mandates we do something about it - if (m_visibilityMode != NormalPanel && m_visibilityMode != WindowsGoBelow) { - checkUnhide(containment->status()); - } } void PanelView::themeChanged() @@ -463,7 +448,6 @@ void PanelView::themeChanged() void PanelView::checkShadow() { -#ifndef Q_WS_WIN if (KWindowSystem::compositingActive() && containment()->property("shadowPath").isValid()) { if (!m_shadowWindow) { m_shadowWindow = new ShadowWindow(this); @@ -478,11 +462,12 @@ void PanelView::checkShadow() if (m_shadowWindow->isValid() && isVisible()) { m_shadowWindow->show(); } - } else if (m_shadowWindow) { - m_shadowWindow->deleteLater(); - m_shadowWindow = 0; + } else { + if (m_shadowWindow) { + m_shadowWindow->deleteLater(); + m_shadowWindow = 0; + } } -#endif } void PanelView::setPanelDragPosition(const QPoint &point) @@ -709,6 +694,8 @@ void PanelView::updatePanelGeometry() geom.moveTopLeft(QPoint(screenGeom.center().x() - geom.width()/2 + 1 - geom.width()%2 + m_offset, screenGeom.top())); } + //enable borders if needed + //c->setGeometry(QRect(geom.left(), c->geometry().top(), geom.width(), geom.height())); break; case Plasma::LeftEdge: @@ -720,6 +707,8 @@ void PanelView::updatePanelGeometry() geom.moveTopLeft(QPoint(screenGeom.left(), screenGeom.center().y() - geom.height()/2 + 1 - geom.height()%2 + m_offset)); } + //enable borders if needed + //c->setGeometry(QRect(c->geometry().left(), geom.top(), geom.width(), geom.height())); break; case Plasma::RightEdge: @@ -731,6 +720,8 @@ void PanelView::updatePanelGeometry() geom.moveTopRight(QPoint(screenGeom.right(), screenGeom.center().y() - geom.height()/2 + 1 - geom.height()%2 + m_offset)); } + //enable borders if needed + //c->setGeometry(QRect(c->geometry().left(), geom.top(), geom.width(), geom.height())); break; case Plasma::BottomEdge: @@ -743,6 +734,8 @@ void PanelView::updatePanelGeometry() geom.moveBottomLeft(QPoint(screenGeom.center().x() - geom.width()/2 + 1 - geom.width()%2 + m_offset, screenGeom.bottom())); } + //enable borders if needed + //c->setGeometry(QRect(geom.left(), c->geometry().top(), geom.width(), geom.height())); break; } @@ -818,7 +811,8 @@ void PanelView::pinchContainment(const Q KConfigGroup sizes = config(); sizes = KConfigGroup(&sizes, "Sizes"); - if (m_lastHorizontal != horizontal || m_lastSeenSize != (horizontal ? sw : sh)) { + if (m_lastHorizontal != horizontal || + m_lastSeenSize != (horizontal ? sw : sh)) { // we're adjusting size. store the current size now KConfigGroup lastSize(&sizes, (m_lastHorizontal ? "Horizontal" : "Vertical") + QString::number(m_lastSeenSize)); @@ -1032,23 +1026,17 @@ void PanelView::togglePanelController() } } - if (m_panelController->isVisible()) { - if (m_panelController->showingWidgetExplorer() || - m_panelController->showingActivityManager()) { - m_panelController->switchToController(); - m_panelController->move(m_panelController->positionForPanelGeometry(geometry())); - } else { - Plasma::WindowEffects::slideWindow(m_panelController, location()); - m_panelController->close(); - updateStruts(); - } - } else { + if (!m_panelController->isVisible()) { m_editing = true; m_panelController->resize(m_panelController->sizeHint()); m_panelController->move(m_panelController->positionForPanelGeometry(geometry())); Plasma::WindowEffects::slideWindow(m_panelController, location()); kDebug() << "showing panel controller!" << m_panelController->geometry(); m_panelController->show(); + } else { + Plasma::WindowEffects::slideWindow(m_panelController, location()); + m_panelController->close(); + updateStruts(); } } @@ -1438,7 +1426,7 @@ void PanelView::unhide(bool destroyTrigg } } -void PanelView::statusUpdated(Plasma::ItemStatus newStatus) +void PanelView::setStatus(Plasma::ItemStatus newStatus) { if (newStatus == Plasma::AcceptingInputStatus) { KWindowSystem::forceActiveWindow(winId()); @@ -1447,50 +1435,14 @@ void PanelView::statusUpdated(Plasma::It void PanelView::checkUnhide(Plasma::ItemStatus newStatus) { - //kDebug() << "================= got a status: " << newStatus << Plasma::ActiveStatus; - m_respectStatus = true; - + //kDebug() << "================= got a new status: " << newStatus << Plasma::ActiveStatus; if (newStatus > Plasma::ActiveStatus) { unhide(); - if (newStatus == Plasma::NeedsAttentionStatus) { - //kDebug() << "starting the timer!"; - // start our rehide timer, so that the panel doesn't stay up and stuck forever and a day - m_rehideAfterAutounhideTimer->start(AUTOUNHIDE_CHECK_DELAY); - } } else { - //kDebug() << "new status, just autohiding"; startAutoHide(); } } -void PanelView::checkAutounhide() -{ - //kDebug() << "***************************" << KIdleTime::instance()->idleTime(); - if (KIdleTime::instance()->idleTime() >= AUTOUNHIDE_CHECK_DELAY) { - // the user is idle .. let's not hige the panel on them quite yet, but rather given them a - // chance to see this thing! - connect(KIdleTime::instance(), SIGNAL(resumingFromIdle()), this, SLOT(checkAutounhide()), - Qt::UniqueConnection); - KIdleTime::instance()->catchNextResumeEvent(); - //kDebug() << "exit 1 ***************************"; - return; - } - - m_respectStatus = false; - //kDebug() << "in to check ... who's resonsible?" << sender() << KIdleTime::instance(); - if (sender() == KIdleTime::instance()) { - //kDebug() << "doing a 2s wait"; - QTimer::singleShot(2000, this, SLOT(startAutoHide())); - } else { - //kDebug() << "just starting autohide!"; - startAutoHide(); - } - - // this line must come after the check on sender() as it *clears* that value! - disconnect(KIdleTime::instance(), SIGNAL(resumingFromIdle()), this, SLOT(checkAutounhide())); - //kDebug() << "exit 0 ***************************"; -} - void PanelView::unhide() { unhide(true); @@ -1503,31 +1455,10 @@ void PanelView::resetTriggerEnteredSuppr void PanelView::startAutoHide() { - /* - kDebug() << m_editing << (containment() ? containment()->status() : 0) << Plasma::ActiveStatus - << geometry().adjusted(-10, -10, 10, 10).contains(QCursor::pos()) << hasPopup(); - if (containment() && containment()->status() > Plasma::ActiveStatus) { - foreach (Plasma::Applet *applet, containment()->applets()) { - kDebug() << " " << applet->name() << applet->status(); - } - } - */ - - - if (m_editing || (m_respectStatus && (containment() && containment()->status() > Plasma::ActiveStatus))) { - if (m_mousePollTimer) { - m_mousePollTimer->stop(); - disconnect(m_mousePollTimer, SIGNAL(timeout()), this, SLOT(startAutoHide())); - } - - return; - } - - // since we've gotten this far, we don't need to worry about rehiding-after-auto-unhide, so just - // stop the timer - m_rehideAfterAutounhideTimer->stop(); - - if (geometry().adjusted(-10, -10, 10, 10).contains(QCursor::pos()) || hasPopup()) { + //TODO: is 5s too long? not long enough? + if (m_editing || (containment() && containment()->status() > Plasma::ActiveStatus) || + geometry().adjusted(-10, -10, 10, 10).contains(QCursor::pos()) || + hasPopup()) { if (!m_mousePollTimer) { leaveEvent(0); }