собираем kde4-window-dekorator для компиза (мозговой штурм)

Модератор: Модераторы разделов

Аватара пользователя
Anguis
Сообщения: 212
ОС: Manjaro 17

собираем kde4-window-dekorator для компиза

Сообщение Anguis »

Итак, в ветке Mandriva 2010.1 убрали window-dekorator-kde4 компиза. Мне посоветовали пересобрать пакет.
Попытка моя неудалась - вот лог :

Код: Выделить всё

make
g++ -DHAVE_CONFIG_H -I. -I../.. -I../../include -I../../include -DQT_SHARED -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/lib/qt4/include -I/usr/lib/qt4/include/QtCore -I/usr/lib/qt4/include/QtGui -I/usr/lib/qt4/include/QtDBus -I/usr/lib/qt4/include/QtXml   -I/usr/include/    -O2 -g -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic -fasynchronous-unwind-tables -Wall -D_FORTIFY_SOURCE=2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.cpp
mv -f .deps/main.Tpo .deps/main.Po
g++ -DHAVE_CONFIG_H -I. -I../.. -I../../include -I../../include -DQT_SHARED -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/lib/qt4/include -I/usr/lib/qt4/include/QtCore -I/usr/lib/qt4/include/QtGui -I/usr/lib/qt4/include/QtDBus -I/usr/lib/qt4/include/QtXml   -I/usr/include/    -O2 -g -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic -fasynchronous-unwind-tables -Wall -D_FORTIFY_SOURCE=2 -MT decorator.o -MD -MP -MF .deps/decorator.Tpo -c -o decorator.o decorator.cpp
decorator.cpp: In member function ‘bool KWD::Decorator::enableDecorations(Time)’:
decorator.cpp:212: ошибка: cannot allocate an object of abstract type ‘KWD::Window’
window.h:53: замечание:   because the following virtual functions are pure within ‘KWD::Window’:
/usr/include/kdecorationbridge.h:97: замечание:         virtual QRect KDecorationBridgeUnstable::transparentRect() const
/usr/include/kdecorationbridge.h:100: замечание:        virtual bool KDecorationBridgeUnstable::isClientGroupActive()
/usr/include/kdecorationbridge.h:101: замечание:        virtual QList<ClientGroupItem> KDecorationBridgeUnstable::clientGroupItems() const
/usr/include/kdecorationbridge.h:102: замечание:        virtual long int KDecorationBridgeUnstable::itemId(int)
/usr/include/kdecorationbridge.h:103: замечание:        virtual int KDecorationBridgeUnstable::visibleClientGroupItem()
/usr/include/kdecorationbridge.h:104: замечание:        virtual void KDecorationBridgeUnstable::setVisibleClientGroupItem(int)
/usr/include/kdecorationbridge.h:105: замечание:        virtual void KDecorationBridgeUnstable::moveItemInClientGroup(int, int)
/usr/include/kdecorationbridge.h:106: замечание:        virtual void KDecorationBridgeUnstable::moveItemToClientGroup(long int, int)
/usr/include/kdecorationbridge.h:107: замечание:        virtual void KDecorationBridgeUnstable::removeFromClientGroup(int, const QRect&)
/usr/include/kdecorationbridge.h:108: замечание:        virtual void KDecorationBridgeUnstable::closeClientGroupItem(int)
/usr/include/kdecorationbridge.h:109: замечание:        virtual void KDecorationBridgeUnstable::closeAllInClientGroup()
/usr/include/kdecorationbridge.h:110: замечание:        virtual void KDecorationBridgeUnstable::displayClientMenu(int, const QPoint&)
/usr/include/kdecorationbridge.h:111: замечание:        virtual KDecorationDefines::WindowOperation KDecorationBridgeUnstable::buttonToWindowOperation(Qt::MouseButtons)
decorator.cpp:214: ошибка: cannot allocate an object of abstract type ‘KWD::Window’
window.h:53: замечание:   since type ‘KWD::Window’ has pure virtual functions
decorator.cpp: In member function ‘void KWD::Decorator::handleWindowAdded(WId)’:
decorator.cpp:678: ошибка: cannot allocate an object of abstract type ‘KWD::Window’
window.h:53: замечание:   since type ‘KWD::Window’ has pure virtual functions
make: *** [decorator.o] Ошибка 1
bash-4.1$


Я понимаю, что скрипт пытается создать объект абстрактного класса, но не пойму это касяк разрабов или может у меня в системе что-то не то (ну не могли же разработчики допустить такой явный баг). Быть может стоит в скриптах подправить, но я не могу найти объявления класса.
Спасибо сказали:
Olegator
Сообщения: 2493
ОС: SuseLinux 11.2 KDE 4.3

Re: собираем kde4-window-dekorator для компиза

Сообщение Olegator »

может попробовать сделать поиск по содержимому пакетов? так как например в opensuse kde4-window-dekorator находится в пакете compiz-kde4
Спасибо сказали:
Аватара пользователя
Anguis
Сообщения: 212
ОС: Manjaro 17

Re: собираем kde4-window-dekorator для компиза

Сообщение Anguis »

Olegator писал(а):
31.01.2010 23:06
может попробовать сделать поиск по содержимому пакетов? так как например в opensuse kde4-window-dekorator находится в пакете compiz-kde4


Нет, в чейндж-логе можно увидеть вот это:
Птн Дек 11 2009 Pascal Terjan <pterjan@mandriva.org> 0.8.4-2mdv2010.1
+ Revision: 475948
- Disable kde4 decorator (not building, and kde4 effects may be enough)

Т.е. они специально убрали поддержку декоратора.

Я ищу методы решения проблемы, а не её обхода, поэтому советы типа "поставить emerald и не париться" не нужны.
Спасибо сказали:
Аватара пользователя
Anguis
Сообщения: 212
ОС: Manjaro 17

Re: собираем kde4-window-dekorator для компиза

Сообщение Anguis »

Я нашел объявление класса на который ругается компилятор

Код: Выделить всё

namespace KWD
{
class Window: public QObject, public KDecorationBridgeUnstable {
    Q_OBJECT public:

    enum Type
    {
        Normal,
        Default,
        DefaultActive
    };

    public:
    Window (WId parentId, WId clientId, WId frame, Type type,
        int x = 0, int y = 0, int w = 1, int h = 1);
    ~Window (void);

    virtual bool isActive (void) const;
    virtual bool isCloseable (void) const;
    virtual bool isMaximizable (void) const;
    virtual MaximizeMode maximizeMode (void) const;
    virtual bool isMinimizable (void) const;
    virtual bool providesContextHelp (void) const;
    virtual int desktop (void) const;
    virtual bool isModal (void) const;
    virtual bool isShadeable (void) const;
    virtual bool isShade (void) const;
    virtual bool isSetShade (void) const;
    virtual bool keepAbove (void) const;
    virtual bool keepBelow (void) const;
    virtual bool isMovable (void) const;
    virtual bool isResizable (void) const;
    virtual NET::WindowType
        windowType (unsigned long supported_types) const;
    virtual QIcon icon (void) const;
    virtual QString caption (void) const;
    virtual void processMousePressEvent (QMouseEvent *);
    virtual void showWindowMenu (const QRect &);
    virtual void showWindowMenu (const QPoint &);
    virtual void performWindowOperation (WindowOperation);
    virtual void setMask (const QRegion &, int);
    virtual bool isPreview (void) const;
    virtual QRect geometry (void) const;
    virtual QRect iconGeometry (void) const;
    virtual QRegion unobscuredRegion (const QRegion & r) const;
    virtual WId windowId (void) const;
    virtual void closeWindow (void);
    virtual void maximize (MaximizeMode mode);
    virtual void minimize (void);
    virtual void showContextHelp (void);
    virtual void setDesktop (int desktop);
    virtual void titlebarDblClickOperation (void);
    virtual void titlebarMouseWheelOperation (int delta);
    virtual void setShade (bool set);
    virtual void setKeepAbove (bool);
    virtual void setKeepBelow (bool);
    virtual int currentDesktop (void) const;
    virtual QWidget *initialParentWidget (void) const;
    virtual Qt::WFlags initialWFlags (void) const;
    virtual void grabXServer (bool grab);

    /* unstable API */
    virtual bool compositingActive () const;

    virtual bool eventFilter (QObject* o, QEvent* e);

    void handleActiveChange (void);
    void updateFrame (WId frame);
    void updateWindowGeometry (void);
    void updateCursor (QPoint pos);
    void updateSelected (WId selected);

    WId frameId (void) const
    {
        return mFrame;
    }

    KDecoration *decoration (void) const
    {
        return mDecor;
    }

    QWidget *decorWidget (void) const;
    QWidget *childAt (int x, int y) const;
    QPoint mapToChildAt (QPoint p) const;

    QWidget *activeChild (void) const
    {
        return mActiveChild;
    }

    void setActiveChild (QWidget * child)
    {
        mActiveChild = child;
    }

    void moveWindow (QMouseEvent *qme);
    void reloadDecoration (void);
    void updateState (void);
    void updateName (void);
    void updateIcons (void);
    void updateOpacity (void)
    {
        mOpacity = readPropertyShort (mClientId, Atoms::netWmWindowOpacity,
                      0xffff);
    }
    Drawable pixmapId (void) const
    {
        return mPixmap;
    }

    bool handleMap (void);
    bool handleConfigure (QSize size);

    decor_extents_t *border (void)
    {
        return &mBorder;
    }

    QRect clientGeometry (void);
    void showKillProcessDialog (Time timestamp);
    void hideKillProcessDialog (void);

    void setFakeRelease (bool fakeRelease)
    {
        mFakeRelease = fakeRelease;
    }

    bool getFakeRelease ()
    {
        return mFakeRelease;
    }


    private:
    void createDecoration (void);
    void resizeDecoration (bool force = false);
    void updateBlurProperty (int topOffset,
                 int bottomOffset,
                 int leftOffset,
                 int rightOffset);
    void updateProperty (void);
    void getWindowProtocols (void);
    void performMouseCommand (KWD::Options::MouseCommand command,
                  QMouseEvent             *qme);
    NET::Direction positionToDirection (int pos);
    Cursor positionToCursor (QPoint pos);

    private slots:
    void handlePopupActivated (QAction *action);
    void handleOpacityPopupActivated (QAction *action);
    void handleDesktopPopupActivated (QAction *action);
    void handlePopupAboutToShow (void);

    void decorRepaintPending ();

    private:
    Type mType;
    WId mParentId;
    WId mFrame;
    WId mClientId;
    WId mSelectedId;
    QRect mGeometry;
    QString mName;
    QPixmap mIcon;
    QPixmap mMiniIcon;
    decor_extents_t mBorder;
    decor_extents_t mPadding;
    decor_extents_t mExtents;
    unsigned short mOpacity;
    KDecoration *mDecor;
    Pixmap mPixmap;
    QPixmap mPixmapQt;
    bool mUpdateProperty;
    bool mShapeSet;
    QRegion mShape;
    QWidget *mActiveChild;
    bool mSupportTakeFocus;
    bool mSupportContextHelp;
    QMenu *mPopup;
    QMenu *mAdvancedMenu;
    QMenu *mOpacityMenu;
    QMenu *mDesktopMenu;
    unsigned long mState;

    QProcess mProcessKiller;
    KActionCollection mKeys;
    bool mFakeRelease;

    QAction *mResizeOpAction;
        QAction *mMoveOpAction;
        QAction *mMaximizeOpAction;
        QAction *mShadeOpAction;
        QAction *mKeepAboveOpAction;
        QAction *mKeepBelowOpAction;
        QAction *mFullScreenOpAction;
        QAction *mNoBorderOpAction;
        QAction *mMinimizeOpAction;
        QAction *mCloseOpAction;
    QAction *mDesktopOpAction;

    KWin::PaintRedirector *mPaintRedirector;
    };
}


Я в c++ вообще не шарю, но я понимаю, что тут класс объявляется в пространстве имен KWD а все в пространстве имен является абстрактным. Ну неужели разработчики допустили такую глупую ошибку???
Наверно я чего-то не понимаю. Помогите пожалуйста скомпилировать этот гребанный kde4-window-decorator!
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: собираем kde4-window-dekorator для компиза

Сообщение NickLion »

Anguis писал(а):
01.02.2010 14:05
Я в c++ вообще не шарю, но я понимаю, что тут класс объявляется в пространстве имен KWD а все в пространстве имен является абстрактным.

Да... Вы в С++ точно не шарите ;) "Всё в пространстве имён является абстрактным" - откуда Вы это взяли %)

Абстрактный класс KWD потому, что наследован от абстрактного класса KDecorationBridgeUnstable, но не реализовал его все методы, конкретно - написано в Вашем первом сообщении:

Код: Выделить всё

/usr/include/kdecorationbridge.h:97: замечание:         virtual QRect KDecorationBridgeUnstable::transparentRect() const
/usr/include/kdecorationbridge.h:100: замечание:        virtual bool KDecorationBridgeUnstable::isClientGroupActive()
/usr/include/kdecorationbridge.h:101: замечание:        virtual QList<ClientGroupItem> KDecorationBridgeUnstable::clientGroupItems() const
/usr/include/kdecorationbridge.h:102: замечание:        virtual long int KDecorationBridgeUnstable::itemId(int)
/usr/include/kdecorationbridge.h:103: замечание:        virtual int KDecorationBridgeUnstable::visibleClientGroupItem()
/usr/include/kdecorationbridge.h:104: замечание:        virtual void KDecorationBridgeUnstable::setVisibleClientGroupItem(int)
/usr/include/kdecorationbridge.h:105: замечание:        virtual void KDecorationBridgeUnstable::moveItemInClientGroup(int, int)
/usr/include/kdecorationbridge.h:106: замечание:        virtual void KDecorationBridgeUnstable::moveItemToClientGroup(long int, int)
/usr/include/kdecorationbridge.h:107: замечание:        virtual void KDecorationBridgeUnstable::removeFromClientGroup(int, const QRect&)
/usr/include/kdecorationbridge.h:108: замечание:        virtual void KDecorationBridgeUnstable::closeClientGroupItem(int)
/usr/include/kdecorationbridge.h:109: замечание:        virtual void KDecorationBridgeUnstable::closeAllInClientGroup()
/usr/include/kdecorationbridge.h:110: замечание:        virtual void KDecorationBridgeUnstable::displayClientMenu(int, const QPoint&)
/usr/include/kdecorationbridge.h:111: замечание:        virtual KDecorationDefines::WindowOperation KDecorationBridgeUnstable::buttonToWindowOperation(Qt::MouseButtons)

Произошло это скорее всего потому, что класс KDecorationBridgeUnstable в новых версиях был расширен новым функционалом. Следовательно эти исходники просто нельзя скомпилировать. Нужно дописывать соответствующие методы. Возможно, если их реализацию сделать пустой, то и прокатит, но скорее всего - нет.
Спасибо сказали:
Аватара пользователя
Anguis
Сообщения: 212
ОС: Manjaro 17

Re: собираем kde4-window-dekorator для компиза

Сообщение Anguis »

NickLion писал(а):
01.02.2010 20:05
Да... Вы в С++ точно не шарите ;) "Всё в пространстве имён является абстрактным" - откуда Вы это взяли %)

Это я вычитал в википедии... но, вероятно, неверно понял что там говорилось.
NickLion писал(а):
01.02.2010 20:05
Произошло это скорее всего потому, что класс KDecorationBridgeUnstable в новых версиях был расширен новым функционалом. Следовательно эти исходники просто нельзя скомпилировать. Нужно дописывать соответствующие методы. Возможно, если их реализацию сделать пустой, то и прокатит, но скорее всего - нет.

Так... Я пытался собрать компиз ранних версий - тоже не вышло... Вот в Мандриве 2010.0 есть декоратор-кде4, логично предположить, что и src пакет той версии будет нормально собираться. Ан нет - абсолютно тоже самое. Попробую создать пустые методы :) А вдрух?

З.Ы. На самом деле мне уже это не так необходимо так как я разобрался с эмеральдом и вполне им доволен - но просто жууутко интересно ;)
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: собираем kde4-window-dekorator для компиза

Сообщение NickLion »

Вы немного не поняли. Это KDE4, видимо слишком новый. KDecorationBridgeUnstable - это явно класс из KDE. Если взять более старую (не знаю насколько) версию KDE4, то эти исходники, по идее должны скомпилиться.
Спасибо сказали:
Аватара пользователя
Anguis
Сообщения: 212
ОС: Manjaro 17

Re: собираем kde4-window-dekorator для компиза

Сообщение Anguis »

NickLion писал(а):
02.02.2010 06:12
Вы немного не поняли. Это KDE4, видимо слишком новый. KDecorationBridgeUnstable - это явно класс из KDE. Если взять более старую (не знаю насколько) версию KDE4, то эти исходники, по идее должны скомпилиться.


Ааааа... Вот беда-то.. А как-же тогда разработчики собирают пакеты?.. Что-то тут не то.. Хотя, вероятно, есть смысл попробовать собрать пакет на 2010.0, там кде 4.3.2, а я собирал под разрабатываемой версией 4.4 (4.3.5)
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: собираем kde4-window-dekorator для компиза

Сообщение NickLion »

Anguis писал(а):
02.02.2010 10:28
Ааааа... Вот беда-то.. А как-же тогда разработчики собирают пакеты?.. Что-то тут не то..

Возможно что-то дописывают :)

Anguis писал(а):
02.02.2010 10:28
Хотя, вероятно, есть смысл попробовать собрать пакет на 2010.0, там кде 4.3.2, а я собирал под разрабатываемой версией 4.4 (4.3.5)

4.4 - вот тут наверное собака и зарылась :) В 4.4 ввели табы для окон, вполне возможно что требуется дополнительные функции описать.
Спасибо сказали:
Аватара пользователя
madcore
Сообщения: 20

Re: собираем kde4-window-dekorator для компиза

Сообщение madcore »

Там вроде патчи уже есть:
http://gitweb.compiz.org/?p=compiz/core;a=...327022f8aa551cc
Спасибо сказали: