/* * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see #include #include #include #include #include #include #include #include "utility.h" #include "file-utils.h" #include #include #include "ukuistylehelper/ukuistylehelper.h" #include "windowmanager/windowmanager.h" #define UKUI_SERVICE "org.gnome.SessionManager" #define UKUI_PATH "/org/gnome/SessionManager" #define UKUI_INTERFACE "org.gnome.SessionManager" #include int main(int argc, char *argv[]) { initUkuiLog4qt("ukui-menu"); g_projectCodeName = KDKGetPrjCodeName().c_str(); g_subProjectCodeName = KDKGetOSRelease("SUB_PROJECT_CODENAME").c_str(); qRegisterMetaType>("QVector"); #if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); #endif #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); #endif QtSingleApplication app("ukui-menu", argc, argv); app.setQuitOnLastWindowClosed(false); g_platform = QGuiApplication::platformName(); if (app.isRunning()) { app.sendMessage("raise_window_noop"); return EXIT_SUCCESS; } QTranslator translator; if (translator.load(QLocale(), "ukui-menu", "_", QM_FILES_INSTALL_PATH)) { app.installTranslator(&translator); } else { myDebug() << "Load translations file" << QLocale() << "failed!"; } if (!g_projectCodeName.contains("V10SP1-edu")) { FileUtils::loadHanziTable(":/src/BackProcess/Search/pinyinWithoutTone.txt"); MainWindow w; app.setActivationWindow(&w); w.show(); w.raise(); if (Style::m_panelPosition == 0) { if (g_platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) { kdk::WindowManager::setGeometry(w.windowHandle(),QRect(Style::m_primaryScreenX + 4, Style::m_primaryScreenY + Style::m_availableScreenHeight - Style::minh - 3, Style::minw, Style::minh)); } else { w.setGeometry(QRect(Style::m_primaryScreenX + 4, Style::m_primaryScreenY + Style::m_availableScreenHeight - Style::minh - 3, Style::minw, Style::minh)); } } else if (Style::m_panelPosition == 1) { if (g_platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) { kdk::WindowManager::setGeometry(w.windowHandle(),QRect(Style::m_primaryScreenX + 4, Style::m_primaryScreenY + 4, Style::minw, Style::minh)); } else { w.setGeometry(QRect(Style::m_primaryScreenX + 4, Style::m_primaryScreenY + 4, Style::minw, Style::minh)); } } else if (Style::m_panelPosition == 2) { if (g_platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) { kdk::WindowManager::setGeometry(w.windowHandle(), QRect(Style::m_primaryScreenX + 4, Style::m_primaryScreenY + 4, Style::minw, Style::minh)); } else { w.setGeometry(QRect(Style::m_primaryScreenX + 4, Style::m_primaryScreenY + 4, Style::minw, Style::minh)); } } else { if (g_platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) { kdk::WindowManager::setGeometry(w.windowHandle(), QRect(Style::m_primaryScreenX + Style::m_availableScreenWidth - Style::minw - 4, Style::m_primaryScreenY + 4, Style::minw, Style::minh)); } else { w.setGeometry(QRect(Style::m_primaryScreenX + Style::m_availableScreenWidth - Style::minw - 4, Style::m_primaryScreenY + 4, Style::minw, Style::minh)); } } w.update(); w.activateWindow(); w.hide(); return app.exec(); } else { TabletWindow w; app.setActivationWindow(&w); centerToScreen(&w); w.setAttribute(Qt::WA_TranslucentBackground, true); w.setAttribute(Qt::WA_X11NetWmWindowTypeDesktop, false); w.setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint); w.raise(); w.activateWindow(); //拉起后通知session QDBusInterface interface(UKUI_SERVICE, UKUI_PATH, UKUI_INTERFACE, QDBusConnection::sessionBus()); interface.call("startupfinished", "ukui-menu", "finish"); return app.exec(); } }