fix: 任务栏开机几率无法显示

startdde启动过快导致任务栏还没启动时callshow被调用,调用失败导致任务栏不显示。延迟RegisterDdeSession解决

Log: 解决任务栏开机几率无法显示问题
Bug: https://pms.uniontech.com/zentao/bug-view-52917.html
Change-Id: I19fc19607160e66d294dbf63211fe3da84f7b890
This commit is contained in:
liuxing 2020-11-02 12:12:26 +08:00 committed by Fanpengcheng
parent 52b13f8b19
commit 306f321307
3 changed files with 29 additions and 26 deletions

View File

@ -36,7 +36,6 @@
#include <DApplication> #include <DApplication>
#include <DLog> #include <DLog>
#include <DDBusSender>
#include <DGuiApplicationHelper> #include <DGuiApplicationHelper>
#include <unistd.h> #include <unistd.h>
@ -60,27 +59,6 @@ const QString g_cfgPath = QStandardPaths::standardLocations(QStandardPaths::Conf
using namespace std; using namespace std;
// let startdde know that we've already started.
void RegisterDdeSession()
{
QString envName("DDE_SESSION_PROCESS_COOKIE_ID");
QByteArray cookie = qgetenv(envName.toUtf8().data());
qunsetenv(envName.toUtf8().data());
if (!cookie.isEmpty()) {
QDBusPendingReply<bool> r = DDBusSender()
.interface("com.deepin.SessionManager")
.path("/com/deepin/SessionManager")
.service("com.deepin.SessionManager")
.method("Register")
.arg(QString(cookie))
.call();
qDebug() << Q_FUNC_INFO << r.value();
}
}
bool IsSaveMode() bool IsSaveMode()
{ {
QSettings settings(g_cfgPath, QSettings::IniFormat); QSettings settings(g_cfgPath, QSettings::IniFormat);
@ -250,9 +228,6 @@ int main(int argc, char *argv[])
return -1; return -1;
} }
qDebug() << "\n\ndde-dock startup";
RegisterDdeSession();
#ifndef QT_DEBUG #ifndef QT_DEBUG
QDir::setCurrent(QApplication::applicationDirPath()); QDir::setCurrent(QApplication::applicationDirPath());
#endif #endif

View File

@ -30,6 +30,7 @@
#include <DPlatformWindowHandle> #include <DPlatformWindowHandle>
#include <DSysInfo> #include <DSysInfo>
#include <DPlatformTheme> #include <DPlatformTheme>
#include <DDBusSender>
#include <QDebug> #include <QDebug>
#include <QEvent> #include <QEvent>
@ -75,6 +76,27 @@ const QPoint scaledPos(const QPoint &rawXPos)
: rawXPos; : rawXPos;
} }
// let startdde know that we've already started.
void RegisterDdeSession()
{
QString envName("DDE_SESSION_PROCESS_COOKIE_ID");
QByteArray cookie = qgetenv(envName.toUtf8().data());
qunsetenv(envName.toUtf8().data());
if (!cookie.isEmpty()) {
QDBusPendingReply<bool> r = DDBusSender()
.interface("com.deepin.SessionManager")
.path("/com/deepin/SessionManager")
.service("com.deepin.SessionManager")
.method("Register")
.arg(QString(cookie))
.call();
qDebug() << Q_FUNC_INFO << r.value();
}
}
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: DBlurEffectWidget(parent) : DBlurEffectWidget(parent)
, m_mainPanel(new MainPanelControl(this)) , m_mainPanel(new MainPanelControl(this))
@ -157,6 +179,12 @@ void MainWindow::callShow()
qApp->setProperty("CANSHOW", true); qApp->setProperty("CANSHOW", true);
launch(); launch();
// 预留200ms提供给窗口初始化再通知startdde不影响启动速度
QTimer::singleShot(200, this, []{
qDebug() << "\n\ndde-dock startup RegisterDdeSession";
RegisterDdeSession();
});
} }
void MainWindow::showEvent(QShowEvent *e) void MainWindow::showEvent(QShowEvent *e)

View File

@ -234,7 +234,7 @@ protected:
/// \brief m_proxyInter /// \brief m_proxyInter
/// NEVER delete this object. /// NEVER delete this object.
/// ///
PluginProxyInterface *m_proxyInter; PluginProxyInterface *m_proxyInter = nullptr;
}; };
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE