diff --git a/CMakeLists.txt b/CMakeLists.txt index 572b0c9..6855c11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,92 +1,91 @@ cmake_minimum_required(VERSION 3.5) set(PIM_VERSION "5.12.40") project(KontactInterface VERSION ${PIM_VERSION}) # ECM setup set(KF5_MIN_VERSION "5.63.0") find_package(ECM ${KF5_MIN_VERSION} CONFIG REQUIRED) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) include(KDEInstallDirs) include(KDECMakeSettings) include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) include(GenerateExportHeader) include(ECMGenerateHeaders) include(ECMGeneratePriFile) include(ECMSetupVersion) include(FeatureSummary) include(ECMQtDeclareLoggingCategory) add_definitions(-DTRANSLATION_DOMAIN=\"kontactinterfaces5\") set(KONTACTINTERFACE_LIB_VERSION ${PIM_VERSION}) set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5KontactInterface") ecm_setup_version(PROJECT VARIABLE_PREFIX KONTACTINTERFACE VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kontactinterface_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5KontactInterfaceConfigVersion.cmake" SOVERSION 5 ) ########### Find packages ########### find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS CoreAddons Parts WindowSystem I18n XmlGui - IconThemes ) if (NOT APPLE) find_package(X11) endif() set(KONTACTINTERFACE_HAVE_X11 ${X11_FOUND}) configure_file(config-kontactinterface.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kontactinterface.h ) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/KF5KontactInterfaceConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KF5KontactInterfaceConfig.cmake" INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} ) ########### Install Files ########### install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5KontactInterfaceConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/KF5KontactInterfaceConfigVersion.cmake" DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kontactinterface_version.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5} COMPONENT Devel ) install(EXPORT KF5KontactInterfaceTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5KontactInterfaceTargets.cmake NAMESPACE KF5::) if (EXISTS "${CMAKE_SOURCE_DIR}/.git") add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x060000) endif() add_definitions(-DQT_NO_FOREACH) add_subdirectory(src) install(FILES kontactinterface.renamecategories kontactinterface.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d41c388..8ac012d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,72 +1,71 @@ set(kontactinterface_LIB_SRCS core.cpp plugin.cpp summary.cpp processes.cpp uniqueapphandler.cpp pimuniqueapplication.cpp) ecm_qt_declare_logging_category(kontactinterface_LIB_SRCS HEADER kontactinterface_debug.h IDENTIFIER KONTACTINTERFACE_LOG CATEGORY_NAME org.kde.pim.kontactinterface) add_library(KF5KontactInterface ${kontactinterface_LIB_SRCS}) generate_export_header(KF5KontactInterface BASE_NAME kontactinterface) add_library(KF5::KontactInterface ALIAS KF5KontactInterface) target_include_directories(KF5KontactInterface INTERFACE "$") target_include_directories(KF5KontactInterface PUBLIC "$") target_link_libraries(KF5KontactInterface PUBLIC KF5::CoreAddons KF5::Parts KF5::XmlGui PRIVATE KF5::WindowSystem KF5::I18n - KF5::IconThemes ) set_target_properties(KF5KontactInterface PROPERTIES VERSION ${KONTACTINTERFACE_VERSION_STRING} SOVERSION ${KONTACTINTERFACE_SOVERSION} EXPORT_NAME KontactInterface ) install(TARGETS KF5KontactInterface EXPORT KF5KontactInterfaceTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) ########### install files ############### ecm_generate_headers(KontactInterface_CamelCase_HEADERS HEADER_NAMES Core PimUniqueApplication Plugin Summary UniqueAppHandler Processes PREFIX KontactInterface REQUIRED_HEADERS KontactInterface_HEADERS ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kontactinterface_export.h ${KontactInterface_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KontactInterface/kontactinterface COMPONENT Devel ) install(FILES ${KontactInterface_CamelCase_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KontactInterface/KontactInterface/ COMPONENT Devel ) install(FILES kontactplugin.desktop DESTINATION ${KDE_INSTALL_KSERVICETYPES5DIR}) ecm_generate_pri_file(BASE_NAME KontactInterface LIB_NAME KF5KontactInterface DEPS "Parts CoreAddons XmlGui" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KontactInterface) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) diff --git a/src/summary.cpp b/src/summary.cpp index 0f103eb..f4b7fa9 100644 --- a/src/summary.cpp +++ b/src/summary.cpp @@ -1,170 +1,169 @@ /* This file is part of the KDE Kontact Plugin Interface Library. Copyright (c) 2003 Cornelius Schumacher Copyright (c) 2003 Daniel Molkentin This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "summary.h" #include #include #include #include #include #include #include #include #include #include #include - -#include +#include #include using namespace KontactInterface; //@cond PRIVATE namespace KontactInterface { class SummaryMimeData : public QMimeData { Q_OBJECT public: bool hasFormat(const QString &format) const override { return format == QLatin1String("application/x-kontact-summary"); } }; } //@endcond //@cond PRIVATE class Q_DECL_HIDDEN Summary::Private { public: QPoint mDragStartPoint; }; //@endcond Summary::Summary(QWidget *parent) : QWidget(parent), d(new Private) { setFont(QFontDatabase::systemFont(QFontDatabase::GeneralFont)); setAcceptDrops(true); } Summary::~Summary() { delete d; } int Summary::summaryHeight() const { return 1; } QWidget *Summary::createHeader(QWidget *parent, const QString &iconname, const QString &heading) { QWidget *box = new QWidget(parent); QHBoxLayout *hbox = new QHBoxLayout; hbox->setContentsMargins(0, 0, 0, 0); hbox->setSpacing(0); box->setLayout(hbox); box->setAutoFillBackground(true); QIcon icon = QIcon::fromTheme(iconname); QLabel *label = new QLabel(box); hbox->addWidget(label); - label->setPixmap(icon.pixmap(IconSize(KIconLoader::Toolbar), IconSize(KIconLoader::Toolbar))); + label->setPixmap(icon.pixmap(style()->pixelMetric(QStyle::PM_ToolBarIconSize))); label->setFixedSize(label->sizeHint()); label->setAcceptDrops(true); label = new QLabel(heading, box); hbox->addWidget(label); label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); box->setMaximumHeight(box->minimumSizeHint().height()); return box; } QStringList Summary::configModules() const { return QStringList(); } void Summary::configChanged() { } void Summary::updateSummary(bool force) { Q_UNUSED(force); } void Summary::mousePressEvent(QMouseEvent *event) { d->mDragStartPoint = event->pos(); QWidget::mousePressEvent(event); } void Summary::mouseMoveEvent(QMouseEvent *event) { if ((event->buttons() & Qt::LeftButton) && (event->pos() - d->mDragStartPoint).manhattanLength() > 4) { QDrag *drag = new QDrag(this); drag->setMimeData(new SummaryMimeData()); drag->setObjectName(QStringLiteral("SummaryWidgetDrag")); QPixmap pm = grab(); if (pm.width() > 300) { pm = QPixmap::fromImage( pm.toImage().scaled(300, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation)); } QPainter painter; painter.begin(&pm); painter.setPen(QPalette::AlternateBase); painter.drawRect(0, 0, pm.width(), pm.height()); painter.end(); drag->setPixmap(pm); drag->exec(Qt::MoveAction); } else { QWidget::mouseMoveEvent(event); } } void Summary::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasFormat(QStringLiteral("application/x-kontact-summary"))) { event->acceptProposedAction(); } } void Summary::dropEvent(QDropEvent *event) { const int alignment = (event->pos().y() < (height() / 2) ? Qt::AlignTop : Qt::AlignBottom); emit summaryWidgetDropped(this, event->source(), alignment); } #include