Commit d3d2123f authored by Alf Gaida's avatar Alf Gaida

Cherry-picking new upstream version 0.14.0.

* Bumped Standards to 4.3.0, no changes needed
* Dropped d/compat, use debhelper-compat = 12, no changes needed
* Fixed years in d/copyright
* Bumped minimum version liblxqt0-dev (>= 0.14.0~)
* Removed obsolete PULL_TRANSLATIONS= OFF from dh_auto_configure
* Added Build-Depends-Package fields to symbols
* Added l10n-package, moved from lxqt-l10n
* Added build dependency xserver-xorg-input-libinput-dev
* Added d/upstream/metadata
parent 935d1f64
lxqt-globalkeys-0.14.0 / 2019-01-25
===================================
* Bumped version to 0.14.0
* Don't use automatic string conversions
* Improved cmake scripting
- Set cmake_minimum_required to 3.1.0
- Removed locale compile definitons
- Remove QUIET from find_package
* Moved translations from lxqt-l10n back to lxqt-globalkeys
- Removed obsolete translation fuctionality
- Added translation promo in README.md
* Deleted superfluous *cs_CZ.desktop files
* Translation updates
lxqt-globalkeys-0.13.0 / 2018-05-21
===================================
......@@ -19,8 +34,8 @@ lxqt-globalkeys-0.13.0 / 2018-05-21
* cmake: Handle CMP0071
* Fixes wrong radio buttons when changing shortcuts
0.12.0 / 2017-10-21
===================
lxqt-globalkeys-0.12.0 / 2017-10-21
===================================
* Release 0.12.0: Update changelog
* Set patch version
......@@ -61,8 +76,8 @@ lxqt-globalkeys-0.13.0 / 2018-05-21
* Fix file paths, replacing razor with lxqt. * Remove Alt+F2 and Ctrl+Esc from openbox config file to avoid conflicts with lxqt-panel & lxqt-globalkeys.
* Add default configuration files for lxde-qt session.
0.11.1 / 2017-01-01
===================
lxqt-globalkeys-0.11.1 / 2017-01-01
===================================
* Release 0.11.1: Update changelog
* Added *da.desktop
......@@ -71,8 +86,8 @@ lxqt-globalkeys-0.13.0 / 2018-05-21
* Create lxqt-config-globalkeyshortcuts_fr.desktop
* Remove cpack (#41)
0.11.0 / 2016-09-24
===================
lxqt-globalkeys-0.11.0 / 2016-09-24
===================================
* Release 0.11.0: Add changelog
* Add README.md
......@@ -97,8 +112,8 @@ lxqt-globalkeys-0.13.0 / 2018-05-21
* upd: lxqt-config-globalkeyshortcuts_hu.ts
* Fix warning
0.10.0 / 2015-10-31
===================
lxqt-globalkeys-0.10.0 / 2015-10-31
===================================
* Fix license file
* Update translations
......@@ -143,8 +158,8 @@ lxqt-globalkeys-0.13.0 / 2018-05-21
* Use ~ instead of / as working dir. Fixes lxde/lxqt#521
* Make DBus calls to addClientAction async
0.9.0 / 2015-01-07
==================
lxqt-globalkeys-0.9.0 / 2015-01-07
==================================
* Portuguese update
* - Unify naming for a unique lxqt. No more suffixes
......@@ -155,8 +170,8 @@ lxqt-globalkeys-0.13.0 / 2018-05-21
* Drop Qt4 support in code
* Clean up CMakeLists.txt and drop Qt 4 support
0.8.0 / 2014-10-10
==================
lxqt-globalkeys-0.8.0 / 2014-10-10
==================================
* Adapt to the translation infrastructure
* - Fix Greek translation to conform with desktopfile validation
......@@ -170,13 +185,13 @@ lxqt-globalkeys-0.13.0 / 2018-05-21
* Use new LXQt header files.
* Improve FreeBSD support
0.7.0 / 2014-05-07
==================
lxqt-globalkeys-0.7.0 / 2014-05-07
==================================
* Update COPYING
0.6.99 / 2014-04-30
===================
lxqt-globalkeys-0.6.99 / 2014-04-30
===================================
* remove old translation templates remove translated icon names
* Add #include <libgen.h> for using basename(). Add typedef for error_t if it's not defined.
......
cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
# CMP0000: Call the cmake_minimum_required() command at the beginning of the top-level
# CMakeLists.txt file even before calling the project() command.
# The cmake_minimum_required(VERSION) command implicitly invokes the cmake_policy(VERSION)
# command to specify that the current project code is written for the given range of CMake
# versions.
project(lxqt-globalkeys)
# additional cmake files
......@@ -7,23 +11,20 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
option(UPDATE_TRANSLATIONS "Update source translation translations/*.ts files" OFF)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
set(LXQTBT_MINIMUM_VERSION "0.5.0")
set(KF5_MINIMUM_VERSION "5.36.0")
set(LXQT_MINIMUM_VERSION "0.14.0")
set(QT_MINIMUM_VERSION "5.7.1")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5DBus REQUIRED)
find_package(Qt5LinguistTools REQUIRED)
find_package(lxqt-build-tools ${LXQTBT_MINIMUM_VERSION} REQUIRED)
find_package(lxqt REQUIRED)
find_package(Qt5DBus ${QT_MINIMUM_VERSION} REQUIRED)
find_package(Qt5LinguistTools ${QT_MINIMUM_VERSION} REQUIRED)
find_package(Qt5Widgets ${QT_MINIMUM_VERSION} REQUIRED)
find_package(KF5WindowSystem ${KF5_MINIMUM_VERSION} REQUIRED)
find_package(lxqt ${LXQT_MINIMUM_VERSION} REQUIRED)
# Patch Version
set(LXQT_GLOBALKEYS_PATCH_VERSION 0)
......@@ -40,8 +41,6 @@ include(LXQtCompilerSettings NO_POLICY_SCOPE)
include(GNUInstallDirs) # Standard directories for installation
include(CMakePackageConfigHelpers)
add_definitions(-DQT_NO_FOREACH)
set(LXQT_GLOBALKEYS_LIBRARY_NAME lxqt-globalkeys)
set(LXQT_GLOBALKEYS_UI_LIBRARY_NAME lxqt-globalkeys-ui)
set(LXQT_INSTALL_CMAKE_DIR "${CMAKE_INSTALL_DATAROOTDIR}/cmake")
......
......@@ -63,3 +63,9 @@ which is used to customize shortcuts can be opened from the panel's main menu -
Preferences - LXQt Settings - Shortcut Keys and is provided by the
[Configuration Center](https://github.com/lxqt/lxqt-config#configuration-center)
of [lxqt-config](https://github.com/lxqt/lxqt-config) as well.
### Translation (Weblate)
<a href="https://weblate.lxqt.org/projects/lxqt/lxqt-globalkeys-config/">
<img src="https://weblate.lxqt.org/widgets/lxqt/-/lxqt-globalkeys-config/multi-auto.svg" alt="Translation status" />
</a>
cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
file(GLOB DESKTOP_FILES_IN *.desktop.in)
# Translations **********************************
......
# Translations
Name[cs_CZ]=Celkové klávesové zkratky
......@@ -173,7 +173,13 @@ target_include_directories(${PROJECT_NAME}
)
target_compile_definitions(${PROJECT_NAME}
PRIVATE "SHARED_EXPORT=Q_DECL_EXPORT"
PRIVATE
"SHARED_EXPORT=Q_DECL_EXPORT"
"QT_USE_QSTRINGBUILDER"
"QT_NO_CAST_FROM_ASCII"
"QT_NO_CAST_TO_ASCII"
"QT_NO_URL_CAST_FROM_STRING"
"QT_NO_CAST_FROM_BYTEARRAY"
)
export(TARGETS ${PROJECT_NAME} FILE "${CMAKE_BINARY_DIR}/${PROJECT_NAME}-targets.cmake")
......
......@@ -39,12 +39,12 @@ namespace GlobalKeyShortcut
ClientImpl::ClientImpl(Client *interface, QObject *parent)
: QObject(parent)
, mInterface(interface)
, mServiceWatcher(new QDBusServiceWatcher("org.lxqt.global_key_shortcuts", QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange, this))
, mServiceWatcher(new QDBusServiceWatcher(QLatin1String("org.lxqt.global_key_shortcuts"), QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange, this))
, mDaemonPresent(false)
{
connect(mServiceWatcher, SIGNAL(serviceUnregistered(QString)), this, SLOT(daemonDisappeared(QString)));
connect(mServiceWatcher, SIGNAL(serviceRegistered(QString)), this, SLOT(daemonAppeared(QString)));
mProxy = new org::lxqt::global_key_shortcuts::native("org.lxqt.global_key_shortcuts", "/native", QDBusConnection::sessionBus(), this);
mProxy = new org::lxqt::global_key_shortcuts::native(QLatin1String("org.lxqt.global_key_shortcuts"), QStringLiteral("/native"), QDBusConnection::sessionBus(), this);
mDaemonPresent = mProxy->isValid();
connect(this, SIGNAL(emitShortcutGrabbed(QString)), mInterface, SIGNAL(shortcutGrabbed(QString)));
......@@ -61,7 +61,7 @@ ClientImpl::~ClientImpl()
QMap<QString, Action*>::iterator M = mActions.end();
for (QMap<QString, Action*>::iterator I = mActions.begin(); I != M; ++I)
{
QDBusConnection::sessionBus().unregisterObject(QString("/global_key_shortcuts") + I.key());
QDBusConnection::sessionBus().unregisterObject(QLatin1String("/global_key_shortcuts") + I.key());
delete I.value();
}
......@@ -123,7 +123,7 @@ void ClientImpl::registrationFinished(QDBusPendingCallWatcher *watcher)
Action *ClientImpl::addClientAction(const QString &shortcut, const QString &path, const QString &description, QObject *parent)
{
if (!QRegExp("(/[A-Za-z0-9_]+){2,}").exactMatch(path))
if (!QRegExp(QStringLiteral("(/[A-Za-z0-9_]+){2,}")).exactMatch(path))
{
return 0;
}
......@@ -138,7 +138,7 @@ Action *ClientImpl::addClientAction(const QString &shortcut, const QString &path
ActionImpl *globalActionImpl = new ActionImpl(this, globalAction, path, description, globalAction);
globalAction->impl = globalActionImpl;
if (!QDBusConnection::sessionBus().registerObject(QString("/global_key_shortcuts") + path, globalActionImpl))
if (!QDBusConnection::sessionBus().registerObject(QLatin1String("/global_key_shortcuts") + path, globalActionImpl))
{
return 0;
}
......@@ -212,7 +212,7 @@ bool ClientImpl::removeClientAction(const QString &path)
return false;
}
QDBusConnection::sessionBus().unregisterObject(QString("/global_key_shortcuts") + path);
QDBusConnection::sessionBus().unregisterObject(QLatin1String("/global_key_shortcuts") + path);
mActions[path]->disconnect();
mActions.remove(path);
......@@ -246,7 +246,7 @@ void ClientImpl::removeAction(ActionImpl *actionImpl)
QDBusPendingReply<bool> reply = mProxy->deactivateClientAction(QDBusObjectPath(path));
reply.waitForFinished();
QDBusConnection::sessionBus().unregisterObject(QString("/global_key_shortcuts") + path);
QDBusConnection::sessionBus().unregisterObject(QLatin1String("/global_key_shortcuts") + path);
mActions[path]->disconnect();
mActions.remove(path);
......
set(PROJECT_NAME lxqt-config-globalkeyshortcuts)
project(${PROJECT_NAME})
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
find_package(KF5WindowSystem REQUIRED QUIET)
set(QT_DBUS_PREFIX "org.qtproject")
set(${PROJECT_NAME}_PATH_TO_DAEMON "${LXQT_GLOBALKEYS_SOURCE_DIR}/daemon")
......@@ -113,16 +107,6 @@ lxqt_translate_ts(${PROJECT_NAME}_QM_FILES
${${PROJECT_NAME}_TRANSLATABLE}
INSTALL_DIR
${LXQT_TRANSLATIONS_DIR}/${PROJECT_NAME}
PULL_TRANSLATIONS
${PULL_TRANSLATIONS}
CLEAN_TRANSLATIONS
${CLEAN_TRANSLATIONS}
TRANSLATIONS_REPO
${TRANSLATIONS_REPO}
TRANSLATIONS_REFSPEC
${TRANSLATIONS_REFSPEC}
REPO_SUBDIR
"lxqt-globalkeys/${PROJECT_NAME}"
)
lxqt_app_translation_loader(${PROJECT_NAME}_QM_LOADER ${PROJECT_NAME})
......@@ -149,6 +133,14 @@ set(${PROJECT_NAME}_ALL_FILES
)
add_executable(${PROJECT_NAME} ${${PROJECT_NAME}_ALL_FILES})
target_compile_definitions(${PROJECT_NAME}
PRIVATE
"QT_USE_QSTRINGBUILDER"
"QT_NO_CAST_FROM_ASCII"
"QT_NO_CAST_TO_ASCII"
"QT_NO_URL_CAST_FROM_STRING"
"QT_NO_CAST_FROM_BYTEARRAY"
)
target_link_libraries(${PROJECT_NAME} KF5::WindowSystem lxqt)
install(TARGETS
......
......@@ -31,12 +31,12 @@
Actions::Actions(QObject *parent)
: QObject(parent)
, mServiceWatcher(new QDBusServiceWatcher("org.lxqt.global_key_shortcuts", QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange, this))
, mServiceWatcher(new QDBusServiceWatcher(QLatin1String("org.lxqt.global_key_shortcuts"), QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange, this))
, mMultipleActionsBehaviour(MULTIPLE_ACTIONS_BEHAVIOUR_FIRST)
{
connect(mServiceWatcher, SIGNAL(serviceUnregistered(QString)), this, SLOT(on_daemonDisappeared(QString)));
connect(mServiceWatcher, SIGNAL(serviceRegistered(QString)), this, SLOT(on_daemonAppeared(QString)));
mDaemonProxy = new org::lxqt::global_key_shortcuts::daemon("org.lxqt.global_key_shortcuts", "/daemon", QDBusConnection::sessionBus(), this);
mDaemonProxy = new org::lxqt::global_key_shortcuts::daemon(QLatin1String("org.lxqt.global_key_shortcuts"), QStringLiteral("/daemon"), QDBusConnection::sessionBus(), this);
connect(mDaemonProxy, SIGNAL(actionAdded(qulonglong)), this, SLOT(on_actionAdded(qulonglong)));
connect(mDaemonProxy, SIGNAL(actionEnabled(qulonglong, bool)), this, SLOT(on_actionEnabled(qulonglong, bool)));
......@@ -82,7 +82,7 @@ void Actions::init()
GeneralActionInfos::const_iterator M = mGeneralActionInfo.constEnd();
for (GeneralActionInfos::const_iterator I = mGeneralActionInfo.constBegin(); I != M; ++I)
{
if (I.value().type == "client")
if (I.value().type == QLatin1String("client"))
{
QString shortcut;
QString description;
......@@ -100,7 +100,7 @@ void Actions::init()
updateClientActionSender(I.key());
}
}
else if (I.value().type == "method")
else if (I.value().type == QLatin1String("method"))
{
QString shortcut;
QString description;
......@@ -122,7 +122,7 @@ void Actions::init()
mMethodActionInfo[I.key()] = info;
}
}
else if (I.value().type == "command")
else if (I.value().type == QLatin1String("command"))
{
QString shortcut;
QString description;
......@@ -237,7 +237,7 @@ void Actions::do_actionAdded(qulonglong id)
mGeneralActionInfo[id] = generalActionInfo;
}
if (type == "client")
if (type == QLatin1String("client"))
{
QDBusObjectPath path;
if (getClientActionInfoById(id, shortcut, description, enabled, path))
......@@ -250,7 +250,7 @@ void Actions::do_actionAdded(qulonglong id)
mClientActionInfo[id] = clientActionInfo;
}
}
else if (type == "method")
else if (type == QLatin1String("method"))
{
QString service;
QDBusObjectPath path;
......@@ -269,7 +269,7 @@ void Actions::do_actionAdded(qulonglong id)
mMethodActionInfo[id] = methodActionInfo;
}
}
else if (type == "command")
else if (type == QLatin1String("command"))
{
QString command;
QStringList arguments;
......@@ -299,7 +299,7 @@ void Actions::on_actionEnabled(qulonglong id, bool enabled)
{
GI.value().enabled = enabled;
if (GI.value().type == "client")
if (GI.value().type == QLatin1String("client"))
{
ClientActionInfos::iterator DI = mClientActionInfo.find(id);
if (DI != mClientActionInfo.end())
......@@ -307,7 +307,7 @@ void Actions::on_actionEnabled(qulonglong id, bool enabled)
DI.value().enabled = enabled;
}
}
else if (GI.value().type == "method")
else if (GI.value().type == QLatin1String("method"))
{
MethodActionInfos::iterator MI = mMethodActionInfo.find(id);
if (MI != mMethodActionInfo.end())
......@@ -315,7 +315,7 @@ void Actions::on_actionEnabled(qulonglong id, bool enabled)
MI.value().enabled = enabled;
}
}
else if (GI.value().type == "command")
else if (GI.value().type == QLatin1String("command"))
{
CommandActionInfos::iterator CI = mCommandActionInfo.find(id);
if (CI != mCommandActionInfo.end())
......@@ -355,7 +355,7 @@ void Actions::on_actionsSwapped(qulonglong id1, qulonglong id2)
if (GI1.value().type == GI2.value().type)
{
if (GI1.value().type == "client")
if (GI1.value().type == QLatin1String("client"))
{
ClientActionInfos::iterator DI1 = mClientActionInfo.find(id1);
ClientActionInfos::iterator DI2 = mClientActionInfo.find(id2);
......@@ -367,7 +367,7 @@ void Actions::on_actionsSwapped(qulonglong id1, qulonglong id2)
swapped = true;
}
}
else if (GI1.value().type == "method")
else if (GI1.value().type == QLatin1String("method"))
{
MethodActionInfos::iterator MI1 = mMethodActionInfo.find(id1);
MethodActionInfos::iterator MI2 = mMethodActionInfo.find(id2);
......@@ -379,7 +379,7 @@ void Actions::on_actionsSwapped(qulonglong id1, qulonglong id2)
swapped = true;
}
}
else if (GI1.value().type == "command")
else if (GI1.value().type == QLatin1String("command"))
{
CommandActionInfos::iterator CI1 = mCommandActionInfo.find(id1);
CommandActionInfos::iterator CI2 = mCommandActionInfo.find(id2);
......
......@@ -46,9 +46,9 @@ DefaultModel::DefaultModel(Actions *actions, const QColor &grayedOutColour, cons
connect(actions, SIGNAL(actionsSwapped(qulonglong, qulonglong)), SLOT(actionsSwapped(qulonglong, qulonglong)));
connect(actions, SIGNAL(actionRemoved(qulonglong)), SLOT(actionRemoved(qulonglong)));
mVerboseType["command"] = tr("Command");
mVerboseType["method"] = tr("DBus call");
mVerboseType["client"] = tr("Client");
mVerboseType[QStringLiteral("command")] = tr("Command");
mVerboseType[QStringLiteral("method")] = tr("DBus call");
mVerboseType[QLatin1String("client")] = tr("Client");
}
DefaultModel::~DefaultModel()
......@@ -99,7 +99,7 @@ QVariant DefaultModel::data(const QModelIndex &index, int role) const
{
qulonglong id = mContent.keys()[index.row()];
bool multiple = (index.column() == 1) && (mShortcuts[mContent[id].shortcut].size() > 1);
bool inactive = (mContent[id].type == "client") && (mActions->getClientActionSender(id).isEmpty());
bool inactive = (mContent[id].type == QLatin1String("client")) && (mActions->getClientActionSender(id).isEmpty());
if (multiple || inactive)
return multiple ? (inactive ? mHighlightedItalicFont : mHighlightedFont) : mItalicFont;
}
......
......@@ -58,24 +58,24 @@ static QString joinCommandLine(const QString &command, QStringList arguments)
for (int i = 0; i < m; ++i)
{
QString &item = arguments[i];
if (item.contains(QRegExp("[ \r\n\t\"']")))
if (item.contains(QRegExp(QStringLiteral("[ \r\n\t\"']"))))
{
item.prepend("'").append("'");
item.prepend(QLatin1Char('\'')).append(QLatin1Char('\''));
}
else if (item.isEmpty())
{
item = QString("''");
item = QString::fromLatin1("''");
}
}
return arguments.join(" ");
return arguments.join(QLatin1Char(' '));
}
static QStringList splitCommandLine(QString commandLine)
{
commandLine.prepend(" ").append(" ");
commandLine.prepend(QLatin1Char(' ')).append(QLatin1Char(' '));
QStringList result;
QRegExp spacePattern("\\s+");
QRegExp itemPattern("([^ \r\n\t\"']+)|((\"([^\"]|\\\")*\")|('([^']|\\')*'))(?=\\s)");
QRegExp spacePattern(QStringLiteral("\\s+"));
QRegExp itemPattern(QStringLiteral("([^ \r\n\t\"']+)|((\"([^\"]|\\\")*\")|('([^']|\\')*'))(?=\\s)"));
for (int pos = 0; ;)
{
......@@ -164,16 +164,16 @@ bool EditActionDialog::load(qulonglong id)
return false;
}
bool canEdit = ((info.second.type == "command") || (info.second.type == "method"));
bool canEdit = ((info.second.type == QLatin1String("command")) || (info.second.type == QLatin1String("method")));
mShortcut = info.second.shortcut;
shortcut_SS->setText(mShortcut);
description_LE->setText(info.second.description);
enabled_CB->setChecked(info.second.enabled);
command_RB->setChecked(info.second.type == "command");
dbus_method_RB->setChecked(info.second.type == "method");
action_SW->setCurrentWidget((info.second.type == "method") ? dbus_method_P : command_P);
if (info.second.type == "command")
command_RB->setChecked(info.second.type == QLatin1String("command"));
dbus_method_RB->setChecked(info.second.type == QLatin1String("method"));
action_SW->setCurrentWidget((info.second.type == QLatin1String("method")) ? dbus_method_P : command_P);
if (info.second.type == QLatin1String("command"))
{
QPair<bool, CommandActionInfo> commandInfo = mActions->commandActionInfoById(id);
if (!commandInfo.first)
......@@ -182,7 +182,7 @@ bool EditActionDialog::load(qulonglong id)
}
command_PTE->setPlainText(joinCommandLine(commandInfo.second.command, commandInfo.second.arguments));
}
else if (info.second.type == "method")
else if (info.second.type == QLatin1String("method"))
{
QPair<bool, MethodActionInfo> methodInfo = mActions->methodActionInfoById(id);
if (!methodInfo.first)
......
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QDialog" name="MainWindow">
<widget class="QDialog" name="GlobalKeysConfig">
<property name="geometry">
<rect>
<x>0</x>
......
project(lxqt-config-globalkeyshortcuts)
build_component("." "")
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>DefaultModel</name>
<message>
<location filename="../default_model.cpp" line="49"/>
<source>Command</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../default_model.cpp" line="50"/>
<source>DBus call</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../default_model.cpp" line="51"/>
<source>Client</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../default_model.cpp" line="141"/>
<source>Id</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../default_model.cpp" line="144"/>
<source>Shortcut</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../default_model.cpp" line="147"/>
<source>Description</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../default_model.cpp" line="150"/>
<source>Type</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../default_model.cpp" line="153"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditActionDialog</name>
<message>
<location filename="../edit_action_dialog.ui" line="14"/>
<source>Edit Action</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="31"/>
<source>&amp;Shortcut:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="74"/>
<source>&amp;Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="87"/>
<source>&amp;Enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="102"/>
<source>&amp;Command</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="109"/>
<source>&amp;DBus message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="118"/>
<source>Type:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="164"/>
<source>Co&amp;mmand:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="206"/>
<source>S&amp;ervice:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="219"/>
<source>&amp;Path:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="232"/>
<source>&amp;Interface:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../edit_action_dialog.ui" line="245"/>
<source>&amp;Method:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.ui" line="14"/>
<source>Global Actions Manager</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main_window.ui" line="52"/>
<source>Add ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main_window.ui" line="62"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main_window.ui" line="72"/>
<source>Modify ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main_window.ui" line="89"/>
<source>Swap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main_window.ui" line="115"/>
<source>Multiple actions behaviour:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main_window.ui" line="123"/>
<source>First</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main_window.ui" line="128"/>
<source>Last</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main_window.ui" line="133"/>
<source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main_window.ui" line="138"/>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main_window.ui" line="176"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ar">
<context>
<name>DefaultModel</name>
<message>
<location filename="../default_model.cpp" line="49"/>
<source>Command</source>
<translation>أمر</translation>
</message>
<message>
<location filename="../default_model.cpp" line="50"/>
<source>DBus call</source>
<translation>نداء DBus</translation>
</message>