diff --git a/clients/aurorae/src/qml/MenuButton.qml b/clients/aurorae/src/qml/MenuButton.qml
index e2f67ecd5e..4b8401d2b6 100644
--- a/clients/aurorae/src/qml/MenuButton.qml
+++ b/clients/aurorae/src/qml/MenuButton.qml
@@ -18,6 +18,8 @@ import QtQuick 1.1
import org.kde.qtextracomponents 0.1 as QtExtra
DecorationButton {
+ property bool closeOnDoubleClick: true
+ id: menuButton
buttonType: "M"
QtExtra.QIconItem {
icon: decoration.icon
@@ -40,7 +42,7 @@ DecorationButton {
// the double click delay to ensure that it was only a single click.
if (timer.running) {
timer.stop();
- } else {
+ } else if (menuButton.closeOnDoubleClick) {
timer.start();
}
}
@@ -59,11 +61,25 @@ DecorationButton {
}
onClicked: {
// for right clicks we show the menu instantly
- if (mouse.button == Qt.RightButton) {
+ // and if the option is disabled we always show menu directly
+ if (!menuButton.closeOnDoubleClick || mouse.button == Qt.RightButton) {
decoration.menuClicked();
timer.stop();
}
}
- onDoubleClicked: decoration.closeWindow()
+ onDoubleClicked: {
+ if (menuButton.closeOnDoubleClick) {
+ decoration.closeWindow();
+ }
+ }
+ }
+ Component.onCompleted: {
+ menuButton.closeOnDoubleClick = decoration.readConfig("CloseOnDoubleClickMenuButton", true);
+ }
+ Connections {
+ target: decoration
+ onConfigChanged: {
+ menuButton.closeOnDoubleClick = decoration.readConfig("CloseOnDoubleClickMenuButton", true);
+ }
}
}
diff --git a/kcmkwin/kwindecoration/auroraeconfig.ui b/kcmkwin/kwindecoration/auroraeconfig.ui
index 776214029d..96e006624b 100644
--- a/kcmkwin/kwindecoration/auroraeconfig.ui
+++ b/kcmkwin/kwindecoration/auroraeconfig.ui
@@ -112,6 +112,16 @@
+ -
+
+
+
+
+
+ Close windows by double clicking the menu button
+
+
+
diff --git a/kcmkwin/kwindecoration/decorationmodel.cpp b/kcmkwin/kwindecoration/decorationmodel.cpp
index 8ac4a3f3ed..d62d2f1657 100644
--- a/kcmkwin/kwindecoration/decorationmodel.cpp
+++ b/kcmkwin/kwindecoration/decorationmodel.cpp
@@ -118,6 +118,7 @@ void DecorationModel::findDecorations()
data.libraryName = libName;
data.type = DecorationModelData::NativeDecoration;
data.borderSize = KDecorationDefines::BorderNormal;
+ data.closeDblClick = false;
metaData(data, desktopFile);
m_decorations.append(data);
}
@@ -141,6 +142,7 @@ void DecorationModel::findDecorations()
KConfigGroup config(m_config, data.auroraeName);
data.borderSize = (KDecorationDefines::BorderSize)config.readEntry< int >("BorderSize", KDecorationDefines::BorderNormal);
data.buttonSize = (KDecorationDefines::BorderSize)config.readEntry< int >("ButtonSize", KDecorationDefines::BorderNormal);
+ data.closeDblClick = config.readEntry< bool >("CloseOnDoubleClickMenuButton", true);
data.comment = service->comment();
KPluginInfo info(service);
data.author = info.author();
@@ -180,6 +182,7 @@ void DecorationModel::findAuroraeThemes()
KConfigGroup config(m_config, data.auroraeName);
data.borderSize = (KDecorationDefines::BorderSize)config.readEntry< int >("BorderSize", KDecorationDefines::BorderNormal);
data.buttonSize = (KDecorationDefines::BorderSize)config.readEntry< int >("ButtonSize", KDecorationDefines::BorderNormal);
+ data.closeDblClick = config.readEntry< bool >("CloseOnDoubleClickMenuButton", true);
metaData(data, df);
m_decorations.append(data);
}
@@ -252,6 +255,8 @@ QVariant DecorationModel::data(const QModelIndex& index, int role) const
return QVariant();
case QmlMainScriptRole:
return m_decorations[ index.row()].qmlPath;
+ case CloseOnDblClickRole:
+ return m_decorations[index.row()].closeDblClick;
default:
return QVariant();
}
@@ -259,7 +264,7 @@ QVariant DecorationModel::data(const QModelIndex& index, int role) const
bool DecorationModel::setData(const QModelIndex& index, const QVariant& value, int role)
{
- if (!index.isValid() || (role != BorderSizeRole && role != ButtonSizeRole))
+ if (!index.isValid() || (role != BorderSizeRole && role != ButtonSizeRole && role != CloseOnDblClickRole))
return QAbstractItemModel::setData(index, value, role);
const DecorationModelData::DecorationType type = m_decorations[ index.row()].type;
@@ -286,6 +291,18 @@ bool DecorationModel::setData(const QModelIndex& index, const QVariant& value, i
regeneratePreview(index);
return true;
}
+ if (role == CloseOnDblClickRole && (type == DecorationModelData::AuroraeDecoration || type == DecorationModelData::QmlDecoration)) {
+ if (m_decorations[ index.row()].closeDblClick == value.toBool()) {
+ return false;
+ }
+ m_decorations[ index.row()].closeDblClick = value.toBool();
+ KConfigGroup config(m_config, m_decorations[ index.row()].auroraeName);
+ config.writeEntry("CloseOnDoubleClickMenuButton", value.toBool());
+ config.sync();
+ emit dataChanged(index, index);
+ emit configChanged(m_decorations[ index.row()].auroraeName);
+ return true;
+ }
return QAbstractItemModel::setData(index, value, role);
}
diff --git a/kcmkwin/kwindecoration/decorationmodel.h b/kcmkwin/kwindecoration/decorationmodel.h
index 11bc3741dd..fe740b19ed 100644
--- a/kcmkwin/kwindecoration/decorationmodel.h
+++ b/kcmkwin/kwindecoration/decorationmodel.h
@@ -57,6 +57,11 @@ public:
QString qmlPath;
KDecorationDefines::BorderSize borderSize;
KDecorationDefines::BorderSize buttonSize;
+ /**
+ * Whether the window gets closed on double clicking the Menu Button.
+ * Only applies for Aurorae and QML Decoration.
+ **/
+ bool closeDblClick;
static bool less(const DecorationModelData& a, const DecorationModelData& b) {
return a.name < b.name;
@@ -82,7 +87,8 @@ public:
BorderSizeRole = Qt::UserRole + 11,
BorderSizesRole = Qt::UserRole + 12,
ButtonSizeRole = Qt::UserRole + 13,
- QmlMainScriptRole = Qt::UserRole + 14
+ QmlMainScriptRole = Qt::UserRole + 14,
+ CloseOnDblClickRole = Qt::UserRole + 15
};
DecorationModel(KSharedConfigPtr config, QObject* parent = 0);
~DecorationModel();
diff --git a/kcmkwin/kwindecoration/kwindecoration.cpp b/kcmkwin/kwindecoration/kwindecoration.cpp
index 95e755e91e..aaa792ec40 100644
--- a/kcmkwin/kwindecoration/kwindecoration.cpp
+++ b/kcmkwin/kwindecoration/kwindecoration.cpp
@@ -352,9 +352,11 @@ void KWinDecorationModule::slotConfigureDecoration()
dlg->setMainWidget(form);
form->borderSizesCombo->setCurrentIndex(index.data(DecorationModel::BorderSizeRole).toInt());
form->buttonSizesCombo->setCurrentIndex(index.data(DecorationModel::ButtonSizeRole).toInt());
+ form->closeWindowsDoubleClick->setChecked(index.data(DecorationModel::CloseOnDblClickRole).toBool());
if (dlg->exec() == KDialog::Accepted) {
m_model->setData(index, form->borderSizesCombo->currentIndex(), DecorationModel::BorderSizeRole);
m_model->setData(index, form->buttonSizesCombo->currentIndex(), DecorationModel::ButtonSizeRole);
+ m_model->setData(index, form->closeWindowsDoubleClick->isChecked(), DecorationModel::CloseOnDblClickRole);
reload = true;
}
delete dlg;