Как мне предотвратить совместное использование моих собственных анимированных обоев KDE?

Недавно я пытался написать плагины для анимированных обоев для KDE4. Когда я переключаюсь между ними, анимации перемешиваются. То есть предыдущая анимация не останавливается, а предыдущие и текущие кадры смешиваются вместе. Я встраиваю кадры в каждую программу как ресурсы изображений. Затем я пишу код, подобный следующему для каждого обоев. Может кто-нибудь сказать мне, что мне не хватает (или это просто ошибка KDE)?

dancingcoffee.h

#ifndef DANCINGCOFFEE_H
#define DANCINGCOFFEE_H

#include <Plasma/Wallpaper>
#include <QPainter>
#include <QTimer>

class DancingCoffee : public Plasma::Wallpaper
{
Q_OBJECT
public:
DancingCoffee(QObject *parent, const QVariantList& args);
void paint(QPainter *painter, const QRectF &exposedRect);

private slots:
void updateBackground();

private:
const int m_frames;
const int m_interval;

int m_frame_number;
QTimer m_timer;
};

#endif // DANCINGCOFFEE_H

dancingcoffee.cpp

#include "dancingcoffee.h"#include <QImage>

K_EXPORT_PLASMA_WALLPAPER(coffee, DancingCoffee)

DancingCoffee::DancingCoffee(QObject *parent, const QVariantList &args) :
Plasma::Wallpaper(parent, args),
m_frames(2),
m_interval(1000 / m_frames)
{
m_frame_number = 0;

m_timer.setSingleShot(true);
connect(&m_timer, SIGNAL(timeout()), this, SLOT(updateBackground()));
m_timer.start(m_interval);
}

void DancingCoffee::paint(QPainter *painter, const QRectF &exposedRect)
{
QString name = QString(":/images/frame-%1.png").arg(m_frame_number);
QImage image(name);
painter->drawImage(exposedRect, image);
}

void DancingCoffee::updateBackground()
{
++m_frame_number;
m_frame_number %= m_frames;
m_timer.start(m_interval);
emit update(boundingRect());
}

CMakeLists.txt

set(CMAKE_INSTALL_PREFIX /usr)

project(plasma-wallpaper-coffee)
cmake_minimum_required(VERSION 2.8)

find_package(KDE4 REQUIRED)
find_package(KDE4Workspace REQUIRED)
include(KDE4Defaults)

add_definitions(${KDE4_DEFINITIONS})
include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES})

set(TARGET plasma_wallpaper_coffee)
set(SRC_LIST dancingcoffee.cpp)
qt4_add_resources(RCC_LIST dancingcoffee.qrc)

kde4_add_plugin(${TARGET} ${SRC_LIST} ${RCC_LIST})
target_link_libraries(${TARGET} ${KDE4_PLASMA_LIBS})

install(TARGETS ${TARGET} DESTINATION ${PLUGIN_INSTALL_DIR})
install(FILES plasma-wallpaper-coffee.desktop DESTINATION ${SERVICES_INSTALL_DIR})

плазменно-обои-coffee.desktop

[Desktop Entry]
Name=Coffee
Type=Service
Icon=image-jpeg
ServiceTypes=Plasma/Wallpaper

X-KDE-Library=plasma_wallpaper_coffee
X-KDE-PluginInfo-Author=Chris French
[email protected]
X-KDE-PluginInfo-Name=coffee
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true

И вуаля! Анимированные обои на моем рабочем столе. Но обои не очень хорошо играют вместе. Я должен убить рабочий стол и перезапустить его, когда я переключаю обои, а иногда это даже не работает. Иногда мне приходится делать жесткую перезагрузку. Это боль для меня и неприемлемо, если я когда-либо распространю обои.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]