public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: lxqt-base/lxqt-panel/files/, lxqt-base/lxqt-panel/
@ 2016-01-02 23:26 Jauhien Piatlicki
  0 siblings, 0 replies; 3+ messages in thread
From: Jauhien Piatlicki @ 2016-01-02 23:26 UTC (permalink / raw
  To: gentoo-commits

commit:     8db4e48bfd99254feaa47095a96d3c994b5b454a
Author:     Jauhien Piatlicki <jauhien <AT> gentoo <DOT> org>
AuthorDate: Sat Jan  2 23:24:32 2016 +0000
Commit:     Jauhien Piatlicki <jauhien <AT> gentoo <DOT> org>
CommitDate: Sat Jan  2 23:27:40 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8db4e48b

lxqt-base/lxqt-panel: backport fix for LXQT issue 871

See https://github.com/lxde/lxqt/issues/871
and https://github.com/lxde/lxqt-panel/pull/275

Package-Manager: portage-2.2.26

 .../files/lxqt-panel-0.10.0-autohide.patch         | 625 +++++++++++++++++++++
 lxqt-base/lxqt-panel/lxqt-panel-0.10.0-r1.ebuild   |  82 +++
 2 files changed, 707 insertions(+)

diff --git a/lxqt-base/lxqt-panel/files/lxqt-panel-0.10.0-autohide.patch b/lxqt-base/lxqt-panel/files/lxqt-panel-0.10.0-autohide.patch
new file mode 100644
index 0000000..5f2bbda
--- /dev/null
+++ b/lxqt-base/lxqt-panel/files/lxqt-panel-0.10.0-autohide.patch
@@ -0,0 +1,625 @@
+Patch for autohide issue https://github.com/lxde/lxqt/issues/871
+taken from https://github.com/lxde/lxqt-panel/pull/275
+
+diff --git panel/CMakeLists.txt panel/CMakeLists.txt
+index 4e23b53..a7f8176 100644
+--- panel/CMakeLists.txt
++++ panel/CMakeLists.txt
+@@ -2,6 +2,7 @@ set(PROJECT lxqt-panel)
+ 
+ set(PRIV_HEADERS
+     panelpluginsmodel.h
++    windownotifier.h
+     lxqtpanel.h
+     lxqtpanelapplication.h
+     lxqtpanellayout.h
+@@ -26,6 +27,7 @@ set(PUB_HEADERS
+ set(SOURCES
+     main.cpp
+     panelpluginsmodel.cpp
++    windownotifier.cpp
+     lxqtpanel.cpp
+     lxqtpanelapplication.cpp
+     lxqtpanellayout.cpp
+diff --git panel/ilxqtpanel.h panel/ilxqtpanel.h
+index e7b2844..71e4990 100644
+--- panel/ilxqtpanel.h
++++ panel/ilxqtpanel.h
+@@ -32,6 +32,7 @@
+ #include "lxqtpanelglobals.h"
+ 
+ class ILXQtPanelPlugin;
++class QWidget;
+ 
+ /**
+  **/
+@@ -74,6 +75,17 @@ public:
+      **/
+     virtual QRect calculatePopupWindowPos(const QPoint &absolutePos, const QSize &windowSize) const = 0;
+     virtual QRect calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const QSize &windowSize) const = 0;
++
++    /*!
++     * \brief By calling this function plugin (or any other object) notifies the panel
++     * about showing a (standalone) window/menu -> panel needs this to avoid "hiding" in case any
++     * standalone window is shown. The widget must be shown later than this notification call because
++     * panel need to observe it's show/hide/close events.
++     *
++     * \param w the shown window
++     *
++     */
++    virtual void willShowWindow(QWidget * w) = 0;
+ };
+ 
+ #endif // ILXQTPANEL_H
+diff --git panel/ilxqtpanelplugin.h panel/ilxqtpanelplugin.h
+index 1503923..3a09def 100644
+--- panel/ilxqtpanelplugin.h
++++ panel/ilxqtpanelplugin.h
+@@ -186,6 +186,16 @@ public:
+         return mPanel->calculatePopupWindowPos(this, windowSize);
+     }
+ 
++    /*!
++     * \brief By calling this function plugin notifies the panel about showing a (standalone) window/menu.
++     *
++     * \param w the shown window
++     *
++     */
++    inline void willShowWindow(QWidget * w)
++    {
++        mPanel->willShowWindow(w);
++    }
+ 
+     virtual bool isSeparate() const { return false;  }
+     virtual bool isExpandable() const { return false; }
+diff --git panel/lxqtpanel.cpp panel/lxqtpanel.cpp
+index 5159c15..d6b70ca 100644
+--- panel/lxqtpanel.cpp
++++ panel/lxqtpanel.cpp
+@@ -35,6 +35,7 @@
+ #include "popupmenu.h"
+ #include "plugin.h"
+ #include "panelpluginsmodel.h"
++#include "windownotifier.h"
+ #include <LXQt/PluginInfo>
+ 
+ #include <QScreen>
+@@ -116,6 +117,7 @@ LXQtPanel::LXQtPanel(const QString &configGroup, LXQt::Settings *settings, QWidg
+     mSettings(settings),
+     mConfigGroup(configGroup),
+     mPlugins{nullptr},
++    mStandaloneWindows{new WindowNotifier},
+     mPanelSize(0),
+     mIconSize(0),
+     mLineCount(0),
+@@ -175,6 +177,9 @@ LXQtPanel::LXQtPanel(const QString &configGroup, LXQt::Settings *settings, QWidg
+     connect(LXQt::Settings::globalSettings(), SIGNAL(settingsChanged()), this, SLOT(update()));
+     connect(lxqtApp, SIGNAL(themeChanged()), this, SLOT(realign()));
+ 
++    connect(mStandaloneWindows.data(), &WindowNotifier::firstShown, this, &LXQtPanel::showPanel);
++    connect(mStandaloneWindows.data(), &WindowNotifier::lastHidden, this, &LXQtPanel::hidePanel);
++
+     readSettings();
+     // the old position might be on a visible screen
+     ensureVisible();
+@@ -589,6 +594,7 @@ void LXQtPanel::showConfigDialog()
+         mConfigDialog = new ConfigPanelDialog(this, nullptr /*make it top level window*/);
+ 
+     mConfigDialog->showConfigPanelPage();
++    mStandaloneWindows->observeWindow(mConfigDialog.data());
+     mConfigDialog->show();
+     mConfigDialog->raise();
+     mConfigDialog->activateWindow();
+@@ -608,6 +614,7 @@ void LXQtPanel::showAddPluginDialog()
+         mConfigDialog = new ConfigPanelDialog(this, nullptr /*make it top level window*/);
+ 
+     mConfigDialog->showConfigPluginsPage();
++    mStandaloneWindows->observeWindow(mConfigDialog.data());
+     mConfigDialog->show();
+     mConfigDialog->raise();
+     mConfigDialog->activateWindow();
+@@ -967,6 +974,7 @@ void LXQtPanel::showPopupMenu(Plugin *plugin)
+      * of QDesktopWidget::availableGeometry)
+      */
+     menu->setGeometry(calculatePopupWindowPos(QCursor::pos(), menu->sizeHint()));
++    willShowWindow(menu);
+     menu->show();
+ }
+ 
+@@ -1043,6 +1051,14 @@ QRect LXQtPanel::calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const Q
+ /************************************************
+ 
+  ************************************************/
++void LXQtPanel::willShowWindow(QWidget * w)
++{
++    mStandaloneWindows->observeWindow(w);
++}
++
++/************************************************
++
++ ************************************************/
+ QString LXQtPanel::qssPosition() const
+ {
+     return positionToStr(position());
+@@ -1107,20 +1123,17 @@ void LXQtPanel::showPanel()
+ 
+ void LXQtPanel::hidePanel()
+ {
+-    if (mHidable && !mHidden)
++    if (mHidable && !mHidden
++            && !geometry().contains(QCursor::pos())
++            && !mStandaloneWindows->isAnyWindowShown()
++       )
+         mHideTimer.start();
+ }
+ 
+ void LXQtPanel::hidePanelWork()
+ {
+-    if (mHidable && !mHidden && !geometry().contains(QCursor::pos()))
+-    {
+-        mHidden = true;
+-        setPanelGeometry();
+-    } else
+-    {
+-        mHideTimer.start();
+-    }
++    mHidden = true;
++    setPanelGeometry();
+ }
+ 
+ void LXQtPanel::setHidable(bool hidable, bool save)
+@@ -1128,7 +1141,7 @@ void LXQtPanel::setHidable(bool hidable, bool save)
+     if (mHidable == hidable)
+         return;
+ 
+-    mHidable = mHidden = hidable;
++    mHidable = hidable;
+ 
+     if (save)
+         saveSettings(true);
+diff --git panel/lxqtpanel.h panel/lxqtpanel.h
+index 8ff4b8c..990063f 100644
+--- panel/lxqtpanel.h
++++ panel/lxqtpanel.h
+@@ -48,6 +48,7 @@ class PluginInfo;
+ class LXQtPanelLayout;
+ class ConfigPanelDialog;
+ class PanelPluginsModel;
++class WindowNotifier;
+ 
+ /*! \brief The LXQtPanel class provides a single lxqt-panel.
+  */
+@@ -80,11 +81,12 @@ public:
+     void showPopupMenu(Plugin *plugin = 0);
+ 
+     // ILXQtPanel .........................
+-    ILXQtPanel::Position position() const { return mPosition; }
+-    QRect globalGometry() const;
++    ILXQtPanel::Position position() const override { return mPosition; }
++    QRect globalGometry() const override;
+     Plugin *findPlugin(const ILXQtPanelPlugin *iPlugin) const;
+-    QRect calculatePopupWindowPos(QPoint const & absolutePos, QSize const & windowSize) const;
+-    QRect calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const QSize &windowSize) const;
++    QRect calculatePopupWindowPos(QPoint const & absolutePos, QSize const & windowSize) const override;
++    QRect calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const QSize &windowSize) const override;
++    void willShowWindow(QWidget * w) override;
+ 
+     // For QSS properties ..................
+     QString qssPosition() const;
+@@ -95,8 +97,8 @@ public:
+ 
+     // Settings
+     int panelSize() const { return mPanelSize; }
+-    int iconSize() const { return mIconSize; }
+-    int lineCount() const { return mLineCount; }
++    int iconSize() const override { return mIconSize; }
++    int lineCount() const override { return mLineCount; }
+     int length() const { return mLength; }
+     bool lengthInPercents() const { return mLengthInPercents; }
+     LXQtPanel::Alignment alignment() const { return mAlignment; }
+@@ -138,8 +140,8 @@ signals:
+     void pluginRemoved();
+ 
+ protected:
+-    bool event(QEvent *event);
+-    void showEvent(QShowEvent *event);
++    bool event(QEvent *event) override;
++    void showEvent(QShowEvent *event) override;
+ 
+ public slots:
+     void showConfigDialog();
+@@ -156,6 +158,7 @@ private:
+     QFrame *LXQtPanelWidget;
+     QString mConfigGroup;
+     QScopedPointer<PanelPluginsModel> mPlugins;
++    QScopedPointer<WindowNotifier> mStandaloneWindows; //!< object for storing info if some standalone window is shown (for preventing hide)
+ 
+     int findAvailableScreen(LXQtPanel::Position position);
+     void updateWmStrut();
+diff --git panel/plugin.cpp panel/plugin.cpp
+index a4acc78..be23a8e 100644
+--- panel/plugin.cpp
++++ panel/plugin.cpp
+@@ -477,6 +477,7 @@ void Plugin::showConfigureDialog()
+     if (!dialog)
+         return;
+ 
++    mPanel->willShowWindow(dialog);
+     dialog->show();
+     dialog->raise();
+     dialog->activateWindow();
+diff --git panel/windownotifier.cpp panel/windownotifier.cpp
+new file mode 100644
+index 0000000..0b41057
+--- /dev/null
++++ panel/windownotifier.cpp
+@@ -0,0 +1,65 @@
++/* BEGIN_COMMON_COPYRIGHT_HEADER
++ * (c)LGPL2+
++ *
++ * LXQt - a lightweight, Qt based, desktop toolset
++ * http://lxqt.org
++ *
++ * Copyright: 2015 LXQt team
++ * Authors:
++ *   Palo Kisa <palo.kisa@gmail.com>
++ *
++ * This program or library is free software; you can redistribute it
++ * and/or modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 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
++ * Lesser General Public License for more details.
++
++ * You should have received a copy of the GNU Lesser General
++ * Public License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ * Boston, MA 02110-1301 USA
++ *
++ * END_COMMON_COPYRIGHT_HEADER */
++
++#include "windownotifier.h"
++#include <QWidget>
++#include <QEvent>
++
++void WindowNotifier::observeWindow(QWidget * w)
++{
++    //installing the same filter object multiple times doesn't harm
++    w->installEventFilter(this);
++}
++
++
++bool WindowNotifier::eventFilter(QObject * watched, QEvent * event)
++{
++    QWidget * widget = qobject_cast<QWidget *>(watched); //we're observing only QWidgetw
++    auto it = std::lower_bound(mShownWindows.begin(), mShownWindows.end(), widget);
++    switch (event->type())
++    {
++        case QEvent::Close:
++            watched->removeEventFilter(this);
++            //no break
++        case QEvent::Hide:
++            Q_ASSERT(mShownWindows.end() != it);
++            mShownWindows.erase(it);
++            if (mShownWindows.isEmpty())
++                emit lastHidden();
++            break;
++        case QEvent::Show:
++            {
++                const bool first_shown = mShownWindows.isEmpty();
++                mShownWindows.insert(it, widget); //we keep the mShownWindows sorted
++                if (first_shown)
++                    emit firstShown();
++            }
++        default:
++            break;
++    }
++    return false;
++}
+diff --git panel/windownotifier.h panel/windownotifier.h
+new file mode 100644
+index 0000000..53f2f3f
+--- /dev/null
++++ panel/windownotifier.h
+@@ -0,0 +1,53 @@
++/* BEGIN_COMMON_COPYRIGHT_HEADER
++ * (c)LGPL2+
++ *
++ * LXQt - a lightweight, Qt based, desktop toolset
++ * http://lxqt.org
++ *
++ * Copyright: 2015 LXQt team
++ * Authors:
++ *   Palo Kisa <palo.kisa@gmail.com>
++ *
++ * This program or library is free software; you can redistribute it
++ * and/or modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 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
++ * Lesser General Public License for more details.
++
++ * You should have received a copy of the GNU Lesser General
++ * Public License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ * Boston, MA 02110-1301 USA
++ *
++ * END_COMMON_COPYRIGHT_HEADER */
++
++#if !defined(WINDOWNOTIFIER_H)
++#define WINDOWNOTIFIER_H
++
++#include <QObject>
++
++class QWidget;
++
++class WindowNotifier : public QObject
++{
++    Q_OBJECT
++public:
++    using QObject::QObject;
++
++    void observeWindow(QWidget * w);
++    inline bool isAnyWindowShown() const { return !mShownWindows.isEmpty(); }
++
++    virtual bool eventFilter(QObject * watched, QEvent * event) override;
++signals:
++    void lastHidden();
++    void firstShown();
++
++private:
++    QList<QWidget *> mShownWindows; //!< known shown windows (sorted)
++};
++
++#endif
+diff --git plugin-clock/lxqtclock.cpp plugin-clock/lxqtclock.cpp
+index 79c2c17..d4603de 100644
+--- plugin-clock/lxqtclock.cpp
++++ plugin-clock/lxqtclock.cpp
+@@ -286,6 +286,7 @@ void LXQtClock::activated(ActivationReason reason)
+     {
+         QRect pos = calculatePopupWindowPos(mCalendarPopup->size());
+         mCalendarPopup->move(pos.topLeft());
++        willShowWindow(mCalendarPopup);
+         mCalendarPopup->show();
+     }
+     else
+diff --git plugin-directorymenu/directorymenu.cpp plugin-directorymenu/directorymenu.cpp
+index 8c5ec28..e332e05 100644
+--- plugin-directorymenu/directorymenu.cpp
++++ plugin-directorymenu/directorymenu.cpp
+@@ -58,11 +58,11 @@ DirectoryMenu::DirectoryMenu(const ILXQtPanelPluginStartupInfo &startupInfo) :
+ 
+ DirectoryMenu::~DirectoryMenu()
+ {
+-	if(mMenu)
+-	{
+-		delete mMenu;
+-		mMenu = 0;
+-	}
++    if(mMenu)
++    {
++        delete mMenu;
++        mMenu = 0;
++    }
+ }
+ 
+ void DirectoryMenu::showMenu()
+@@ -102,67 +102,67 @@ void DirectoryMenu::showMenu()
+             break;
+     }
+ 
++    willShowWindow(mMenu);
+     // Just using Qt`s activateWindow() won't work on some WMs like Kwin.
+     // Solution is to execute menu 1ms later using timer
+-    mButton.activateWindow();
+-    mMenu->exec(QPoint(x, y));
++    mMenu->popup(calculatePopupWindowPos(mMenu->sizeHint()).topLeft());
+ }
+ 
+ void DirectoryMenu::buildMenu(const QString& path)
+ {
+-	if(mMenu)
+-	{
+-		delete mMenu;
+-		mMenu = 0;
+-	}
++    if(mMenu)
++    {
++        delete mMenu;
++        mMenu = 0;
++    }
+ 
+-	mPathStrings.clear();
++    mPathStrings.clear();
+ 
+-	mMenu = new QMenu();
++    mMenu = new QMenu();
+ 
+-	addActions(mMenu, path);
++    addActions(mMenu, path);
+ }
+ 
+ void DirectoryMenu::openDirectory(const QString& path)
+ {
+-	QDesktopServices::openUrl(QUrl("file://" + QDir::toNativeSeparators(path)));
++    QDesktopServices::openUrl(QUrl("file://" + QDir::toNativeSeparators(path)));
+ }
+ 
+ void DirectoryMenu::addMenu(QString path)
+ {
+-	QSignalMapper* sender = (QSignalMapper* )QObject::sender();
+-	QMenu* parentMenu = (QMenu*) sender->mapping(path);
++    QSignalMapper* sender = (QSignalMapper* )QObject::sender();
++    QMenu* parentMenu = (QMenu*) sender->mapping(path);
+ 
+-	if(parentMenu->isEmpty())
+-	{
+-		addActions(parentMenu, path);
+-	}
++    if(parentMenu->isEmpty())
++    {
++        addActions(parentMenu, path);
++    }
+ }
+ 
+ void DirectoryMenu::addActions(QMenu* menu, const QString& path)
+ {
+-	mPathStrings.push_back(path);
++    mPathStrings.push_back(path);
+ 
+-	QAction* openDirectoryAction = menu->addAction(XdgIcon::fromTheme("folder"), tr("Open"));
+-	connect(openDirectoryAction, SIGNAL(triggered()), mOpenDirectorySignalMapper, SLOT(map()));
+-	mOpenDirectorySignalMapper->setMapping(openDirectoryAction, mPathStrings.back());
++    QAction* openDirectoryAction = menu->addAction(XdgIcon::fromTheme("folder"), tr("Open"));
++    connect(openDirectoryAction, SIGNAL(triggered()), mOpenDirectorySignalMapper, SLOT(map()));
++    mOpenDirectorySignalMapper->setMapping(openDirectoryAction, mPathStrings.back());
+ 
+-	menu->addSeparator();
++    menu->addSeparator();
+ 
+-	QDir dir(path);
+-	QFileInfoList list = dir.entryInfoList();
++    QDir dir(path);
++    QFileInfoList list = dir.entryInfoList();
+ 
+-	foreach (const QFileInfo& entry, list)
++    foreach (const QFileInfo& entry, list)
+     {
+-    	if(entry.isDir() && !entry.isHidden())
+-    	{
+-			mPathStrings.push_back(entry.fileName());
++        if(entry.isDir() && !entry.isHidden())
++        {
++            mPathStrings.push_back(entry.fileName());
+ 
+-			QMenu* subMenu = menu->addMenu(XdgIcon::fromTheme("folder"), mPathStrings.back());
++            QMenu* subMenu = menu->addMenu(XdgIcon::fromTheme("folder"), mPathStrings.back());
+ 
+-    		connect(subMenu, SIGNAL(aboutToShow()), mMenuSignalMapper, SLOT(map()));
+-    		mMenuSignalMapper->setMapping(subMenu, entry.absoluteFilePath());
+-    	}
++            connect(subMenu, SIGNAL(aboutToShow()), mMenuSignalMapper, SLOT(map()));
++            mMenuSignalMapper->setMapping(subMenu, entry.absoluteFilePath());
++        }
+     }
+ }
+ 
+diff --git plugin-dom/domplugin.cpp plugin-dom/domplugin.cpp
+index ffd05c6..0988a2b 100644
+--- plugin-dom/domplugin.cpp
++++ plugin-dom/domplugin.cpp
+@@ -51,6 +51,7 @@ void DomPlugin::showDialog()
+         dialog->setAttribute(Qt::WA_DeleteOnClose);
+     }
+ 
++    willShowWindow(dialog);
+     dialog->show();
+     dialog->activateWindow();
+ }
+diff --git plugin-mainmenu/lxqtmainmenu.cpp plugin-mainmenu/lxqtmainmenu.cpp
+index 9673a4f..b9ff6e4 100644
+--- plugin-mainmenu/lxqtmainmenu.cpp
++++ plugin-mainmenu/lxqtmainmenu.cpp
+@@ -130,6 +130,7 @@ void LXQtMainMenu::showMenu()
+     if (!mMenu)
+         return;
+ 
++    willShowWindow(mMenu);
+     // Just using Qt`s activateWindow() won't work on some WMs like Kwin.
+     // Solution is to execute menu 1ms later using timer
+     mMenu->popup(calculatePopupWindowPos(mMenu->sizeHint()).topLeft());
+@@ -227,8 +228,6 @@ void LXQtMainMenu::buildMenu()
+     menu->installEventFilter(this);
+     connect(menu, &QMenu::aboutToHide, &mHideTimer, static_cast<void (QTimer::*)()>(&QTimer::start));
+     connect(menu, &QMenu::aboutToShow, &mHideTimer, &QTimer::stop);
+-    // panel notification (needed in case of auto-hide)
+-    connect(menu, &QMenu::aboutToHide, dynamic_cast<LXQtPanel *>(panel()), &LXQtPanel::hidePanel);
+ 
+     QMenu *oldMenu = mMenu;
+     mMenu = menu;
+diff --git plugin-mount/popup.cpp plugin-mount/popup.cpp
+index 1c3e7c1..7993681 100644
+--- plugin-mount/popup.cpp
++++ plugin-mount/popup.cpp
+@@ -90,7 +90,12 @@ Popup::Popup(ILXQtPanelPlugin * plugin, QWidget* parent):
+ 
+ void Popup::showHide()
+ {
+-    setVisible(isHidden());
++    if (isHidden())
++    {
++        mPlugin->willShowWindow(this);
++        show();
++    } else
++        close();
+ }
+ 
+ void Popup::onDeviceAdded(QString const & udi)
+diff --git plugin-statusnotifier/statusnotifierbutton.cpp plugin-statusnotifier/statusnotifierbutton.cpp
+index fb124c6..71cf78f 100644
+--- plugin-statusnotifier/statusnotifierbutton.cpp
++++ plugin-statusnotifier/statusnotifierbutton.cpp
+@@ -249,8 +249,10 @@ void StatusNotifierButton::mouseReleaseEvent(QMouseEvent *event)
+     else if (Qt::RightButton == event->button())
+     {
+         if (mMenu)
+-            mMenu->popup(QCursor::pos());
+-        else
++        {
++            mPlugin->willShowWindow(mMenu);
++            mMenu->popup(mPlugin->calculatePopupWindowPos(mMenu->sizeHint()).topLeft());
++        } else
+             interface->ContextMenu(QCursor::pos().x(), QCursor::pos().y());
+     }
+ 
+diff --git plugin-taskbar/lxqttaskgroup.cpp plugin-taskbar/lxqttaskgroup.cpp
+index 6828216..79e27f5 100644
+--- plugin-taskbar/lxqttaskgroup.cpp
++++ plugin-taskbar/lxqttaskgroup.cpp
+@@ -84,6 +84,7 @@ void LXQtTaskGroup::contextMenuEvent(QContextMenuEvent *event)
+         mPreventPopup = false;
+     });
+     menu->setGeometry(mPlugin->panel()->calculatePopupWindowPos(mapToGlobal(event->pos()), menu->sizeHint()));
++    mPlugin->willShowWindow(menu);
+     menu->show();
+ }
+ 
+@@ -418,6 +419,7 @@ void LXQtTaskGroup::setPopupVisible(bool visible, bool fast)
+             recalculateFramePosition();
+         }
+ 
++        mPlugin->willShowWindow(mPopup);
+         mPopup->show();
+         emit popupShown(this);
+     }
+diff --git plugin-volume/volumebutton.cpp plugin-volume/volumebutton.cpp
+index a738a1a..98b3f10 100644
+--- plugin-volume/volumebutton.cpp
++++ plugin-volume/volumebutton.cpp
+@@ -133,6 +133,7 @@ void VolumeButton::showVolumeSlider()
+     m_volumePopup->updateGeometry();
+     m_volumePopup->adjustSize();
+     QRect pos = mPlugin->calculatePopupWindowPos(m_volumePopup->size());
++    mPlugin->willShowWindow(m_volumePopup);
+     m_volumePopup->openAt(pos.topLeft(), Qt::TopLeftCorner);
+     m_volumePopup->activateWindow();
+ }
+diff --git plugin-worldclock/lxqtworldclock.cpp plugin-worldclock/lxqtworldclock.cpp
+index 7386049..8fa795d 100644
+--- plugin-worldclock/lxqtworldclock.cpp
++++ plugin-worldclock/lxqtworldclock.cpp
+@@ -356,6 +356,7 @@ void LXQtWorldClock::activated(ActivationReason reason)
+         mPopup->adjustSize();
+         mPopup->setGeometry(calculatePopupWindowPos(mPopup->size()));
+ 
++        willShowWindow(mPopup);
+         mPopup->show();
+     }
+     else

diff --git a/lxqt-base/lxqt-panel/lxqt-panel-0.10.0-r1.ebuild b/lxqt-base/lxqt-panel/lxqt-panel-0.10.0-r1.ebuild
new file mode 100644
index 0000000..3c8e096
--- /dev/null
+++ b/lxqt-base/lxqt-panel/lxqt-panel-0.10.0-r1.ebuild
@@ -0,0 +1,82 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+inherit cmake-utils
+
+DESCRIPTION="LXQt desktop panel and plugins"
+HOMEPAGE="http://lxqt.org/"
+
+if [[ ${PV} = *9999* ]]; then
+	inherit git-r3
+	EGIT_REPO_URI="git://git.lxde.org/git/lxde/${PN}.git"
+else
+	SRC_URI="https://downloads.lxqt.org/lxqt/${PV}/${P}.tar.xz"
+	KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-2 LGPL-2.1+"
+SLOT="0"
+IUSE="+alsa +clock colorpicker cpuload +desktopswitch dom +kbindicator +mainmenu
+	+mount networkmonitor pulseaudio +quicklaunch screensaver sensors
+	+showdesktop statusnotifier sysstat +taskbar +tray +volume worldclock"
+REQUIRED_USE="volume? ( || ( alsa pulseaudio ) )"
+
+DEPEND="
+	dev-libs/glib:2
+	>=dev-libs/libqtxdg-1.0.0
+	dev-qt/linguist-tools:5
+	dev-qt/qtcore:5
+	dev-qt/qtdbus:5
+	dev-qt/qtgui:5
+	dev-qt/qtwidgets:5
+	dev-qt/qtx11extras:5
+	dev-qt/qtxml:5
+	kde-frameworks/kguiaddons:5
+	kde-frameworks/kwindowsystem:5[X]
+	>=lxde-base/menu-cache-0.3.3
+	~lxqt-base/liblxqt-${PV}
+	~lxqt-base/lxqt-globalkeys-${PV}
+	x11-libs/libX11
+	cpuload? ( sys-libs/libstatgrab )
+	kbindicator? ( x11-libs/libxkbcommon )
+	mount? ( kde-frameworks/solid:5 )
+	networkmonitor? ( sys-libs/libstatgrab )
+	sensors? ( sys-apps/lm_sensors )
+	statusnotifier? ( dev-libs/libdbusmenu-qt[qt5] )
+	sysstat? ( =lxqt-base/libsysstat-0.3* )
+	tray? ( x11-libs/libXcomposite
+		x11-libs/libXdamage
+		x11-libs/libXrender )
+	volume? ( alsa? ( media-libs/alsa-lib )
+		pulseaudio? ( media-sound/pulseaudio ) )"
+RDEPEND="${DEPEND}
+	dev-qt/qtsvg:5
+	>=lxde-base/lxmenu-data-0.1.2"
+
+PATCHES=( "${FILESDIR}/${P}-autohide.patch" )
+
+src_configure() {
+	local mycmakeargs i y
+	for i in clock colorpicker cpuload desktopswitch dom kbindicator mainmenu mount \
+		networkmonitor quicklaunch screensaver sensors showdesktop statusnotifier \
+		sysstat taskbar tray volume worldclock; do
+		#Switch to ^^ when we switch to EAPI=6.
+		#y=${i^^}
+		y=$(tr '[:lower:]' '[:upper:]' <<< "${i}")
+		mycmakeargs+=( $(cmake-utils_use ${i} ${y}_PLUGIN) )
+	done
+
+	if use volume; then
+		mycmakeargs+=( $(cmake-utils_use alsa VOLUME_USE_ALSA)
+			$(cmake-utils_use pulseaudio VOLUME_USE_PULSEAUDIO) )
+	fi
+
+	cmake-utils_src_configure
+}
+
+src_install(){
+	cmake-utils_src_install
+	doman panel/man/*.1
+}


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: lxqt-base/lxqt-panel/files/, lxqt-base/lxqt-panel/
@ 2017-11-07  2:39 NP Hardass
  0 siblings, 0 replies; 3+ messages in thread
From: NP Hardass @ 2017-11-07  2:39 UTC (permalink / raw
  To: gentoo-commits

commit:     9831f08ca067fab97a619811280d00670fa6f8e8
Author:     Jimi Huotari <chiitoo <AT> gentoo <DOT> org>
AuthorDate: Mon Nov  6 18:47:37 2017 +0000
Commit:     NP Hardass <np-hardass <AT> gentoo <DOT> org>
CommitDate: Tue Nov  7 02:39:34 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9831f08c

lxqt-base/lxqt-panel: Move oversize patch to dev-space.

Package-Manager: Portage-2.3.13, Repoman-2.3.4

Signed-off-by: NP-Hardass <NP-Hardass <AT> gentoo.org>

 lxqt-base/lxqt-panel/Manifest                      |   1 +
 .../files/lxqt-panel-0.10.0-autohide.patch         | 625 ---------------------
 lxqt-base/lxqt-panel/lxqt-panel-0.10.0-r1.ebuild   |   7 +-
 3 files changed, 5 insertions(+), 628 deletions(-)

diff --git a/lxqt-base/lxqt-panel/Manifest b/lxqt-base/lxqt-panel/Manifest
index af123ca3534..d17b3e22644 100644
--- a/lxqt-base/lxqt-panel/Manifest
+++ b/lxqt-base/lxqt-panel/Manifest
@@ -1,2 +1,3 @@
+DIST lxqt-panel-0.10.0-autohide-patch.tar.bz2 5812 SHA256 e590c2ed4554c27e3fc640197cd48ccce1dfba75139669eb2e1cae71d6f5c82b SHA512 04b2dcfa107e6cedd8347b399e254c193f2f245ce796c6f2b26f3b47a7969da5d673d30f2dd08ad66a9815394e4a8baf72191c14ec58652a2f71005240b3844d WHIRLPOOL c256b404c9daaf5b8d59f7fc88760180fe1643801e92c30fd25c3514083fc531d27ee29ffe3dd8476dae7df524566b5e9430ece9f71c2607a47d976d89658351
 DIST lxqt-panel-0.10.0.tar.xz 329984 SHA256 df83db7789daecd358f074db2100d7b251c00e48aa3aa62957d5a657a4309d5e SHA512 59a25593beeabbd02a451e00db479617612d63ba5579560ab4b1c60d6ad1878728cc079a848b9437968c7246f257b53c775de2cb9e87f3e153049e6dbeee2ab4 WHIRLPOOL 6d49c0d78f66ff4d6a0fe026915e72bf6ca9c5b73f198866402c6e82ffd10b53a22f9ef1a583d05ae47918d90ccc08b1230582ccd86948d77079e2b2fdf3af6b
 DIST lxqt-panel-0.11.0.tar.xz 262964 SHA256 18415624d862b9b269fd1f74b2b6a51776852babd057e701e5d5b48ce46e777c SHA512 875ec28868bb68dff8c4e3be0adb5e5c88213f9ebdeb83eb0df9d5c31a7b4cb70a4d9b347f1ed9526a1eef7adb07f92c36263e12a6455291ec7022901abd100c WHIRLPOOL 9a9f6ff92afbf598d6a1f29d083e3fc85f3282f644508d1bc03683eb9bbe06048d65688e016bb17e7553aba23b10de251949000e2da65c3b5e547e9f273e7cd1

diff --git a/lxqt-base/lxqt-panel/files/lxqt-panel-0.10.0-autohide.patch b/lxqt-base/lxqt-panel/files/lxqt-panel-0.10.0-autohide.patch
deleted file mode 100644
index 5f2bbdae6f2..00000000000
--- a/lxqt-base/lxqt-panel/files/lxqt-panel-0.10.0-autohide.patch
+++ /dev/null
@@ -1,625 +0,0 @@
-Patch for autohide issue https://github.com/lxde/lxqt/issues/871
-taken from https://github.com/lxde/lxqt-panel/pull/275
-
-diff --git panel/CMakeLists.txt panel/CMakeLists.txt
-index 4e23b53..a7f8176 100644
---- panel/CMakeLists.txt
-+++ panel/CMakeLists.txt
-@@ -2,6 +2,7 @@ set(PROJECT lxqt-panel)
- 
- set(PRIV_HEADERS
-     panelpluginsmodel.h
-+    windownotifier.h
-     lxqtpanel.h
-     lxqtpanelapplication.h
-     lxqtpanellayout.h
-@@ -26,6 +27,7 @@ set(PUB_HEADERS
- set(SOURCES
-     main.cpp
-     panelpluginsmodel.cpp
-+    windownotifier.cpp
-     lxqtpanel.cpp
-     lxqtpanelapplication.cpp
-     lxqtpanellayout.cpp
-diff --git panel/ilxqtpanel.h panel/ilxqtpanel.h
-index e7b2844..71e4990 100644
---- panel/ilxqtpanel.h
-+++ panel/ilxqtpanel.h
-@@ -32,6 +32,7 @@
- #include "lxqtpanelglobals.h"
- 
- class ILXQtPanelPlugin;
-+class QWidget;
- 
- /**
-  **/
-@@ -74,6 +75,17 @@ public:
-      **/
-     virtual QRect calculatePopupWindowPos(const QPoint &absolutePos, const QSize &windowSize) const = 0;
-     virtual QRect calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const QSize &windowSize) const = 0;
-+
-+    /*!
-+     * \brief By calling this function plugin (or any other object) notifies the panel
-+     * about showing a (standalone) window/menu -> panel needs this to avoid "hiding" in case any
-+     * standalone window is shown. The widget must be shown later than this notification call because
-+     * panel need to observe it's show/hide/close events.
-+     *
-+     * \param w the shown window
-+     *
-+     */
-+    virtual void willShowWindow(QWidget * w) = 0;
- };
- 
- #endif // ILXQTPANEL_H
-diff --git panel/ilxqtpanelplugin.h panel/ilxqtpanelplugin.h
-index 1503923..3a09def 100644
---- panel/ilxqtpanelplugin.h
-+++ panel/ilxqtpanelplugin.h
-@@ -186,6 +186,16 @@ public:
-         return mPanel->calculatePopupWindowPos(this, windowSize);
-     }
- 
-+    /*!
-+     * \brief By calling this function plugin notifies the panel about showing a (standalone) window/menu.
-+     *
-+     * \param w the shown window
-+     *
-+     */
-+    inline void willShowWindow(QWidget * w)
-+    {
-+        mPanel->willShowWindow(w);
-+    }
- 
-     virtual bool isSeparate() const { return false;  }
-     virtual bool isExpandable() const { return false; }
-diff --git panel/lxqtpanel.cpp panel/lxqtpanel.cpp
-index 5159c15..d6b70ca 100644
---- panel/lxqtpanel.cpp
-+++ panel/lxqtpanel.cpp
-@@ -35,6 +35,7 @@
- #include "popupmenu.h"
- #include "plugin.h"
- #include "panelpluginsmodel.h"
-+#include "windownotifier.h"
- #include <LXQt/PluginInfo>
- 
- #include <QScreen>
-@@ -116,6 +117,7 @@ LXQtPanel::LXQtPanel(const QString &configGroup, LXQt::Settings *settings, QWidg
-     mSettings(settings),
-     mConfigGroup(configGroup),
-     mPlugins{nullptr},
-+    mStandaloneWindows{new WindowNotifier},
-     mPanelSize(0),
-     mIconSize(0),
-     mLineCount(0),
-@@ -175,6 +177,9 @@ LXQtPanel::LXQtPanel(const QString &configGroup, LXQt::Settings *settings, QWidg
-     connect(LXQt::Settings::globalSettings(), SIGNAL(settingsChanged()), this, SLOT(update()));
-     connect(lxqtApp, SIGNAL(themeChanged()), this, SLOT(realign()));
- 
-+    connect(mStandaloneWindows.data(), &WindowNotifier::firstShown, this, &LXQtPanel::showPanel);
-+    connect(mStandaloneWindows.data(), &WindowNotifier::lastHidden, this, &LXQtPanel::hidePanel);
-+
-     readSettings();
-     // the old position might be on a visible screen
-     ensureVisible();
-@@ -589,6 +594,7 @@ void LXQtPanel::showConfigDialog()
-         mConfigDialog = new ConfigPanelDialog(this, nullptr /*make it top level window*/);
- 
-     mConfigDialog->showConfigPanelPage();
-+    mStandaloneWindows->observeWindow(mConfigDialog.data());
-     mConfigDialog->show();
-     mConfigDialog->raise();
-     mConfigDialog->activateWindow();
-@@ -608,6 +614,7 @@ void LXQtPanel::showAddPluginDialog()
-         mConfigDialog = new ConfigPanelDialog(this, nullptr /*make it top level window*/);
- 
-     mConfigDialog->showConfigPluginsPage();
-+    mStandaloneWindows->observeWindow(mConfigDialog.data());
-     mConfigDialog->show();
-     mConfigDialog->raise();
-     mConfigDialog->activateWindow();
-@@ -967,6 +974,7 @@ void LXQtPanel::showPopupMenu(Plugin *plugin)
-      * of QDesktopWidget::availableGeometry)
-      */
-     menu->setGeometry(calculatePopupWindowPos(QCursor::pos(), menu->sizeHint()));
-+    willShowWindow(menu);
-     menu->show();
- }
- 
-@@ -1043,6 +1051,14 @@ QRect LXQtPanel::calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const Q
- /************************************************
- 
-  ************************************************/
-+void LXQtPanel::willShowWindow(QWidget * w)
-+{
-+    mStandaloneWindows->observeWindow(w);
-+}
-+
-+/************************************************
-+
-+ ************************************************/
- QString LXQtPanel::qssPosition() const
- {
-     return positionToStr(position());
-@@ -1107,20 +1123,17 @@ void LXQtPanel::showPanel()
- 
- void LXQtPanel::hidePanel()
- {
--    if (mHidable && !mHidden)
-+    if (mHidable && !mHidden
-+            && !geometry().contains(QCursor::pos())
-+            && !mStandaloneWindows->isAnyWindowShown()
-+       )
-         mHideTimer.start();
- }
- 
- void LXQtPanel::hidePanelWork()
- {
--    if (mHidable && !mHidden && !geometry().contains(QCursor::pos()))
--    {
--        mHidden = true;
--        setPanelGeometry();
--    } else
--    {
--        mHideTimer.start();
--    }
-+    mHidden = true;
-+    setPanelGeometry();
- }
- 
- void LXQtPanel::setHidable(bool hidable, bool save)
-@@ -1128,7 +1141,7 @@ void LXQtPanel::setHidable(bool hidable, bool save)
-     if (mHidable == hidable)
-         return;
- 
--    mHidable = mHidden = hidable;
-+    mHidable = hidable;
- 
-     if (save)
-         saveSettings(true);
-diff --git panel/lxqtpanel.h panel/lxqtpanel.h
-index 8ff4b8c..990063f 100644
---- panel/lxqtpanel.h
-+++ panel/lxqtpanel.h
-@@ -48,6 +48,7 @@ class PluginInfo;
- class LXQtPanelLayout;
- class ConfigPanelDialog;
- class PanelPluginsModel;
-+class WindowNotifier;
- 
- /*! \brief The LXQtPanel class provides a single lxqt-panel.
-  */
-@@ -80,11 +81,12 @@ public:
-     void showPopupMenu(Plugin *plugin = 0);
- 
-     // ILXQtPanel .........................
--    ILXQtPanel::Position position() const { return mPosition; }
--    QRect globalGometry() const;
-+    ILXQtPanel::Position position() const override { return mPosition; }
-+    QRect globalGometry() const override;
-     Plugin *findPlugin(const ILXQtPanelPlugin *iPlugin) const;
--    QRect calculatePopupWindowPos(QPoint const & absolutePos, QSize const & windowSize) const;
--    QRect calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const QSize &windowSize) const;
-+    QRect calculatePopupWindowPos(QPoint const & absolutePos, QSize const & windowSize) const override;
-+    QRect calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const QSize &windowSize) const override;
-+    void willShowWindow(QWidget * w) override;
- 
-     // For QSS properties ..................
-     QString qssPosition() const;
-@@ -95,8 +97,8 @@ public:
- 
-     // Settings
-     int panelSize() const { return mPanelSize; }
--    int iconSize() const { return mIconSize; }
--    int lineCount() const { return mLineCount; }
-+    int iconSize() const override { return mIconSize; }
-+    int lineCount() const override { return mLineCount; }
-     int length() const { return mLength; }
-     bool lengthInPercents() const { return mLengthInPercents; }
-     LXQtPanel::Alignment alignment() const { return mAlignment; }
-@@ -138,8 +140,8 @@ signals:
-     void pluginRemoved();
- 
- protected:
--    bool event(QEvent *event);
--    void showEvent(QShowEvent *event);
-+    bool event(QEvent *event) override;
-+    void showEvent(QShowEvent *event) override;
- 
- public slots:
-     void showConfigDialog();
-@@ -156,6 +158,7 @@ private:
-     QFrame *LXQtPanelWidget;
-     QString mConfigGroup;
-     QScopedPointer<PanelPluginsModel> mPlugins;
-+    QScopedPointer<WindowNotifier> mStandaloneWindows; //!< object for storing info if some standalone window is shown (for preventing hide)
- 
-     int findAvailableScreen(LXQtPanel::Position position);
-     void updateWmStrut();
-diff --git panel/plugin.cpp panel/plugin.cpp
-index a4acc78..be23a8e 100644
---- panel/plugin.cpp
-+++ panel/plugin.cpp
-@@ -477,6 +477,7 @@ void Plugin::showConfigureDialog()
-     if (!dialog)
-         return;
- 
-+    mPanel->willShowWindow(dialog);
-     dialog->show();
-     dialog->raise();
-     dialog->activateWindow();
-diff --git panel/windownotifier.cpp panel/windownotifier.cpp
-new file mode 100644
-index 0000000..0b41057
---- /dev/null
-+++ panel/windownotifier.cpp
-@@ -0,0 +1,65 @@
-+/* BEGIN_COMMON_COPYRIGHT_HEADER
-+ * (c)LGPL2+
-+ *
-+ * LXQt - a lightweight, Qt based, desktop toolset
-+ * http://lxqt.org
-+ *
-+ * Copyright: 2015 LXQt team
-+ * Authors:
-+ *   Palo Kisa <palo.kisa@gmail.com>
-+ *
-+ * This program or library is free software; you can redistribute it
-+ * and/or modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 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
-+ * Lesser General Public License for more details.
-+
-+ * You should have received a copy of the GNU Lesser General
-+ * Public License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+ * Boston, MA 02110-1301 USA
-+ *
-+ * END_COMMON_COPYRIGHT_HEADER */
-+
-+#include "windownotifier.h"
-+#include <QWidget>
-+#include <QEvent>
-+
-+void WindowNotifier::observeWindow(QWidget * w)
-+{
-+    //installing the same filter object multiple times doesn't harm
-+    w->installEventFilter(this);
-+}
-+
-+
-+bool WindowNotifier::eventFilter(QObject * watched, QEvent * event)
-+{
-+    QWidget * widget = qobject_cast<QWidget *>(watched); //we're observing only QWidgetw
-+    auto it = std::lower_bound(mShownWindows.begin(), mShownWindows.end(), widget);
-+    switch (event->type())
-+    {
-+        case QEvent::Close:
-+            watched->removeEventFilter(this);
-+            //no break
-+        case QEvent::Hide:
-+            Q_ASSERT(mShownWindows.end() != it);
-+            mShownWindows.erase(it);
-+            if (mShownWindows.isEmpty())
-+                emit lastHidden();
-+            break;
-+        case QEvent::Show:
-+            {
-+                const bool first_shown = mShownWindows.isEmpty();
-+                mShownWindows.insert(it, widget); //we keep the mShownWindows sorted
-+                if (first_shown)
-+                    emit firstShown();
-+            }
-+        default:
-+            break;
-+    }
-+    return false;
-+}
-diff --git panel/windownotifier.h panel/windownotifier.h
-new file mode 100644
-index 0000000..53f2f3f
---- /dev/null
-+++ panel/windownotifier.h
-@@ -0,0 +1,53 @@
-+/* BEGIN_COMMON_COPYRIGHT_HEADER
-+ * (c)LGPL2+
-+ *
-+ * LXQt - a lightweight, Qt based, desktop toolset
-+ * http://lxqt.org
-+ *
-+ * Copyright: 2015 LXQt team
-+ * Authors:
-+ *   Palo Kisa <palo.kisa@gmail.com>
-+ *
-+ * This program or library is free software; you can redistribute it
-+ * and/or modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 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
-+ * Lesser General Public License for more details.
-+
-+ * You should have received a copy of the GNU Lesser General
-+ * Public License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+ * Boston, MA 02110-1301 USA
-+ *
-+ * END_COMMON_COPYRIGHT_HEADER */
-+
-+#if !defined(WINDOWNOTIFIER_H)
-+#define WINDOWNOTIFIER_H
-+
-+#include <QObject>
-+
-+class QWidget;
-+
-+class WindowNotifier : public QObject
-+{
-+    Q_OBJECT
-+public:
-+    using QObject::QObject;
-+
-+    void observeWindow(QWidget * w);
-+    inline bool isAnyWindowShown() const { return !mShownWindows.isEmpty(); }
-+
-+    virtual bool eventFilter(QObject * watched, QEvent * event) override;
-+signals:
-+    void lastHidden();
-+    void firstShown();
-+
-+private:
-+    QList<QWidget *> mShownWindows; //!< known shown windows (sorted)
-+};
-+
-+#endif
-diff --git plugin-clock/lxqtclock.cpp plugin-clock/lxqtclock.cpp
-index 79c2c17..d4603de 100644
---- plugin-clock/lxqtclock.cpp
-+++ plugin-clock/lxqtclock.cpp
-@@ -286,6 +286,7 @@ void LXQtClock::activated(ActivationReason reason)
-     {
-         QRect pos = calculatePopupWindowPos(mCalendarPopup->size());
-         mCalendarPopup->move(pos.topLeft());
-+        willShowWindow(mCalendarPopup);
-         mCalendarPopup->show();
-     }
-     else
-diff --git plugin-directorymenu/directorymenu.cpp plugin-directorymenu/directorymenu.cpp
-index 8c5ec28..e332e05 100644
---- plugin-directorymenu/directorymenu.cpp
-+++ plugin-directorymenu/directorymenu.cpp
-@@ -58,11 +58,11 @@ DirectoryMenu::DirectoryMenu(const ILXQtPanelPluginStartupInfo &startupInfo) :
- 
- DirectoryMenu::~DirectoryMenu()
- {
--	if(mMenu)
--	{
--		delete mMenu;
--		mMenu = 0;
--	}
-+    if(mMenu)
-+    {
-+        delete mMenu;
-+        mMenu = 0;
-+    }
- }
- 
- void DirectoryMenu::showMenu()
-@@ -102,67 +102,67 @@ void DirectoryMenu::showMenu()
-             break;
-     }
- 
-+    willShowWindow(mMenu);
-     // Just using Qt`s activateWindow() won't work on some WMs like Kwin.
-     // Solution is to execute menu 1ms later using timer
--    mButton.activateWindow();
--    mMenu->exec(QPoint(x, y));
-+    mMenu->popup(calculatePopupWindowPos(mMenu->sizeHint()).topLeft());
- }
- 
- void DirectoryMenu::buildMenu(const QString& path)
- {
--	if(mMenu)
--	{
--		delete mMenu;
--		mMenu = 0;
--	}
-+    if(mMenu)
-+    {
-+        delete mMenu;
-+        mMenu = 0;
-+    }
- 
--	mPathStrings.clear();
-+    mPathStrings.clear();
- 
--	mMenu = new QMenu();
-+    mMenu = new QMenu();
- 
--	addActions(mMenu, path);
-+    addActions(mMenu, path);
- }
- 
- void DirectoryMenu::openDirectory(const QString& path)
- {
--	QDesktopServices::openUrl(QUrl("file://" + QDir::toNativeSeparators(path)));
-+    QDesktopServices::openUrl(QUrl("file://" + QDir::toNativeSeparators(path)));
- }
- 
- void DirectoryMenu::addMenu(QString path)
- {
--	QSignalMapper* sender = (QSignalMapper* )QObject::sender();
--	QMenu* parentMenu = (QMenu*) sender->mapping(path);
-+    QSignalMapper* sender = (QSignalMapper* )QObject::sender();
-+    QMenu* parentMenu = (QMenu*) sender->mapping(path);
- 
--	if(parentMenu->isEmpty())
--	{
--		addActions(parentMenu, path);
--	}
-+    if(parentMenu->isEmpty())
-+    {
-+        addActions(parentMenu, path);
-+    }
- }
- 
- void DirectoryMenu::addActions(QMenu* menu, const QString& path)
- {
--	mPathStrings.push_back(path);
-+    mPathStrings.push_back(path);
- 
--	QAction* openDirectoryAction = menu->addAction(XdgIcon::fromTheme("folder"), tr("Open"));
--	connect(openDirectoryAction, SIGNAL(triggered()), mOpenDirectorySignalMapper, SLOT(map()));
--	mOpenDirectorySignalMapper->setMapping(openDirectoryAction, mPathStrings.back());
-+    QAction* openDirectoryAction = menu->addAction(XdgIcon::fromTheme("folder"), tr("Open"));
-+    connect(openDirectoryAction, SIGNAL(triggered()), mOpenDirectorySignalMapper, SLOT(map()));
-+    mOpenDirectorySignalMapper->setMapping(openDirectoryAction, mPathStrings.back());
- 
--	menu->addSeparator();
-+    menu->addSeparator();
- 
--	QDir dir(path);
--	QFileInfoList list = dir.entryInfoList();
-+    QDir dir(path);
-+    QFileInfoList list = dir.entryInfoList();
- 
--	foreach (const QFileInfo& entry, list)
-+    foreach (const QFileInfo& entry, list)
-     {
--    	if(entry.isDir() && !entry.isHidden())
--    	{
--			mPathStrings.push_back(entry.fileName());
-+        if(entry.isDir() && !entry.isHidden())
-+        {
-+            mPathStrings.push_back(entry.fileName());
- 
--			QMenu* subMenu = menu->addMenu(XdgIcon::fromTheme("folder"), mPathStrings.back());
-+            QMenu* subMenu = menu->addMenu(XdgIcon::fromTheme("folder"), mPathStrings.back());
- 
--    		connect(subMenu, SIGNAL(aboutToShow()), mMenuSignalMapper, SLOT(map()));
--    		mMenuSignalMapper->setMapping(subMenu, entry.absoluteFilePath());
--    	}
-+            connect(subMenu, SIGNAL(aboutToShow()), mMenuSignalMapper, SLOT(map()));
-+            mMenuSignalMapper->setMapping(subMenu, entry.absoluteFilePath());
-+        }
-     }
- }
- 
-diff --git plugin-dom/domplugin.cpp plugin-dom/domplugin.cpp
-index ffd05c6..0988a2b 100644
---- plugin-dom/domplugin.cpp
-+++ plugin-dom/domplugin.cpp
-@@ -51,6 +51,7 @@ void DomPlugin::showDialog()
-         dialog->setAttribute(Qt::WA_DeleteOnClose);
-     }
- 
-+    willShowWindow(dialog);
-     dialog->show();
-     dialog->activateWindow();
- }
-diff --git plugin-mainmenu/lxqtmainmenu.cpp plugin-mainmenu/lxqtmainmenu.cpp
-index 9673a4f..b9ff6e4 100644
---- plugin-mainmenu/lxqtmainmenu.cpp
-+++ plugin-mainmenu/lxqtmainmenu.cpp
-@@ -130,6 +130,7 @@ void LXQtMainMenu::showMenu()
-     if (!mMenu)
-         return;
- 
-+    willShowWindow(mMenu);
-     // Just using Qt`s activateWindow() won't work on some WMs like Kwin.
-     // Solution is to execute menu 1ms later using timer
-     mMenu->popup(calculatePopupWindowPos(mMenu->sizeHint()).topLeft());
-@@ -227,8 +228,6 @@ void LXQtMainMenu::buildMenu()
-     menu->installEventFilter(this);
-     connect(menu, &QMenu::aboutToHide, &mHideTimer, static_cast<void (QTimer::*)()>(&QTimer::start));
-     connect(menu, &QMenu::aboutToShow, &mHideTimer, &QTimer::stop);
--    // panel notification (needed in case of auto-hide)
--    connect(menu, &QMenu::aboutToHide, dynamic_cast<LXQtPanel *>(panel()), &LXQtPanel::hidePanel);
- 
-     QMenu *oldMenu = mMenu;
-     mMenu = menu;
-diff --git plugin-mount/popup.cpp plugin-mount/popup.cpp
-index 1c3e7c1..7993681 100644
---- plugin-mount/popup.cpp
-+++ plugin-mount/popup.cpp
-@@ -90,7 +90,12 @@ Popup::Popup(ILXQtPanelPlugin * plugin, QWidget* parent):
- 
- void Popup::showHide()
- {
--    setVisible(isHidden());
-+    if (isHidden())
-+    {
-+        mPlugin->willShowWindow(this);
-+        show();
-+    } else
-+        close();
- }
- 
- void Popup::onDeviceAdded(QString const & udi)
-diff --git plugin-statusnotifier/statusnotifierbutton.cpp plugin-statusnotifier/statusnotifierbutton.cpp
-index fb124c6..71cf78f 100644
---- plugin-statusnotifier/statusnotifierbutton.cpp
-+++ plugin-statusnotifier/statusnotifierbutton.cpp
-@@ -249,8 +249,10 @@ void StatusNotifierButton::mouseReleaseEvent(QMouseEvent *event)
-     else if (Qt::RightButton == event->button())
-     {
-         if (mMenu)
--            mMenu->popup(QCursor::pos());
--        else
-+        {
-+            mPlugin->willShowWindow(mMenu);
-+            mMenu->popup(mPlugin->calculatePopupWindowPos(mMenu->sizeHint()).topLeft());
-+        } else
-             interface->ContextMenu(QCursor::pos().x(), QCursor::pos().y());
-     }
- 
-diff --git plugin-taskbar/lxqttaskgroup.cpp plugin-taskbar/lxqttaskgroup.cpp
-index 6828216..79e27f5 100644
---- plugin-taskbar/lxqttaskgroup.cpp
-+++ plugin-taskbar/lxqttaskgroup.cpp
-@@ -84,6 +84,7 @@ void LXQtTaskGroup::contextMenuEvent(QContextMenuEvent *event)
-         mPreventPopup = false;
-     });
-     menu->setGeometry(mPlugin->panel()->calculatePopupWindowPos(mapToGlobal(event->pos()), menu->sizeHint()));
-+    mPlugin->willShowWindow(menu);
-     menu->show();
- }
- 
-@@ -418,6 +419,7 @@ void LXQtTaskGroup::setPopupVisible(bool visible, bool fast)
-             recalculateFramePosition();
-         }
- 
-+        mPlugin->willShowWindow(mPopup);
-         mPopup->show();
-         emit popupShown(this);
-     }
-diff --git plugin-volume/volumebutton.cpp plugin-volume/volumebutton.cpp
-index a738a1a..98b3f10 100644
---- plugin-volume/volumebutton.cpp
-+++ plugin-volume/volumebutton.cpp
-@@ -133,6 +133,7 @@ void VolumeButton::showVolumeSlider()
-     m_volumePopup->updateGeometry();
-     m_volumePopup->adjustSize();
-     QRect pos = mPlugin->calculatePopupWindowPos(m_volumePopup->size());
-+    mPlugin->willShowWindow(m_volumePopup);
-     m_volumePopup->openAt(pos.topLeft(), Qt::TopLeftCorner);
-     m_volumePopup->activateWindow();
- }
-diff --git plugin-worldclock/lxqtworldclock.cpp plugin-worldclock/lxqtworldclock.cpp
-index 7386049..8fa795d 100644
---- plugin-worldclock/lxqtworldclock.cpp
-+++ plugin-worldclock/lxqtworldclock.cpp
-@@ -356,6 +356,7 @@ void LXQtWorldClock::activated(ActivationReason reason)
-         mPopup->adjustSize();
-         mPopup->setGeometry(calculatePopupWindowPos(mPopup->size()));
- 
-+        willShowWindow(mPopup);
-         mPopup->show();
-     }
-     else

diff --git a/lxqt-base/lxqt-panel/lxqt-panel-0.10.0-r1.ebuild b/lxqt-base/lxqt-panel/lxqt-panel-0.10.0-r1.ebuild
index b342e0bc9d2..3ae6d34161e 100644
--- a/lxqt-base/lxqt-panel/lxqt-panel-0.10.0-r1.ebuild
+++ b/lxqt-base/lxqt-panel/lxqt-panel-0.10.0-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2016 Gentoo Foundation
+# Copyright 1999-2017 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=5
@@ -11,7 +11,8 @@ if [[ ${PV} = *9999* ]]; then
 	inherit git-r3
 	EGIT_REPO_URI="git://git.lxde.org/git/lxde/${PN}.git"
 else
-	SRC_URI="https://downloads.lxqt.org/lxqt/${PV}/${P}.tar.xz"
+	SRC_URI="https://downloads.lxqt.org/lxqt/${PV}/${P}.tar.xz
+		https://dev.gentoo.org/~chiitoo/distfiles/lxqt-panel-0.10.0-autohide-patch.tar.bz2"
 	KEYWORDS="~amd64 ~arm ~arm64 ~x86"
 fi
 
@@ -55,7 +56,7 @@ RDEPEND="${CDEPEND}
 	dev-qt/qtsvg:5
 	>=lxde-base/lxmenu-data-0.1.2"
 
-PATCHES=( "${FILESDIR}/${P}-autohide.patch" )
+PATCHES=( "${WORKDIR}/${P}-autohide.patch" )
 
 src_configure() {
 	local mycmakeargs i y


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: lxqt-base/lxqt-panel/files/, lxqt-base/lxqt-panel/
@ 2017-12-11  1:37 Anthony G. Basile
  0 siblings, 0 replies; 3+ messages in thread
From: Anthony G. Basile @ 2017-12-11  1:37 UTC (permalink / raw
  To: gentoo-commits

commit:     c27e67813ed4ccb87f255479ec708f58f00a882b
Author:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 11 01:37:16 2017 +0000
Commit:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Dec 11 01:37:32 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c27e6781

lxqt-base/lxqt-panel: fix build error reported in bug #634222

Package-Manager: Portage-2.3.13, Repoman-2.3.3

 .../lxqt-panel-0.11.0-fix-undef-explicit.patch     | 32 ++++++++++++++++++++++
 lxqt-base/lxqt-panel/lxqt-panel-0.11.0.ebuild      |  4 +++
 2 files changed, 36 insertions(+)

diff --git a/lxqt-base/lxqt-panel/files/lxqt-panel-0.11.0-fix-undef-explicit.patch b/lxqt-base/lxqt-panel/files/lxqt-panel-0.11.0-fix-undef-explicit.patch
new file mode 100644
index 00000000000..c6349c25cba
--- /dev/null
+++ b/lxqt-base/lxqt-panel/files/lxqt-panel-0.11.0-fix-undef-explicit.patch
@@ -0,0 +1,32 @@
+From ec62109e0fa678875a9b10fc6f1975267432712d Mon Sep 17 00:00:00 2001
+From: Palo Kisa <palo.kisa@gmail.com>
+Date: Mon, 30 Jan 2017 12:21:10 +0100
+Subject: [PATCH] plugin-kbindicator: Undef the "explicit" workaround
+
+..after include and add explanation of the workaround.
+
+closes lxde/lxqt#1251
+---
+ plugin-kbindicator/src/x11/kbdlayout.cpp | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/plugin-kbindicator/src/x11/kbdlayout.cpp b/plugin-kbindicator/src/x11/kbdlayout.cpp
+index c4aa4e27..883df074 100644
+--- a/plugin-kbindicator/src/x11/kbdlayout.cpp
++++ b/plugin-kbindicator/src/x11/kbdlayout.cpp
+@@ -33,8 +33,15 @@
+ 
+ #include <xkbcommon/xkbcommon-x11.h>
+ #include <xcb/xcb.h>
++
++// Note: We need to override "explicit" as this is a C++ keyword. But it is
++// used as variable name in xkb.h. This is causing a failure in C++ compile
++// time.
++// Similar bug here: https://bugs.freedesktop.org/show_bug.cgi?id=74080
+ #define explicit _explicit
+ #include <xcb/xkb.h>
++#undef explicit
++
+ #include "../kbdinfo.h"
+ #include "../controls.h"
+ 

diff --git a/lxqt-base/lxqt-panel/lxqt-panel-0.11.0.ebuild b/lxqt-base/lxqt-panel/lxqt-panel-0.11.0.ebuild
index 65f1bebbd9a..39ae731adb2 100644
--- a/lxqt-base/lxqt-panel/lxqt-panel-0.11.0.ebuild
+++ b/lxqt-base/lxqt-panel/lxqt-panel-0.11.0.ebuild
@@ -55,6 +55,10 @@ RDEPEND="${CDEPEND}
 	dev-qt/qtsvg:5
 	>=lxde-base/lxmenu-data-0.1.2"
 
+PATCHES=(
+	${FILESDIR}/${P}-fix-undef-explicit.patch
+)
+
 src_configure() {
 	local mycmakeargs i y
 	mycmakeargs=( -DPULL_TRANSLATIONS=OFF )


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-12-11  1:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-07  2:39 [gentoo-commits] repo/gentoo:master commit in: lxqt-base/lxqt-panel/files/, lxqt-base/lxqt-panel/ NP Hardass
  -- strict thread matches above, loose matches on Subject: below --
2017-12-11  1:37 Anthony G. Basile
2016-01-02 23:26 Jauhien Piatlicki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox