Lines 20-25
Link Here
|
20 |
#include "panelview.h" |
20 |
#include "panelview.h" |
21 |
|
21 |
|
22 |
#include <QApplication> |
22 |
#include <QApplication> |
|
|
23 |
#include <QDesktopWidget> |
23 |
#include <QGraphicsLinearLayout> |
24 |
#include <QGraphicsLinearLayout> |
24 |
#include <QPropertyAnimation> |
25 |
#include <QPropertyAnimation> |
25 |
#include <QTimer> |
26 |
#include <QTimer> |
Lines 29-37
Link Here
|
29 |
#include <X11/extensions/shape.h> |
30 |
#include <X11/extensions/shape.h> |
30 |
#endif |
31 |
#endif |
31 |
|
32 |
|
32 |
#include <KDebug> |
|
|
33 |
#include <KIdleTime> |
34 |
#include <KWindowSystem> |
33 |
#include <KWindowSystem> |
|
|
34 |
#include <KDebug> |
35 |
|
35 |
|
36 |
#include <Plasma/Containment> |
36 |
#include <Plasma/Containment> |
37 |
#include <Plasma/Corona> |
37 |
#include <Plasma/Corona> |
Lines 309-315
PanelView::PanelView(Plasma::Containment
Link Here
|
309 |
m_glowBar(0), |
309 |
m_glowBar(0), |
310 |
m_mousePollTimer(0), |
310 |
m_mousePollTimer(0), |
311 |
m_strutsTimer(new QTimer(this)), |
311 |
m_strutsTimer(new QTimer(this)), |
312 |
m_rehideAfterAutounhideTimer(new QTimer(this)), |
|
|
313 |
m_spacer(0), |
312 |
m_spacer(0), |
314 |
m_spacerIndex(-1), |
313 |
m_spacerIndex(-1), |
315 |
m_shadowWindow(0), |
314 |
m_shadowWindow(0), |
Lines 319-326
PanelView::PanelView(Plasma::Containment
Link Here
|
319 |
m_visibilityMode(NormalPanel), |
318 |
m_visibilityMode(NormalPanel), |
320 |
m_lastHorizontal(true), |
319 |
m_lastHorizontal(true), |
321 |
m_editing(false), |
320 |
m_editing(false), |
322 |
m_triggerEntered(false), |
321 |
m_triggerEntered(false) |
323 |
m_respectStatus(true) |
|
|
324 |
{ |
322 |
{ |
325 |
// KWin setup |
323 |
// KWin setup |
326 |
KWindowSystem::setOnAllDesktops(winId(), true); |
324 |
KWindowSystem::setOnAllDesktops(winId(), true); |
Lines 330-342
PanelView::PanelView(Plasma::Containment
Link Here
|
330 |
m_strutsTimer->setSingleShot(true); |
328 |
m_strutsTimer->setSingleShot(true); |
331 |
connect(m_strutsTimer, SIGNAL(timeout()), this, SLOT(updateStruts())); |
329 |
connect(m_strutsTimer, SIGNAL(timeout()), this, SLOT(updateStruts())); |
332 |
|
330 |
|
333 |
// this timer controls checks to re-hide a panel after it's been unhidden |
|
|
334 |
// for the user because, e.g., something is demanding attention |
335 |
m_rehideAfterAutounhideTimer->setSingleShot(true); |
336 |
connect(m_rehideAfterAutounhideTimer, SIGNAL(timeout()), this, SLOT(checkAutounhide())); |
337 |
|
338 |
// Graphics view setup |
331 |
// Graphics view setup |
339 |
setFrameStyle(QFrame::NoFrame); |
332 |
setFrameStyle(QFrame::NoFrame); |
|
|
333 |
//setAutoFillBackground(true); |
334 |
//setDragMode(QGraphicsView::RubberBandDrag); |
335 |
//setCacheMode(QGraphicsView::CacheBackground); |
340 |
setInteractive(true); |
336 |
setInteractive(true); |
341 |
setAcceptDrops(true); |
337 |
setAcceptDrops(true); |
342 |
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); |
338 |
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); |
Lines 356-375
PanelView::PanelView(Plasma::Containment
Link Here
|
356 |
|
352 |
|
357 |
const bool onScreen = panel->screen() < PlasmaApp::self()->corona()->numScreens(); |
353 |
const bool onScreen = panel->screen() < PlasmaApp::self()->corona()->numScreens(); |
358 |
const QRect screenRect = onScreen ? PlasmaApp::self()->corona()->screenGeometry(panel->screen()) : QRect(); |
354 |
const QRect screenRect = onScreen ? PlasmaApp::self()->corona()->screenGeometry(panel->screen()) : QRect(); |
359 |
const int sw = screenRect.width(); |
355 |
if (!onScreen) { |
360 |
const int sh = screenRect.height(); |
|
|
361 |
m_lastSeenSize = sizes.readEntry("lastsize", m_lastHorizontal ? sw : sh); |
362 |
|
363 |
if (onScreen) { |
364 |
const QString last = m_lastHorizontal ? "Horizontal" + QString::number(sw) : |
365 |
"Vertical" + QString::number(sh); |
366 |
if (sizes.hasGroup(last)) { |
367 |
KConfigGroup thisSize(&sizes, last); |
368 |
resize(thisSize.readEntry("size", m_lastHorizontal ? QSize(sw, 27) : QSize(27, sh))); |
369 |
} |
370 |
} else { |
371 |
resize(panel->size().toSize()); |
356 |
resize(panel->size().toSize()); |
372 |
} |
357 |
} |
|
|
358 |
m_lastSeenSize = sizes.readEntry("lastsize", m_lastHorizontal ? screenRect.width() : screenRect.height()); |
373 |
|
359 |
|
374 |
m_alignment = alignmentFilter((Qt::Alignment)viewConfig.readEntry("Alignment", (int)Qt::AlignLeft)); |
360 |
m_alignment = alignmentFilter((Qt::Alignment)viewConfig.readEntry("Alignment", (int)Qt::AlignLeft)); |
375 |
KConfigGroup sizeConfig(&viewConfig, (m_lastHorizontal ? "Horizontal" : "Vertical") + |
361 |
KConfigGroup sizeConfig(&viewConfig, (m_lastHorizontal ? "Horizontal" : "Vertical") + |
Lines 413-419
void PanelView::setContainment(Plasma::C
Link Here
|
413 |
disconnect(oldContainment); |
399 |
disconnect(oldContainment); |
414 |
} |
400 |
} |
415 |
|
401 |
|
416 |
connect(containment, SIGNAL(newStatus(Plasma::ItemStatus)), this, SLOT(statusUpdated(Plasma::ItemStatus))); |
402 |
connect(containment, SIGNAL(newStatus(Plasma::ItemStatus)), this, SLOT(setStatus(Plasma::ItemStatus))); |
417 |
connect(containment, SIGNAL(destroyed(QObject*)), this, SLOT(panelDeleted())); |
403 |
connect(containment, SIGNAL(destroyed(QObject*)), this, SLOT(panelDeleted())); |
418 |
connect(containment, SIGNAL(toolBoxToggled()), this, SLOT(togglePanelController())); |
404 |
connect(containment, SIGNAL(toolBoxToggled()), this, SLOT(togglePanelController())); |
419 |
connect(containment, SIGNAL(appletAdded(Plasma::Applet *, const QPointF &)), this, SLOT(appletAdded(Plasma::Applet *))); |
405 |
connect(containment, SIGNAL(appletAdded(Plasma::Applet *, const QPointF &)), this, SLOT(appletAdded(Plasma::Applet *))); |
Lines 436-441
void PanelView::setContainment(Plasma::C
Link Here
|
436 |
|
422 |
|
437 |
// ensure we aren't overlapping other panels |
423 |
// ensure we aren't overlapping other panels |
438 |
const QRect screenRect = PlasmaApp::self()->corona()->screenGeometry(containment->screen()); |
424 |
const QRect screenRect = PlasmaApp::self()->corona()->screenGeometry(containment->screen()); |
|
|
425 |
const QRegion availGeom = PlasmaApp::self()->corona()->availableScreenRegion(containment->screen()); |
426 |
const int w = containment->size().width(); |
427 |
const int h = containment->size().height(); |
428 |
const int length = containment->formFactor() == Plasma::Horizontal ? w : h; |
439 |
|
429 |
|
440 |
View::setContainment(containment); |
430 |
View::setContainment(containment); |
441 |
|
431 |
|
Lines 448-458
void PanelView::setContainment(Plasma::C
Link Here
|
448 |
|
438 |
|
449 |
updateStruts(); |
439 |
updateStruts(); |
450 |
checkShadow(); |
440 |
checkShadow(); |
451 |
|
|
|
452 |
// if we are an autohiding panel, then see if the status mandates we do something about it |
453 |
if (m_visibilityMode != NormalPanel && m_visibilityMode != WindowsGoBelow) { |
454 |
checkUnhide(containment->status()); |
455 |
} |
456 |
} |
441 |
} |
457 |
|
442 |
|
458 |
void PanelView::themeChanged() |
443 |
void PanelView::themeChanged() |
Lines 463-469
void PanelView::themeChanged()
Link Here
|
463 |
|
448 |
|
464 |
void PanelView::checkShadow() |
449 |
void PanelView::checkShadow() |
465 |
{ |
450 |
{ |
466 |
#ifndef Q_WS_WIN |
|
|
467 |
if (KWindowSystem::compositingActive() && containment()->property("shadowPath").isValid()) { |
451 |
if (KWindowSystem::compositingActive() && containment()->property("shadowPath").isValid()) { |
468 |
if (!m_shadowWindow) { |
452 |
if (!m_shadowWindow) { |
469 |
m_shadowWindow = new ShadowWindow(this); |
453 |
m_shadowWindow = new ShadowWindow(this); |
Lines 478-488
void PanelView::checkShadow()
Link Here
|
478 |
if (m_shadowWindow->isValid() && isVisible()) { |
462 |
if (m_shadowWindow->isValid() && isVisible()) { |
479 |
m_shadowWindow->show(); |
463 |
m_shadowWindow->show(); |
480 |
} |
464 |
} |
481 |
} else if (m_shadowWindow) { |
465 |
} else { |
482 |
m_shadowWindow->deleteLater(); |
466 |
if (m_shadowWindow) { |
483 |
m_shadowWindow = 0; |
467 |
m_shadowWindow->deleteLater(); |
|
|
468 |
m_shadowWindow = 0; |
469 |
} |
484 |
} |
470 |
} |
485 |
#endif |
|
|
486 |
} |
471 |
} |
487 |
|
472 |
|
488 |
void PanelView::setPanelDragPosition(const QPoint &point) |
473 |
void PanelView::setPanelDragPosition(const QPoint &point) |
Lines 709-714
void PanelView::updatePanelGeometry()
Link Here
|
709 |
geom.moveTopLeft(QPoint(screenGeom.center().x() - geom.width()/2 + 1 - geom.width()%2 + m_offset, screenGeom.top())); |
694 |
geom.moveTopLeft(QPoint(screenGeom.center().x() - geom.width()/2 + 1 - geom.width()%2 + m_offset, screenGeom.top())); |
710 |
} |
695 |
} |
711 |
|
696 |
|
|
|
697 |
//enable borders if needed |
698 |
//c->setGeometry(QRect(geom.left(), c->geometry().top(), geom.width(), geom.height())); |
712 |
break; |
699 |
break; |
713 |
|
700 |
|
714 |
case Plasma::LeftEdge: |
701 |
case Plasma::LeftEdge: |
Lines 720-725
void PanelView::updatePanelGeometry()
Link Here
|
720 |
geom.moveTopLeft(QPoint(screenGeom.left(), screenGeom.center().y() - geom.height()/2 + 1 - geom.height()%2 + m_offset)); |
707 |
geom.moveTopLeft(QPoint(screenGeom.left(), screenGeom.center().y() - geom.height()/2 + 1 - geom.height()%2 + m_offset)); |
721 |
} |
708 |
} |
722 |
|
709 |
|
|
|
710 |
//enable borders if needed |
711 |
//c->setGeometry(QRect(c->geometry().left(), geom.top(), geom.width(), geom.height())); |
723 |
break; |
712 |
break; |
724 |
|
713 |
|
725 |
case Plasma::RightEdge: |
714 |
case Plasma::RightEdge: |
Lines 731-736
void PanelView::updatePanelGeometry()
Link Here
|
731 |
geom.moveTopRight(QPoint(screenGeom.right(), screenGeom.center().y() - geom.height()/2 + 1 - geom.height()%2 + m_offset)); |
720 |
geom.moveTopRight(QPoint(screenGeom.right(), screenGeom.center().y() - geom.height()/2 + 1 - geom.height()%2 + m_offset)); |
732 |
} |
721 |
} |
733 |
|
722 |
|
|
|
723 |
//enable borders if needed |
724 |
//c->setGeometry(QRect(c->geometry().left(), geom.top(), geom.width(), geom.height())); |
734 |
break; |
725 |
break; |
735 |
|
726 |
|
736 |
case Plasma::BottomEdge: |
727 |
case Plasma::BottomEdge: |
Lines 743-748
void PanelView::updatePanelGeometry()
Link Here
|
743 |
geom.moveBottomLeft(QPoint(screenGeom.center().x() - geom.width()/2 + 1 - geom.width()%2 + m_offset, screenGeom.bottom())); |
734 |
geom.moveBottomLeft(QPoint(screenGeom.center().x() - geom.width()/2 + 1 - geom.width()%2 + m_offset, screenGeom.bottom())); |
744 |
} |
735 |
} |
745 |
|
736 |
|
|
|
737 |
//enable borders if needed |
738 |
//c->setGeometry(QRect(geom.left(), c->geometry().top(), geom.width(), geom.height())); |
746 |
break; |
739 |
break; |
747 |
} |
740 |
} |
748 |
|
741 |
|
Lines 818-824
void PanelView::pinchContainment(const Q
Link Here
|
818 |
KConfigGroup sizes = config(); |
811 |
KConfigGroup sizes = config(); |
819 |
sizes = KConfigGroup(&sizes, "Sizes"); |
812 |
sizes = KConfigGroup(&sizes, "Sizes"); |
820 |
|
813 |
|
821 |
if (m_lastHorizontal != horizontal || m_lastSeenSize != (horizontal ? sw : sh)) { |
814 |
if (m_lastHorizontal != horizontal || |
|
|
815 |
m_lastSeenSize != (horizontal ? sw : sh)) { |
822 |
// we're adjusting size. store the current size now |
816 |
// we're adjusting size. store the current size now |
823 |
KConfigGroup lastSize(&sizes, (m_lastHorizontal ? "Horizontal" : "Vertical") + |
817 |
KConfigGroup lastSize(&sizes, (m_lastHorizontal ? "Horizontal" : "Vertical") + |
824 |
QString::number(m_lastSeenSize)); |
818 |
QString::number(m_lastSeenSize)); |
Lines 1032-1054
void PanelView::togglePanelController()
Link Here
|
1032 |
} |
1026 |
} |
1033 |
} |
1027 |
} |
1034 |
|
1028 |
|
1035 |
if (m_panelController->isVisible()) { |
1029 |
if (!m_panelController->isVisible()) { |
1036 |
if (m_panelController->showingWidgetExplorer() || |
|
|
1037 |
m_panelController->showingActivityManager()) { |
1038 |
m_panelController->switchToController(); |
1039 |
m_panelController->move(m_panelController->positionForPanelGeometry(geometry())); |
1040 |
} else { |
1041 |
Plasma::WindowEffects::slideWindow(m_panelController, location()); |
1042 |
m_panelController->close(); |
1043 |
updateStruts(); |
1044 |
} |
1045 |
} else { |
1046 |
m_editing = true; |
1030 |
m_editing = true; |
1047 |
m_panelController->resize(m_panelController->sizeHint()); |
1031 |
m_panelController->resize(m_panelController->sizeHint()); |
1048 |
m_panelController->move(m_panelController->positionForPanelGeometry(geometry())); |
1032 |
m_panelController->move(m_panelController->positionForPanelGeometry(geometry())); |
1049 |
Plasma::WindowEffects::slideWindow(m_panelController, location()); |
1033 |
Plasma::WindowEffects::slideWindow(m_panelController, location()); |
1050 |
kDebug() << "showing panel controller!" << m_panelController->geometry(); |
1034 |
kDebug() << "showing panel controller!" << m_panelController->geometry(); |
1051 |
m_panelController->show(); |
1035 |
m_panelController->show(); |
|
|
1036 |
} else { |
1037 |
Plasma::WindowEffects::slideWindow(m_panelController, location()); |
1038 |
m_panelController->close(); |
1039 |
updateStruts(); |
1052 |
} |
1040 |
} |
1053 |
} |
1041 |
} |
1054 |
|
1042 |
|
Lines 1438-1444
void PanelView::unhide(bool destroyTrigg
Link Here
|
1438 |
} |
1426 |
} |
1439 |
} |
1427 |
} |
1440 |
|
1428 |
|
1441 |
void PanelView::statusUpdated(Plasma::ItemStatus newStatus) |
1429 |
void PanelView::setStatus(Plasma::ItemStatus newStatus) |
1442 |
{ |
1430 |
{ |
1443 |
if (newStatus == Plasma::AcceptingInputStatus) { |
1431 |
if (newStatus == Plasma::AcceptingInputStatus) { |
1444 |
KWindowSystem::forceActiveWindow(winId()); |
1432 |
KWindowSystem::forceActiveWindow(winId()); |
Lines 1447-1496
void PanelView::statusUpdated(Plasma::It
Link Here
|
1447 |
|
1435 |
|
1448 |
void PanelView::checkUnhide(Plasma::ItemStatus newStatus) |
1436 |
void PanelView::checkUnhide(Plasma::ItemStatus newStatus) |
1449 |
{ |
1437 |
{ |
1450 |
//kDebug() << "================= got a status: " << newStatus << Plasma::ActiveStatus; |
1438 |
//kDebug() << "================= got a new status: " << newStatus << Plasma::ActiveStatus; |
1451 |
m_respectStatus = true; |
|
|
1452 |
|
1453 |
if (newStatus > Plasma::ActiveStatus) { |
1439 |
if (newStatus > Plasma::ActiveStatus) { |
1454 |
unhide(); |
1440 |
unhide(); |
1455 |
if (newStatus == Plasma::NeedsAttentionStatus) { |
|
|
1456 |
//kDebug() << "starting the timer!"; |
1457 |
// start our rehide timer, so that the panel doesn't stay up and stuck forever and a day |
1458 |
m_rehideAfterAutounhideTimer->start(AUTOUNHIDE_CHECK_DELAY); |
1459 |
} |
1460 |
} else { |
1441 |
} else { |
1461 |
//kDebug() << "new status, just autohiding"; |
|
|
1462 |
startAutoHide(); |
1442 |
startAutoHide(); |
1463 |
} |
1443 |
} |
1464 |
} |
1444 |
} |
1465 |
|
1445 |
|
1466 |
void PanelView::checkAutounhide() |
|
|
1467 |
{ |
1468 |
//kDebug() << "***************************" << KIdleTime::instance()->idleTime(); |
1469 |
if (KIdleTime::instance()->idleTime() >= AUTOUNHIDE_CHECK_DELAY) { |
1470 |
// the user is idle .. let's not hige the panel on them quite yet, but rather given them a |
1471 |
// chance to see this thing! |
1472 |
connect(KIdleTime::instance(), SIGNAL(resumingFromIdle()), this, SLOT(checkAutounhide()), |
1473 |
Qt::UniqueConnection); |
1474 |
KIdleTime::instance()->catchNextResumeEvent(); |
1475 |
//kDebug() << "exit 1 ***************************"; |
1476 |
return; |
1477 |
} |
1478 |
|
1479 |
m_respectStatus = false; |
1480 |
//kDebug() << "in to check ... who's resonsible?" << sender() << KIdleTime::instance(); |
1481 |
if (sender() == KIdleTime::instance()) { |
1482 |
//kDebug() << "doing a 2s wait"; |
1483 |
QTimer::singleShot(2000, this, SLOT(startAutoHide())); |
1484 |
} else { |
1485 |
//kDebug() << "just starting autohide!"; |
1486 |
startAutoHide(); |
1487 |
} |
1488 |
|
1489 |
// this line must come after the check on sender() as it *clears* that value! |
1490 |
disconnect(KIdleTime::instance(), SIGNAL(resumingFromIdle()), this, SLOT(checkAutounhide())); |
1491 |
//kDebug() << "exit 0 ***************************"; |
1492 |
} |
1493 |
|
1494 |
void PanelView::unhide() |
1446 |
void PanelView::unhide() |
1495 |
{ |
1447 |
{ |
1496 |
unhide(true); |
1448 |
unhide(true); |
Lines 1503-1533
void PanelView::resetTriggerEnteredSuppr
Link Here
|
1503 |
|
1455 |
|
1504 |
void PanelView::startAutoHide() |
1456 |
void PanelView::startAutoHide() |
1505 |
{ |
1457 |
{ |
1506 |
/* |
1458 |
//TODO: is 5s too long? not long enough? |
1507 |
kDebug() << m_editing << (containment() ? containment()->status() : 0) << Plasma::ActiveStatus |
1459 |
if (m_editing || (containment() && containment()->status() > Plasma::ActiveStatus) || |
1508 |
<< geometry().adjusted(-10, -10, 10, 10).contains(QCursor::pos()) << hasPopup(); |
1460 |
geometry().adjusted(-10, -10, 10, 10).contains(QCursor::pos()) || |
1509 |
if (containment() && containment()->status() > Plasma::ActiveStatus) { |
1461 |
hasPopup()) { |
1510 |
foreach (Plasma::Applet *applet, containment()->applets()) { |
|
|
1511 |
kDebug() << " " << applet->name() << applet->status(); |
1512 |
} |
1513 |
} |
1514 |
*/ |
1515 |
|
1516 |
|
1517 |
if (m_editing || (m_respectStatus && (containment() && containment()->status() > Plasma::ActiveStatus))) { |
1518 |
if (m_mousePollTimer) { |
1519 |
m_mousePollTimer->stop(); |
1520 |
disconnect(m_mousePollTimer, SIGNAL(timeout()), this, SLOT(startAutoHide())); |
1521 |
} |
1522 |
|
1523 |
return; |
1524 |
} |
1525 |
|
1526 |
// since we've gotten this far, we don't need to worry about rehiding-after-auto-unhide, so just |
1527 |
// stop the timer |
1528 |
m_rehideAfterAutounhideTimer->stop(); |
1529 |
|
1530 |
if (geometry().adjusted(-10, -10, 10, 10).contains(QCursor::pos()) || hasPopup()) { |
1531 |
if (!m_mousePollTimer) { |
1462 |
if (!m_mousePollTimer) { |
1532 |
leaveEvent(0); |
1463 |
leaveEvent(0); |
1533 |
} |
1464 |
} |