Fix dock position error on init and dock-mode changed

This commit is contained in:
杨万青 2015-07-21 19:33:08 +08:00
parent cb1a3d06a1
commit b49362f4b5
6 changed files with 42 additions and 41 deletions

View File

@ -24,12 +24,10 @@ void AppManager::updateEntries()
void AppManager::slotEntryAdded(const QDBusObjectPath &path)
{
qWarning() << "entry add:" << path.path();
DBusEntryProxyer *entryProxyer = new DBusEntryProxyer(path.path());
if (entryProxyer->isValid())
if (entryProxyer->isValid() && entryProxyer->type() == "App" && entryProxyer->data().value("title") != "dde-dock")
{
if (entryProxyer->data().value("title") == "dde-dock")
return;
qWarning() << "entry add:" << path.path();
AppItem *item = new AppItem();
item->setEntryProxyer(entryProxyer);
emit entryAdded(item);

View File

@ -18,19 +18,17 @@ Panel::Panel(QWidget *parent)
leftLayout->setSpacing(dockCons->getAppItemSpacing());
leftLayout->resize(this->width() - rightLayout->width(),dockCons->getItemHeight());
leftLayout->move(0,1);
connect(leftLayout,SIGNAL(dragStarted()),this,SLOT(slotDragStarted()));
connect(leftLayout,SIGNAL(itemDropped()),this,SLOT(slotItemDropped()));
connect(leftLayout, SIGNAL(contentsWidthChange()),this, SLOT(slotLayoutContentsWidthChanged()));
connect(rightLayout, SIGNAL(contentsWidthChange()), this, SLOT(slotLayoutContentsWidthChanged()));
connect(leftLayout, &DockLayout::dragStarted, this, &Panel::slotDragStarted);
connect(leftLayout, &DockLayout::itemDropped, this, &Panel::slotItemDropped);
connect(leftLayout, &DockLayout::contentsWidthChange, this, &Panel::slotLayoutContentsWidthChanged);
connect(rightLayout, &DockLayout::contentsWidthChange, this, &Panel::slotLayoutContentsWidthChanged);
connect(dockCons, SIGNAL(dockModeChanged(Dock::DockMode,Dock::DockMode)),
this, SLOT(slotDockModeChanged(Dock::DockMode,Dock::DockMode)));
connect(dockCons, &DockModeData::dockModeChanged, this, &Panel::changeDockMode);
DockPluginManager *pluginManager = new DockPluginManager(this);
connect(DockModeData::instance(), &DockModeData::dockModeChanged,
pluginManager, &DockPluginManager::onDockModeChanged);
connect(dockCons, &DockModeData::dockModeChanged, pluginManager, &DockPluginManager::onDockModeChanged);
connect(pluginManager, &DockPluginManager::itemAdded, [=](AbstractDockItem* item) {
rightLayout->addItem(item);
});
@ -46,6 +44,11 @@ Panel::Panel(QWidget *parent)
initAppManager();
initHSManager();
initState();
//TODO ,move panel to center on fashion mode
QTimer::singleShot(10, [=](){
reanchorsLayout(dockCons->getDockMode());
});
}
void Panel::showScreenMask()
@ -89,7 +92,7 @@ void Panel::slotExitedMask()
// leftLayout->relayout();
}
void Panel::slotDockModeChanged(Dock::DockMode newMode, Dock::DockMode oldMode)
void Panel::changeDockMode(Dock::DockMode newMode, Dock::DockMode oldMode)
{
leftLayout->relayout();
rightLayout->relayout();
@ -143,8 +146,8 @@ void Panel::reanchorsLayout(Dock::DockMode mode)
rightLayout->resize(rightLayout->getContentsWidth(),dockCons->getItemHeight());
rightLayout->move(leftLayout->width() - dockCons->getAppItemSpacing(),1);
this->resize(leftLayout->getContentsWidth() + rightLayout->getContentsWidth(),dockCons->getDockHeight());
this->move((parentWidget->width() - leftLayout->getContentsWidth() - rightLayout->getContentsWidth()) / 2,0);
this->setFixedSize(leftLayout->getContentsWidth() + rightLayout->getContentsWidth(),dockCons->getDockHeight());
this->move((parentWidget->width() - width()) / 2,0);
}
else
{
@ -154,7 +157,7 @@ void Panel::reanchorsLayout(Dock::DockMode mode)
leftLayout->resize(parentWidget->width() - rightLayout->width() ,dockCons->getItemHeight());
this->resize(leftLayout->width() + rightLayout->width(),dockCons->getDockHeight());
this->setFixedSize(leftLayout->width() + rightLayout->width(),dockCons->getDockHeight());
this->move((parentWidget->width() - leftLayout->width() - rightLayout->width()) / 2,0);
}
}

View File

@ -4,6 +4,7 @@
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QTimer>
#include <QDebug>
#include "DBus/dbushidestatemanager.h"
#include "Controller/dockmodedata.h"
@ -37,7 +38,6 @@ signals:
void panelHasHidden();
private slots:
void slotDockModeChanged(Dock::DockMode newMode,Dock::DockMode oldMode);
void slotLayoutContentsWidthChanged();
void slotAddAppItem(AppItem *item);
@ -48,6 +48,7 @@ protected:
void mouseReleaseEvent(QMouseEvent *event);
private:
void changeDockMode(Dock::DockMode newMode,Dock::DockMode oldMode);
void reanchorsLayout(Dock::DockMode mode);
void showMenu();

View File

@ -3,8 +3,6 @@
#include <QDebug>
#include "mainwidget.h"
#include "xcb_misc.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
@ -24,14 +22,5 @@ int main(int argc, char *argv[])
MainWidget w;
w.show();
XcbMisc::instance()->set_window_type(w.winId(),
XcbMisc::Dock);
XcbMisc::instance()->set_strut_partial(w.winId(),
XcbMisc::OrientationBottom,
w.height(),
w.x(),
w.x() + w.width());
return a.exec();
}

View File

@ -1,41 +1,50 @@
#include "mainwidget.h"
#include "xcb_misc.h"
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
QRect rec = QApplication::desktop()->screenGeometry();
this->resize(rec.width(),DockModeData::instance()->getDockHeight());
this->setFixedSize(rec.width(),m_dmd->getDockHeight());
this->move(0, rec.height() - this->height());
mainPanel = new Panel(this);
mainPanel->resize(this->width(),this->height());
mainPanel->move(0,0);
connect(mainPanel,&Panel::startShow,this,&MainWidget::showDock);
connect(mainPanel,&Panel::panelHasHidden,this,&MainWidget::hideDock);
this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
this->move(0, rec.height() - this->height());
connect(DockModeData::instance(), SIGNAL(dockModeChanged(Dock::DockMode,Dock::DockMode)),
this, SLOT(slotDockModeChanged(Dock::DockMode,Dock::DockMode)));
connect(m_dmd, &DockModeData::dockModeChanged, this, &MainWidget::changeDockMode);
//For init
changeDockMode(m_dmd->getDockMode(), m_dmd->getDockMode());
}
void MainWidget::slotDockModeChanged(Dock::DockMode newMode, Dock::DockMode oldMode)
void MainWidget::changeDockMode(Dock::DockMode newMode, Dock::DockMode oldMode)
{
if (hasHidden)
return;
QRect rec = QApplication::desktop()->screenGeometry();
this->resize(rec.width(),DockModeData::instance()->getDockHeight());
this->setFixedSize(rec.width(),m_dmd->getDockHeight());
this->move(0, rec.height() - this->height());
// mainPanel->resize(this->width(),this->height());
// mainPanel->move(0,0);
XcbMisc::instance()->set_window_type(winId(),
XcbMisc::Dock);
XcbMisc::instance()->set_strut_partial(winId(),
XcbMisc::OrientationBottom,
height(),
x(),
x() + width());
}
void MainWidget::showDock()
{
hasHidden = false;
QRect rec = QApplication::desktop()->screenGeometry();
this->resize(rec.width(),DockModeData::instance()->getDockHeight());
this->setFixedSize(rec.width(),m_dmd->getDockHeight());
}
void MainWidget::hideDock()
@ -43,7 +52,7 @@ void MainWidget::hideDock()
hasHidden = true;
QRect rec = QApplication::desktop()->screenGeometry();
//set height with 0 mean window is hidden,Windows manager will handle it's showing animation
this->resize(rec.width(),1);
this->setFixedSize(rec.width(),1);
}
MainWidget::~MainWidget()

View File

@ -21,15 +21,16 @@ public:
~MainWidget();
public slots:
void slotDockModeChanged(Dock::DockMode newMode,Dock::DockMode oldMode);
private:
void showDock();
void hideDock();
void changeDockMode(Dock::DockMode newMode,Dock::DockMode oldMode);
private:
Panel *mainPanel = NULL;
bool hasHidden = false;
DockModeData * m_dmd = DockModeData::instance();
};
#endif // MAINWIDGET_H