Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:GA
appmenu-qt
async-dbus-calls.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File async-dbus-calls.diff of Package appmenu-qt
Subject: Make appmenu-qt use async dbus calls From: Cédric Bellegarde Bug: bnc#798334, https://bugs.launchpad.net/appmenu-qt/+bug/1096008 Patch-upstream: yes === modified file 'src/CMakeLists.txt' --- src/CMakeLists.txt 2012-02-27 14:27:17 +0000 +++ src/CMakeLists.txt 2013-01-11 15:05:38 +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-11 15:05:38 +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-14 09:46:57 +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>
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor