mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
Fix dock position error on init and dock-mode changed
This commit is contained in:
parent
cb1a3d06a1
commit
b49362f4b5
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user