mirror of
https://gitdl.cn/https://github.com/chakralinux/desktop.git
synced 2025-01-23 09:22:12 +08:00
appmenu-qt bug fix https://bugs.launchpad.net/appmenu-qt/+bug/1096008
This commit is contained in:
parent
44323d8d29
commit
a0dc7237f0
@ -1,28 +1,31 @@
|
||||
# Chakra Packages for Chakra, part of chakra-project.org
|
||||
#
|
||||
# maintainer (i686): Phil Miller <philm[at]chakra-project[dog]org>
|
||||
# maintainer (x86_64): Manuel Tortosa <manutortosa[at]chakra-project[dot]org>
|
||||
# Original Contributor Martin Lee < hellnest.fuah@gmail.com >
|
||||
# Fix Contributo mcder3 <mcder3@gmail.com>
|
||||
# maintainer abveritas[at]chakra-project[dot]org>
|
||||
# Contributor Martin Lee < hellnest.fuah@gmail.com >
|
||||
|
||||
pkgname=appmenu-qt
|
||||
appname=appmenu-qt
|
||||
pkgbranch=trunk
|
||||
pkgver=0.2.6
|
||||
pkgrel=1
|
||||
pkgrel=2
|
||||
pkgdesc="Application menu module for Qt"
|
||||
arch=('i686' 'x86_64')
|
||||
arch=('x86_64')
|
||||
url="https://launchpad.net/appmenu-qt"
|
||||
license=('GPL')
|
||||
depends=('libdbusmenu-qt')
|
||||
makedepends=('cmake' 'automoc4')
|
||||
provides=('appmenu-qt')
|
||||
conflicts=('appmenu-qt-bzr')
|
||||
source=("http://launchpad.net/${appname}/${pkgbranch}/${pkgver}/+download/${appname}-${pkgver}.tar.bz2")
|
||||
sha1sums=('e600d389b85c941e2c891e5123968f1ffaa666d0')
|
||||
source=("http://launchpad.net/${appname}/${pkgbranch}/${pkgver}/+download/${appname}-${pkgver}.tar.bz2"
|
||||
'appmenu.diff')
|
||||
md5sums=('90cce750e5412d43ce075b0a9bdb6782'
|
||||
'8aa185359143d5f0d6a00888694f559d')
|
||||
|
||||
build() {
|
||||
cd "${srcdir}/${appname}-${pkgver}"
|
||||
# bug https://bugs.launchpad.net/appmenu-qt/+bug/1096008
|
||||
patch -p0 -i "${srcdir}"/appmenu.diff
|
||||
|
||||
cmake . -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix`
|
||||
make
|
||||
}
|
||||
|
147
appmenu-qt/appmenu.diff
Normal file
147
appmenu-qt/appmenu.diff
Normal file
@ -0,0 +1,147 @@
|
||||
=== modified file 'src/CMakeLists.txt'
|
||||
--- src/CMakeLists.txt 2012-02-27 14:27:17 +0000
|
||||
+++ src/CMakeLists.txt 2013-01-04 10:33:53 +0000
|
||||
@@ -15,6 +15,10 @@
|
||||
${QT_QTXML_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
+qt4_add_dbus_interface(appmenu_qt_SRCS com.canonical.AppMenu.Registrar.xml
|
||||
+ registrar)
|
||||
+
|
||||
+
|
||||
qt4_automoc(${appmenu_qt_SRCS})
|
||||
|
||||
link_directories(
|
||||
|
||||
=== modified file 'src/appmenuplatformmenubar.cpp'
|
||||
--- src/appmenuplatformmenubar.cpp 2012-04-04 16:06:06 +0000
|
||||
+++ src/appmenuplatformmenubar.cpp 2013-01-04 10:36:25 +0000
|
||||
@@ -15,6 +15,7 @@
|
||||
along with appmenu-qt. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "appmenuplatformmenubar.h"
|
||||
+#include "registrar.h"
|
||||
|
||||
// dbusmenu-qt
|
||||
#include <dbusmenuexporter.h>
|
||||
@@ -393,6 +394,8 @@
|
||||
|
||||
bool MenuBarAdapter::registerWindow()
|
||||
{
|
||||
+ static com::canonical::AppMenu::Registrar *registrar = 0;
|
||||
+
|
||||
if (!m_menuBar->window()) {
|
||||
WARN << "No parent for this menubar";
|
||||
return false;
|
||||
@@ -403,9 +406,8 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
- QDBusInterface host(REGISTRAR_SERVICE, REGISTRAR_PATH, REGISTRAR_IFACE);
|
||||
- if (!host.isValid()) {
|
||||
- return false;
|
||||
+ if (!registrar) {
|
||||
+ registrar = new com::canonical::AppMenu::Registrar(REGISTRAR_SERVICE, REGISTRAR_PATH, QDBusConnection::sessionBus(), 0);
|
||||
}
|
||||
|
||||
Q_FOREACH(QAction *action, m_menuBar->actions()) {
|
||||
@@ -428,8 +430,9 @@
|
||||
}
|
||||
|
||||
m_registeredWinId = winId;
|
||||
- QVariant path = QVariant::fromValue<QDBusObjectPath>(QDBusObjectPath(m_objectPath));
|
||||
- host.asyncCall(QLatin1String("RegisterWindow"), QVariant(winId), path);
|
||||
+ if (registrar) {
|
||||
+ registrar->RegisterWindow(winId, QDBusObjectPath(m_objectPath));
|
||||
+ }
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
=== added file 'src/com.canonical.AppMenu.Registrar.xml'
|
||||
--- src/com.canonical.AppMenu.Registrar.xml 1970-01-01 00:00:00 +0000
|
||||
+++ src/com.canonical.AppMenu.Registrar.xml 2013-01-04 10:04:35 +0000
|
||||
@@ -0,0 +1,56 @@
|
||||
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||
+<node xmlns:dox="http://www.ayatana.org/dbus/dox.dtd">
|
||||
+ <dox:d><![CDATA[
|
||||
+ @mainpage
|
||||
+
|
||||
+ An interface to register menus that are associated with a window in an application. The
|
||||
+ main interface is docuemented here: @ref com::canonical::AppMenu::Registrar.
|
||||
+
|
||||
+ The actual menus are transported using the dbusmenu protocol which is available
|
||||
+ here: @ref com::canonical::dbusmenu.
|
||||
+ ]]></dox:d>
|
||||
+ <interface name="com.canonical.AppMenu.Registrar" xmlns:dox="http://www.ayatana.org/dbus/dox.dtd">
|
||||
+ <dox:d>
|
||||
+ An interface to register a menu from an application's window to be displayed in another
|
||||
+ window. This manages that association between XWindow Window IDs and the dbus
|
||||
+ address and object that provides the menu using the dbusmenu dbus interface.
|
||||
+ </dox:d>
|
||||
+ <method name="RegisterWindow">
|
||||
+ <dox:d><![CDATA[
|
||||
+ Associates a dbusmenu with a window
|
||||
+
|
||||
+ /note this method assumes that the connection from the caller is the DBus connection
|
||||
+ to use for the object. Applications that use multiple DBus connections will need to
|
||||
+ ensure this method is called with the same connection that implmenets the object.
|
||||
+ ]]></dox:d>
|
||||
+ <arg name="windowId" type="u" direction="in">
|
||||
+ <dox:d>The XWindow ID of the window</dox:d>
|
||||
+ </arg>
|
||||
+ <arg name="menuObjectPath" type="o" direction="in">
|
||||
+ <dox:d>The object on the dbus interface implementing the dbusmenu interface</dox:d>
|
||||
+ </arg>
|
||||
+ </method>
|
||||
+ <method name="UnregisterWindow">
|
||||
+ <dox:d>
|
||||
+ A method to allow removing a window from the database. Windows will also be removed
|
||||
+ when the client drops off DBus so this is not required. It is polite though. And
|
||||
+ important for testing.
|
||||
+ </dox:d>
|
||||
+ <arg name="windowId" type="u" direction="in">
|
||||
+ <dox:d>The XWindow ID of the window</dox:d>
|
||||
+ </arg>
|
||||
+ </method>
|
||||
+ <method name="GetMenuForWindow">
|
||||
+ <dox:d>Gets the registered menu for a given window ID.</dox:d>
|
||||
+ <arg name="windowId" type="u" direction="in">
|
||||
+ <dox:d>The XWindow ID of the window to get</dox:d>
|
||||
+ </arg>
|
||||
+ <arg name="service" type="s" direction="out">
|
||||
+ <dox:d>The address of the connection on DBus (e.g. :1.23 or org.example.service)</dox:d>
|
||||
+ </arg>
|
||||
+ <arg name="menuObjectPath" type="o" direction="out">
|
||||
+ <dox:d>The path to the object which implements the com.canonical.dbusmenu interface.</dox:d>
|
||||
+ </arg>
|
||||
+ </method>
|
||||
+ </interface>
|
||||
+</node>
|
||||
|
||||
=== modified file 'src/appmenuplatformmenubar.cpp'
|
||||
--- src/appmenuplatformmenubar.cpp 2013-01-11 15:05:38 +0000
|
||||
+++ src/appmenuplatformmenubar.cpp 2013-01-14 16:01:25 +0000
|
||||
@@ -410,6 +410,10 @@
|
||||
registrar = new com::canonical::AppMenu::Registrar(REGISTRAR_SERVICE, REGISTRAR_PATH, QDBusConnection::sessionBus(), 0);
|
||||
}
|
||||
|
||||
+ if (!registrar || !registrar->isValid()) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
Q_FOREACH(QAction *action, m_menuBar->actions()) {
|
||||
if (!action->isSeparator()) {
|
||||
m_rootMenu->addAction(action);
|
||||
@@ -430,9 +434,9 @@
|
||||
}
|
||||
|
||||
m_registeredWinId = winId;
|
||||
- if (registrar) {
|
||||
- registrar->RegisterWindow(winId, QDBusObjectPath(m_objectPath));
|
||||
- }
|
||||
+
|
||||
+ registrar->RegisterWindow(winId, QDBusObjectPath(m_objectPath));
|
||||
+
|
||||
return true;
|
||||
}
|
Loading…
Reference in New Issue
Block a user