summaryrefslogtreecommitdiffstats
path: root/twin/kcmtwin/twinoptions
diff options
context:
space:
mode:
Diffstat (limited to 'twin/kcmtwin/twinoptions')
-rw-r--r--twin/kcmtwin/twinoptions/AUTHORS12
-rw-r--r--twin/kcmtwin/twinoptions/CMakeLists.txt40
-rw-r--r--twin/kcmtwin/twinoptions/ChangeLog51
-rw-r--r--twin/kcmtwin/twinoptions/Makefile.am18
-rw-r--r--twin/kcmtwin/twinoptions/main.cpp262
-rw-r--r--twin/kcmtwin/twinoptions/main.h100
-rw-r--r--twin/kcmtwin/twinoptions/mouse.cpp856
-rw-r--r--twin/kcmtwin/twinoptions/mouse.h137
-rw-r--r--twin/kcmtwin/twinoptions/twinactions.desktop233
-rw-r--r--twin/kcmtwin/twinoptions/twinadvanced.desktop232
-rw-r--r--twin/kcmtwin/twinoptions/twinfocus.desktop222
-rw-r--r--twin/kcmtwin/twinoptions/twinmoving.desktop229
-rw-r--r--twin/kcmtwin/twinoptions/twinoptions.desktop225
-rw-r--r--twin/kcmtwin/twinoptions/twintranslucency.desktop195
-rw-r--r--twin/kcmtwin/twinoptions/windows.cpp1712
-rw-r--r--twin/kcmtwin/twinoptions/windows.h297
16 files changed, 4821 insertions, 0 deletions
diff --git a/twin/kcmtwin/twinoptions/AUTHORS b/twin/kcmtwin/twinoptions/AUTHORS
new file mode 100644
index 000000000..0615c59db
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/AUTHORS
@@ -0,0 +1,12 @@
+Please use http://bugs.kde.org to report bugs.
+The following authors may have retired by the time you read this :-)
+
+KWM Configuration Module:
+
+ Pat Dowler (dowler@pt1B1106.FSH.UVic.CA)
+
+ Bernd Wuebben <wuebben@kde.org>
+
+Conversion to kcontrol applet:
+
+ Matthias Hoelzer (hoelzer@physik.uni-wuerzburg.de)
diff --git a/twin/kcmtwin/twinoptions/CMakeLists.txt b/twin/kcmtwin/twinoptions/CMakeLists.txt
new file mode 100644
index 000000000..591883e21
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/CMakeLists.txt
@@ -0,0 +1,40 @@
+#################################################
+#
+# (C) 2010-2011 Serghei Amelian
+# serghei (DOT) amelian (AT) gmail.com
+#
+# Improvements and feedback are welcome
+#
+# This file is released under GPL >= 2
+#
+#################################################
+
+include_directories(
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_BINARY_DIR}
+ ${TDE_INCLUDE_DIR}
+ ${TQT_INCLUDE_DIRS}
+)
+
+link_directories(
+ ${TQT_LIBRARY_DIRS}
+)
+
+
+##### other data ################################
+
+install( FILES twinoptions.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} )
+
+install( FILES
+ twinactions.desktop twinadvanced.desktop twinfocus.desktop
+ twinmoving.desktop twintranslucency.desktop
+ DESTINATION ${APPS_INSTALL_DIR}/.hidden )
+
+
+##### kcm_twinoptions (module) ##################
+
+tde_add_kpart( kcm_twinoptions AUTOMOC
+ SOURCES windows.cpp mouse.cpp main.cpp
+ LINK tdeui-shared
+ DESTINATION ${PLUGIN_INSTALL_DIR}
+)
diff --git a/twin/kcmtwin/twinoptions/ChangeLog b/twin/kcmtwin/twinoptions/ChangeLog
new file mode 100644
index 000000000..0b923864c
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/ChangeLog
@@ -0,0 +1,51 @@
+1999-03-06 Mario Weilguni <mweilguni@kde.org>
+
+ * changes for Qt 2.0
+
+1998-11-29 Alex Zepeda <garbanzo@hooked.net>
+
+ * pics/Makefile.am, pics/mini/Makefile.am: Install icons from their
+ "proper" subdirectories.
+
+1998-11-20 Cristian Tibirna <ctibirna@gch.ulaval.ca>
+
+ * advanced.[cpp,h]: fixed bugs. Mostly a disgusting one:
+ no lists saving for the special options (Decor, Focus a.o.)
+
+1998-11-09 Cristian Tibirna <ctibirna@gch.ulaval.ca>
+
+ * advanced.[cpp,h] : new tab for some of the last of the
+ kwm's options which remained out of the GUI config:
+ CtrlTab, TraverseAll, AltTabeMode, Button3Grab and
+ the filter lists for decorations, focus, stickyness,
+ session management ignore ( I kinda disklike the solution
+ I got for the latest)
+
+1998-11-06 Cristian Tibirna <ctibirna@gch.ulaval.ca>
+
+ * titlebar.[cpp,h] : added title alignment config
+
+1998-10-23 Cristian Tibirna <ctibirna@gch.ulaval.ca>
+
+ * titlebar.cpp: completed what Matthias started (took out
+ useless checks)
+ * widows.cpp: make autoRaise toggling clearer
+
+1998-10-22 Matthias Ettrich <ettrich@kde.org>
+
+ * titlebar.cpp: less options on titlebar doubleclick
+
+1998-10-21 Cristian Tibirna <ctibirna@gch.ulaval.ca>
+
+ * desktop.[cpp,h]: now with consistent layout use
+ resizeEvent() deleted
+
+1998-10-19 Cristian Tibirna <ctibirna@gch.ulaval.ca>
+
+ * windows.[cpp,h]: now with consistent layout use
+ resizeEvent() deleted
+
+1998-10-18 Cristian Tibirna <ctibirna@gch.ulaval.ca>
+
+ * titlebar.[cpp,h]: fixed the (in)activetitleebar pixmap selection
+ 1998-10-21 (still buggy, don't quite understand why)
diff --git a/twin/kcmtwin/twinoptions/Makefile.am b/twin/kcmtwin/twinoptions/Makefile.am
new file mode 100644
index 000000000..d2b4e6583
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/Makefile.am
@@ -0,0 +1,18 @@
+METASOURCES = AUTO
+INCLUDES = $(all_includes)
+
+kde_module_LTLIBRARIES = kcm_twinoptions.la
+
+kcm_twinoptions_la_SOURCES = windows.cpp mouse.cpp main.cpp
+kcm_twinoptions_la_LDFLAGS = -module -avoid-version $(all_libraries) -no-undefined
+kcm_twinoptions_la_LIBADD = $(LIB_TDEUI)
+
+noinst_HEADERS = windows.h mouse.h
+
+messages:
+ $(XGETTEXT) *.cpp -o $(podir)/kcmkwm.pot
+
+twin_kcmtwin_options_data_DATA = twinactions.desktop twinadvanced.desktop twinfocus.desktop twinmoving.desktop twintranslucency.desktop
+twin_kcmtwin_options_datadir = $(kde_appsdir)/.hidden
+
+xdg_apps_DATA = twinoptions.desktop
diff --git a/twin/kcmtwin/twinoptions/main.cpp b/twin/kcmtwin/twinoptions/main.cpp
new file mode 100644
index 000000000..a10269eca
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/main.cpp
@@ -0,0 +1,262 @@
+/*
+ *
+ * Copyright (c) 2001 Waldo Bastian <bastian@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <tqlayout.h>
+
+#include <dcopclient.h>
+
+#include <kapplication.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kconfig.h>
+#include <kgenericfactory.h>
+#include <kaboutdata.h>
+#include <kdialog.h>
+
+#include "mouse.h"
+#include "windows.h"
+
+#include "main.h"
+
+extern "C"
+{
+ KDE_EXPORT KCModule *create_twinfocus(TQWidget *parent, const char *name)
+ {
+ //CT there's need for decision: kwm or twin?
+ KGlobal::locale()->insertCatalogue("kcmkwm");
+ KConfig *c = new KConfig("twinrc", false, true);
+ return new KFocusConfig(true, c, parent, name);
+ }
+
+ KDE_EXPORT KCModule *create_twinactions(TQWidget *parent, const char *name)
+ {
+ //CT there's need for decision: kwm or twin?
+ KGlobal::locale()->insertCatalogue("kcmkwm");
+ return new KActionsOptions( parent, name);
+ }
+
+ KDE_EXPORT KCModule *create_twinmoving(TQWidget *parent, const char *name)
+ {
+ //CT there's need for decision: kwm or twin?
+ KGlobal::locale()->insertCatalogue("kcmkwm");
+ KConfig *c = new KConfig("twinrc", false, true);
+ return new KMovingConfig(true, c, parent, name);
+ }
+
+ KDE_EXPORT KCModule *create_twinadvanced(TQWidget *parent, const char *name)
+ {
+ //CT there's need for decision: kwm or twin?
+ KGlobal::locale()->insertCatalogue("kcmkwm");
+ KConfig *c = new KConfig("twinrc", false, true);
+ return new KAdvancedConfig(true, c, parent, name);
+ }
+
+ KDE_EXPORT KCModule *create_twintranslucency(TQWidget *parent, const char *name)
+ {
+ //CT there's need for decision: kwm or twin?
+ KGlobal::locale()->insertCatalogue("kcmkwm");
+ KConfig *c = new KConfig("twinrc", false, true);
+ return new KTranslucencyConfig(true, c, parent, name);
+ }
+
+ KDE_EXPORT KCModule *create_twinoptions ( TQWidget *parent, const char* name)
+ {
+ //CT there's need for decision: kwm or twin?
+ KGlobal::locale()->insertCatalogue("kcmkwm");
+ return new KWinOptions( parent, name);
+ }
+}
+
+KWinOptions::KWinOptions(TQWidget *parent, const char *name)
+ : KCModule(parent, name)
+{
+ mConfig = new KConfig("twinrc", false, true);
+
+ TQVBoxLayout *layout = new TQVBoxLayout(this);
+ tab = new TQTabWidget(this);
+ layout->addWidget(tab);
+
+ mFocus = new KFocusConfig(false, mConfig, this, "KWin Focus Config");
+ mFocus->layout()->setMargin( KDialog::marginHint() );
+ tab->addTab(mFocus, i18n("&Focus"));
+ connect(mFocus, TQT_SIGNAL(changed(bool)), this, TQT_SLOT(moduleChanged(bool)));
+
+ mTitleBarActions = new KTitleBarActionsConfig(false, mConfig, this, "KWin TitleBar Actions");
+ mTitleBarActions->layout()->setMargin( KDialog::marginHint() );
+ tab->addTab(mTitleBarActions, i18n("&Titlebar Actions"));
+ connect(mTitleBarActions, TQT_SIGNAL(changed(bool)), this, TQT_SLOT(moduleChanged(bool)));
+
+ mWindowActions = new KWindowActionsConfig(false, mConfig, this, "KWin Window Actions");
+ mWindowActions->layout()->setMargin( KDialog::marginHint() );
+ tab->addTab(mWindowActions, i18n("Window Actio&ns"));
+ connect(mWindowActions, TQT_SIGNAL(changed(bool)), this, TQT_SLOT(moduleChanged(bool)));
+
+ mMoving = new KMovingConfig(false, mConfig, this, "KWin Moving");
+ mMoving->layout()->setMargin( KDialog::marginHint() );
+ tab->addTab(mMoving, i18n("&Moving"));
+ connect(mMoving, TQT_SIGNAL(changed(bool)), this, TQT_SLOT(moduleChanged(bool)));
+
+ mAdvanced = new KAdvancedConfig(false, mConfig, this, "KWin Advanced");
+ mAdvanced->layout()->setMargin( KDialog::marginHint() );
+ tab->addTab(mAdvanced, i18n("Ad&vanced"));
+ connect(mAdvanced, TQT_SIGNAL(changed(bool)), this, TQT_SLOT(moduleChanged(bool)));
+
+ mTranslucency = new KTranslucencyConfig(false, mConfig, this, "KWin Translucency");
+ mTranslucency->layout()->setMargin( KDialog::marginHint() );
+ tab->addTab(mTranslucency, i18n("&Translucency"));
+ connect(mTranslucency, TQT_SIGNAL(changed(bool)), this, TQT_SLOT(moduleChanged(bool)));
+
+ KAboutData *about =
+ new KAboutData(I18N_NOOP("kcmtwinoptions"), I18N_NOOP("Window Behavior Configuration Module"),
+ 0, 0, KAboutData::License_GPL,
+ I18N_NOOP("(c) 1997 - 2002 KWin and KControl Authors"));
+
+ about->addAuthor("Matthias Ettrich",0,"ettrich@kde.org");
+ about->addAuthor("Waldo Bastian",0,"bastian@kde.org");
+ about->addAuthor("Cristian Tibirna",0,"tibirna@kde.org");
+ about->addAuthor("Matthias Kalle Dalheimer",0,"kalle@kde.org");
+ about->addAuthor("Daniel Molkentin",0,"molkentin@kde.org");
+ about->addAuthor("Wynn Wilkes",0,"wynnw@caldera.com");
+ about->addAuthor("Pat Dowler",0,"dowler@pt1B1106.FSH.UVic.CA");
+ about->addAuthor("Bernd Wuebben",0,"wuebben@kde.org");
+ about->addAuthor("Matthias Hoelzer-Kluepfel",0,"hoelzer@kde.org");
+ setAboutData(about);
+}
+
+KWinOptions::~KWinOptions()
+{
+ delete mConfig;
+}
+
+void KWinOptions::load()
+{
+ mConfig->reparseConfiguration();
+ mFocus->load();
+ mTitleBarActions->load();
+ mWindowActions->load();
+ mMoving->load();
+ mAdvanced->load();
+ mTranslucency->load();
+ emit KCModule::changed( false );
+}
+
+
+void KWinOptions::save()
+{
+ mFocus->save();
+ mTitleBarActions->save();
+ mWindowActions->save();
+ mMoving->save();
+ mAdvanced->save();
+ mTranslucency->save();
+
+ emit KCModule::changed( false );
+ // Send signal to twin
+ mConfig->sync();
+ if ( !kapp->dcopClient()->isAttached() )
+ kapp->dcopClient()->attach();
+ kapp->dcopClient()->send("twin*", "", "reconfigure()", TQString(""));
+}
+
+
+void KWinOptions::defaults()
+{
+ mFocus->defaults();
+ mTitleBarActions->defaults();
+ mWindowActions->defaults();
+ mMoving->defaults();
+ mAdvanced->defaults();
+ mTranslucency->defaults();
+}
+
+TQString KWinOptions::quickHelp() const
+{
+ return i18n("<h1>Window Behavior</h1> Here you can customize the way windows behave when being"
+ " moved, resized or clicked on. You can also specify a focus policy as well as a placement"
+ " policy for new windows."
+ " <p>Please note that this configuration will not take effect if you do not use"
+ " KWin as your window manager. If you do use a different window manager, please refer to its documentation"
+ " for how to customize window behavior.");
+}
+
+void KWinOptions::moduleChanged(bool state)
+{
+ emit KCModule::changed(state);
+}
+
+
+KActionsOptions::KActionsOptions(TQWidget *parent, const char *name)
+ : KCModule(parent, name)
+{
+ mConfig = new KConfig("twinrc", false, true);
+
+ TQVBoxLayout *layout = new TQVBoxLayout(this);
+ tab = new TQTabWidget(this);
+ layout->addWidget(tab);
+
+ mTitleBarActions = new KTitleBarActionsConfig(false, mConfig, this, "KWin TitleBar Actions");
+ mTitleBarActions->layout()->setMargin( KDialog::marginHint() );
+ tab->addTab(mTitleBarActions, i18n("&Titlebar Actions"));
+ connect(mTitleBarActions, TQT_SIGNAL(changed(bool)), this, TQT_SLOT(moduleChanged(bool)));
+
+ mWindowActions = new KWindowActionsConfig(false, mConfig, this, "KWin Window Actions");
+ mWindowActions->layout()->setMargin( KDialog::marginHint() );
+ tab->addTab(mWindowActions, i18n("Window Actio&ns"));
+ connect(mWindowActions, TQT_SIGNAL(changed(bool)), this, TQT_SLOT(moduleChanged(bool)));
+}
+
+KActionsOptions::~KActionsOptions()
+{
+ delete mConfig;
+}
+
+void KActionsOptions::load()
+{
+ mTitleBarActions->load();
+ mWindowActions->load();
+ emit KCModule::changed( false );
+}
+
+
+void KActionsOptions::save()
+{
+ mTitleBarActions->save();
+ mWindowActions->save();
+
+ emit KCModule::changed( false );
+ // Send signal to twin
+ mConfig->sync();
+ if ( !kapp->dcopClient()->isAttached() )
+ kapp->dcopClient()->attach();
+ kapp->dcopClient()->send("twin*", "", "reconfigure()", TQString(""));
+}
+
+
+void KActionsOptions::defaults()
+{
+ mTitleBarActions->defaults();
+ mWindowActions->defaults();
+}
+
+void KActionsOptions::moduleChanged(bool state)
+{
+ emit KCModule::changed(state);
+}
+
+#include "main.moc"
diff --git a/twin/kcmtwin/twinoptions/main.h b/twin/kcmtwin/twinoptions/main.h
new file mode 100644
index 000000000..2465c6766
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/main.h
@@ -0,0 +1,100 @@
+/*
+ * main.h
+ *
+ * Copyright (c) 2001 Waldo Bastian <bastian@kde.org>
+ *
+ * Requires the Qt widget libraries, available at no cost at
+ * http://www.troll.no/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __MAIN_H__
+#define __MAIN_H__
+
+#include <tqtabwidget.h>
+#include <kcmodule.h>
+
+class KConfig;
+class KFocusConfig;
+class KTitleBarActionsConfig;
+class KWindowActionsConfig;
+class KAdvancedConfig;
+class KTranslucencyConfig;
+
+class KWinOptions : public KCModule
+{
+ Q_OBJECT
+
+public:
+
+ KWinOptions(TQWidget *parent, const char *name);
+ virtual ~KWinOptions();
+
+ void load();
+ void save();
+ void defaults();
+ TQString quickHelp() const;
+
+
+protected slots:
+
+ void moduleChanged(bool state);
+
+
+private:
+
+ TQTabWidget *tab;
+
+ KFocusConfig *mFocus;
+ KTitleBarActionsConfig *mTitleBarActions;
+ KWindowActionsConfig *mWindowActions;
+ KMovingConfig *mMoving;
+ KAdvancedConfig *mAdvanced;
+ KTranslucencyConfig *mTranslucency;
+
+ KConfig *mConfig;
+};
+
+class KActionsOptions : public KCModule
+{
+ Q_OBJECT
+
+public:
+
+ KActionsOptions(TQWidget *parent, const char *name);
+ virtual ~KActionsOptions();
+
+ void load();
+ void save();
+ void defaults();
+
+protected slots:
+
+ void moduleChanged(bool state);
+
+
+private:
+
+ TQTabWidget *tab;
+
+ KTitleBarActionsConfig *mTitleBarActions;
+ KWindowActionsConfig *mWindowActions;
+
+ KConfig *mConfig;
+};
+
+#endif
diff --git a/twin/kcmtwin/twinoptions/mouse.cpp b/twin/kcmtwin/twinoptions/mouse.cpp
new file mode 100644
index 000000000..30692d87f
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/mouse.cpp
@@ -0,0 +1,856 @@
+/*
+ *
+ * Copyright (c) 1998 Matthias Ettrich <ettrich@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <tqlabel.h>
+#include <tqcombobox.h>
+#include <tqwhatsthis.h>
+#include <tqlayout.h>
+#include <tqvgroupbox.h>
+#include <tqgrid.h>
+#include <tqsizepolicy.h>
+#include <tqbitmap.h>
+#include <tqhgroupbox.h>
+#include <tqtooltip.h>
+
+#include <dcopclient.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kdialog.h>
+#include <kglobalsettings.h>
+#include <kseparator.h>
+
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include <stdlib.h>
+
+#include "mouse.h"
+#include "mouse.moc"
+
+
+namespace {
+
+char const * const cnf_Max[] = {
+ "MaximizeButtonLeftClickCommand",
+ "MaximizeButtonMiddleClickCommand",
+ "MaximizeButtonRightClickCommand",
+};
+
+char const * const tbl_Max[] = {
+ "Maximize",
+ "Maximize (vertical only)",
+ "Maximize (horizontal only)",
+ "" };
+
+TQPixmap maxButtonPixmaps[3];
+
+void createMaxButtonPixmaps()
+{
+ char const * maxButtonXpms[][3 + 13] = {
+ {0, 0, 0,
+ "...............",
+ ".......#.......",
+ "......###......",
+ ".....#####.....",
+ "..#....#....#..",
+ ".##....#....##.",
+ "###############",
+ ".##....#....##.",
+ "..#....#....#..",
+ ".....#####.....",
+ "......###......",
+ ".......#.......",
+ "..............."},
+ {0, 0, 0,
+ "...............",
+ ".......#.......",
+ "......###......",
+ ".....#####.....",
+ ".......#.......",
+ ".......#.......",
+ ".......#.......",
+ ".......#.......",
+ ".......#.......",
+ ".....#####.....",
+ "......###......",
+ ".......#.......",
+ "..............."},
+ {0, 0, 0,
+ "...............",
+ "...............",
+ "...............",
+ "...............",
+ "..#.........#..",
+ ".##.........##.",
+ "###############",
+ ".##.........##.",
+ "..#.........#..",
+ "...............",
+ "...............",
+ "...............",
+ "..............."},
+ };
+
+ TQString baseColor(". c " + KGlobalSettings::baseColor().name());
+ TQString textColor("# c " + KGlobalSettings::textColor().name());
+ for (int t = 0; t < 3; ++t)
+ {
+ maxButtonXpms[t][0] = "15 13 2 1";
+ maxButtonXpms[t][1] = baseColor.ascii();
+ maxButtonXpms[t][2] = textColor.ascii();
+ maxButtonPixmaps[t] = TQPixmap(maxButtonXpms[t]);
+ maxButtonPixmaps[t].setMask(maxButtonPixmaps[t].createHeuristicMask());
+ }
+}
+
+} // namespace
+
+void KTitleBarActionsConfig::paletteChanged()
+{
+ createMaxButtonPixmaps();
+ for (int b = 0; b < 3; ++b)
+ for (int t = 0; t < 3; ++t)
+ coMax[b]->changeItem(maxButtonPixmaps[t], t);
+
+}
+
+KTitleBarActionsConfig::KTitleBarActionsConfig (bool _standAlone, KConfig *_config, TQWidget * parent, const char *)
+ : KCModule(parent, "kcmkwm"), config(_config), standAlone(_standAlone)
+{
+ TQString strWin1, strWin2, strWin3, strAllKey, strAll1, strAll2, strAll3;
+ TQVBoxLayout *layout = new TQVBoxLayout(this, 0, KDialog::spacingHint());
+ TQGrid *grid;
+ TQGroupBox *box;
+ TQLabel *label;
+ TQString strMouseButton1, strMouseButton3, strMouseWheel;
+ TQString txtButton1, txtButton3, txtButton4;
+ TQStringList items;
+ bool leftHandedMouse = ( KGlobalSettings::mouseSettings().handed == KGlobalSettings::KMouseSettings::LeftHanded);
+
+/** Titlebar doubleclick ************/
+
+ TQHBoxLayout *hlayout = new TQHBoxLayout(layout);
+
+ label = new TQLabel(i18n("&Titlebar double-click:"), this);
+ hlayout->addWidget(label);
+ TQWhatsThis::add( label, i18n("Here you can customize mouse click behavior when double clicking on the"
+ " titlebar of a window.") );
+
+ TQComboBox* combo = new TQComboBox(this);
+ combo->insertItem(i18n("Maximize"));
+ combo->insertItem(i18n("Maximize (vertical only)"));
+ combo->insertItem(i18n("Maximize (horizontal only)"));
+ combo->insertItem(i18n("Minimize"));
+ combo->insertItem(i18n("Shade"));
+ combo->insertItem(i18n("Lower"));
+ combo->insertItem(i18n("On All Desktops"));
+ combo->insertItem(i18n("Nothing"));
+ combo->tqsetSizePolicy(TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::Fixed));
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ hlayout->addWidget(combo);
+ coTiDbl = combo;
+ TQWhatsThis::add(combo, i18n("Behavior on <em>double</em> click into the titlebar."));
+
+ label->setBuddy(combo);
+
+/** Mouse Wheel Events **************/
+ TQHBoxLayout *hlayoutW = new TQHBoxLayout(layout);
+ strMouseWheel = i18n("Titlebar wheel event:");
+ label = new TQLabel(strMouseWheel, this);
+ hlayoutW->addWidget(label);
+ txtButton4 = i18n("Handle mouse wheel events");
+ TQWhatsThis::add( label, txtButton4);
+
+ // Titlebar and frame mouse Wheel
+ TQComboBox* comboW = new TQComboBox(this);
+ comboW->insertItem(i18n("Raise/Lower"));
+ comboW->insertItem(i18n("Shade/Unshade"));
+ comboW->insertItem(i18n("Maximize/Restore"));
+ comboW->insertItem(i18n("Keep Above/Below"));
+ comboW->insertItem(i18n("Move to Previous/Next Desktop"));
+ comboW->insertItem(i18n("Change Opacity"));
+ comboW->insertItem(i18n("Nothing"));
+ comboW->tqsetSizePolicy(TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::Fixed));
+ connect(comboW, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ hlayoutW->addWidget(comboW);
+ coTiAct4 = comboW;
+ TQWhatsThis::add(comboW, txtButton4);
+ label->setBuddy(comboW);
+
+/** Titlebar and frame **************/
+
+ box = new TQVGroupBox( i18n("Titlebar && Frame"), this, "Titlebar and Frame");
+ box->layout()->setMargin(KDialog::marginHint());
+ box->layout()->setSpacing(KDialog::spacingHint());
+ layout->addWidget(box);
+ TQWhatsThis::add( box, i18n("Here you can customize mouse click behavior when clicking on the"
+ " titlebar or the frame of a window.") );
+
+ grid = new TQGrid(4, Qt::Vertical, box);
+
+
+ new TQLabel(grid); // dummy
+
+ strMouseButton1 = i18n("Left button:");
+ txtButton1 = i18n("In this row you can customize left click behavior when clicking into"
+ " the titlebar or the frame.");
+
+ strMouseButton3 = i18n("Right button:");
+ txtButton3 = i18n("In this row you can customize right click behavior when clicking into"
+ " the titlebar or the frame." );
+
+ if ( leftHandedMouse )
+ {
+ tqSwap(strMouseButton1, strMouseButton3);
+ tqSwap(txtButton1, txtButton3);
+ }
+
+ label = new TQLabel(strMouseButton1, grid);
+ TQWhatsThis::add( label, txtButton1);
+
+ label = new TQLabel(i18n("Middle button:"), grid);
+ TQWhatsThis::add( label, i18n("In this row you can customize middle click behavior when clicking into"
+ " the titlebar or the frame.") );
+
+ label = new TQLabel(strMouseButton3, grid);
+ TQWhatsThis::add( label, txtButton3);
+
+
+ label = new TQLabel(i18n("Active"), grid);
+ label->tqsetAlignment(AlignCenter);
+ TQWhatsThis::add( label, i18n("In this column you can customize mouse clicks into the titlebar"
+ " or the frame of an active window.") );
+
+ // Titlebar and frame, active, mouse button 1
+ combo = new TQComboBox(grid);
+ combo->insertItem(i18n("Raise"));
+ combo->insertItem(i18n("Lower"));
+ combo->insertItem(i18n("Operations Menu"));
+ combo->insertItem(i18n("Toggle Raise & Lower"));
+ combo->insertItem(i18n("Nothing"));
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coTiAct1 = combo;
+
+ txtButton1 = i18n("Behavior on <em>left</em> click into the titlebar or frame of an "
+ "<em>active</em> window.");
+
+ txtButton3 = i18n("Behavior on <em>right</em> click into the titlebar or frame of an "
+ "<em>active</em> window.");
+
+ // Be nice to left handed users
+ if ( leftHandedMouse ) tqSwap(txtButton1, txtButton3);
+
+ TQWhatsThis::add(combo, txtButton1);
+
+ // Titlebar and frame, active, mouse button 2
+
+ items << i18n("Raise")
+ << i18n("Lower")
+ << i18n("Operations Menu")
+ << i18n("Toggle Raise & Lower")
+ << i18n("Nothing")
+ << i18n("Shade");
+
+ combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coTiAct2 = combo;
+ TQWhatsThis::add(combo, i18n("Behavior on <em>middle</em> click into the titlebar or frame of an <em>active</em> window."));
+
+ // Titlebar and frame, active, mouse button 3
+ combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coTiAct3 = combo;
+ TQWhatsThis::add(combo, txtButton3 );
+
+ txtButton1 = i18n("Behavior on <em>left</em> click into the titlebar or frame of an "
+ "<em>inactive</em> window.");
+
+ txtButton3 = i18n("Behavior on <em>right</em> click into the titlebar or frame of an "
+ "<em>inactive</em> window.");
+
+ // Be nice to left handed users
+ if ( leftHandedMouse ) tqSwap(txtButton1, txtButton3);
+
+ label = new TQLabel(i18n("Inactive"), grid);
+ label->tqsetAlignment(AlignCenter);
+ TQWhatsThis::add( label, i18n("In this column you can customize mouse clicks into the titlebar"
+ " or the frame of an inactive window.") );
+
+ items.clear();
+ items << i18n("Activate & Raise")
+ << i18n("Activate & Lower")
+ << i18n("Activate")
+ << i18n("Shade")
+ << i18n("Operations Menu")
+ << i18n("Raise")
+ << i18n("Lower")
+ << i18n("Nothing");
+
+ combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coTiInAct1 = combo;
+ TQWhatsThis::add(combo, txtButton1);
+
+ combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coTiInAct2 = combo;
+ TQWhatsThis::add(combo, i18n("Behavior on <em>middle</em> click into the titlebar or frame of an <em>inactive</em> window."));
+
+ combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coTiInAct3 = combo;
+ TQWhatsThis::add(combo, txtButton3);
+
+/** Maximize Button ******************/
+
+ box = new TQHGroupBox(i18n("Maximize Button"), this, "Maximize Button");
+ box->layout()->setMargin(KDialog::marginHint());
+ box->layout()->setSpacing(KDialog::spacingHint());
+ layout->addWidget(box);
+ TQWhatsThis::add( box,
+ i18n("Here you can customize behavior when clicking on the maximize button.") );
+
+ TQString strMouseButton[] = {
+ i18n("Left button:"),
+ i18n("Middle button:"),
+ i18n("Right button:")};
+
+ TQString txtButton[] = {
+ i18n("Behavior on <em>left</em> click onto the maximize button." ),
+ i18n("Behavior on <em>middle</em> click onto the maximize button." ),
+ i18n("Behavior on <em>right</em> click onto the maximize button." )};
+
+ if ( leftHandedMouse ) // Be nice to lefties
+ {
+ tqSwap(strMouseButton[0], strMouseButton[2]);
+ tqSwap(txtButton[0], txtButton[2]);
+ }
+
+ createMaxButtonPixmaps();
+ for (int b = 0; b < 3; ++b)
+ {
+ if (b != 0) new TQWidget(box); // Spacer
+
+ TQLabel * label = new TQLabel(strMouseButton[b], box);
+ TQWhatsThis::add( label, txtButton[b] );
+ label ->tqsetSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Minimum ));
+
+ coMax[b] = new ToolTipComboBox(box, tbl_Max);
+ for (int t = 0; t < 3; ++t) coMax[b]->insertItem(maxButtonPixmaps[t]);
+ connect(coMax[b], TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ connect(coMax[b], TQT_SIGNAL(activated(int)), coMax[b], TQT_SLOT(changed()));
+ TQWhatsThis::add( coMax[b], txtButton[b] );
+ coMax[b]->tqsetSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Minimum ));
+ }
+
+ connect(kapp, TQT_SIGNAL(kdisplayPaletteChanged()), TQT_SLOT(paletteChanged()));
+
+ layout->addStretch();
+
+ load();
+}
+
+KTitleBarActionsConfig::~KTitleBarActionsConfig()
+{
+ if (standAlone)
+ delete config;
+}
+
+// do NOT change the texts below, they are written to config file
+// and are not shown in the GUI
+// they have to match the order of items in GUI elements though
+const char* const tbl_TiDbl[] = {
+ "Maximize",
+ "Maximize (vertical only)",
+ "Maximize (horizontal only)",
+ "Minimize",
+ "Shade",
+ "Lower",
+ "OnAllDesktops",
+ "Nothing",
+ "" };
+
+const char* const tbl_TiAc[] = {
+ "Raise",
+ "Lower",
+ "Operations menu",
+ "Toggle raise and lower",
+ "Nothing",
+ "Shade",
+ "" };
+
+const char* const tbl_TiInAc[] = {
+ "Activate and raise",
+ "Activate and lower",
+ "Activate",
+ "Shade",
+ "Operations menu",
+ "Raise",
+ "Lower",
+ "Nothing",
+ "" };
+
+const char* const tbl_Win[] = {
+ "Activate, raise and pass click",
+ "Activate and pass click",
+ "Activate",
+ "Activate and raise",
+ "" };
+
+const char* const tbl_AllKey[] = {
+ "Meta",
+ "Alt",
+ "" };
+
+const char* const tbl_All[] = {
+ "Move",
+ "Activate, raise and move",
+ "Toggle raise and lower",
+ "Resize",
+ "Raise",
+ "Lower",
+ "Minimize",
+ "Nothing",
+ "" };
+
+const char* tbl_TiWAc[] = {
+ "Raise/Lower",
+ "Shade/Unshade",
+ "Maximize/Restore",
+ "Above/Below",
+ "Previous/Next Desktop",
+ "Change Opacity",
+ "Nothing",
+ "" };
+
+const char* tbl_AllW[] = {
+ "Raise/Lower",
+ "Shade/Unshade",
+ "Maximize/Restore",
+ "Above/Below",
+ "Previous/Next Desktop",
+ "Change Opacity",
+ "Nothing",
+ "" };
+
+static const char* tbl_num_lookup( const char* const arr[], int pos )
+{
+ for( int i = 0;
+ arr[ i ][ 0 ] != '\0' && pos >= 0;
+ ++i )
+ {
+ if( pos == 0 )
+ return arr[ i ];
+ --pos;
+ }
+ abort(); // should never happen this way
+}
+
+static int tbl_txt_lookup( const char* const arr[], const char* txt )
+{
+ int pos = 0;
+ for( int i = 0;
+ arr[ i ][ 0 ] != '\0';
+ ++i )
+ {
+ if( qstricmp( txt, arr[ i ] ) == 0 )
+ return pos;
+ ++pos;
+ }
+ return 0;
+}
+
+void KTitleBarActionsConfig::setComboText( TQComboBox* combo, const char*txt )
+{
+ if( combo == coTiDbl )
+ combo->setCurrentItem( tbl_txt_lookup( tbl_TiDbl, txt ));
+ else if( combo == coTiAct1 || combo == coTiAct2 || combo == coTiAct3 )
+ combo->setCurrentItem( tbl_txt_lookup( tbl_TiAc, txt ));
+ else if( combo == coTiInAct1 || combo == coTiInAct2 || combo == coTiInAct3 )
+ combo->setCurrentItem( tbl_txt_lookup( tbl_TiInAc, txt ));
+ else if( combo == coTiAct4 )
+ combo->setCurrentItem( tbl_txt_lookup( tbl_TiWAc, txt ));
+ else if( combo == coMax[0] || combo == coMax[1] || combo == coMax[2] )
+ {
+ combo->setCurrentItem( tbl_txt_lookup( tbl_Max, txt ));
+ static_cast<ToolTipComboBox *>(combo)->changed();
+ }
+ else
+ abort();
+}
+
+const char* KTitleBarActionsConfig::functionTiDbl( int i )
+{
+ return tbl_num_lookup( tbl_TiDbl, i );
+}
+
+const char* KTitleBarActionsConfig::functionTiAc( int i )
+{
+ return tbl_num_lookup( tbl_TiAc, i );
+}
+
+const char* KTitleBarActionsConfig::functionTiInAc( int i )
+{
+ return tbl_num_lookup( tbl_TiInAc, i );
+}
+
+const char* KTitleBarActionsConfig::functionTiWAc(int i)
+{
+ return tbl_num_lookup( tbl_TiWAc, i );
+}
+
+const char* KTitleBarActionsConfig::functionMax( int i )
+{
+ return tbl_num_lookup( tbl_Max, i );
+}
+
+void KTitleBarActionsConfig::load()
+{
+ config->setGroup("Windows");
+ setComboText(coTiDbl, config->readEntry("TitlebarDoubleClickCommand","Shade").ascii());
+ for (int t = 0; t < 3; ++t)
+ setComboText(coMax[t],config->readEntry(cnf_Max[t], tbl_Max[t]).ascii());
+
+ config->setGroup( "MouseBindings");
+ setComboText(coTiAct1,config->readEntry("CommandActiveTitlebar1","Raise").ascii());
+ setComboText(coTiAct2,config->readEntry("CommandActiveTitlebar2","Lower").ascii());
+ setComboText(coTiAct3,config->readEntry("CommandActiveTitlebar3","Operations menu").ascii());
+ setComboText(coTiAct4,config->readEntry("CommandTitlebarWheel","Nothing").ascii());
+ setComboText(coTiInAct1,config->readEntry("CommandInactiveTitlebar1","Activate and raise").ascii());
+ setComboText(coTiInAct2,config->readEntry("CommandInactiveTitlebar2","Activate and lower").ascii());
+ setComboText(coTiInAct3,config->readEntry("CommandInactiveTitlebar3","Operations menu").ascii());
+}
+
+void KTitleBarActionsConfig::save()
+{
+ config->setGroup("Windows");
+ config->writeEntry("TitlebarDoubleClickCommand", functionTiDbl( coTiDbl->currentItem() ) );
+ for (int t = 0; t < 3; ++t)
+ config->writeEntry(cnf_Max[t], functionMax(coMax[t]->currentItem()));
+
+ config->setGroup("MouseBindings");
+ config->writeEntry("CommandActiveTitlebar1", functionTiAc(coTiAct1->currentItem()));
+ config->writeEntry("CommandActiveTitlebar2", functionTiAc(coTiAct2->currentItem()));
+ config->writeEntry("CommandActiveTitlebar3", functionTiAc(coTiAct3->currentItem()));
+ config->writeEntry("CommandInactiveTitlebar1", functionTiInAc(coTiInAct1->currentItem()));
+ config->writeEntry("CommandTitlebarWheel", functionTiWAc(coTiAct4->currentItem()));
+ config->writeEntry("CommandInactiveTitlebar2", functionTiInAc(coTiInAct2->currentItem()));
+ config->writeEntry("CommandInactiveTitlebar3", functionTiInAc(coTiInAct3->currentItem()));
+
+ if (standAlone)
+ {
+ config->sync();
+ if ( !kapp->dcopClient()->isAttached() )
+ kapp->dcopClient()->attach();
+ kapp->dcopClient()->send("twin*", "", "reconfigure()", TQString(""));
+ }
+}
+
+void KTitleBarActionsConfig::defaults()
+{
+ setComboText(coTiDbl, "Shade");
+ setComboText(coTiAct1,"Raise");
+ setComboText(coTiAct2,"Lower");
+ setComboText(coTiAct3,"Operations menu");
+ setComboText(coTiAct4,"Nothing");
+ setComboText(coTiInAct1,"Activate and raise");
+ setComboText(coTiInAct2,"Activate and lower");
+ setComboText(coTiInAct3,"Operations menu");
+ for (int t = 0; t < 3; ++t)
+ setComboText(coMax[t], tbl_Max[t]);
+}
+
+
+KWindowActionsConfig::KWindowActionsConfig (bool _standAlone, KConfig *_config, TQWidget * parent, const char *)
+ : KCModule(parent, "kcmkwm"), config(_config), standAlone(_standAlone)
+{
+ TQString strWin1, strWin2, strWin3, strAllKey, strAll1, strAll2, strAll3, strAllW;
+ TQVBoxLayout *layout = new TQVBoxLayout(this, 0, KDialog::spacingHint());
+ TQGrid *grid;
+ TQGroupBox *box;
+ TQLabel *label;
+ TQString strMouseButton1, strMouseButton3;
+ TQString txtButton1, txtButton3;
+ TQStringList items;
+ bool leftHandedMouse = ( KGlobalSettings::mouseSettings().handed == KGlobalSettings::KMouseSettings::LeftHanded);
+
+/** Inactive inner window ******************/
+
+ box = new TQVGroupBox(i18n("Inactive Inner Window"), this, "Inactive Inner Window");
+ box->layout()->setMargin(KDialog::marginHint());
+ box->layout()->setSpacing(KDialog::spacingHint());
+ layout->addWidget(box);
+ TQWhatsThis::add( box, i18n("Here you can customize mouse click behavior when clicking on an inactive"
+ " inner window ('inner' means: not titlebar, not frame).") );
+
+ grid = new TQGrid(3, Qt::Vertical, box);
+
+ strMouseButton1 = i18n("Left button:");
+ txtButton1 = i18n("In this row you can customize left click behavior when clicking into"
+ " the titlebar or the frame.");
+
+ strMouseButton3 = i18n("Right button:");
+ txtButton3 = i18n("In this row you can customize right click behavior when clicking into"
+ " the titlebar or the frame." );
+
+ if ( leftHandedMouse )
+ {
+ tqSwap(strMouseButton1, strMouseButton3);
+ tqSwap(txtButton1, txtButton3);
+ }
+
+ strWin1 = i18n("In this row you can customize left click behavior when clicking into"
+ " an inactive inner window ('inner' means: not titlebar, not frame).");
+
+ strWin3 = i18n("In this row you can customize right click behavior when clicking into"
+ " an inactive inner window ('inner' means: not titlebar, not frame).");
+
+ // Be nice to lefties
+ if ( leftHandedMouse ) tqSwap(strWin1, strWin3);
+
+ label = new TQLabel(strMouseButton1, grid);
+ TQWhatsThis::add( label, strWin1 );
+
+ label = new TQLabel(i18n("Middle button:"), grid);
+ strWin2 = i18n("In this row you can customize middle click behavior when clicking into"
+ " an inactive inner window ('inner' means: not titlebar, not frame).");
+ TQWhatsThis::add( label, strWin2 );
+
+ label = new TQLabel(strMouseButton3, grid);
+ TQWhatsThis::add( label, strWin3 );
+
+ items.clear();
+ items << i18n("Activate, Raise & Pass Click")
+ << i18n("Activate & Pass Click")
+ << i18n("Activate")
+ << i18n("Activate & Raise");
+
+ TQComboBox* combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coWin1 = combo;
+ TQWhatsThis::add( combo, strWin1 );
+
+ combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coWin2 = combo;
+ TQWhatsThis::add( combo, strWin2 );
+
+ combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coWin3 = combo;
+ TQWhatsThis::add( combo, strWin3 );
+
+
+/** Inner window, titlebar and frame **************/
+
+ box = new TQVGroupBox(i18n("Inner Window, Titlebar && Frame"), this, "Inner Window, Titlebar and Frame");
+ box->layout()->setMargin(KDialog::marginHint());
+ box->layout()->setSpacing(KDialog::spacingHint());
+ layout->addWidget(box);
+ TQWhatsThis::add( box, i18n("Here you can customize KDE's behavior when clicking somewhere into"
+ " a window while pressing a modifier key."));
+
+ grid = new TQGrid(5, Qt::Vertical, box);
+
+ // Labels
+ label = new TQLabel(i18n("Modifier key:"), grid);
+
+ strAllKey = i18n("Here you select whether holding the Meta key or Alt key "
+ "will allow you to perform the following actions.");
+ TQWhatsThis::add( label, strAllKey );
+
+
+ strMouseButton1 = i18n("Modifier key + left button:");
+ strAll1 = i18n("In this row you can customize left click behavior when clicking into"
+ " the titlebar or the frame.");
+
+ strMouseButton3 = i18n("Modifier key + right button:");
+ strAll3 = i18n("In this row you can customize right click behavior when clicking into"
+ " the titlebar or the frame." );
+
+ if ( leftHandedMouse )
+ {
+ tqSwap(strMouseButton1, strMouseButton3);
+ tqSwap(strAll1, strAll3);
+ }
+
+ label = new TQLabel(strMouseButton1, grid);
+ TQWhatsThis::add( label, strAll1);
+
+ label = new TQLabel(i18n("Modifier key + middle button:"), grid);
+ strAll2 = i18n("Here you can customize KDE's behavior when middle clicking into a window"
+ " while pressing the modifier key.");
+ TQWhatsThis::add( label, strAll2 );
+
+ label = new TQLabel(strMouseButton3, grid);
+ TQWhatsThis::add( label, strAll3);
+
+ label = new TQLabel(i18n("Modifier key + mouse wheel:"), grid);
+ strAllW = i18n("Here you can customize KDE's behavior when scrolling with the mouse wheel"
+ " in a window while pressing the modifier key.");
+ TQWhatsThis::add( label, strAllW);
+
+ // Combo's
+ combo = new TQComboBox(grid);
+ combo->insertItem(i18n("Meta"));
+ combo->insertItem(i18n("Alt"));
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coAllKey = combo;
+ TQWhatsThis::add( combo, strAllKey );
+
+ items.clear();
+ items << i18n("Move")
+ << i18n("Activate, Raise and Move")
+ << i18n("Toggle Raise & Lower")
+ << i18n("Resize")
+ << i18n("Raise")
+ << i18n("Lower")
+ << i18n("Minimize")
+ << i18n("Nothing");
+
+ combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coAll1 = combo;
+ TQWhatsThis::add( combo, strAll1 );
+
+ combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coAll2 = combo;
+ TQWhatsThis::add( combo, strAll2 );
+
+ combo = new TQComboBox(grid);
+ combo->insertStringList(items);
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coAll3 = combo;
+ TQWhatsThis::add( combo, strAll3 );
+
+ combo = new TQComboBox(grid);
+ combo->insertItem(i18n("Raise/Lower"));
+ combo->insertItem(i18n("Shade/Unshade"));
+ combo->insertItem(i18n("Maximize/Restore"));
+ combo->insertItem(i18n("Keep Above/Below"));
+ combo->insertItem(i18n("Move to Previous/Next Desktop"));
+ combo->insertItem(i18n("Change Opacity"));
+ combo->insertItem(i18n("Nothing"));
+ connect(combo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ coAllW = combo;
+ TQWhatsThis::add( combo, strAllW );
+
+ layout->addStretch();
+
+ load();
+}
+
+KWindowActionsConfig::~KWindowActionsConfig()
+{
+ if (standAlone)
+ delete config;
+}
+
+void KWindowActionsConfig::setComboText( TQComboBox* combo, const char*txt )
+{
+ if( combo == coWin1 || combo == coWin2 || combo == coWin3 )
+ combo->setCurrentItem( tbl_txt_lookup( tbl_Win, txt ));
+ else if( combo == coAllKey )
+ combo->setCurrentItem( tbl_txt_lookup( tbl_AllKey, txt ));
+ else if( combo == coAll1 || combo == coAll2 || combo == coAll3 )
+ combo->setCurrentItem( tbl_txt_lookup( tbl_All, txt ));
+ else if( combo == coAllW )
+ combo->setCurrentItem( tbl_txt_lookup( tbl_AllW, txt ));
+ else
+ abort();
+}
+
+const char* KWindowActionsConfig::functionWin( int i )
+{
+ return tbl_num_lookup( tbl_Win, i );
+}
+
+const char* KWindowActionsConfig::functionAllKey( int i )
+{
+ return tbl_num_lookup( tbl_AllKey, i );
+}
+
+const char* KWindowActionsConfig::functionAll( int i )
+{
+ return tbl_num_lookup( tbl_All, i );
+}
+
+const char* KWindowActionsConfig::functionAllW(int i)
+{
+ return tbl_num_lookup( tbl_AllW, i );
+}
+
+void KWindowActionsConfig::load()
+{
+ config->setGroup( "MouseBindings");
+ setComboText(coWin1,config->readEntry("CommandWindow1","Activate, raise and pass click").ascii());
+ setComboText(coWin2,config->readEntry("CommandWindow2","Activate and pass click").ascii());
+ setComboText(coWin3,config->readEntry("CommandWindow3","Activate and pass click").ascii());
+ setComboText(coAllKey,config->readEntry("CommandAllKey","Alt").ascii());
+ setComboText(coAll1,config->readEntry("CommandAll1","Move").ascii());
+ setComboText(coAll2,config->readEntry("CommandAll2","Toggle raise and lower").ascii());
+ setComboText(coAll3,config->readEntry("CommandAll3","Resize").ascii());
+ setComboText(coAllW,config->readEntry("CommandAllWheel","Nothing").ascii());
+}
+
+void KWindowActionsConfig::save()
+{
+ config->setGroup("MouseBindings");
+ config->writeEntry("CommandWindow1", functionWin(coWin1->currentItem()));
+ config->writeEntry("CommandWindow2", functionWin(coWin2->currentItem()));
+ config->writeEntry("CommandWindow3", functionWin(coWin3->currentItem()));
+ config->writeEntry("CommandAllKey", functionAllKey(coAllKey->currentItem()));
+ config->writeEntry("CommandAll1", functionAll(coAll1->currentItem()));
+ config->writeEntry("CommandAll2", functionAll(coAll2->currentItem()));
+ config->writeEntry("CommandAll3", functionAll(coAll3->currentItem()));
+ config->writeEntry("CommandAllWheel", functionAllW(coAllW->currentItem()));
+
+ if (standAlone)
+ {
+ config->sync();
+ if ( !kapp->dcopClient()->isAttached() )
+ kapp->dcopClient()->attach();
+ kapp->dcopClient()->send("twin*", "", "reconfigure()", TQString(""));
+ }
+}
+
+void KWindowActionsConfig::defaults()
+{
+ setComboText(coWin1,"Activate, raise and pass click");
+ setComboText(coWin2,"Activate and pass click");
+ setComboText(coWin3,"Activate and pass click");
+ setComboText(coAllKey,"Alt");
+ setComboText (coAll1,"Move");
+ setComboText(coAll2,"Toggle raise and lower");
+ setComboText(coAll3,"Resize");
+ setComboText(coAllW,"Nothing");
+}
diff --git a/twin/kcmtwin/twinoptions/mouse.h b/twin/kcmtwin/twinoptions/mouse.h
new file mode 100644
index 000000000..49591e5d8
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/mouse.h
@@ -0,0 +1,137 @@
+/*
+ * mouse.h
+ *
+ * Copyright (c) 1998 Matthias Ettrich <ettrich@kde.org>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __KKWMMOUSECONFIG_H__
+#define __KKWMMOUSECONFIG_H__
+
+class KConfig;
+
+#include <tqwidget.h>
+#include <kcmodule.h>
+#include <tqcombobox.h>
+#include <tqtooltip.h>
+
+
+class ToolTipComboBox: public TQComboBox
+{
+ Q_OBJECT
+
+public:
+ ToolTipComboBox(TQWidget * owner, char const * const * toolTips_)
+ : TQComboBox(owner)
+ , toolTips(toolTips_) {}
+
+public slots:
+ void changed() {TQToolTip::add( this, i18n(toolTips[currentItem()]) );}
+
+protected:
+ char const * const * toolTips;
+};
+
+
+
+class KTitleBarActionsConfig : public KCModule
+{
+ Q_OBJECT
+
+public:
+
+ KTitleBarActionsConfig( bool _standAlone, KConfig *_config, TQWidget *parent=0, const char* name=0 );
+ ~KTitleBarActionsConfig( );
+
+ void load();
+ void save();
+ void defaults();
+
+public slots:
+ void changed() { emit KCModule::changed(true); }
+
+private:
+ TQComboBox* coTiDbl;
+
+ TQComboBox* coTiAct1;
+ TQComboBox* coTiAct2;
+ TQComboBox* coTiAct3;
+ TQComboBox* coTiAct4;
+ TQComboBox* coTiInAct1;
+ TQComboBox* coTiInAct2;
+ TQComboBox* coTiInAct3;
+
+ ToolTipComboBox * coMax[3];
+
+ KConfig *config;
+ bool standAlone;
+
+ const char* functionTiDbl(int);
+ const char* functionTiAc(int);
+ const char* functionTiWAc(int);
+ const char* functionTiInAc(int);
+ const char* functionMax(int);
+
+ void setComboText(TQComboBox* combo, const char* text);
+ const char* fixup( const char* s );
+
+private slots:
+ void paletteChanged();
+
+};
+
+class KWindowActionsConfig : public KCModule
+{
+ Q_OBJECT
+
+public:
+
+ KWindowActionsConfig( bool _standAlone, KConfig *_config, TQWidget *parent=0, const char* name=0 );
+ ~KWindowActionsConfig( );
+
+ void load();
+ void save();
+ void defaults();
+
+public slots:
+ void changed() { emit KCModule::changed(true); }
+
+private:
+ TQComboBox* coWin1;
+ TQComboBox* coWin2;
+ TQComboBox* coWin3;
+
+ TQComboBox* coAllKey;
+ TQComboBox* coAll1;
+ TQComboBox* coAll2;
+ TQComboBox* coAll3;
+ TQComboBox* coAllW;
+
+ KConfig *config;
+ bool standAlone;
+
+ const char* functionWin(int);
+ const char* functionAllKey(int);
+ const char* functionAll(int);
+ const char* functionAllW(int);
+
+ void setComboText(TQComboBox* combo, const char* text);
+ const char* fixup( const char* s );
+};
+
+#endif
+
diff --git a/twin/kcmtwin/twinoptions/twinactions.desktop b/twin/kcmtwin/twinoptions/twinactions.desktop
new file mode 100644
index 000000000..8f0b7b0ba
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/twinactions.desktop
@@ -0,0 +1,233 @@
+[Desktop Entry]
+Icon=kcmkwm
+Type=Application
+Exec=kcmshell twinactions
+DocPath=kcontrol/windowmanagement/index.html#action-actions
+
+X-KDE-ModuleType=Library
+X-KDE-Library=twinoptions
+X-KDE-FactoryName=twinactions
+
+Name=Actions
+Name[af]=Aksies
+Name[ar]=الأفعال
+Name[be]=Дзеянні
+Name[bg]=Действия
+Name[bn]=কাজ
+Name[br]=Oberoù
+Name[bs]=Akcije
+Name[ca]=Accions
+Name[cs]=Činnosti
+Name[csb]=Dzejaniô
+Name[cy]=Gweithredoedd
+Name[da]=Handlinger
+Name[de]=Aktionen
+Name[el]=Ενέργειες
+Name[eo]=Agoj
+Name[es]=Acciones
+Name[et]=Tegevused
+Name[eu]=Ekintzak
+Name[fa]=کنشها
+Name[fi]=Toiminnot
+Name[fo]=Tiltøk
+Name[fy]=Aksjes
+Name[ga]=Gníomhartha
+Name[gl]=Accións
+Name[he]=פעולות
+Name[hi]=क्रियाएँ
+Name[hr]=Aktivnosti
+Name[hu]=Műveletek
+Name[is]=Aðgerðir
+Name[it]=Azioni
+Name[ja]=動作
+Name[ka]=ქცევა
+Name[kk]=Амалдар
+Name[km]=អំពើ
+Name[ko]=동작
+Name[lo]=ແອບພີເຄຊັ້ນ
+Name[lt]=Veiksmai
+Name[lv]=Darbības
+Name[mk]=Акции
+Name[mn]=Үйлдлүүл
+Name[ms]=Tindakan
+Name[mt]=Azzjonijiet
+Name[nb]=Handlinger
+Name[nds]=Akschonen
+Name[ne]=कार्य
+Name[nl]=Acties
+Name[nn]=Handlingar
+Name[nso]=Dikgato
+Name[pa]=ਕਾਰਵਾਈਆਂ
+Name[pl]=Czynności
+Name[pt]=Acções
+Name[pt_BR]=Ações
+Name[ro]=Acțiuni
+Name[ru]=Действия
+Name[rw]=Ibikorwa
+Name[se]=Doaimmat
+Name[sk]=Akcie
+Name[sl]=Dejanja
+Name[sr]=Акције
+Name[sr@Latn]=Akcije
+Name[ss]=Tento
+Name[sv]=Åtgärder
+Name[ta]=செயல்கள்
+Name[te]=చర్యలు
+Name[tg]=Амалиёт
+Name[th]=การกระทำ
+Name[tr]=Eylemler
+Name[tt]=Ğämällär
+Name[uk]=Дії
+Name[uz]=Amallar
+Name[uz@cyrillic]=Амаллар
+Name[ven]=Nyito
+Name[vi]=Gõ phím
+Name[wa]=Accions
+Name[xh]=Iintshukumo
+Name[zh_CN]=动作
+Name[zh_TW]=動作
+Name[zu]=Iminyakazo
+
+Comment=Configure keyboard and mouse settings
+Comment[af]=Konfigureer sleutelbord en muis instellings
+Comment[ar]=إعداد لوحة المفاتيح و الفأرة
+Comment[be]=Настаўленні клавіятуры і мышы
+Comment[bg]=Настройване на действията с клавиатурата и мишката
+Comment[bn]=কীবোর্ড এবং মাউস সেটিংস কনফিগার করুন
+Comment[br]=Kefluniañ ar stokellaoueg hag al logodenn
+Comment[bs]=Podesite postavke tastature i miša
+Comment[ca]=Aquí podeu configurar l'arranjament del teclat i del ratolí
+Comment[cs]=Nastavení klávesnice a myši
+Comment[csb]=Kònfigùracëjô nastôwù klawiaturë ë mëszë
+Comment[cy]=Ffurfweddu gosodiadau bysellfwrdd a llygoden
+Comment[da]=Indstil tastatur og museopsætning
+Comment[de]=Einstellungen für Tastatur und Maus festlegen
+Comment[el]=Ρυθμίστε το πληκτρολόγιο και το ποντίκι
+Comment[eo]=Agordu la klavaron kaj la muson
+Comment[es]=Configuración del teclado y del ratón
+Comment[et]=Klaviatuuri ja hiire seadistamine
+Comment[eu]=Konfiguratu teklatua eta saguaren ezarpenak
+Comment[fa]=پیکربندی تنظیمات صفحه کلید و موشی
+Comment[fi]=Muokkaa näppäimistön ja hiiren asetuksia
+Comment[fr]=Configuration des réglages du clavier et de la souris
+Comment[fy]=Hjir kinne jo de ynstellings fan toetseboerd en mûs ynstelle
+Comment[ga]=Cumraigh socruithe an mhéarchláir agus na luiche
+Comment[gl]=Configurar as opcións do teclado e o rato
+Comment[he]=שינוי הגדרות המקלדת והעכבר
+Comment[hi]=कुंजीपट तथा माउस विन्यास कॉन्फ़िगर करें
+Comment[hr]=Konfiguriranje postavki tipkovnice i miša
+Comment[hu]=A billentyűzet- és egérkezelés beállításai
+Comment[is]=Stilla lyklaborð og mús
+Comment[it]=Configura le impostazioni della tastiera e del mouse
+Comment[ja]=キーボードとマウスの設定
+Comment[ka]=კლავიატურის და თაგუნას პარამეტრების კონფიგურაცია
+Comment[kk]=Перенетақта мен тышқанның параметрлерін баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​កំណត់​ក្ដារចុច និង​កណ្ដុរ
+Comment[ko]=키보드와 마우스 설정
+Comment[lo]=ປັບແຕ່ງການຕັ້ງຄ່າລະບົບດັດສະນີ
+Comment[lt]=Konfigūruoti klaviatūros ir pelės nustatymus
+Comment[lv]=Šeit Jūs varat konfigurēt tastatūras un peles parametrus
+Comment[mk]=Конфигурирајте ги поставувањата на тастатурата и глушецот
+Comment[mn]=Гар ба Хулгана тохируулах
+Comment[mt]=Ikkonfigura t-tastiera u l-maws
+Comment[nb]=Innstillinger for tastatur og mus
+Comment[nds]=Tastatuur un Muus instellen
+Comment[ne]=कुञ्जीपाटी र माउस सेटिङ कन्फिगर गर्नुहोस्
+Comment[nl]=Hier kunt u de instellingen van toetsenbord en muis instellen
+Comment[nn]=Innstillingar for tastatur og mus
+Comment[nso]=Beakanya dipeakanyo tsa legotlo le keyboard
+Comment[pa]=ਕੀਬੋਰਡ ਅਤੇ ਮਾਊਸ ਸੈਟਿੰਗ ਦੀ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja ustawień klawiatury i myszy
+Comment[pt]=Configuração das opções do teclado e do rato
+Comment[pt_BR]=Configura as preferências de teclado e mouse
+Comment[ro]=Configurează setările de tastatură și mouse
+Comment[ru]=Настройка параметров клавиатуры и мыши
+Comment[rw]= Kuboneza mwandikisho n'amagenamiterere imbeba
+Comment[se]=Heivet boallobeavddi ja sáhpána
+Comment[sk]=Nastavenie klávesnice a myši
+Comment[sl]=Nastavitve tipkovnice in miške
+Comment[sr]=Подешавање поставки тастатуре и миша
+Comment[sr@Latn]=Podešavanje postavki tastature i miša
+Comment[sv]=Anpassa inställningar för tangentbord och mus
+Comment[ta]=விசைப்பலகையையும் சுட்டியையும் வடிவமை
+Comment[tg]=Танзимоти забонак ва муш
+Comment[th]=ปรับแต่งค่าแป้นพิมพ์และเม้าส์
+Comment[tr]=Klavye ve fare ayarlarını buradan yapabilirsiniz
+Comment[tt]=Töylek belän küse eşläwen caylaw
+Comment[uk]=Налаштування клавіатури та мишки
+Comment[uz]=Sichqoncha va tugmatagni moslash
+Comment[uz@cyrillic]=Сичқонча ва тугматагни мослаш
+Comment[ven]=Dzudzanyani mavhekanyele a mausu na khiibodo
+Comment[vi]=Cấu hình bàn phím và chuột
+Comment[wa]=Apontiaedjes del sori eyet del taprece
+Comment[xh]=Qwalasela izicwangciso zebhodi yezitshixho neze mouse
+Comment[zh_CN]=配置键盘和鼠标设置
+Comment[zh_TW]=設定鍵盤與滑鼠的設定值
+Comment[zu]=Hlanganisela izilungiselelo zebhodi yokhiye kanye neze-mouse
+
+Keywords=shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize
+Keywords[ar]=ظلل,كبر كبّر,صغر صغّر,خفض,عمليات,قائمة,تغيير القياس,تظليل,تكبير,تصغير,الى الأسفل,قائمة العمليات,شريط العنوان,تحجيم
+Keywords[be]=Згарнуць,Найбольшыць,Найменшыць,Змяніць памер,Меню аперацыяў,Меню дзеянняў,Загаловак,shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize
+Keywords[bg]=сгъване, максимизиране, минимизиране, заглавие, промяна, размер, shade, maximise, maximize, minimize, minimise, lower, operations menu, titlebar, resize
+Keywords[ca]=plegar,maximitzar,minimitzar,passar al davant,operaciones del menú, barra del títol,redimensionar
+Keywords[cs]=zarolování,maximalizace,minimalizace,nabídka činností,titulek,změna velikosti
+Keywords[csb]=ceniô,maksymalizacëjô,minimalizacëjô,niżi,menu dzejaniów,titlowô lëstew,zmiana miarë
+Keywords[cy]=arliwio,ehangu,lleihau,iselhau,dewislen gweithrediadau, bar y teitl, ail-feintio
+Keywords[da]=skyg,maksimér,minimér,sænk,operationsmenu,titellinje,ændr størrelse
+Keywords[de]=Fensterheber,Maximieren,Minimieren,Nach oben/unten,Titelleiste,Größe ändern
+Keywords[el]=τύλιγμα,μεγιστοποίηση,μεγιστοποίηση,ελαχιστοποίηση,ελαχιστοποίηση,κατέβασμα,μενού χειρισμών,μπάρα τίτλου,αλλαγή μεγέθους
+Keywords[eo]=maksimigi,minimumigi,menuo,titolo,grandecŝanĝi,grandigi
+Keywords[es]=recoger,maximizar,minimizar,pasar al frente,pasar atrás,operaciones,menñu barra de título,redimensionarmenu,titlebar,resize
+Keywords[et]=varjamine,maksimeerimine,minimeerimine,toimingute menüü,langetamine,tõstmine,tiitliriba,suuruse muutmine
+Keywords[eu]=bildu,maximizatu,minimizatu,atzera eraman,eragiketak, menua,titulu-barra,tamaina aldatu
+Keywords[fa]=سایه، بیشینه‌ساز‌ی، بیشینه‌ساز‌ی، کمینه‌ساز‌ی، کمینه‌ساز‌ی، پایین‌تر، گزینگان عملیات، میله عنوان، تغییر اندازه
+Keywords[fi]=varjosta,suurenna,pienennä,laske,toimintovalikko,otsikkopalkki,vaihda kokoa
+Keywords[fr]=fondu,maximiser,enrouler,réduire,abaisser, menu des opérations,barre de titre,redimensionner
+Keywords[fy]=shade,oprollen,maximaliseren,minimaliseren,naar achtergrond,lower,menu,titelbalk,grootte wijzigen,oprôlje,maksimalisearje,minimalisearje,nei eftergrûn,grutte
+Keywords[ga]=scáthaigh,uasmhéadaigh,íosmhéadaigh,íoslaghdaigh,laghdaigh,roghchlár oibríochta,barra teidil,athraigh méid
+Keywords[gl]=sombra,maximizar,maximizar,minimizar,baixar,menú de operacións,barra de título,redimensionar
+Keywords[he]=גלילה,הגדלה,מזעור,שליחה לרקע,תפריט פעולות,שורת כותרת,שינוי גודל,shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize
+Keywords[hi]=शेड,अधिकतम,बड़ा,न्यूनतम,छोटा,नीचे,ऑपरेशन्स मेन्यू,शीर्षक-पट्टी,नयाआकार
+Keywords[hr]=shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize,sjena,maksimiziranje,minimiziranje,postupci izbornika,naslov,naslovna traka,promjena veličine
+Keywords[hu]=felgördítés,maximalizálás,maximalizált,minimalizálás,minimalizált,hátraengedés,műveletek menü,címsor,átméretezés
+Keywords[is]=rúlla upp,skyggja,hámarka,lágmarka,sökkva,aðgerðavalmynd, titilrönd,breyta stærð
+Keywords[it]=arrotola,massimizza,ingrandisci,minimizza,alza,abbassa,menu operazioni, barra del titolo,titolo,ridimensiona,sposta
+Keywords[ja]=シェード,最大化,最小化,後面へ,操作メニュー,タイトルバー,サイズ変更,リサイズ
+Keywords[km]=ស្រមោល,ពង្រីក​អតិបរមា,បង្រួម​អប្បបរមា,បន្ទាប់​ចុះ​ក្រោម,ម៉ឺនុយ​ប្រតិបត្តិការ,របារ​ចំណងជើង,ប្ដូរ​ទំហំ
+Keywords[lt]=shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize, išdidinti,sumažinti,paslėpti, operacijų meniu,antraštės juosta,pakeisti dydį
+Keywords[lv]=ēnot,maksimizēt,maksimizē,minimizet,minimizē,zemāks,darbības izvēlne,virsraksta josla,mainīt izmēru
+Keywords[mk]=shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize,засени,рашири,спушти,мени со операции,насловна лента,промени големина
+Keywords[mn]=Цонхны сүүдэр,Томсгох,Жижигсгэх,Дээшээ/доошоо, Толгойн самбар,Хэмжээ өөрчилөх, Үйлдэл цэс
+Keywords[mt]=shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize,massimizza,minimma,baxxi,ċekken,kabbar,daqqas
+Keywords[nb]=rulle opp,maksimere,minimere,endre størrelse,operasjoner,meny,tittel,skalere,vindu, tittellinje
+Keywords[nds]=inrullen,maximeren,minimeren,utrullen,Akschonenmenü,Titelbalken,Grött ännern
+Keywords[ne]=छायाँ, बढाउनु, बढाउनु, घटाउनु, घटाउनु,भन्दा तल, सञ्चालन मेनु, शीर्षकपट्टी, रिसाइज
+Keywords[nl]= shade,oprollen,maximaliseren,minimaliseren,naar achtergrond,lower,menu,tibelbalk,grootte wijzigen
+Keywords[nn]=rull opp,maksimer,minimer,senk,hev,operasjonsmeny,tittellinje,endra storleik,vindauge
+Keywords[nso]=ntshofatsa,oketsa,oketsa,fokotsa,fokotsa,isa fase,menu wa diphethagatso,bar ya leina,popoleswa
+Keywords[pa]=shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize,ਨਿਊਨਤਮ,ਅਧਿਕਤਮ,ਕਾਰਵਾਈ ਮੇਨੂ,ਮੁੜ-ਅਕਾਰ
+Keywords[pl]=cień,maksymalizacja,minimalizacja,niżej,menu działań,belka tutułowa, zmiana rozmiaru
+Keywords[pt]=enrolar,maximizar,minimizar,baixar,menu de operações,barra de título,dimensionar
+Keywords[pt_BR]=esconder,maximizar,minimizar,menor,menu de operações,barra de operações,redimensionar
+Keywords[ro]=derulare,maximizare,minimizare,meniul de operații,bara de titlu,redimensionare
+Keywords[rw]=igicucu,kugira kinini,kugira gito,kugira gito,ntoya,ibikubiyemo by'ibikorwa,umwanyabikoresho,ihindurangero
+Keywords[se]=rulle bajáš,maksimere,minimere,vuolit,dáhpáhusat,fállu,fálut,namahusholga,namahus,skálere
+Keywords[sk]=zabalenie,maximalizácia,minimalizácia,presun dozadu,presun dopredu,operácie menu,titulok,zmena veľkosti
+Keywords[sl]=zvij,raztegni,povečaj,pomanjšaj,razpni,menu operacij,naslovna vrstica,velikost
+Keywords[sr]=shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize,намотавање,максимизуј,минимизуј,ниже,мени операција,насловна линија,промена величине
+Keywords[sr@Latn]=shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize,namotavanje,maksimizuj,minimizuj,niže,meni operacija,naslovna linija,promena veličine
+Keywords[sv]=rulla upp,maximera,minimera,sänk,åtgärdsmeny,namnlist,ändra storlek
+Keywords[ta]=நிழல், பெரிதாக்கு,பெரிதாக்கு,சிறிதாக்கு, சிறிதாக்கு, குறைந்த,செயல்கள் பட்டி,தலைப்பு பட்டி, அளவை மாற்று
+Keywords[th]=พับเก็บ,ขยายเต็มจอ,ย่อเล็กสุด,อยู่ด้านล่าง,เมนูปฏิบัติการ,แถบหัวเรื่อง,ปรับขนาด
+Keywords[tr]=topla,küçült,büyüt,indir,işlemler,araç çubuğu
+Keywords[tt]=shade,maximise,maximize,minimize,minimise,lower,operations saylaq,titlebar,resize
+Keywords[uk]=згорнути,мінімізувати,максимізувати,опустити, меню операцій,смужка титулу,зміна розміру
+Keywords[uz]=soyalash,yoyish,yigʻish,orqaga,amallar menyusi,sarlavha,resize
+Keywords[uz@cyrillic]=соялаш,ёйиш,йиғиш,орқага,амаллар менюси,сарлавҳа,resize
+Keywords[ven]=kovhekana,engedza,engedza,fhungudza,fhungudza,fhasi,mashumele a menu, bara ya thoho,uitulula saizi
+Keywords[vi]=cuốn,phóng to,phóng to,thu nhỏ,thu nhỏ,hạ thấp,các thao tác trên thực đơn,tên thanh,thay đổi cỡ
+Keywords[wa]=ombe,ombion,å pus grand,, pus ptit,djivêyes des operåcions,bår di tite,candjî li grandeu
+Keywords[xh]=umthunzi,yandisa,yandisa,ncipisa nciphisa,yehlisa,menu zemisebenzi,iba yewonga,yenza ubungakanani kwakhona
+Keywords[zh_CN]=shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize,卷起,最大化,最小化,降低,操作菜单,标题栏,缩放
+Keywords[zh_TW]=shade,maximise,maximize,minimize,minimise,lower,operations menu,titlebar,resize,收起,最大化,最小化,降下,操作選單,標題列,重設大小
+Keywords[zu]=umthunzi,khulisa,khulisa,nciphisa,nciphisa,okungezansi, imenu yemisebenzi,ibha yesihloko,shintsha usayizi
diff --git a/twin/kcmtwin/twinoptions/twinadvanced.desktop b/twin/kcmtwin/twinoptions/twinadvanced.desktop
new file mode 100644
index 000000000..541f93e7f
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/twinadvanced.desktop
@@ -0,0 +1,232 @@
+[Desktop Entry]
+Icon=kcmkwm
+Type=Application
+Exec=kcmshell twinadvanced
+DocPath=kcontrol/windowmanagement/index.html#action-advanced
+
+X-KDE-ModuleType=Library
+X-KDE-Library=twinoptions
+X-KDE-FactoryName=twinadvanced
+
+Name=Advanced
+Name[af]=Gevorderde
+Name[ar]=متقدم
+Name[be]=Адмысловыя
+Name[bg]=Допълнителни
+Name[bn]=অগ্রসর
+Name[br]=Barek
+Name[bs]=Napredno
+Name[ca]=Avançat
+Name[cs]=Pokročilé
+Name[csb]=Awansowóné
+Name[cy]=Uwch
+Name[da]=Avanceret
+Name[de]=Erweitert
+Name[el]=Προχωρημένα
+Name[eo]=Pliaj
+Name[es]=Avanzado
+Name[et]=Muu
+Name[eu]=Aurreratua
+Name[fa]=پیشرفته
+Name[fi]=Lisäasetukset
+Name[fo]=Tilkomið
+Name[fr]=Avancé
+Name[fy]=Avansearre
+Name[ga]=Casta
+Name[gl]=Avanzado
+Name[he]=מתקדם
+Name[hi]=विस्तृत
+Name[hr]=Napredno
+Name[hu]=Speciális
+Name[is]=Ítarlegt
+Name[it]=Avanzate
+Name[ja]=詳細
+Name[ka]=დამატებით
+Name[kk]=Қосымша
+Name[km]=កម្រិត​ខ្ពស់
+Name[ko]=고급
+Name[lo]=ັຝຣັ່ງ
+Name[lt]=Sudėtingiau
+Name[lv]=Paplašināts
+Name[mk]=Напредни
+Name[mn]=Өргөтгөсөн
+Name[ms]=Lanjutan
+Name[mt]=Avvanzat
+Name[nb]=Avansert
+Name[nds]=Verwiedert
+Name[ne]=उन्नत
+Name[nl]=Geavanceerd
+Name[nn]=Avansert
+Name[nso]=Beetswepele
+Name[pa]=ਤਕਨੀਕੀ
+Name[pl]=Zaawansowane
+Name[pt]=Avançado
+Name[pt_BR]=Avançado
+Name[ro]=Avansat
+Name[ru]=Дополнительно
+Name[rw]=Bihanitse
+Name[se]=Viiddiduvvon
+Name[sk]=Pokročilé
+Name[sl]=Napredno
+Name[sr]=Напредно
+Name[sr@Latn]=Napredno
+Name[ss]=Sembili
+Name[sv]=Avancerat
+Name[ta]=உயர்நிலை
+Name[te]=ఆధునిక
+Name[tg]=Пешрафта
+Name[th]=เพิ่มเติม
+Name[tr]=Gelişmiş
+Name[tt]=Kiñäytep
+Name[uk]=Додатково
+Name[uz]=Qoʻshimcha
+Name[uz@cyrillic]=Қўшимча
+Name[ven]=Zwa khwinesa
+Name[vi]=Nâng cao
+Name[wa]=Sipepieus
+Name[xh]=Ebhekisa phambili
+Name[zh_CN]=高级
+Name[zh_TW]=進階
+Name[zu]=Okwezinga eliphezulu
+
+Comment=Configure advanced window management features
+Comment[af]=Konfigureer gevorderde venster bestuuring funksies
+Comment[ar]=تهيئة ميزات النوافذ المتقدمة
+Comment[be]=Настаўленне адмысловых здольнасцяў кіравання вокнамі
+Comment[bg]=Настройване допълнителните параметри на прозорците
+Comment[bn]=উইণ্ডো ম্যানেজমেন্টের ক্ষুদ্রাতিক্ষুদ্র বৈশিষ্ট্য কনফিগার করুন
+Comment[bs]=Podesite napredne mogućnosti upravljanja prozorima
+Comment[ca]=Aquí podeu configurar les característiques avançades de la gestió de finestres
+Comment[cs]=Nastavení pokročilých vlastností správce oken
+Comment[csb]=Kònfigùracëjô awansowónëch òptacëji sprôwianiô òknama
+Comment[cy]=Ffurfweddu Nodweddion Uwch Trefnu Ffenestri
+Comment[da]=Indstil avancerede vindueshåndteringsegenskaber
+Comment[de]=Erweiterte Fensterverwaltung einrichten
+Comment[el]=Ρυθμίστε προχωρημένα χαρακτηριστικά της διαχείρισης παραθύρων
+Comment[eo]=Agordu la pli bonajn fenestroadministrilecojn
+Comment[es]=Configuración de las propiedades avanzadas del gestor de ventanas
+Comment[et]=Aknahalduri seadistamine
+Comment[eu]=Konfiguratu leiho kudeaketaren ezaugarri aurreratuak
+Comment[fa]=پیکربندی ویژگیهای مدیریت پنجرۀ پیشرفته
+Comment[fi]=Muokkaa ikkunoinnin ominaisuuksien lisäasetuksia
+Comment[fr]=Configuration des fonctionnalités de gestion avancée des fenêtres
+Comment[fy]=Hjir kinne jo de avansearre finsterbehearmooglikheden ynstelle
+Comment[ga]=Cumraigh ardghnéithe bhainisteoireacht na bhfuinneog
+Comment[gl]=Configurar as características avanzadas da xestión de fiestras
+Comment[he]=שינוי הגדרות מתקדמות של ניהול חלונות
+Comment[hi]=विस्तृत विंडो प्रबंधन विशेषता कॉन्फ़िगर करें
+Comment[hr]=Konfiguriranje naprednih svojstava upravitelja prozora
+Comment[hu]=Az ablakkezelés speciális beállításai
+Comment[is]=Stilla ítarlegri hegðan setustjóra
+Comment[it]=Configura le funzioni avanzate del gestore delle finestre
+Comment[ja]=ウィンドウ管理機能の詳細設定
+Comment[ka]=ფანჯრების მენეჯერის დამატებითი ფუნქციების კონფიგურაცია
+Comment[kk]=Терезе басқаруының қосымша параметрлерін баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​លក្ខណៈ​ពិសេស​ការ​គ្រប់គ្រង​បង្អួច​កម្រិត​ខ្ពស់
+Comment[ko]=고급 창 관리자 기능 설정하기
+Comment[lo]=ທ່ານສາມາດປັບແຕ່ງການທຳງານຂອງເຄື່ອງມືຈັດການເຊສຊົນໄດ້ທີ່ນີ້
+Comment[lt]=Konfigūruoti sudėtingesnes langų tvarkymo savybes
+Comment[lv]=Šeit Jūs varat konfigurēt logu pārvaldīšanas iespējas
+Comment[mk]=Конфигурирајте ги напредните можности за менаџмент на прозорците
+Comment[mn]=Өргөтгөсөн цонхны удирдлага тохируулах
+Comment[mt]=Setings avvanzati tal-immaniġġjar tal-windows
+Comment[nb]=Tilpass avansert vindusbehandling
+Comment[nds]=Verwiederte Finsterinstellen
+Comment[ne]=उन्नत सञ्झ्याल व्यवस्थापन आकृति कन्फिगर गर्नुहोस्
+Comment[nl]=Hier kunt u de geavanceerde vensterbeheermogelijkheden instellen
+Comment[nn]=Set opp avanserte vindaugshandsamarfunksjonar
+Comment[nso]=Beakanya dika tseo di beetswego pele tsa taolo ya window
+Comment[pa]=ਤਕਨੀਕੀ ਝਰੋਖਾ ਪਰਬੰਧਨ ਫੀਚਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja zaawansowanych opcji zarządzania oknami
+Comment[pt]=Configuração das funcionalidades de gestão de janelas avançadas
+Comment[pt_BR]=Configura as características avançadas de gerenciamento de janela
+Comment[ro]=Configurează caracteristicile de management al ferestrelor
+Comment[ru]=Настройка дополнительных функций менеджера окон
+Comment[rw]=Kuboneza ibijyanye n'ubuyobozi buhanitse bw'idirishya
+Comment[se]=Heivet viiddiduvvon lásegieđahanfunkšuvnnaid
+Comment[sk]=Nastavenie pokročilých možností správy okien
+Comment[sl]=Nastavitve dodatnih možnosti upravljanja oken
+Comment[sr]=Подешавање напредних могућности управљања прозорима
+Comment[sr@Latn]=Podešavanje naprednih mogućnosti upravljanja prozorima
+Comment[sv]=Anpassa avancerade fönsterhanteringsfunktioner
+Comment[ta]=மேம்பட்ட சாளர மேலாளரின் தன்மைகளை வடிவமை
+Comment[tg]=Танзими мудирияти пешрафтаи тирезаҳо
+Comment[th]=ปรับแต่งคุณสมบัติเพิ่มเติมของการจัดการหน้าต่าง
+Comment[tr]=Gelişmiş pencere yönetim özelliklerini yapılandır
+Comment[tt]=Täräzä idäräçeneñ östämä çaraların caylaw
+Comment[uk]=Налаштування додаткових можливостей керування вікнами
+Comment[uz]=Oyna boshqaruvning koʻshimcha imkoniyatlarini moslash
+Comment[uz@cyrillic]=Ойна бошқарувнинг кўшимча имкониятларини мослаш
+Comment[ven]=Dzudzanyani zwitenwa zwa vhulanguli ha khwinesa
+Comment[vi]=Cấu hình các tính năng quản lý cửa sổ nâng cao
+Comment[wa]=Apontiaedje des spepieusès fonccionålités do manaedjaedje des purneas
+Comment[xh]=Qwalasela imisebenzi esemqoka ebhekisa phambili yophatho lwe window
+Comment[zh_CN]=配置高级窗口管理特性
+Comment[zh_TW]=設定進階視窗管理功能
+Comment[zu]=Hlanganisela amalungu okuphathwa kwe-window yezinga eliphezulu
+
+Keywords=shading,border,hover,active borders
+Keywords[af]=shading,border,hover,active grense
+Keywords[ar]=shading,border,hover,active borders,تظليل,حافة,الحواف النشطة
+Keywords[be]=Згортванне,Мяжа,Актыўныя межы,Актыўныя краі,shading,border,hover,active borders
+Keywords[bg]=рамка, сянка, фокус, активиране, shading, border, hover, active borders
+Keywords[ca]=plegat,vora,desplegat automàtic,vores actives
+Keywords[cs]=zarolování,vyrolování,okraj,přejezd myší,aktivní okraje
+Keywords[csb]=cenienié,grańce,przesëwanié nad,aktiwné grańce
+Keywords[cy]=arliwio,ymyl,hofran,ymylon weithgar
+Keywords[da]=skygning,kant,svæv,aktive kanter
+Keywords[de]=Umrandung,Aktive Ränder,Schweben,Fensterheber
+Keywords[el]=τύλιγμα,περίγραμμα,hover,ενεργά όρια
+Keywords[eo]=bordo,ombro,ŝvebo
+Keywords[es]=recogiendo,borde,ratón sobre,bordes activos
+Keywords[et]=varjamine,piire,hover,aktiivsed piirded
+Keywords[eu]=biltzen,ertza,gainean,ertz aktiboak
+Keywords[fa]=سایه‌زنی، لبه، پلکیدن، لبه‌های فعال
+Keywords[fi]=varjostus,kehys,kellunta,aktiiviset kehykset
+Keywords[fr]=bordures,cacher,couvrir,bordures actives
+Keywords[fy]=oprollen,oprôlje,afrollen,ôfrôlje,hoover,actieve randen,aktive rânen,randen magnetisch,magnetische randen
+Keywords[ga]=scáthú,imlíne,foluain,imlínte beo
+Keywords[gl]=sombra,beira,beiras activas,flotar
+Keywords[he]=גלילה,מסגרת,גבול,ריחוף,גבולות פעילים,shading,border,hover,active borders
+Keywords[hi]=शेडिंग,किनारा,हावर,सक्रिय किनारे
+Keywords[hr]=shading,border,hover,active borders,osjenčavanje,obrubi,lebdjeće,aktivni obrubi
+Keywords[hu]=árnyékolás,szegély,lebegés,aktív szegélyek
+Keywords[is]=rúlla upp,skyggja,rammi,svif,hover,virkir rammar
+Keywords[it]=arrotola,bordi,passaggio del mouse,bordi attivi
+Keywords[ja]=畳む,境界,復元,アクティブ境界
+Keywords[km]=ស្រមោល,ស៊ុម,សំកាំង,ស៊ុម​សកម្ម
+Keywords[lt]=shading,border,hover,active borders, tik antraštės juosta, rėmelis, aktyvūs rėmeliai
+Keywords[lv]=ēnošana,mala,hover,aktīvās malas
+Keywords[mk]=shading,border,hover,active borders,засенчување,граница,лебди,активни граници
+Keywords[mn]=Сүүдэр,Идэвхитэй хүрээ,Арьс,Хүрээ
+Keywords[mt]=shading,border,hover,active borders,bordura
+Keywords[nb]=rull opp,sveve over,ramme,aktive rammer,kant
+Keywords[nds]=Inrullen,Utrullen,Rahmen,hover,aktiven Rahmen
+Keywords[ne]=छायाँ, किनारा, होभर, सक्रिय किनारा
+Keywords[nl]=oprollen,afrollen,rand,hoover,actieve randen,randen magnetisch,magnetische randen
+Keywords[nn]=rull opp,ramme,vindaugsramme,vindauge,mus over,aktive kantar
+Keywords[nso]=ntshofatsa,mollwane,hover,mellwane yeo e berekago
+Keywords[pl]=cieniowanie,granice,przesuwanie ponad,aktywne granice
+Keywords[pt]=enrolamento,contorno,passar por cima,contornos activos
+Keywords[pt_BR]=ocultamento,borda,pairar,bordas ativas
+Keywords[ro]=strîngere,margine,margini active
+Keywords[rw]=ubwijime,urubibi,kureremba,imbibi zikora
+Keywords[se]=shading,border,hover,active borders,aktiivalaš láse,láse,aktiivalaš ravddat
+Keywords[sk]=zabalenie,okraj,presun,aktívne okraje
+Keywords[sl]=senčenje,rob,meja,lebdenje,aktivni robovi
+Keywords[sr]=намотавање,ивица,лебдење,активне ивице
+Keywords[sr@Latn]=namotavanje,ivica,lebdenje,aktivne ivice
+Keywords[sv]=skuggning,kant,sväva,aktiva kanter
+Keywords[ta]=நிழலிடுதல்,விளிம்பு,ஹோவர், செயலில் உள்ள விளிம்புகள்
+Keywords[th]=พับเก็บ,กรอบ,อยู่เหนือ,กรอบที่ทำงาน
+Keywords[tr]=toplama,sınır,etkin kenarlıklar
+Keywords[uk]=згортання,рамка,проходження,активні рамки
+Keywords[uz]=soyalash,chegara,aktiv chegaralar,hover
+Keywords[uz@cyrillic]=соялаш,чегара,актив чегаралар,hover
+Keywords[ven]=murunzi,mukano,hover,mikano i tshilaho
+Keywords[vi]=che phủ,bờ,lượn,bờ hoạt động
+Keywords[wa]=ombe,ombraedje,boird,costé,hover,ovrants boirds
+Keywords[xh]=ulwenziwo lwesithuba,umda,ixhonyiwe,imida esebenzayo
+Keywords[zh_CN]=shading,border,hover,active borders,卷起,边框,悬停,激活边框
+Keywords[zh_TW]=shading,border,hover,active borders,收起,邊框,停留,作用中邊框
+Keywords[zu]=ukusitha,umngcele,didizela,imingcele enyakazayo
diff --git a/twin/kcmtwin/twinoptions/twinfocus.desktop b/twin/kcmtwin/twinoptions/twinfocus.desktop
new file mode 100644
index 000000000..541c82501
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/twinfocus.desktop
@@ -0,0 +1,222 @@
+[Desktop Entry]
+Icon=kcmkwm
+Type=Application
+Exec=kcmshell twinfocus
+DocPath=kcontrol/windowmanagement/index.html#action-focus
+
+X-KDE-ModuleType=Library
+X-KDE-Library=twinoptions
+X-KDE-FactoryName=twinfocus
+
+Name=Focus
+Name[af]=Fokus
+Name[ar]=التركيز
+Name[be]=Фокус
+Name[bg]=Фокус
+Name[bn]=ফোকাস
+Name[br]=Fokus
+Name[bs]=Fokus
+Name[cs]=Zaměření
+Name[csb]=Zrëszanié
+Name[cy]=Canolbwynt
+Name[da]=Fokus
+Name[de]=Aktivierung
+Name[el]=Εστίαση
+Name[eo]=Fokuso
+Name[es]=Foco
+Name[et]=Fookus
+Name[eu]=Fokua
+Name[fa]=کانون
+Name[fi]=Kohdistus
+Name[ga]=Fócas
+Name[gl]=Foco
+Name[he]=התמקדות
+Name[hi]=फ़ोकस
+Name[hr]=Fokus
+Name[hu]=Fókuszálás
+Name[id]=Fokus
+Name[is]=Virkni
+Name[ja]=フォーカス
+Name[ka]=ფოკუსი
+Name[kk]=Назар
+Name[km]=ផ្ដោត​អារម្មណ៍
+Name[ko]=초점
+Name[lo]=ຫີນ
+Name[lt]=Fokusas
+Name[lv]=Fokuss
+Name[mk]=Фокусирање
+Name[mn]=Идэвхижүүлэх
+Name[ms]=Fokus
+Name[nb]=Fokus
+Name[nds]=Fokus
+Name[ne]=फोकस
+Name[nn]=Fokus
+Name[nso]=Tebeledisiso
+Name[pa]=ਕੇਂਦਰ
+Name[pl]=Ognisko
+Name[pt]=Foco
+Name[pt_BR]=Foco
+Name[ru]=Фокус
+Name[rw]=Igaragaza rikeye
+Name[se]=Fohkus
+Name[sk]=Fokus
+Name[sl]=Fokus
+Name[sr]=Фокус
+Name[sr@Latn]=Fokus
+Name[sv]=Fokus
+Name[ta]=முனைப்படுத்து
+Name[te]=ఫొకస్
+Name[tg]=Марказ
+Name[th]=โฟกัส
+Name[tr]=Odaklama
+Name[tt]=Eş Üzäge
+Name[uk]=Фокус
+Name[uz]=Fokus
+Name[uz@cyrillic]=Фокус
+Name[ven]=U thetshelesa
+Name[vi]=Chọn
+Name[zh_CN]=焦点
+Name[zh_TW]=焦點
+Name[zu]=Ukunaka
+
+Comment=Configure the window focus policy
+Comment[af]=Konfigureer die venster fokus beleid
+Comment[ar]=قم بإعداد سياسة التركيز على النوافذ
+Comment[be]=Настаўленні выкарыстання фокусу
+Comment[bg]=Настройване активирането на прозорците
+Comment[bn]=উইণ্ডো ফোকাস পলিসি কনফিগার করুন
+Comment[br]=Kefluniañ politikerez fokus ar prenestr
+Comment[bs]=Podesite politiku fokusa prozora
+Comment[ca]=Aquí podeu configurar la política del focus
+Comment[cs]=Nastavení způsobu zaměřování oken
+Comment[csb]=Kònfigùracëjô zrëszaniô òknów
+Comment[cy]=Ffurfweddu'r polisi canolbyntio ffenestri
+Comment[da]=Indstil vinduers fokuspolitik
+Comment[de]=Fensteraktivierung einrichten
+Comment[el]=Ρυθμίστε τον τρόπο εστίασης των παραθύρων
+Comment[eo]=Agordu la fenestran fokusdirektivon
+Comment[es]=Configuración de la política de enfocado de ventanas
+Comment[et]=Akendele fookuse andmise reeglid
+Comment[eu]=Konfiguratu leihoen fokuaren portaera
+Comment[fa]=پیکربندی خط مشی کانون پنجره
+Comment[fi]=Ikkunoiden kohdistustapa
+Comment[fr]=Configuration de la politique de focus des fenêtres
+Comment[fy]=Hjir kinne jo it fokusbeliid fan finsters ynstelle
+Comment[ga]=Cumraigh an polasaí um fhócas fuinneoige
+Comment[gl]=Configurar política de outorgación do foco ás fiestras
+Comment[he]=קביעת מדיניות ההתמקדות של חלונות
+Comment[hi]=विंडो फ़ोकस पॉलिसी कॉन्फ़िगर करें
+Comment[hr]=Konfiguriranje pravila za fokusiranje prozora
+Comment[hu]=Az ablakok fókuszálási jellemzőinek beállításai
+Comment[is]=Stilla virkni stefnu
+Comment[it]=Configura la politica del focus delle finestre
+Comment[ja]=ウィンドウのフォーカスポリシーの設定
+Comment[kk]=Терезедегі назар тартібін баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​គោលការណ៍​ផ្ដោត​អារម្មណ៍​របស់​បង្អួច
+Comment[ko]=창 초점 정책 설정하기
+Comment[lo]=ປັກອີນສອດສ່ອງຊີພີຍູ
+Comment[lt]=Konfigūruoti langų fokusavimo taisykles
+Comment[lv]=Konfigurē logu fokusēšanās politiku
+Comment[mk]=Конфигурирајте ја политиката на фокусирање на прозорците
+Comment[mn]=Цонх идэвхижүүлэлт тохируулах
+Comment[mt]=Ikkonfigura kif jieħdu l-focus il-windows
+Comment[nb]=Tilpass praksisen for vindusfokus
+Comment[nds]=Regeln för den Finsterfokus instellen
+Comment[ne]=सञ्झ्याल फोकस नीति कन्फिगर गर्नुहोस्
+Comment[nl]=Hier kunt u het vensterfocusbeleid instellen
+Comment[nn]=Set opp praksisen for vindaugsfokus
+Comment[nso]=Beakanya molao wa tebeledisiso ya window
+Comment[pa]=ਝਰੋਖਾ ਕੇਂਦਰ ਨੀਤੀ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja przenoszenia ogniska
+Comment[pt]=Configuração da política de foco (primeiro plano) das janelas
+Comment[pt_BR]=Configura a política de foco de janela
+Comment[ro]=Configurează politica de focus a ferestrelor
+Comment[ru]=Настройка политики фокусирования окон
+Comment[rw]=Kuboneza politiki y'igaragazarikeye ry'idirishya
+Comment[se]=Heivet lásefohkusa doaibmanvuogi
+Comment[sk]=Nastavenie politiky aktivácie okien
+Comment[sl]=Nastavitve ravnanja s fokusom okna
+Comment[sr]=Подешавање начина фокусирања прозора
+Comment[sr@Latn]=Podešavanje načina fokusiranja prozora
+Comment[sv]=Anpassa policy för fönsterfokus
+Comment[ta]=சாளர துவக்க முறையை வடிவமை
+Comment[tg]=Танзими сиёсати маркази тиреза
+Comment[th]=ปรับแต่งรูปแบบการได้รับโฟกัสของหน้าต่าง
+Comment[tr]=Pencere odaklama yöntemini yapılandır
+Comment[tt]=Täräzä terelätü tärtiben caylaw
+Comment[uk]=Налаштування поведінку фокусу вікна
+Comment[uz]=Oynani fokuslash qoidasini moslash
+Comment[uz@cyrillic]=Ойнани фокуслаш қоидасини мослаш
+Comment[ven]=Dzudzanyani wa muano wa window
+Comment[vi]=Cấu hình cách chọn cửa sổ
+Comment[wa]=Aponteye li dujhance di focus di purnea
+Comment[xh]=Qwalasela inkqubo yobekiso lwe window
+Comment[zh_CN]=配置窗口焦点策略
+Comment[zh_TW]=設定視窗焦點政策
+Comment[zu]=Hlanganisela umthetho wokunaka kwe-window
+
+Keywords=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop
+Keywords[af]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all werkskerm
+Keywords[be]=Фокус,Рамяшчэнне,Клавіятура,Усе працоўныя сталы,focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop
+Keywords[bg]=фокус, активиране, автоматично, щракане, focus, placement, auto raise, raise, click raise, keyboard, CDE, alt-tab, all desktop
+Keywords[ca]=focus,emplaçament,elevar automàticament,elevar,elevar en clicar,teclat,CDE,alt-tab,tot l'escriptori
+Keywords[cs]=zaměření,umísťování,automatické zdvižení,klávesnice,CDE,Alt-Tab,plochy
+Keywords[csb]=focus, ùmieszczanié, aùtomatné przenoszenié,pòdnoszenié,pòdnoszenié przë klëkniãcô,klawiatura,CDE,alt-tab,wszëtczé biurka,wszëtczé pùltë
+Keywords[cy]=canolbwynt,lleoliad,hunan-godi,codi,codi ar ?l clic,allweddell,CDE,alt-tab,penbwrdd cyfan
+Keywords[da]=fokus,placering,autohæv,hæv,klikhæv,tastatur,CDE,alt-tab,alle desktoppe
+Keywords[de]=Fokus,Aktivierung,Platzierung,Autom. Aktivierung,Nach oben/unten, Klick,Tastatur,CDE
+Keywords[el]=εστίαση,τοποθέτηση,αυτόματη ανύψωση,ανύψωση,ανύψωση με πάτημα,πληκτρολόγιο,CDE,alt-tab,all desktop
+Keywords[eo]=fokuso,lokado,aŭto-altigo,altigo,kliki,kilk altigo,klavaro,CDE,alt-tab,ĉiuj tabuloj
+Keywords[es]=foco,ubicación,auto psara al frente,pasar al frente,pulsar,teclado,CDE,alt-tab,todo el escritorio
+Keywords[et]=fookus,asetus,klikk,klõps,klaviatuur,CDE,alt-tab
+Keywords[eu]=fokua,kokapena,auto aurrera ekarri,aurrera ekarri,klik eta aurrera eraman,teklatua,CDE,alt-tab,mahaigain guztiak
+Keywords[fa]=کانون، جای‌دهی، بالا بردن خودکار، بالا بردن، بالا بردن فشار، صفحه کلید، CDE، دگرساز-جهش، همۀ رومیزیها
+Keywords[fi]=fokus,sijoitus,automaattinosto,napsautusnosto,näppäimistö,CDE
+Keywords[fr]=focus,placement,auto élévation,élévation,clic clavier,CDE,alt-tab,tous les bureaux
+Keywords[fy]=focus,fokus,finster,aandacht,oandacht,plaatsing,pleatsing,voorgrond,foargrûn,achtergrond,eftergrûn,klikken,toetsenbord,toetseboerd,CDE,alt-tab,alle bureaubladen,alle buroblêden
+Keywords[ga]=fócas,láithriú,uathardaigh,ardaigh,gliogardaigh,méarchlár,CDE,alt-tab,gach deasc
+Keywords[gl]=foco,emprazamento,auto subir,subir,premer para subir,teclado,CDE,alt-tab,todo o escritório
+Keywords[he]=התמקדות,מיקום,הבאה אוטומטית לחזית,הבאה לחזית,לחיצה להבאה לחזית,מקלדת,כל שולחנות העבודה, focus,placement,auto raise,raise, click raise,keyboard,CDE,alt-tab,all desktop
+Keywords[hi]=फ़ोकस, स्थिति,स्वतः ऊपर उठाएँ,ऊपर उठाएँ,क्लिक ऊपर उठाएँ,कुंजीपट,सीडीई,ऑल्ट-टेब,सभी डेस्कटॉप
+Keywords[hr]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop,fokus,smještaj,automatska pojava,pojava,pojava klikanjem,tipkovnica,sve radne površine
+Keywords[hu]=fókusz,elhelyezés,automatikus előrehozás,előrehozás,előrehozás kattintásra,billentyűzet,CDE,Alt+Tab,minden munkaasztal
+Keywords[id]=fokus,penempatan,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop
+Keywords[is]=fókus,staðsetning,fleyta upp sjálfkrafa, fleyta upp,smellur fleytir upp,lyklaborð,CDE,alt-tab,öll skjáborð
+Keywords[it]=focus,piazzamento,alza automaticamente,alza,clic per alzare,tastiera, CDE,alt-tab,tutti i desktop
+Keywords[ja]=フォーカス,配置,自動的に前面に,前面に,クリックして前面に,キーボード,CDE,alt-tab,すべてのデスクトップ
+Keywords[km]=ផ្តោត​អារម្មណ៍,ការ​ដាក់,លើក​ឡើង​ស្វ័យប្រវត្តិ,លើកឡើង,ចុច លើកឡើង,ក្ដារចុច,CDE,ជំនួស-ថេប,ផ្ទៃតុ​ទាំងអស់
+Keywords[lt]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop, fokusas,perkėlimas į pirmą planą, pirmas planas, klaviatūra, CDE,visi darbastaliai
+Keywords[lv]=fokuss,novietojums,automātiska pacelšanās,pacelšanās,klikšķaraise,tastatūra,CDE,alt-tab,visas darbavirsmas
+Keywords[mk]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop,фокус,позиција,авто подигање,подигање,клик подигање,сите десктопи
+Keywords[mn]=Хараа,Идэвхижүүлэл,Зайчлал,Авто.Идэвхижүүлэлт, Дээшээ/доошоо,Товшилт,Гар,КДE
+Keywords[mt]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop,tella',tastiera
+Keywords[nb]=fokus,plassering,autohev,hev,klikk og hev,tastatur,CDE,bytt vindu,alle skrivebord
+Keywords[nds]=aktiveren,Fokus,Platzeren,automaatsch fokusseren,aktiveren,klick fokusseren,Tastatuur,CDE,ALT-TAB,all Schriefdischen
+Keywords[ne]=फोकस, स्थापना, स्वत: बृद्धि, बृद्धि, बृद्धि क्लिक गर्नुहोस्, कुञ्जीपाटी,CDE,अल्ट-ट्याब, सबै डेस्कटप
+Keywords[nl]=focus,aandacht,plaatsing,voorgrond,achtergrond,klikken,toetsenbord,CDE,alt-tab,alle bureaubladen
+Keywords[nn]=fokus,plassering,autohev,hev,klikk og hev,tastatur,CDE,byt vindauge,alle skrivebord
+Keywords[nso]=tebeledisiso,peo,kgodiso ya go itirisa,kgodiso,tobetsa kgodiso,keyboard,CDE,alt-tab,desktop kamoka
+Keywords[pl]=ognisko,umiejscawianie,automatyczne podnoszenie,podnoszenie, podniesienie przy kliknięciu,klawiatura,CDE,alt-tab,wszystkie biurka,wszystkie pulpity
+Keywords[pt]=foco,colocação,auto-elevar,elevar,elevar com 'click',teclado,CDE,alt-tab,todos os ecrãs
+Keywords[pt_BR]=foco,posição,auto elevar,elevar,teclado,CDE,alt-tab,todas as áreas de trabalho
+Keywords[ro]=focus,plasare,ridicare automată,clic,tastatură,CDE,alt-tab,toate ecranele
+Keywords[rw]=igaragazarikeye,ishyira mu mwanya,byizamura,kuzamura,Kanda kuzamura,Mwandikisho,CDE,Alt - tab,Ibiro byose
+Keywords[se]=fohkus,auto lokten,lokten,coahkkal ja lokte,boallobeavdi,CDE,molssu lássii,buot čállinbeavddi
+Keywords[sk]=fokus,umiestnenie,automatický presun,dopredu,dopredu na kliknutie,klávesnica,CDE,alt-tab,všetky plochy
+Keywords[sl]=fokus,postavitev,dvigni,tipkovnica,CDE,alt-tab,vsa namizja
+Keywords[sr]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop,фокус,смештање,аутоматско подизање,подизање,тастатура,alt-tab, сви радна површина
+Keywords[sr@Latn]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop,fokus,smeštanje,automatsko podizanje,podizanje,tastatura,alt-tab, svi radna površina
+Keywords[sv]=fokus,placering,autohöjning,höjning,höjning med klick,tangentbord,CDE,alt-tab,alla skrivbord
+Keywords[ta]=ஒருமுகப்படுத்துதல்,இடம், தானாக மேலெழும்பு, மேலேழும்புதல், மேல் க்ளிக்செய்,விசைப்பலகை,CDE,alt-tab,எல்லா மேல்மேசை
+Keywords[th]=โฟกัส,ตำแหน่ง,อยู่ด้านบนอัตโนมัติ,อยู่ด้านบน,คลิ้กเพื่ออยู่ด้านบน,แป้นพิมพ์,CDE,alt-tab,ทุกพื้นที่ทำงาน
+Keywords[tr]=odaklama,yerleşim,masaüstü,yükselt,tıkla,klavye,CDE,yerleşim
+Keywords[uk]=фокус,розташування,автопіднімання,підняти,клавіатура,CDE,alt-tab,вся стільниця
+Keywords[uz]=avto-oldinga,oldinga,bosib oldinga,CDE,alt-tab,hamma ish stollari,fokuslash,tugmatag,joylashish
+Keywords[uz@cyrillic]=авто-олдинга,олдинга,босиб олдинга,CDE,alt-tab,ҳамма иш столлари,фокуслаш,тугматаг,жойлашиш
+Keywords[ven]=thetshelesa,u vhetshela,u vusa,vusa,putedzani u vusa,khiibodo,CDE,alt-tab,desktop dzothe
+Keywords[vi]=chọn,di chuyển,tự nâng lên,nâng lên,nhấn nâng lên,bàn phím,CDE,alt-tab,tất cả màn hình nền
+Keywords[wa]=focus,plaece,rimonte tot seu,rimonter,rimonte s' on clitche,taprece,CDE,ALT-TAB,tos les scribannes
+Keywords[xh]=ucaco,ubuyiselo,phakamisa ngokuzenzekelayo,phakamisa,nqakraza phakamisa, ibhodi yezitshixho,CDE,alt-tab,zonke ii desktop
+Keywords[zh_CN]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop,焦点,放置,自动升起,升起,单击升起,键盘,全部桌面
+Keywords[zh_TW]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop,焦點,佈置,自動抬升,抬升,單擊抬升,鍵盤,全部桌面
+Keywords[zu]=ukunaka,ukubeka,ukukhuphula okuzenzekelayo,ukukhuphula, ukukhuphula ngokucofa,ibhodi yokhiye,CDE,alt-tab,wonke ama-desktop
diff --git a/twin/kcmtwin/twinoptions/twinmoving.desktop b/twin/kcmtwin/twinoptions/twinmoving.desktop
new file mode 100644
index 000000000..9ba6aec20
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/twinmoving.desktop
@@ -0,0 +1,229 @@
+[Desktop Entry]
+Icon=kcmkwm
+Type=Application
+Exec=kcmshell twinmoving
+DocPath=kcontrol/windowmanagement/index.html#action-moving
+
+X-KDE-ModuleType=Library
+X-KDE-Library=twinoptions
+X-KDE-FactoryName=twinmoving
+
+Name=Moving
+Name[af]=Beweeg
+Name[ar]=تحريك
+Name[be]=Перамяшчэнне
+Name[bg]=Преместване
+Name[bn]=সরানো হচ্ছে
+Name[br]=O tilec'hiañ
+Name[bs]=Pomjeranje
+Name[ca]=Moviment
+Name[cs]=Přesouvání
+Name[csb]=Przesëwanié
+Name[cy]=Symud
+Name[da]=Flytter
+Name[de]=Verschieben
+Name[el]=Μετακίνηση
+Name[eo]=Movanta
+Name[es]=Moviendo
+Name[et]=Liigutamine
+Name[eu]=Mugitzen
+Name[fa]=حرکت
+Name[fi]=Siirtäminen
+Name[fo]=Flytir
+Name[fr]=Déplacement
+Name[fy]=Ferpleatsing
+Name[ga]=Bogadh
+Name[gl]=Movemento
+Name[he]=הזזה
+Name[hi]=खिसक रहा है
+Name[hr]=Pomicanje
+Name[hu]=Mozgatás
+Name[id]=Pindah
+Name[is]=Færa
+Name[it]=Spostamento
+Name[ja]=移動
+Name[ka]=გადაადგილება
+Name[kk]=Жылжыту
+Name[km]=ការ​ផ្លាស់ទី
+Name[ko]=이동
+Name[lo]=ລອກອິນ
+Name[lt]=Perkėlimas
+Name[lv]=Pārvietošana
+Name[mk]=Движење
+Name[mn]=Шилжүүлэх
+Name[mt]=Tmexxija
+Name[nb]=Flytting
+Name[nds]=Verschuven
+Name[ne]=सार्दा
+Name[nl]=Verplaatsing
+Name[nn]=Flytting
+Name[nso]=Sutha
+Name[pa]=ਏਧਰ-ਓਧਰ
+Name[pl]=Przesuwanie
+Name[pt]=Mover
+Name[pt_BR]=Movendo
+Name[ro]=Mutare
+Name[ru]=Перемещение
+Name[rw]=Kwimura
+Name[se]=Lihkadeamen
+Name[sk]=Presun
+Name[sl]=Premikanje
+Name[sr]=Померање
+Name[sr@Latn]=Pomeranje
+Name[sv]=Förflyttning
+Name[ta]=நகர்கிறது
+Name[te]=కదలిక
+Name[tg]=Ҳаракат
+Name[th]=การย้าย
+Name[tr]=Taşıma
+Name[tt]=Küçerü
+Name[uz]=Koʻchirish
+Name[uz@cyrillic]=Кўчириш
+Name[ven]=U tshimbila
+Name[vi]=Di chuyển
+Name[wa]=Bodjî
+Name[xh]=Iyahamba
+Name[zh_CN]=移动
+Name[zh_TW]=移動
+Name[zu]=Iyanyakaza
+
+Comment=Configure the way that windows are moved
+Comment[af]=Konfigureer die weg wat vensters word verskuif
+Comment[ar]=تعريف الطريقة التي تتحرك فيها النوافذ
+Comment[be]=Настаўленні перамяшчэння вокнаў
+Comment[bg]=Настройване преместването на прозорците
+Comment[bn]=উইণ্ডো কিভাবে সরানো হবে তা কনফিগার করুন
+Comment[br]=Kefluniañ an daoare e vez fiñvalet ar prenester
+Comment[bs]=Podesite način pomjeranja prozora
+Comment[ca]=Aquí podeu configurar els valors per quan es moguin les finestres
+Comment[cs]=Nastavení způsobu přesouvání oken
+Comment[csb]=Kònfigùracëjô sztélu przesëwaniô òknów
+Comment[cy]=Ffurfweddu'r ffordd y symudir ffenestri
+Comment[da]=Indstil den måde vinduer flyttes på
+Comment[de]=Festlegen, wie Fenster verschoben werden
+Comment[el]=Ρυθμίστε τον τρόπο με τον οποίο μετακινούνται τα παράθυρα
+Comment[eo]=Agordu la manieron, per kiu oni movas la fenestrojn
+Comment[es]=Configuración del modo de movimiento de las ventanas
+Comment[et]=Akende liigutamise viisi seadistamine
+Comment[eu]=Konfiguratu leihoak mugitzeko era
+Comment[fa]=پیکربندی روشی که پنجره‌ها حرکت می‌کنند
+Comment[fi]=Ikkunoiden siirtäminen
+Comment[fr]=Configuration de la manière dont les fenêtres sont déplacées
+Comment[fy]=Hjir kinne jo de wize wêrop finsters har ferpleatse ynstelle
+Comment[ga]=Cumraigh conas a aistrítear fuinneoga
+Comment[gl]=Aqui pode configurar o xeito en que se moven as fiestras
+Comment[he]=שינוי הדרך שבה חלונות מוזזים
+Comment[hi]=कॉन्फ़िगर करें कि विंडो किस तरह खिसके
+Comment[hr]=Konfiguriranje načina pomicanja prozora
+Comment[hu]=Az ablakmozgatás beállításai
+Comment[is]=Stilla hvernig gluggar eru hreyfðir
+Comment[it]=Configura il modo in cui vengono spostate le finestre
+Comment[ja]=ウィンドウの移動の仕方の設定
+Comment[ka]=ფანჯრების გადაადგილების კონფიგურაცია
+Comment[kk]=Терезені жылжыту тәсілін баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​របៀប​ដែល​បង្អួច​ត្រូវ​បាន​ផ្លាស់ទី
+Comment[ko]=창이 움직이는 방법 설정하기
+Comment[lo]=ປັບແຕ່ງການຕັ້ງຄ່າລະບົບແຄຊທີ່ນີ่້
+Comment[lt]=Konfigūruoti langų perkėlimą
+Comment[lv]=Šeit Jūs varat konfigurēt kā tiek pārvietoti logi
+Comment[mk]=Конфигурирајте го начинот на кој се движат прозорците
+Comment[mn]=Цонхыг яааж шилжүүлэхийг тогтоох
+Comment[mt]=Ikkonfigura kif tmexxi l-windows
+Comment[nb]=Velg hvordan vinduer skal flyttes
+Comment[nds]=Instellen, woans de Finstern beweegt warrt
+Comment[ne]=सञ्झ्यालहरू सार्ने तरिका कन्फिगर गर्नुहोस्
+Comment[nl]=Hier kunt u de wijze waarop vensters worden verplaatst instellen
+Comment[nn]=Vel korleis vindauga skal flyttast
+Comment[nso]=Beakanya ka mokgwa wo window yeo e suthiswago kagona
+Comment[pa]=ਝਰੋਖੇ ਦੇ ਹਿੱਲਣ ਦੇ ਢੰਗ ਦੀ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja stylu przesuwania okien
+Comment[pt]=Configuração da forma como as janelas são movidas
+Comment[pt_BR]=Configura o modo como as janelas são movidas
+Comment[ro]=Configurează modul în care sînt mutate ferestrele
+Comment[ru]=Настройка способа перемещения окон
+Comment[rw]=Kuboneza uburyo amadirishya yimurwa
+Comment[se]=Heivet mo láset lihkaduvvot
+Comment[sk]=Nastavenie presunu okien
+Comment[sl]=Nastavitve načinov premikanja okna
+Comment[sr]=Подешавање начина на који се прозори померају
+Comment[sr@Latn]=Podešavanje načina na koji se prozori pomeraju
+Comment[sv]=Anpassa hur fönster flyttas
+Comment[ta]=சாளரம் நகர்ரும் விதத்தை அமை
+Comment[tg]=Танзими навъи ҳаракати тирезаҳо
+Comment[th]=ปรับแต่งลักษณะวิธีการย้ายหน้าต่าง
+Comment[tr]=Pencerelerin taşınması yöntemini yapılandır
+Comment[tt]=Täräzä küçerü ısulın caylaw
+Comment[uk]=Тут можна налаштувати поведінку при пересуванні вікон
+Comment[uz]=Oynalarni koʻchirish yoʻlini moslash
+Comment[uz@cyrillic]=Ойналарни кўчириш йўлини мослаш
+Comment[ven]=Dzudzanyani ndila ine windoow ya tshimbidzhwa zwone
+Comment[vi]=Cấu hình cách di chuyển cửa sổ
+Comment[wa]=Apontyî l' manire di bodjî des purneas
+Comment[xh]=Qwalasela iindlela ii windows ezshukunyiswa ngayo
+Comment[zh_CN]=配置窗口移动的方式
+Comment[zh_TW]=設定視窗移動的方式
+Comment[zu]=Hlanganisela indlela ama-window anyakaziswa ngayo
+
+Keywords=moving,smart,cascade,maximize,maximise,snap zone,snap,border
+Keywords[be]=Перамяшчэнне,Каскадам,Найбольшыць,Найменшыць,Мяжа,moving,smart,cascade,maximize,maximise,snap zone,snap,border
+Keywords[bg]=преместване, прозорци, прозорец, промяна, размер, размера, moving, smart, cascade, maximize, maximise, snap zone, snap, border
+Keywords[ca]=moviment,astut,cascada,maximitza,zona d'atracció,atracció,vora
+Keywords[cs]=přesun,chytré,kaskáda,maximalizace,zóna,okraje
+Keywords[csb]=przesëwanié,kaskadowò,masymilizacëjô,òbéńda chwëtaniô,chwëtanié,grańca
+Keywords[cy]=symud,clyfar,rhaedru,maint llawn,cylchfa gosod,snap,ymyl
+Keywords[da]=flytter,smart,stabl,maksimér,snapzone,snap,kant
+Keywords[de]=Verschieben,Gestaffelt,Maximieren,Minimieren,Einrastzone,Ränder
+Keywords[el]=μετακίνηση,έξυπνη,διαδοχικός,μεγιστοποίηση,μεγιστοποίηση,ζώνη αρπαγής,αρπαγή,περίγραμμα
+Keywords[eo]=movanta,maksimigi,bordo
+Keywords[es]=moviendo,inteligente,cascada,maximizar,zona de adhesión,adhesión,adherir,borde
+Keywords[et]=liigutamine,tark,kaskaad,maksimeerimine,haaramise tsoon,haaramine,piire
+Keywords[eu]=mugitzen,fina,kaskadan,maximizatu,itsasketa eremua, itsasketa,ertza
+Keywords[fa]=حرکت، هوشمند، آبشاری، بیشینه‌ساز‌ی، بیشینه‌ساز‌ی، منطقۀ پرش، پرش، لبه
+Keywords[fi]=liikkuva,älykäs,sarjoita,suurenna,kehys
+Keywords[fr]=déplacement,cascade,maximiser,minimiser,coller,zone d'attraction,bordure
+Keywords[fy]=verplaatsing,ferpleatse,intelligen,yntelligint,tûk,plaatsing,pleatsing,trapsgewijs,trepfoarm,maximaliseren,maksimalisearje,randen magnetisch,magnetisch veld,rand,râne,magnetische randen
+Keywords[gl]=movemento,pequeno,fervenza,maximizar,maximizar,zona de suxección,suexección,beira
+Keywords[he]=הזזה,חכם,מדורג,הגדלה,אזור הצמדה,הצמדה,גבול, moving,smart,cascade,maximize,maximise,snap zone,snap,border
+Keywords[hi]=खिसकता,चतुर,कास्केड,अधिकतम,न्यूनतम,स्नैप ज़ोन,स्नेप,किनारा
+Keywords[hr]=moving,smart,cascade,maximize,maximise,snap zone,snap,border,pomicanje,pametno,kaskadno,maksimiziranje,snap zona,snap,obrub
+Keywords[hu]=mozgatás,intelligens,lépcsőzetes,maximalizálás,illeszkedési zóna,illeszkedés,szegély
+Keywords[id]=pindah,smart,cascade,maksimum,minimum,snap zone,snap,border
+Keywords[is]=færi,snjallt,stafla,hámarka,gripsvæði,grip,rammi,jaðar
+Keywords[it]=spostamento,intelligente,cascata,massimizza,zona magnetica,bordi,bordi magnetici
+Keywords[ja]=移動,スマート,カスケード,最大化,スナップゾーン,スナップ境界
+Keywords[km]=ការ​ផ្លាស់ទី,ឆ្លាត,ល្បាក់,ពង្រីក​អប្បបរមា,តំបន់​ខ្ទាស់,ខ្ទាស់,ស៊ុម
+Keywords[lt]=moving,smart,cascade,maximize,maximise,snap zone,snap,border, perkėlimas,išmoningas,kaskada,išdidinti,rėmelis,riba
+Keywords[lv]=pārvietošana,gudra,kaskāde,maksimizē,maksimizēšana,pielipsanas zona,pielipt,mala
+Keywords[mk]=moving,smart,cascade,maximize,maximise,snap zone,snap,border, движење,паметно,каскадно,рашири,спушти,граница
+Keywords[mn]=Шилжүүлэх,Ухаалаг,Зайчилах,Томсгох,Жижигсгэх,Талбай,Хүрээ
+Keywords[mt]=moving,smart,cascade,maximize,maximise,snap zone,snap,border,tmexxija,kaskada,massimizza,faqqa',bordura
+Keywords[nb]=flytting,smart,overlapping,maksimer,kantlås,vindu
+Keywords[nds]=bewegen,verschuven,plietsch,maximeren,minimeren,Andockrebeet,andocken,Rahmen
+Keywords[ne]=सार्ने, छरितो, क्यासकेड, बढाउनु, बढाउनु, स्न्याप जोन, स्न्याप, किनारा
+Keywords[nl]=verplaatsing,intelligent,plaatsing,trapsgewijs,maximaliseren,randen magnetisch,magnetisch veld,rand,magnetische randen
+Keywords[nn]=flytting,smart,overlapping,maksimer,kantlås,vindauge
+Keywords[nso]=sutha,botsana,phororo,oketsa,oketsa,lefelo la thwantsho ya menwana, thwantsho ya menwana,mollwane
+Keywords[pa]=moving,smart,cascade,maximize,maximise,snap zone,snap,ਹਾਸ਼ੀਆ
+Keywords[pl]=przesuwanie,sprytne,kaskadowo,maksymalizacja,obszar chwytania,chwytanie, granica
+Keywords[pt]=mover,inteligente,cascata,maximizar,zona de atracção,atracção,contorno
+Keywords[pt_BR]=movendo,pequeno,cascata,maximizar,zona rápida,zona de encaixe,borda
+Keywords[ro]=mutare,isteț,cascadă,maximizare,margine
+Keywords[rw]=kwimura,cyiza,urukurikirane,kugira kinini ,gukata agace,gukata, impera
+Keywords[sk]=presun,inteligentný,kaskádovať,maximalizácia,minimalizácia,priťahovanie,zóna priťahovania,okraje
+Keywords[sl]=premikanje,pametno,kaskadno,povečaj,raztegni,meja,mreža,pripni
+Keywords[sr]=moving,smart,cascade,maximize,maximise,snap zone,snap,border,померање,паметно,каскадно,максимизуј,snap zone,snap,ивица
+Keywords[sr@Latn]=moving,smart,cascade,maximize,maximise,snap zone,snap,border,pomeranje,pametno,kaskadno,maksimizuj,snap zone,snap,ivica
+Keywords[sv]=förflyttning,smart,kaskad,maximera,bindningszon,bind,kant
+Keywords[ta]=நகரும்,புத்திசாலி,மேலுக்குமேல், பெரிதாக்கு,பெரிதாக்கு,நிழற் படமெடுப்பு பகுதி,நிழற்படம்,விளிம்பு
+Keywords[th]=การย้าย,ฉลาด,จัดเป็นขั้นๆ,ขยายเต็มจอ,ขยายเต็มหน้าจอ,snap zone,snap,border
+Keywords[tr]=taşıma,taşınma,akıllı,kenar
+Keywords[uk]=пересування,кмітливий,каскад,максимізувати,зона захоплення,захоплення,рамка
+Keywords[uz]=snap zone,snap,border,koʻchirish,ixcham,oynalarni tartiblash,yoyish
+Keywords[uz@cyrillic]=snap zone,snap,border,кўчириш,ихчам,ойналарни тартиблаш,ёйиш
+Keywords[ven]=tshimbila,zwavhudi,cascade,engedza,engedza,fhethu ha snap,snap,mukano+-
+Keywords[vi]=di chuyển,thông minh,tầng,phóng to,phóng to,vùng thả,thả,bờ
+Keywords[wa]=bodjî,malén,a pertinne,, pus grand,nap zone,snap,båoird
+Keywords[xh]=iyashukuma,iyabukeka,cascade,yenza nkulu,yenza nkulu,yandisa,snap zone,snap,umda
+Keywords[zh_CN]=moving,smart,cascade,maximize,maximise,snap zone,snap,border,移动,智能,层叠,最大化,最小化,吸附区域,边框
+Keywords[zh_TW]=moving,smart,cascade,maximize,maximise,snap zone,snap,border,移動,聰明,最大化,邊框
+Keywords[zu]=iyanyakaza,okukhaliphile,landelanisa,khulisa,khulisa,indawo yokunamathisela,namathisela,umngcele
diff --git a/twin/kcmtwin/twinoptions/twinoptions.desktop b/twin/kcmtwin/twinoptions/twinoptions.desktop
new file mode 100644
index 000000000..e520dcc88
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/twinoptions.desktop
@@ -0,0 +1,225 @@
+[Desktop Entry]
+Icon=kcmkwm
+Type=Application
+Exec=kcmshell twinoptions
+DocPath=kcontrol/windowmanagement/index.html
+
+X-KDE-ModuleType=Library
+X-KDE-Library=twinoptions
+X-KDE-FactoryName=twinoptions
+
+Name=Window Behavior
+Name[af]=Venster Gedrag
+Name[ar]=سلوك النوافذ
+Name[az]=Pəncərə Davranışı
+Name[be]=Паводзіны вокнаў
+Name[bg]=Прозорци
+Name[bn]=উইণ্ডো আচরণ
+Name[br]=Emzalc'h ar prenester
+Name[bs]=Ponašanje prozora
+Name[ca]=Comportament de les finestres
+Name[cs]=Chování oken
+Name[csb]=Ùchòwanié òkna
+Name[cy]=Ymddygiad Ffenestri
+Name[da]=Vinduesopførsel
+Name[de]=Fenstereigenschaften
+Name[el]=Συμπεριφορά παραθύρων
+Name[en_GB]=Window Behaviour
+Name[eo]=Fenestrokonduto
+Name[es]=Comportamiento de la ventana
+Name[et]=Akende käitumine
+Name[eu]=Leihoen portaera
+Name[fa]=رفتار پنجره
+Name[fi]=Ikkunoiden käyttäytyminen
+Name[fr]=Comportement des fenêtres
+Name[fy]=Finstergedrach
+Name[ga]=Oibriú na bhFuinneoga
+Name[gl]=Comportamento das Fiestras
+Name[he]=פעולת חלונות
+Name[hi]=विंडो बर्ताव
+Name[hr]=Ponašanje prozora
+Name[hu]=Ablakműveletek
+Name[is]=Hegðun glugga
+Name[it]=Comportamento delle finestre
+Name[ja]=ウィンドウの挙動
+Name[ka]=ფანჯრის ქცევა
+Name[kk]=Терезе қасиеттері
+Name[km]=ឥរិយាបថ​បង្អួច
+Name[ko]=창 동작
+Name[lo]=ພິດຕິກຳຂອງຫນ້າຕ່າງ
+Name[lt]=Langų elgsena
+Name[lv]=Loga izturēšanās
+Name[mk]=Однесување на прозорци
+Name[mn]=Цонхны байдал
+Name[mt]=Imġieba tal-Window
+Name[nb]=Vindusoppførsel
+Name[nds]=Finsterbedregen
+Name[ne]=सञ्झ्याल व्यवहार
+Name[nl]=Venstergedrag
+Name[nn]=Vindaugsåtferd
+Name[nso]=Mekgwa ya Window
+Name[oc]=Comportament de las finestras
+Name[pa]=ਝਰੋਖਾ ਵਿਵਹਾਰ
+Name[pl]=Okna
+Name[pt]=Comportamento das Janelas
+Name[pt_BR]=Comportamento da Janela
+Name[ro]=Comportament fereastră
+Name[ru]=Поведение окна
+Name[rw]=Imyitwarire y'Idirishya
+Name[se]=Láseláhtten
+Name[sk]=Správanie okien
+Name[sl]=Obnašanje oken
+Name[sr]=Понашање прозора
+Name[sr@Latn]=Ponašanje prozora
+Name[ss]=Kutiphatsa kweliwindi
+Name[sv]=Fönsterbeteende
+Name[ta]=சாளர நடத்தை
+Name[tg]=Рафтори тиреза
+Name[th]=พฤติกรรมของหน้าต่าง
+Name[tr]=Pencere Davranışı
+Name[tt]=Täräzä Çağılışı
+Name[uk]=Поведінка вікон
+Name[uz]=Oynaning xususiyatlari
+Name[uz@cyrillic]=Ойнанинг хусусиятлари
+Name[ven]=Maitele a windo
+Name[vi]=Ứng xử của Cửa sổ
+Name[wa]=Dujhance des purneas
+Name[xh]=Ukuziphatha kwe Window
+Name[zh_CN]=窗口行为
+Name[zh_TW]=視窗行為
+Name[zu]=Ukuziphatha kwe-Window
+
+Comment=Configure the window behavior
+Comment[af]=Stel die venster gedrag op
+Comment[ar]=إعداد سلوك النافذة
+Comment[be]=Настаўленні паводзінаў вокнаў
+Comment[bg]=Настройване поведението на прозорците
+Comment[bn]=উইণ্ডোটির আচরণ কনফিগার করুন
+Comment[br]=Kefluniañ emzalc'h ar prenester
+Comment[bs]=Podesite ponašanje prozora
+Comment[ca]=Configura el comportament de finestra
+Comment[cs]=Nastavení chování oken
+Comment[csb]=Kònfigùracëjô ùchòwaniô òkna
+Comment[cy]=Ffurfweddu ymddygiad y ffenestr
+Comment[da]=Indstil vinduets opførsel
+Comment[de]=Fensterverhalten festlegen
+Comment[el]=Ρύθμιση της συμπεριφοράς των παραθύρων
+Comment[en_GB]=Configure the window behaviour
+Comment[eo]=Agordas la konduton de la fenestro
+Comment[es]=Configuración del comportamiento de la ventana
+Comment[et]=Akende käitumise seadistamine
+Comment[eu]=Konfiguratu arakatzailearen portaera
+Comment[fa]=پیکربندی رفتار پنجره
+Comment[fi]=Ikkunoiden asetukset
+Comment[fr]=Configuration du comportement des fenêtres
+Comment[fy]=Stel it finstergedrach yn
+Comment[ga]=Cumraigh oibriú na bhfuinneog
+Comment[gl]=Configurar o comportamento das fiestras
+Comment[he]=שינוי הגדרות פעולת הדפדפן
+Comment[hi]=विंडो व्यवहार कॉन्फ़िगर करें
+Comment[hr]=Konfiguriranje ponašanja preglednika
+Comment[hu]=Az ablakok működési jellemzőinek beállítása
+Comment[is]=Stilla hegðan glugga
+Comment[it]=Configura il comportamento della finestra
+Comment[ja]=ウィンドウの挙動を設定
+Comment[ka]=ბრაუზერის ქცევის კონფიგურაცია
+Comment[kk]=Терезе қасиеттерін баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ឥរិយាបថ​បង្អួច
+Comment[ko]=창 동작 설정
+Comment[lt]=Konfigūruoti lango elgseną
+Comment[lv]=Konfigurē loga izturēšanos
+Comment[mk]=Конфигурирајте го однесувањето на прозорците
+Comment[mt]=Ikkonfigura l-imġieba tal-windows
+Comment[nb]=Tilpass vinduets oppførsel
+Comment[nds]=Dat Finsterbedregen instellen
+Comment[ne]=सञ्झ्याल व्यवहार कन्फिगर गर्नुहोस्
+Comment[nl]=Stel het venstergedrag in
+Comment[nn]=Oppsett av nettlesaråtferda
+Comment[pa]=ਝਰੋਖਾ ਵਿਵਹਾਰ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja zachowania okna
+Comment[pt]=Configurar o comportamento das janelas
+Comment[pt_BR]=Configura o comportamento das janelas
+Comment[ro]=Configurează comportamentul ferestrei
+Comment[ru]=Настройка поведения браузера
+Comment[rw]=Kuboneza imyitwarire y'idirishya
+Comment[se]=Heivet láseláhttema
+Comment[sk]=Nastavenie správania okna
+Comment[sl]=Nastavite obnašanje brskalnika
+Comment[sr]=Подешавање понашања прозора
+Comment[sr@Latn]=Podešavanje ponašanja prozora
+Comment[sv]=Anpassa fönsterbeteende
+Comment[ta]=º¡ÇÃò¾¢ý Àñ¨À ¯ûǨÁ
+Comment[th]=ปรับแต่งพฤติกรมของหน้าต่าง
+Comment[tr]=Pencere davranışlarını yapılandır
+Comment[tt]=Täräzä çağılışın caylaw
+Comment[uk]=Налаштування поведінки вікна
+Comment[uz]=Oynaning xususiyatlarini moslash
+Comment[uz@cyrillic]=Ойнанинг хусусиятларини мослаш
+Comment[vi]=Cấu hình cách cửa sổ ứng xử
+Comment[wa]=Apontyî l' dujhance des purneas
+Comment[zh_CN]=配置窗口行为
+Comment[zh_TW]=設定視窗行為
+
+Keywords=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick
+Keywords[ar]=تركيز ركز,موضع مكان,سلوك النافذة,تحريك,رفع, رفع تلقائي,نوافذ,إطار,شريط العنوان,نقر ثنائي
+Keywords[be]=Фокус,Размяшчэнне,Паводзіны акна,Анімацыя,Вокны,Акно,Фрэйм,Загаловак,Двайны націск мышы,focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick
+Keywords[bg]=фокус, поведение, прозорец, активиране, заглавие, focus, placement, window behaviour, animation, raise, auto raise, windows, frame, titlebar, doubleclick
+Keywords[bs]=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick,fokus,smještaj,ponašanje prozora,animacija,podigni,automatski podigni,prozori,okvir,naslovna trak,dvoklik,dvostruki klik
+Keywords[ca]=focus,emplaçament,comportament de la finestra,animació,eleva,eleva automàticament,finestres,marc,barra del títol,doble clic
+Keywords[cs]=Zaměření,Umístění oken,Chování oken,Animace,Okna,Rámeček,Titulek,Dvojklik
+Keywords[csb]=zrëszanié,aktiwòwanié,ùkłôdanié òknów,ùchòwanié òknów,animacëjô,aùtomatné aktiwòwanié,òkna,òkno,rama,tilowô lëstew,dëbeltné klëkniãce
+Keywords[cy]=canolbwynt,lleoliad,ymddygiad ffenestr,bywluniad,codi,hunan-godi,ffenestri,ffrâm,bar-teitl,clic dwbl,dwbl-glic
+Keywords[da]=fokus,placering,vinduesopførsel,animering,Hæv,autohæv,vinduer,ramme,titellinje,dobbeltklik
+Keywords[de]=Aktivierung,Platzierung,Fensterverhalten,Animation,Nach vorn/hinten, Fenster,Rahmen,Umrandung,Titelleiste,Doppelklick
+Keywords[el]=εστίαση,τοποθέτηση,συμπεριφορά παραθύρων,εφέ κίνησης,ανύψωση,αυτόματη ανύψωση,παράθυρα,πλαίσιο,μπάρα τίτλου,διπλό κλικ
+Keywords[en_GB]=focus,placement,window behaviour,animation,raise,auto raise,windows,frame,titlebar,doubleclick
+Keywords[eo]=fokuso,lokigo,fenestrokonduto,spektaklo,malfonigo,aŭtomalfonigo,fenestro,kadro,titollistelo,duklako
+Keywords[es]=foco,ubicación,posición,ventana,comportamiento,animación,frente,pasar al frente,ventanas,marco,barra de título,doble pulsación
+Keywords[et]=fookus,asetus,akende käitumine,animatsioon,tõstmine,automaatne tõstmine,aknad,raam,tiitliriba,topeltklikk,topeltklõps
+Keywords[eu]=fokua,kokalekua,leihoaren portaera,animazioa,aurrera ekarri,auto aurrera ekarri,leihoak,markoa,titulu-barra,klik bikoitza
+Keywords[fa]=کانون، جای‌دهی، رفتار پنجره، پویانمایی، بالا بردن، بالا بردن خودکار، پنجره‌ها، قاب، میله عنوان، دو بار فشار
+Keywords[fi]=fokus,sijoittaminen,ikkunan toiminta,animaatio,nosto,automaattinosto,ikkunat,kehys,otsikkorivi,tuplanapsautus,kaksoisnapsautus
+Keywords[fr]=focus,gestion du focus,fenêtre,placement des fenêtres,comportement des fenêtres,animation,fenêtres,barre de titre,double clic,souris,boutons de la souris,dessus,dessous,raise,auto raise
+Keywords[fy]=focusbeleid,vensterplaatsing,finsterferpleatsing,venstergedrag,finstergedrach,focus,window,finster,plaatsing,pleatsing,plaatsingbeleid,pleatsingbelied,animatie,animaasje,voorgrond,foargrûn,vensters,finsters,frame,kader,dubbelklikken,dûbelklikke,fokusbeliid
+Keywords[ga]=fócas,láithriú,oibriú na bhfuinneog,beochan,ardaigh,uathardaigh,fuinneoga,fráma,ceannteideal,déchliceáil
+Keywords[gl]=foco,emprazamento,comportamento da fiestra,animación,subir,auto subir,fiestras,marco,barra de título,dobre presión
+Keywords[he]=התמקדות,מיקום,פעולת חלונות,אנימציה,הנפשה,הבאה לחזית,הבאה אוטומטית לחזית,חלונות,גבול,מסגרת,שורת כותרת,לחיצה כפולה, focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick
+Keywords[hi]=फोकस,प्लेसमेंट,विंडो व्यवहार,एनिमेशन,ऊपर उठाएँ,स्वतः ऊपर उठाएँ,विंडोज़,फ्रेम,शीर्षक-पट्टी,डबल-क्लिक
+Keywords[hr]=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick,fokus,smještaj,ponašanje prozora,animacija,pojava,podizanje,automatska pojava,prozori,okvir,naslovna traka,dvostruko klikanje
+Keywords[hu]=fókusz,elhelyezés,ablakelhelyezés,animáció,felemelés,automatikus felemelés,ablakok,keret,címsor,dupla kattintás
+Keywords[is]=virkni glugga,staðsetning,hegðun,högun glugga,hækka,hækka sjálfkrafa,gluggar,titilslá,titilrönd,tvísmella
+Keywords[it]=focus,piazzamento,comportamento finestre,animazione,alza,alza automaticamente,finestre,cornice,barra del titolo,doppio clic
+Keywords[ja]=フォーカス,配置,ウィンドウの挙動,アニメーション,前面へ,自動的に前面へ,ウィンドウ,フレーム,タイトルバー,ダブルクリック
+Keywords[km]=ផ្ដោត​អារម្មណ៍,ការ​ដាក់,ឥរិយាបថ​បង្អួច,ចលនា,លើកឡើង,លើក​ឡើង​ស្វ័យប្រវត្តិ,បង្អួច,ស៊ុម,របារ​ចំណងជើង,ចុច​ទ្វេដង
+Keywords[lt]=focus,placement,window behaviour,animation,raise,auto raise,windows,frame,titlebar,doubleclick,lango išdėstymas,elgesys,langai,rėmelis,lango antraštė
+Keywords[lv]=fokuss,novietojums,loga izturēšanās,animācija,celt,auto celt,logi,kadrs,virsraksta josla,dubultklikšķis
+Keywords[mk]=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick,фокус,позиционирање,однесување на прозорците, анимација,подигање,авто подигање,прозорци,рамка,насловна лента,двоен клик
+Keywords[mt]=focus,placement,window behaviour,animation,raise,auto raise,windows,frame,titlebar,doubleclick
+Keywords[nb]=fokus,plassering,vindusoppførsel,animasjon,hev,autohev,vinduer,ramme,tittelliste,dobbeltklikk
+Keywords[nds]=Fokus,Platzeren,Finsterbedregen,Animatschoon,fokusseren,aktiveren,automaatsch fokusseren,Finster,Rahmen,Titelbalken,Dubbelklick
+Keywords[ne]=फोकस, स्थापना, सञ्झ्याल व्यवहार, एनिमेसन, बृद्धि, स्वत: बृद्धि, सञ्झ्याल, फ्रेम, शीर्षकपट्टी, डबल क्लिक
+Keywords[nl]=focusbeleid,vensterplaatsing,venstergedrag,focus,window,plaatsing,plaatsingbeleid,animatie,voorgrond,vensters,frame,kader,dubbelklikken
+Keywords[nn]=fokus,plassering,vindaugsplassering,vindaugsåtferd,animasjon,hev,automatisk heving,vindauge,ramme,tittellinje,dobbeltklikk
+Keywords[pa]=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick,ਝਰੋਖਾ ਵਿਹਾਰ,ਸਜੀਵਤਾ,ਝਰੋਖੇ
+Keywords[pl]=uaktywnianie,układanie okien,zachowanie okien,animacja,automatyczne uaktywnienie,okno,okna,ramka,pasek tytułowy,podwójne kliknięcie
+Keywords[pt]=foco,posicionamento,comportamento das janelas,animação,elevar,auto-elevar,janelas,contorno,barra de título,duplo-carregar
+Keywords[pt_BR]=foco,posicionamento,comportamento das janelas,animação,elevar,auto-elevar,janelas, quadro,barra de título,clique duplo
+Keywords[ro]=focus,plasare,comportament fereastră,animație,ridicare,automat,ferestre,cadru,bară de titlu,dublu clic
+Keywords[rw]=igaragazarikeye, ugushyira mu mwanya,imyitwarire y'idirishya,ibyinisha,byizamura,amadirishya,ikadiri,umwanyabikoresho,gukandakabiri
+Keywords[se]=fohkus,sajádat,láseláhtten,animašuvdna,lokte,autolokte,láset,rámma,namahusholga,duppalcoahkkal
+Keywords[sk]=fokus,umiestnenie,správanie okien,animácia,zdvihnutie,automatické zdvihnutie,titulok,dvojité kliknutie,rámec,okná
+Keywords[sl]=fokus,postavitev,obnašanje okna,animacija,dvigni,okna,okvir,naslovna vrstica,dvojni klik
+Keywords[sr]=focus,placement,window behaviour,animation,raise,ауто raise,windows,frame,titlebar,doubleclick,фокус,понашање прозора,анимација,прозори,оквир,насловна линија,двоклик
+Keywords[sr@Latn]=focus,placement,window behaviour,animation,raise,auto raise,windows,frame,titlebar,doubleclick,fokus,ponašanje prozora,animacija,prozori,okvir,naslovna linija,dvoklik
+Keywords[sv]=fokus,placering,fönsterbeteende,animering,höj, autohöj,fönster,kant,namnlist,dubbelklick
+Keywords[ta]=பார்வை,இடம்,சாளரபண்பு,உயிர்சித்திரம்,மேலெழுப்பு, தானாக மேலெழுப்பு,சாளரங்கள்,சட்டம்,தலைப்புப்பட்டி,இரண்டு சொடுக்கு
+Keywords[th]=โฟกัส,การวางตำแหน่ง,พฤติกรรมของหน้าต่าง,อนิเมชั่น,ยกขึ้นไว้ด้านบน,ยกขึ้นไว้ด้านบนโดยอัตโนมัติ,หน้าต่าง,กรอบ,แถบหัวเรื่อง,ดับเบิลคลิก
+Keywords[tr]=odak,odak davranış biçimi,pencere yerleşimi,pencere davranışı,Yerleşim davranış biçimi,animasyon,kaldır,otomatik kaldır,çerçeve,çift tıkla
+Keywords[uk]=фокус,розташовування,поведінка вікна,анімація,підняти,піднімати автоматично,вікна,рамка,заголовок,подвійне клацання
+Keywords[uz]=fokuslash,joylashish,oynaning xususiyatlari,animatsiya,oldinga,avto-oldinga,oynalar,freym,sarlavha,ikki marta bosish
+Keywords[uz@cyrillic]=фокуслаш,жойлашиш,ойнанинг хусусиятлари,анимация,олдинга,авто-олдинга,ойналар,фрейм,сарлавҳа,икки марта босиш
+Keywords[vi]=chọn,dịch chuyển,ứng xử cửa sổ,hoạt hình,nâng lên,tự nâng lên,cửa sổ,khung,thanh tiêu đề,nhấn đúp
+Keywords[wa]=focus,plaece,dujhance des purneas,animåcion,rimonter,rimonte tot seu,purneas,cåde,bår di tite,clitchî deus côps,clitchî deus feyes
+Keywords[zh_CN]=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick,焦点,放置,窗口行为,动画,升起,自动升起,窗口,框架,标题栏,双击
+Keywords[zh_TW]=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick,焦點,放置,視窗行為,動畫,抬升,自動抬升,視窗,框架,標題列,雙擊
+Categories=Qt;KDE;X-KDE-settings-desktop;
diff --git a/twin/kcmtwin/twinoptions/twintranslucency.desktop b/twin/kcmtwin/twinoptions/twintranslucency.desktop
new file mode 100644
index 000000000..591cab231
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/twintranslucency.desktop
@@ -0,0 +1,195 @@
+[Desktop Entry]
+Icon=kcmkwm
+Type=Application
+Exec=kcmshell twintranslucency
+DocPath=kcontrol/windowmanagement/index.html#action-translucency
+
+X-KDE-ModuleType=Library
+X-KDE-Library=twinoptions
+X-KDE-FactoryName=twintranslucency
+
+Name=Translucency
+Name[af]=Deursigtigheid
+Name[ar]=الشفافية
+Name[be]=Празрыстасць
+Name[bg]=Полупрозрачност
+Name[bn]=সমস্বচ্ছতা
+Name[br]=Treuzwel
+Name[bs]=Prozirnost
+Name[ca]=Translucidesa
+Name[cs]=Průhlednost
+Name[csb]=Przezérnota
+Name[da]=Gennemsigtighed
+Name[de]=Transparenz
+Name[el]=Hμιδιαφάνεια
+Name[eo]=Travidebleco
+Name[es]=Translúcido
+Name[et]=Läbipaistvus
+Name[eu]=Gardentasuna
+Name[fa]=نیمۀ شفافی
+Name[fi]=Läpikuultavuus
+Name[fr]=Transparence
+Name[fy]=Trochsichtichheid
+Name[ga]=Tréshoilseacht
+Name[gl]=Translucidez
+Name[he]=שקיפות
+Name[hr]=Prozirnost
+Name[hu]=Áttetszőség
+Name[id]=Tembus Pandang
+Name[is]=Gegnsæi
+Name[it]=Trasparenza
+Name[ja]=透過性
+Name[ka]=ნახევრადგამჭირვალეობა
+Name[kk]=Мөлдірлігі
+Name[km]=ភាព​ថ្លា
+Name[ko]=반투명
+Name[lt]=Permatomumas
+Name[mk]=Провидност
+Name[nb]=Gjennomsiktighet
+Name[nds]=Dörschienen
+Name[ne]=स्वच्छता
+Name[nl]=Transparantie
+Name[nn]=Gjennomsiktig
+Name[pa]=ਪਾਰਦਰਸ਼ੀ
+Name[pl]=Przezroczystość
+Name[pt]=Transparência
+Name[pt_BR]=Translúcido
+Name[ro]=Translucență
+Name[ru]=Полупрозрачность
+Name[rw]=Ukujyakwijima
+Name[se]=Čađačuovgi
+Name[sk]=Priesvitnosť
+Name[sl]=Prosojnost
+Name[sr]=Прозирност
+Name[sr@Latn]=Prozirnost
+Name[sv]=Genomskinlighet
+Name[ta]=ஒளிகசிவு
+Name[th]=ความโปร่งแสง
+Name[tr]=Şeffaflık
+Name[tt]=Ütäkürenü
+Name[uk]=Прозорість
+Name[uz]=Shaffoflik
+Name[uz@cyrillic]=Шаффофлик
+Name[vi]=Đục & Trong
+Name[wa]=Translucidaedje
+Name[zh_CN]=透明度
+Name[zh_TW]=透明度
+
+Comment=Configure window translucency and shadow management
+Comment[af]=Stel die venster deursigtigheid en skaduwee op
+Comment[ar]=إعداد تدبيرات شفافية و تظليل النافذة
+Comment[be]=Настаўленні празрыстасці вокнаў і кіраванне ценем
+Comment[bg]=Настройване на полупрозрачността и сенките на прозорците
+Comment[bn]=উইণ্ডোর সমস্বচ্ছতা এবং ছায়া কনফিগার করুন
+Comment[bs]=Podesite prozirnost prozora i podesite sjenke
+Comment[ca]=Configura la translucidesa de finestres i gestiona l'ombra
+Comment[cs]=Nastavení průhlednosti a stínování oken
+Comment[csb]=Kònfigùracëjô przezérnotë ë ceniów òknów
+Comment[da]=Indstil vinduets gennemsigtighed og skyggehåndtering
+Comment[de]=Einrichtung der Fenstertransparenz und Schatten
+Comment[el]=Ρύθμιση ημιδιαφάνειας παραθύρου και διαχείρισης σκίασης
+Comment[eo]=Agordu administradon de fenestro-travidebleco kaj ombreco.
+Comment[es]=Configurar la opacidad de la ventana y gestión de sombra
+Comment[et]=Akende läbipaistvuse ja varjude seadistamine
+Comment[eu]=Konfiguratu leiho gardentasunak eta itzalen kudeaketa
+Comment[fa]=پیکربندی مدیریت نیمۀ شفافی و سایۀ پنجره
+Comment[fi]=Muokkaa ikkunoinnin läpikuultavuus ja varjostus
+Comment[fr]=Configuration de la transparence et de l'ombre des fenêtres
+Comment[fy]=Finstertrochsichtichheid- en -skaadbehear ynstelle
+Comment[ga]=Cumraigh tréshoilseacht na fuinneoige agus bainisteoireacht scátha
+Comment[gl]=Configurar a xestión de sombras e translucidez das fiestras
+Comment[he]=תצורה של שקיפות החלונות וניהול ההצללות
+Comment[hr]=Konfiguriranje prozirnosti prozora i upravljanje sjenčanjem
+Comment[hu]=Az ablakkezelés áttetszőségi és árnyékolási beállításai
+Comment[is]=Stilla gegnsæi glugga og sýsla með skugga
+Comment[it]=Configura la trasparenza e le ombre delle finestre
+Comment[ja]=ウィンドウの透過性と影の設定
+Comment[ka]=ფანჯრების გამჭირვალობის და ჩრდილების კონფიგურაცია
+Comment[kk]=Терезенің мөлдірлігін және көлеңкесін баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​គ្រប់គ្រង​ភាព​ថ្លា និង​ស្រមោល​របស់​បង្អួច
+Comment[lt]=Konfigūruoti langų permatomumą ir šešėlius
+Comment[mk]=Конфигурирајте ги провидноста на прозорците и менаџментот на сенки
+Comment[nb]=Tilpass behandling av vindusgjennomsiktighet og -skygge
+Comment[nds]=Finsterdörschienen un -Schadden instellen
+Comment[ne]=सञ्झ्याल स्वच्छता र छायाँ व्यवस्थापन कन्फिगर गर्नुहोस्
+Comment[nl]=Venstertransparantie- en -schaduwbeheer instellen
+Comment[nn]=Oppsett av gjennomsiktige vindauge og vindaugsskugge
+Comment[pa]=ਝਰੋਖਾ ਪਾਰਦਰਸਤਾ ਅਤੇ ਛਾਂ ਪਰਬੰਧਨ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja przezroczystości i cieni okien
+Comment[pt]=Configuração da transparência e sombras de janelas
+Comment[pt_BR]=Configura o gerenciamento de sombra e transparência da janela
+Comment[ro]=Configurează translucența și umbra ferestrelor
+Comment[ru]=Настройка полупрозрачности и теней окна
+Comment[rw]=Kuboneza ubuyobozi bw'ukujyakubonerana n'igicucu by'idirishya
+Comment[se]=Heivet lášečađačuovgivuođa ja suoivvanasgieđaheami
+Comment[sk]=Nastavenie priesvitnosti okien a správcu tieňovania
+Comment[sl]=Nastavitve prosojnosti oken in upravljanje s sencami
+Comment[sr]=Подешавање прозирности прозора и управљање сенкама
+Comment[sr@Latn]=Podešavanje prozirnosti prozora i upravljanje senkama
+Comment[sv]=Anpassa fönstergenomskinlighet och skugghantering
+Comment[ta]=சாளர ஒளிகசிவு மற்றும் நிழல் மேலாண்மையை வடிவமை
+Comment[th]=ปรับแต่งคุณสมบัติความโปร่งแสงและเงาของหน้าต่าง
+Comment[tr]=Pencere şeffaflığını ve gölge yönetimini yapılandır
+Comment[tt]=Täräzä ütäkürenüe belän külägäsen caylaw
+Comment[uk]=Налаштування прозорості вікон та керування затіненням
+Comment[uz]=Oynaning shaffofligini va soyasini moslash
+Comment[uz@cyrillic]=Ойнанинг шаффофлигини ва соясини мослаш
+Comment[vi]=Cấu hình độ đục và trong cùng với bóng râm của cửa sổ
+Comment[wa]=Apontiaedje des fonccionålités translucides et d' ombe do manaedjaedje des purneas
+Comment[zh_CN]=配置窗口透明度和阴影管理
+Comment[zh_TW]=設定視窗透明度與陰影管理功能
+
+Keywords=translucency,transparence,shadows
+Keywords[ar]=الشفافية,شفاف,أظلال
+Keywords[be]=Празрыстасць,Цені,translucency,transparence,shadows
+Keywords[bg]=полупрозрачност, прозрачност, сянка, сенки, translucency, transparence, shadows
+Keywords[bs]=translucency,transparence,shadows,providnost,sjene,sjenke,sjenka
+Keywords[ca]=translucidesa,transparència,ombres
+Keywords[cs]=průhlednost,průsvitnost,stín
+Keywords[csb]=przezérnota,półprzezérnota,przeswiécëna,ceniô,cenie
+Keywords[da]=gennemsigtighed,transparens,skygge
+Keywords[el]=ημιδιαφάνεια,διαφάνεια,σκιές
+Keywords[eo]=Travidebleco, ombroj
+Keywords[es]=translucido,transparente,sombras,opacidad
+Keywords[et]=läbipaistvus,läbipaistev,vari
+Keywords[eu]=gardena,gardentasunak,itzalak
+Keywords[fa]=نیمۀ شفافی، شفافیت، سایه‌ها
+Keywords[fi]=läpikuultavuus, läpinäkyvyys, varjot
+Keywords[fr]=translucidité,translucide,transparence,transparent,ombre
+Keywords[fy]=translucency,trochsichtich,ransparantie,schaduwen,skaden
+Keywords[ga]=tréshoilseacht,gléine,scáthanna
+Keywords[gl]=translucéncia,transparéncia,sombras
+Keywords[he]=translucency,transparence,shadows,הצללה,צל,צללים,שקוף,שקיפות
+Keywords[hr]=translucency,transparence,shadows,prozirnost,sjene,providnost
+Keywords[hu]=áttetszőség,áttetsző,árnyékok
+Keywords[id]=tembus pandang,transparan, bayangan
+Keywords[it]=trasparenza,ombre
+Keywords[ja]=透過性,透明,影
+Keywords[km]=ភាព​ថ្លា,ថ្លា,ស្រមោល
+Keywords[lt]=translucency,transparence,shadows,permatomumas,šešėliai
+Keywords[mk]=translucency,transparence,shadows,провидност,проѕирност,сенки
+Keywords[nb]=gjennomsiktighet,skygge
+Keywords[nds]=Transparenz,Schadden,Dörschienen
+Keywords[ne]=स्वच्छता,पारदर्शीता,छायाँ
+Keywords[nl]=translucency,transparantie,schaduwen
+Keywords[nn]=gjennomsiktig,skugge
+Keywords[pa]=translucency,transparence,ਛਾਂ
+Keywords[pl]=przezroczystość,półprzezroczystość,prześwitywanie,cień,cienie
+Keywords[pt]=transparência,sombras
+Keywords[pt_BR]=translúcido,transparência,sombras
+Keywords[ro]=translucență,transparență,umbre
+Keywords[rw]=ukujyakwijima,ukubonerana,ibicucu
+Keywords[sl]=prosojnost,prozornost,sence
+Keywords[sr]=translucency,transparence,shadows,провидност,сенке
+Keywords[sr@Latn]=translucency,transparence,shadows,providnost,senke
+Keywords[sv]=genomskinlighet,skuggor
+Keywords[ta]=ஒளிகசிவு,ஊடகத்தன்மை,நிழல்கள்
+Keywords[th]=ความโปร่งแสง,ความโปร่งใส,เงา
+Keywords[tr]=şeffaflık,şeffaf,gölge,opak,opasite
+Keywords[uk]=translucency,transparence,shadows,прозорість,напівпрозорість,тіні
+Keywords[uz]=shaffof,soya
+Keywords[uz@cyrillic]=шаффоф,соя
+Keywords[vi]=mờ đục,trong suốt,bóng râm
+Keywords[wa]=translucency,transparince,translucide,translucidaedje
+Keywords[zh_CN]=透明度,阴影,translucency,transparence,shadows
+Keywords[zh_TW]=translucency,transparence,shadows,透明,陰影
diff --git a/twin/kcmtwin/twinoptions/windows.cpp b/twin/kcmtwin/twinoptions/windows.cpp
new file mode 100644
index 000000000..80185a427
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/windows.cpp
@@ -0,0 +1,1712 @@
+/*
+ * windows.cpp
+ *
+ * Copyright (c) 1997 Patrick Dowler dowler@morgul.fsh.uvic.ca
+ * Copyright (c) 2001 Waldo Bastian bastian@kde.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ *
+ */
+
+#include <config.h>
+
+#include <tqdir.h>
+#include <tqlayout.h>
+#include <tqslider.h>
+#include <tqwhatsthis.h>
+#include <tqvbuttongroup.h>
+#include <tqcheckbox.h>
+#include <tqradiobutton.h>
+#include <tqlabel.h>
+#include <tqcombobox.h>
+#include <kmessagebox.h>
+
+#include <kactivelabel.h>
+#include <klocale.h>
+#include <kcolorbutton.h>
+#include <kconfig.h>
+#include <knuminput.h>
+#include <kapplication.h>
+#include <kdialog.h>
+#include <dcopclient.h>
+#include <kglobal.h>
+#include <kprocess.h>
+#include <tqtabwidget.h>
+
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include "windows.h"
+
+
+// twin config keywords
+#define KWIN_FOCUS "FocusPolicy"
+#define KWIN_PLACEMENT "Placement"
+#define KWIN_MOVE "MoveMode"
+#define KWIN_MINIMIZE_ANIM "AnimateMinimize"
+#define KWIN_MINIMIZE_ANIM_SPEED "AnimateMinimizeSpeed"
+#define KWIN_RESIZE_OPAQUE "ResizeMode"
+#define KWIN_GEOMETRY "GeometryTip"
+#define KWIN_AUTORAISE_INTERVAL "AutoRaiseInterval"
+#define KWIN_AUTORAISE "AutoRaise"
+#define KWIN_DELAYFOCUS_INTERVAL "DelayFocusInterval"
+#define KWIN_DELAYFOCUS "DelayFocus"
+#define KWIN_CLICKRAISE "ClickRaise"
+#define KWIN_ANIMSHADE "AnimateShade"
+#define KWIN_MOVE_RESIZE_MAXIMIZED "MoveResizeMaximizedWindows"
+#define KWIN_ALTTABMODE "AltTabStyle"
+#define KWIN_TRAVERSE_ALL "TraverseAll"
+#define KWIN_SHOW_POPUP "ShowPopup"
+#define KWIN_ROLL_OVER_DESKTOPS "RollOverDesktops"
+#define KWIN_SHADEHOVER "ShadeHover"
+#define KWIN_SHADEHOVER_INTERVAL "ShadeHoverInterval"
+#define KWIN_FOCUS_STEALING "FocusStealingPreventionLevel"
+#define KWIN_HIDE_UTILITY "HideUtilityWindowsForInactive"
+#define KWIN_SEPARATE_SCREEN_FOCUS "SeparateScreenFocus"
+#define KWIN_ACTIVE_MOUSE_SCREEN "ActiveMouseScreen"
+
+// kwm config keywords
+#define KWM_ELECTRIC_BORDER "ElectricBorders"
+#define KWM_ELECTRIC_BORDER_DELAY "ElectricBorderDelay"
+
+//CT 15mar 98 - magics
+#define KWM_BRDR_SNAP_ZONE "BorderSnapZone"
+#define KWM_BRDR_SNAP_ZONE_DEFAULT 10
+#define KWM_WNDW_SNAP_ZONE "WindowSnapZone"
+#define KWM_WNDW_SNAP_ZONE_DEFAULT 10
+
+#define MAX_BRDR_SNAP 100
+#define MAX_WNDW_SNAP 100
+#define MAX_EDGE_RES 1000
+
+
+KFocusConfig::~KFocusConfig ()
+{
+ if (standAlone)
+ delete config;
+}
+
+// removed the LCD display over the slider - this is not good GUI design :) RNolden 051701
+KFocusConfig::KFocusConfig (bool _standAlone, KConfig *_config, TQWidget * parent, const char *)
+ : KCModule(parent, "kcmkwm"), config(_config), standAlone(_standAlone)
+{
+ TQString wtstr;
+ TQBoxLayout *lay = new TQVBoxLayout (this, 0, KDialog::spacingHint());
+
+ //iTLabel = new TQLabel(i18n(" Allowed overlap:\n"
+ // "(% of desktop space)"),
+ // plcBox);
+ //iTLabel->tqsetAlignment(AlignTop|AlignHCenter);
+ //pLay->addWidget(iTLabel,1,1);
+
+ //interactiveTrigger = new TQSpinBox(0, 500, 1, plcBox);
+ //pLay->addWidget(interactiveTrigger,1,2);
+
+ //pLay->addRowSpacing(2,KDialog::spacingHint());
+
+ //lay->addWidget(plcBox);
+
+ // focus policy
+ fcsBox = new TQButtonGroup(i18n("Focus"),this);
+ fcsBox->setColumnLayout( 0, Qt::Horizontal );
+
+ TQBoxLayout *fLay = new TQVBoxLayout(fcsBox->tqlayout(),
+ KDialog::spacingHint());
+
+ TQBoxLayout *cLay = new TQHBoxLayout(fLay);
+ TQLabel *fLabel = new TQLabel(i18n("&Policy:"), fcsBox);
+ cLay->addWidget(fLabel, 0);
+ focusCombo = new TQComboBox(false, fcsBox);
+ focusCombo->insertItem(i18n("Click to Focus"), CLICK_TO_FOCUS);
+ focusCombo->insertItem(i18n("Focus Follows Mouse"), FOCUS_FOLLOWS_MOUSE);
+ focusCombo->insertItem(i18n("Focus Under Mouse"), FOCUS_UNDER_MOUSE);
+ focusCombo->insertItem(i18n("Focus Strictly Under Mouse"), FOCUS_STRICTLY_UNDER_MOUSE);
+ cLay->addWidget(focusCombo,1 ,Qt::AlignLeft);
+ fLabel->setBuddy(focusCombo);
+
+ // FIXME, when more policies have been added to KWin
+ wtstr = i18n("The focus policy is used to determine the active window, i.e."
+ " the window you can work in. <ul>"
+ " <li><em>Click to focus:</em> A window becomes active when you click into it."
+ " This is the behavior you might know from other operating systems.</li>"
+ " <li><em>Focus follows mouse:</em> Moving the mouse pointer actively on to a"
+ " normal window activates it. New windows will receive the focus,"
+ " without you having to point the mouse at them explicitly."
+ " Very practical if you are using the mouse a lot.</li>"
+ " <li><em>Focus under mouse:</em> The window that happens to be under the"
+ " mouse pointer is active. If the mouse points nowhere, the last window"
+ " that was under the mouse has focus."
+ " New windows will not automatically receive the focus.</li>"
+ " <li><em>Focus strictly under mouse:</em> Only the window under the mouse pointer is"
+ " active. If the mouse points nowhere, nothing has focus."
+ " </ul>"
+ "Note that 'Focus under mouse' and 'Focus strictly under mouse' prevent certain"
+ " features such as the Alt+Tab walk through windows dialog in the KDE mode"
+ " from working properly."
+ );
+ TQWhatsThis::add( focusCombo, wtstr);
+ TQWhatsThis::add(fLabel, wtstr);
+
+ connect(focusCombo, TQT_SIGNAL(activated(int)), this, TQT_SLOT(setAutoRaiseEnabled()) );
+
+ // autoraise delay
+ autoRaiseOn = new TQCheckBox(i18n("Auto &raise"), fcsBox);
+ fLay->addWidget(autoRaiseOn);
+ connect(autoRaiseOn,TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(autoRaiseOnTog(bool)));
+
+ autoRaise = new KIntNumInput(500, fcsBox);
+ autoRaise->setLabel(i18n("Dela&y:"), Qt::AlignVCenter|Qt::AlignLeft);
+ autoRaise->setRange(0, 3000, 100, true);
+ autoRaise->setSteps(100,100);
+ autoRaise->setSuffix(i18n(" msec"));
+ fLay->addWidget(autoRaise);
+
+ connect(focusCombo, TQT_SIGNAL(activated(int)), this, TQT_SLOT(setDelayFocusEnabled()) );
+
+ delayFocusOn = new TQCheckBox(i18n("Delay focus"), fcsBox);
+ fLay->addWidget(delayFocusOn);
+ connect(delayFocusOn,TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(delayFocusOnTog(bool)));
+
+ delayFocus = new KIntNumInput(500, fcsBox);
+ delayFocus->setLabel(i18n("Dela&y:"), Qt::AlignVCenter|Qt::AlignLeft);
+ delayFocus->setRange(0, 3000, 100, true);
+ delayFocus->setSteps(100,100);
+ delayFocus->setSuffix(i18n(" msec"));
+ fLay->addWidget(delayFocus);
+
+ clickRaiseOn = new TQCheckBox(i18n("C&lick raise active window"), fcsBox);
+ connect(clickRaiseOn,TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(clickRaiseOnTog(bool)));
+ fLay->addWidget(clickRaiseOn);
+
+// fLay->addColSpacing(0,QMAX(autoRaiseOn->tqsizeHint().width(),
+// clickRaiseOn->tqsizeHint().width()) + 15);
+
+ TQWhatsThis::add( autoRaiseOn, i18n("When this option is enabled, a window in the background will automatically"
+ " come to the front when the mouse pointer has been over it for some time.") );
+ wtstr = i18n("This is the delay after which the window that the mouse pointer is over will automatically"
+ " come to the front.");
+ TQWhatsThis::add( autoRaise, wtstr );
+
+ TQWhatsThis::add( clickRaiseOn, i18n("When this option is enabled, the active window will be brought to the"
+ " front when you click somewhere into the window contents. To change"
+ " it for inactive windows, you need to change the settings"
+ " in the Actions tab.") );
+
+ TQWhatsThis::add( delayFocusOn, i18n("When this option is enabled, there will be a delay after which the"
+ " window the mouse pointer is over will become active (receive focus).") );
+ TQWhatsThis::add( delayFocus, i18n("This is the delay after which the window the mouse pointer is over"
+ " will automatically receive focus.") );
+
+ separateScreenFocus = new TQCheckBox( i18n( "S&eparate screen focus" ), fcsBox );
+ fLay->addWidget( separateScreenFocus );
+ wtstr = i18n( "When this option is enabled, focus operations are limited only to the active Xinerama screen" );
+ TQWhatsThis::add( separateScreenFocus, wtstr );
+
+ activeMouseScreen = new TQCheckBox( i18n( "Active &mouse screen" ), fcsBox );
+ fLay->addWidget( activeMouseScreen );
+ wtstr = i18n( "When this option is enabled, active Xinerama screen (where for example new windows appear)"
+ " is the screen with the mouse pointer. When disabled, the active Xinerama screen is the screen"
+ " with the focused window. This option is by default disabled for Click to focus and"
+ " enabled for other focus policies." );
+ TQWhatsThis::add( activeMouseScreen, wtstr );
+ connect(focusCombo, TQT_SIGNAL(activated(int)), this, TQT_SLOT(updateActiveMouseScreen()));
+
+ if (!TQApplication::desktop()->isVirtualDesktop() ||
+ TQApplication::desktop()->numScreens() == 1) // No Ximerama
+ {
+ separateScreenFocus->hide();
+ activeMouseScreen->hide();
+ }
+
+ lay->addWidget(fcsBox);
+
+ kbdBox = new TQButtonGroup(i18n("Navigation"), this);
+ kbdBox->setColumnLayout( 0, Qt::Horizontal );
+ TQVBoxLayout *kLay = new TQVBoxLayout(kbdBox->tqlayout(), KDialog::spacingHint());
+
+ altTabPopup = new TQCheckBox( i18n("Show window list while switching windows"), kbdBox );
+ kLay->addWidget( altTabPopup );
+
+ wtstr = i18n("Hold down the Alt key and press the Tab key repeatedly to walk"
+ " through the windows on the current desktop (the Alt+Tab"
+ " combination can be reconfigured).\n\n"
+ "If this checkbox is checked"
+ " a popup widget is shown, displaying the icons of all windows to"
+ " walk through and the title of the currently selected one.\n\n"
+ "Otherwise, the focus is passed to a new window each time Tab"
+ " is pressed, with no popup widget. In addition, the previously"
+ " activated window will be sent to the back in this mode.");
+ TQWhatsThis::add( altTabPopup, wtstr );
+ connect(focusCombo, TQT_SIGNAL(activated(int)), this, TQT_SLOT(updateAltTabMode()));
+
+ traverseAll = new TQCheckBox( i18n( "&Traverse windows on all desktops" ), kbdBox );
+ kLay->addWidget( traverseAll );
+
+ wtstr = i18n( "Leave this option disabled if you want to limit walking through"
+ " windows to the current desktop." );
+ TQWhatsThis::add( traverseAll, wtstr );
+
+ rollOverDesktops = new TQCheckBox( i18n("Desktop navi&gation wraps around"), kbdBox );
+ kLay->addWidget(rollOverDesktops);
+
+ wtstr = i18n( "Enable this option if you want keyboard or active desktop border navigation beyond"
+ " the edge of a desktop to take you to the opposite edge of the new desktop." );
+ TQWhatsThis::add( rollOverDesktops, wtstr );
+
+ showPopupinfo = new TQCheckBox( i18n("Popup desktop name on desktop &switch"), kbdBox );
+ kLay->addWidget(showPopupinfo);
+
+ wtstr = i18n( "Enable this option if you wish to see the current desktop"
+ " name popup whenever the current desktop is changed." );
+ TQWhatsThis::add( showPopupinfo, wtstr );
+
+ lay->addWidget(kbdBox);
+
+ lay->addStretch();
+
+ // Any changes goes to slotChanged()
+ connect(focusCombo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ connect(fcsBox, TQT_SIGNAL(clicked(int)), TQT_SLOT(changed()));
+ connect(autoRaise, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(delayFocus, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(separateScreenFocus, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
+ connect(activeMouseScreen, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
+ connect(altTabPopup, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
+ connect(traverseAll, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
+ connect(rollOverDesktops, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
+ connect(showPopupinfo, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
+
+ load();
+}
+
+
+int KFocusConfig::getFocus()
+{
+ return focusCombo->currentItem();
+}
+
+void KFocusConfig::setFocus(int foc)
+{
+ focusCombo->setCurrentItem(foc);
+
+ // this will disable/hide the auto raise delay widget if focus==click
+ setAutoRaiseEnabled();
+ updateAltTabMode();
+}
+
+void KFocusConfig::updateAltTabMode()
+{
+ // not KDE-style Alt+Tab with unreasonable focus policies
+ altTabPopup->setEnabled( focusCombo->currentItem() == 0 || focusCombo->currentItem() == 1 );
+}
+
+void KFocusConfig::setAutoRaiseInterval(int tb)
+{
+ autoRaise->setValue(tb);
+}
+
+void KFocusConfig::setDelayFocusInterval(int tb)
+{
+ delayFocus->setValue(tb);
+}
+
+int KFocusConfig::getAutoRaiseInterval()
+{
+ return autoRaise->value();
+}
+
+int KFocusConfig::getDelayFocusInterval()
+{
+ return delayFocus->value();
+}
+
+void KFocusConfig::setAutoRaise(bool on)
+{
+ autoRaiseOn->setChecked(on);
+}
+
+void KFocusConfig::setDelayFocus(bool on)
+{
+ delayFocusOn->setChecked(on);
+}
+
+void KFocusConfig::setClickRaise(bool on)
+{
+ clickRaiseOn->setChecked(on);
+}
+
+void KFocusConfig::setAutoRaiseEnabled()
+{
+ // the auto raise related widgets are: autoRaise
+ if ( focusCombo->currentItem() != CLICK_TO_FOCUS )
+ {
+ autoRaiseOn->setEnabled(true);
+ autoRaiseOnTog(autoRaiseOn->isChecked());
+ }
+ else
+ {
+ autoRaiseOn->setEnabled(false);
+ autoRaiseOnTog(false);
+ }
+}
+
+void KFocusConfig::setDelayFocusEnabled()
+{
+ // the delayed focus related widgets are: delayFocus
+ if ( focusCombo->currentItem() != CLICK_TO_FOCUS )
+ {
+ delayFocusOn->setEnabled(true);
+ delayFocusOnTog(delayFocusOn->isChecked());
+ }
+ else
+ {
+ delayFocusOn->setEnabled(false);
+ delayFocusOnTog(false);
+ }
+}
+
+void KFocusConfig::autoRaiseOnTog(bool a) {
+ autoRaise->setEnabled(a);
+ clickRaiseOn->setEnabled( !a );
+}
+
+void KFocusConfig::delayFocusOnTog(bool a) {
+ delayFocus->setEnabled(a);
+}
+
+void KFocusConfig::clickRaiseOnTog(bool ) {
+}
+
+void KFocusConfig::setSeparateScreenFocus(bool s) {
+ separateScreenFocus->setChecked(s);
+}
+
+void KFocusConfig::setActiveMouseScreen(bool a) {
+ activeMouseScreen->setChecked(a);
+}
+
+void KFocusConfig::updateActiveMouseScreen()
+{
+ // on by default for non click to focus policies
+ KConfigGroup cfg( config, "Windows" );
+ if( !cfg.hasKey( KWIN_ACTIVE_MOUSE_SCREEN ))
+ setActiveMouseScreen( focusCombo->currentItem() != 0 );
+}
+
+void KFocusConfig::setAltTabMode(bool a) {
+ altTabPopup->setChecked(a);
+}
+
+void KFocusConfig::setTraverseAll(bool a) {
+ traverseAll->setChecked(a);
+}
+
+void KFocusConfig::setRollOverDesktops(bool a) {
+ rollOverDesktops->setChecked(a);
+}
+
+void KFocusConfig::setShowPopupinfo(bool a) {
+ showPopupinfo->setChecked(a);
+}
+
+void KFocusConfig::load( void )
+{
+ TQString key;
+
+ config->setGroup( "Windows" );
+
+ key = config->readEntry(KWIN_FOCUS);
+ if( key == "ClickToFocus")
+ setFocus(CLICK_TO_FOCUS);
+ else if( key == "FocusFollowsMouse")
+ setFocus(FOCUS_FOLLOWS_MOUSE);
+ else if(key == "FocusUnderMouse")
+ setFocus(FOCUS_UNDER_MOUSE);
+ else if(key == "FocusStrictlyUnderMouse")
+ setFocus(FOCUS_STRICTLY_UNDER_MOUSE);
+
+ int k = config->readNumEntry(KWIN_AUTORAISE_INTERVAL,750);
+ setAutoRaiseInterval(k);
+
+ k = config->readNumEntry(KWIN_DELAYFOCUS_INTERVAL,750);
+ setDelayFocusInterval(k);
+
+ key = config->readEntry(KWIN_AUTORAISE);
+ setAutoRaise(key == "on");
+ key = config->readEntry(KWIN_DELAYFOCUS);
+ setDelayFocus(key == "on");
+ key = config->readEntry(KWIN_CLICKRAISE);
+ setClickRaise(key != "off");
+ setAutoRaiseEnabled(); // this will disable/hide the auto raise delay widget if focus==click
+ setDelayFocusEnabled();
+
+ setSeparateScreenFocus( config->readBoolEntry(KWIN_SEPARATE_SCREEN_FOCUS, false));
+ // on by default for non click to focus policies
+ setActiveMouseScreen( config->readBoolEntry(KWIN_ACTIVE_MOUSE_SCREEN, focusCombo->currentItem() != 0 ));
+
+ key = config->readEntry(KWIN_ALTTABMODE, "KDE");
+ setAltTabMode(key == "KDE");
+
+ setRollOverDesktops( config->readBoolEntry(KWIN_ROLL_OVER_DESKTOPS, true ));
+
+ config->setGroup( "PopupInfo" );
+ setShowPopupinfo( config->readBoolEntry(KWIN_SHOW_POPUP, false ));
+
+ config->setGroup( "TabBox" );
+ setTraverseAll( config->readBoolEntry(KWIN_TRAVERSE_ALL, false ));
+
+ config->setGroup("Desktops");
+ emit KCModule::changed(false);
+}
+
+void KFocusConfig::save( void )
+{
+ int v;
+
+ config->setGroup( "Windows" );
+
+ v = getFocus();
+ if (v == CLICK_TO_FOCUS)
+ config->writeEntry(KWIN_FOCUS,"ClickToFocus");
+ else if (v == FOCUS_UNDER_MOUSE)
+ config->writeEntry(KWIN_FOCUS,"FocusUnderMouse");
+ else if (v == FOCUS_STRICTLY_UNDER_MOUSE)
+ config->writeEntry(KWIN_FOCUS,"FocusStrictlyUnderMouse");
+ else
+ config->writeEntry(KWIN_FOCUS,"FocusFollowsMouse");
+
+ v = getAutoRaiseInterval();
+ if (v <0) v = 0;
+ config->writeEntry(KWIN_AUTORAISE_INTERVAL,v);
+
+ v = getDelayFocusInterval();
+ if (v <0) v = 0;
+ config->writeEntry(KWIN_DELAYFOCUS_INTERVAL,v);
+
+ if (autoRaiseOn->isChecked())
+ config->writeEntry(KWIN_AUTORAISE, "on");
+ else
+ config->writeEntry(KWIN_AUTORAISE, "off");
+
+ if (delayFocusOn->isChecked())
+ config->writeEntry(KWIN_DELAYFOCUS, "on");
+ else
+ config->writeEntry(KWIN_DELAYFOCUS, "off");
+
+ if (clickRaiseOn->isChecked())
+ config->writeEntry(KWIN_CLICKRAISE, "on");
+ else
+ config->writeEntry(KWIN_CLICKRAISE, "off");
+
+ config->writeEntry(KWIN_SEPARATE_SCREEN_FOCUS, separateScreenFocus->isChecked());
+ config->writeEntry(KWIN_ACTIVE_MOUSE_SCREEN, activeMouseScreen->isChecked());
+
+ if (altTabPopup->isChecked())
+ config->writeEntry(KWIN_ALTTABMODE, "KDE");
+ else
+ config->writeEntry(KWIN_ALTTABMODE, "CDE");
+
+ config->writeEntry( KWIN_ROLL_OVER_DESKTOPS, rollOverDesktops->isChecked());
+
+ config->setGroup( "PopupInfo" );
+ config->writeEntry( KWIN_SHOW_POPUP, showPopupinfo->isChecked());
+
+ config->setGroup( "TabBox" );
+ config->writeEntry( KWIN_TRAVERSE_ALL , traverseAll->isChecked());
+
+ config->setGroup("Desktops");
+
+ if (standAlone)
+ {
+ config->sync();
+ if ( !kapp->dcopClient()->isAttached() )
+ kapp->dcopClient()->attach();
+ kapp->dcopClient()->send("twin*", "", "reconfigure()", TQString(""));
+ }
+ emit KCModule::changed(false);
+}
+
+void KFocusConfig::defaults()
+{
+ setAutoRaiseInterval(0);
+ setDelayFocusInterval(0);
+ setFocus(CLICK_TO_FOCUS);
+ setAutoRaise(false);
+ setDelayFocus(false);
+ setClickRaise(true);
+ setSeparateScreenFocus( false );
+ // on by default for non click to focus policies
+ setActiveMouseScreen( focusCombo->currentItem() != 0 );
+ setAltTabMode(true);
+ setTraverseAll( false );
+ setRollOverDesktops(true);
+ setShowPopupinfo(false);
+ emit KCModule::changed(true);
+}
+
+KAdvancedConfig::~KAdvancedConfig ()
+{
+ if (standAlone)
+ delete config;
+}
+
+KAdvancedConfig::KAdvancedConfig (bool _standAlone, KConfig *_config, TQWidget *parent, const char *)
+ : KCModule(parent, "kcmkwm"), config(_config), standAlone(_standAlone)
+{
+ TQString wtstr;
+ TQBoxLayout *lay = new TQVBoxLayout (this, 0, KDialog::spacingHint());
+
+ //iTLabel = new TQLabel(i18n(" Allowed overlap:\n"
+ // "(% of desktop space)"),
+ // plcBox);
+ //iTLabel->tqsetAlignment(AlignTop|AlignHCenter);
+ //pLay->addWidget(iTLabel,1,1);
+
+ //interactiveTrigger = new TQSpinBox(0, 500, 1, plcBox);
+ //pLay->addWidget(interactiveTrigger,1,2);
+
+ //pLay->addRowSpacing(2,KDialog::spacingHint());
+
+ //lay->addWidget(plcBox);
+
+ shBox = new TQVButtonGroup(i18n("Shading"), this);
+
+ animateShade = new TQCheckBox(i18n("Anima&te"), shBox);
+ TQWhatsThis::add(animateShade, i18n("Animate the action of reducing the window to its titlebar (shading)"
+ " as well as the expansion of a shaded window") );
+
+ shadeHoverOn = new TQCheckBox(i18n("&Enable hover"), shBox);
+
+ connect(shadeHoverOn, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(shadeHoverChanged(bool)));
+
+ shadeHover = new KIntNumInput(500, shBox);
+ shadeHover->setLabel(i18n("Dela&y:"), Qt::AlignVCenter|Qt::AlignLeft);
+ shadeHover->setRange(0, 3000, 100, true);
+ shadeHover->setSteps(100, 100);
+ shadeHover->setSuffix(i18n(" msec"));
+
+ TQWhatsThis::add(shadeHoverOn, i18n("If Shade Hover is enabled, a shaded window will un-shade automatically "
+ "when the mouse pointer has been over the title bar for some time."));
+
+ wtstr = i18n("Sets the time in milliseconds before the window unshades "
+ "when the mouse pointer goes over the shaded window.");
+ TQWhatsThis::add(shadeHover, wtstr);
+
+ lay->addWidget(shBox);
+
+ // Any changes goes to slotChanged()
+ connect(animateShade, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(shadeHoverOn, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(shadeHover, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+
+ electricBox = new TQVButtonGroup(i18n("Active Desktop Borders"), this);
+ electricBox->setMargin(15);
+
+ TQWhatsThis::add( electricBox, i18n("If this option is enabled, moving the mouse to a screen border"
+ " will change your desktop. This is e.g. useful if you want to drag windows from one desktop"
+ " to the other.") );
+ active_disable = new TQRadioButton(i18n("D&isabled"), electricBox);
+ active_move = new TQRadioButton(i18n("Only &when moving windows"), electricBox);
+ active_always = new TQRadioButton(i18n("A&lways enabled"), electricBox);
+
+ delays = new KIntNumInput(10, electricBox);
+ delays->setRange(0, MAX_EDGE_RES, 50, true);
+ delays->setSuffix(i18n(" msec"));
+ delays->setLabel(i18n("Desktop &switch delay:"));
+ TQWhatsThis::add( delays, i18n("Here you can set a delay for switching desktops using the active"
+ " borders feature. Desktops will be switched after the mouse has been pushed against a screen border"
+ " for the specified number of milliseconds.") );
+
+ connect( electricBox, TQT_SIGNAL(clicked(int)), this, TQT_SLOT(setEBorders()));
+
+ // Any changes goes to slotChanged()
+ connect(electricBox, TQT_SIGNAL(clicked(int)), TQT_SLOT(changed()));
+ connect(delays, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+
+ lay->addWidget(electricBox);
+
+ TQHBoxLayout* focusStealingLayout = new TQHBoxLayout( lay,KDialog::spacingHint());
+ TQLabel* focusStealingLabel = new TQLabel( i18n( "Focus stealing prevention level:" ), this );
+ focusStealing = new TQComboBox( this );
+ focusStealing->insertItem( i18n( "Focus Stealing Prevention Level", "None" ));
+ focusStealing->insertItem( i18n( "Focus Stealing Prevention Level", "Low" ));
+ focusStealing->insertItem( i18n( "Focus Stealing Prevention Level", "Normal" ));
+ focusStealing->insertItem( i18n( "Focus Stealing Prevention Level", "High" ));
+ focusStealing->insertItem( i18n( "Focus Stealing Prevention Level", "Extreme" ));
+ focusStealingLabel->setBuddy( focusStealing );
+ focusStealingLayout->addWidget( focusStealingLabel );
+ focusStealingLayout->addWidget( focusStealing, AlignLeft );
+ wtstr = i18n( "<p>This option specifies how much KWin will try to prevent unwanted focus stealing "
+ "caused by unexpected activation of new windows. (Note: This feature does not "
+ "work with the Focus Under Mouse or Focus Strictly Under Mouse focus policies.)"
+ "<ul>"
+ "<li><em>None:</em> Prevention is turned off "
+ "and new windows always become activated.</li>"
+ "<li><em>Low:</em> Prevention is enabled; when some window does not have support "
+ "for the underlying mechanism and KWin cannot reliably decide whether to "
+ "activate the window or not, it will be activated. This setting may have both "
+ "worse and better results than normal level, depending on the applications.</li>"
+ "<li><em>Normal:</em> Prevention is enabled.</li>"
+ "<li><em>High:</em> New windows get activated only if no window is currently active "
+ "or if they belong to the currently active application. This setting is probably "
+ "not really usable when not using mouse focus policy.</li>"
+ "<li><em>Extreme:</em> All windows must be explicitly activated by the user.</li>"
+ "</ul></p>"
+ "<p>Windows that are prevented from stealing focus are marked as demanding attention, "
+ "which by default means their taskbar entry will be highlighted. This can be changed "
+ "in the Notifications control module.</p>" );
+ TQWhatsThis::add( focusStealing, wtstr );
+ TQWhatsThis::add( focusStealingLabel, wtstr );
+ connect(focusStealing, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+
+ hideUtilityWindowsForInactive = new TQCheckBox( i18n( "Hide utility windows for inactive applications" ), this );
+ TQWhatsThis::add( hideUtilityWindowsForInactive,
+ i18n( "When turned on, utility windows (tool windows, torn-off menus,...) of inactive applications will be"
+ " hidden and will be shown only when the application becomes active. Note that applications"
+ " have to mark the windows with the proper window type for this feature to work." ));
+ connect(hideUtilityWindowsForInactive, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ lay->addWidget( hideUtilityWindowsForInactive );
+
+ lay->addStretch();
+ load();
+
+}
+
+void KAdvancedConfig::setShadeHover(bool on) {
+ shadeHoverOn->setChecked(on);
+ shadeHover->setEnabled(on);
+}
+
+void KAdvancedConfig::setShadeHoverInterval(int k) {
+ shadeHover->setValue(k);
+}
+
+int KAdvancedConfig::getShadeHoverInterval() {
+
+ return shadeHover->value();
+}
+
+void KAdvancedConfig::shadeHoverChanged(bool a) {
+ shadeHover->setEnabled(a);
+}
+
+void KAdvancedConfig::setAnimateShade(bool a) {
+ animateShade->setChecked(a);
+}
+
+void KAdvancedConfig::setFocusStealing(int l) {
+ l = KMAX( 0, KMIN( 4, l ));
+ focusStealing->setCurrentItem(l);
+}
+
+void KAdvancedConfig::setHideUtilityWindowsForInactive(bool s) {
+ hideUtilityWindowsForInactive->setChecked( s );
+}
+
+void KAdvancedConfig::load( void )
+{
+ config->setGroup( "Windows" );
+
+ setAnimateShade(config->readBoolEntry(KWIN_ANIMSHADE, true));
+ setShadeHover(config->readBoolEntry(KWIN_SHADEHOVER, false));
+ setShadeHoverInterval(config->readNumEntry(KWIN_SHADEHOVER_INTERVAL, 250));
+
+ setElectricBorders(config->readNumEntry(KWM_ELECTRIC_BORDER, 0));
+ setElectricBorderDelay(config->readNumEntry(KWM_ELECTRIC_BORDER_DELAY, 150));
+
+// setFocusStealing( config->readNumEntry(KWIN_FOCUS_STEALING, 2 ));
+ // TODO default to low for now
+ setFocusStealing( config->readNumEntry(KWIN_FOCUS_STEALING, 1 ));
+ setHideUtilityWindowsForInactive( config->readBoolEntry( KWIN_HIDE_UTILITY, true ));
+
+ emit KCModule::changed(false);
+}
+
+void KAdvancedConfig::save( void )
+{
+ int v;
+
+ config->setGroup( "Windows" );
+ config->writeEntry(KWIN_ANIMSHADE, animateShade->isChecked());
+ if (shadeHoverOn->isChecked())
+ config->writeEntry(KWIN_SHADEHOVER, "on");
+ else
+ config->writeEntry(KWIN_SHADEHOVER, "off");
+
+ v = getShadeHoverInterval();
+ if (v<0) v = 0;
+ config->writeEntry(KWIN_SHADEHOVER_INTERVAL, v);
+
+ config->writeEntry(KWM_ELECTRIC_BORDER, getElectricBorders());
+ config->writeEntry(KWM_ELECTRIC_BORDER_DELAY,getElectricBorderDelay());
+
+ config->writeEntry(KWIN_FOCUS_STEALING, focusStealing->currentItem());
+ config->writeEntry(KWIN_HIDE_UTILITY, hideUtilityWindowsForInactive->isChecked());
+
+ if (standAlone)
+ {
+ config->sync();
+ if ( !kapp->dcopClient()->isAttached() )
+ kapp->dcopClient()->attach();
+ kapp->dcopClient()->send("twin*", "", "reconfigure()", TQString(""));
+ }
+ emit KCModule::changed(false);
+}
+
+void KAdvancedConfig::defaults()
+{
+ setAnimateShade(true);
+ setShadeHover(false);
+ setShadeHoverInterval(250);
+ setElectricBorders(0);
+ setElectricBorderDelay(150);
+// setFocusStealing(2);
+ // TODO default to low for now
+ setFocusStealing(1);
+ setHideUtilityWindowsForInactive( true );
+ emit KCModule::changed(true);
+}
+
+void KAdvancedConfig::setEBorders()
+{
+ delays->setEnabled(!active_disable->isChecked());
+}
+
+int KAdvancedConfig::getElectricBorders()
+{
+ if (active_move->isChecked())
+ return 1;
+ if (active_always->isChecked())
+ return 2;
+ return 0;
+}
+
+int KAdvancedConfig::getElectricBorderDelay()
+{
+ return delays->value();
+}
+
+void KAdvancedConfig::setElectricBorders(int i){
+ switch(i)
+ {
+ case 1: active_move->setChecked(true); break;
+ case 2: active_always->setChecked(true); break;
+ default: active_disable->setChecked(true); break;
+ }
+ setEBorders();
+}
+
+void KAdvancedConfig::setElectricBorderDelay(int delay)
+{
+ delays->setValue(delay);
+}
+
+
+KMovingConfig::~KMovingConfig ()
+{
+ if (standAlone)
+ delete config;
+}
+
+KMovingConfig::KMovingConfig (bool _standAlone, KConfig *_config, TQWidget *parent, const char *)
+ : KCModule(parent, "kcmkwm"), config(_config), standAlone(_standAlone)
+{
+ TQString wtstr;
+ TQBoxLayout *lay = new TQVBoxLayout (this, 0, KDialog::spacingHint());
+
+ windowsBox = new TQButtonGroup(i18n("Windows"), this);
+ windowsBox->setColumnLayout( 0, Qt::Horizontal );
+
+ TQBoxLayout *wLay = new TQVBoxLayout (windowsBox->tqlayout(), KDialog::spacingHint());
+
+ TQBoxLayout *bLay = new TQVBoxLayout;
+ wLay->addLayout(bLay);
+
+ opaque = new TQCheckBox(i18n("Di&splay content in moving windows"), windowsBox);
+ bLay->addWidget(opaque);
+ TQWhatsThis::add( opaque, i18n("Enable this option if you want a window's content to be fully shown"
+ " while moving it, instead of just showing a window 'skeleton'. The result may not be satisfying"
+ " on slow machines without graphic acceleration.") );
+
+ resizeOpaqueOn = new TQCheckBox(i18n("Display content in &resizing windows"), windowsBox);
+ bLay->addWidget(resizeOpaqueOn);
+ TQWhatsThis::add( resizeOpaqueOn, i18n("Enable this option if you want a window's content to be shown"
+ " while resizing it, instead of just showing a window 'skeleton'. The result may not be satisfying"
+ " on slow machines.") );
+
+ geometryTipOn = new TQCheckBox(i18n("Display window &geometry when moving or resizing"), windowsBox);
+ bLay->addWidget(geometryTipOn);
+ TQWhatsThis::add(geometryTipOn, i18n("Enable this option if you want a window's geometry to be displayed"
+ " while it is being moved or resized. The window position relative"
+ " to the top-left corner of the screen is displayed together with"
+ " its size."));
+
+ TQGridLayout *rLay = new TQGridLayout(2,3);
+ bLay->addLayout(TQT_TQLAYOUT(rLay));
+ rLay->setColStretch(0,0);
+ rLay->setColStretch(1,1);
+
+ minimizeAnimOn = new TQCheckBox(i18n("Animate minimi&ze and restore"),
+ windowsBox);
+ TQWhatsThis::add( minimizeAnimOn, i18n("Enable this option if you want an animation shown when"
+ " windows are minimized or restored." ) );
+ rLay->addWidget(minimizeAnimOn,0,0);
+
+ minimizeAnimSlider = new TQSlider(0,10,10,0,Qt::Horizontal, windowsBox);
+ minimizeAnimSlider->setSteps(1, 1);
+ // TQSlider::Below clashes with a X11/X.h #define
+ #undef Below
+ minimizeAnimSlider->setTickmarks(TQSlider::Below);
+ rLay->addMultiCellWidget(minimizeAnimSlider,0,0,1,2);
+
+ connect(minimizeAnimOn, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(setMinimizeAnim(bool)));
+ connect(minimizeAnimSlider, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(setMinimizeAnimSpeed(int)));
+
+ minimizeAnimSlowLabel= new TQLabel(i18n("Slow"),windowsBox);
+ minimizeAnimSlowLabel->tqsetAlignment(Qt::AlignTop|Qt::AlignLeft);
+ rLay->addWidget(minimizeAnimSlowLabel,1,1);
+
+ minimizeAnimFastLabel= new TQLabel(i18n("Fast"),windowsBox);
+ minimizeAnimFastLabel->tqsetAlignment(Qt::AlignTop|Qt::AlignRight);
+ rLay->addWidget(minimizeAnimFastLabel,1,2);
+
+ wtstr = i18n("Here you can set the speed of the animation shown when windows are"
+ " minimized and restored. ");
+ TQWhatsThis::add( minimizeAnimSlider, wtstr );
+ TQWhatsThis::add( minimizeAnimSlowLabel, wtstr );
+ TQWhatsThis::add( minimizeAnimFastLabel, wtstr );
+
+ moveResizeMaximized = new TQCheckBox( i18n("Allow moving and resizing o&f maximized windows"), windowsBox);
+ bLay->addWidget(moveResizeMaximized);
+ TQWhatsThis::add(moveResizeMaximized, i18n("When enabled, this feature activates the border of maximized windows"
+ " and allows you to move or resize them,"
+ " just like for normal windows"));
+
+ TQBoxLayout *vLay = new TQHBoxLayout(bLay);
+
+ TQLabel *plcLabel = new TQLabel(i18n("&Placement:"),windowsBox);
+
+ placementCombo = new TQComboBox(false, windowsBox);
+ placementCombo->insertItem(i18n("Smart"), SMART_PLACEMENT);
+ placementCombo->insertItem(i18n("Maximizing"), MAXIMIZING_PLACEMENT);
+ placementCombo->insertItem(i18n("Cascade"), CASCADE_PLACEMENT);
+ placementCombo->insertItem(i18n("Random"), RANDOM_PLACEMENT);
+ placementCombo->insertItem(i18n("Centered"), CENTERED_PLACEMENT);
+ placementCombo->insertItem(i18n("Zero-Cornered"), ZEROCORNERED_PLACEMENT);
+ // CT: disabling is needed as long as functionality misses in twin
+ //placementCombo->insertItem(i18n("Interactive"), INTERACTIVE_PLACEMENT);
+ //placementCombo->insertItem(i18n("Manual"), MANUAL_PLACEMENT);
+ placementCombo->setCurrentItem(SMART_PLACEMENT);
+
+ // FIXME, when more policies have been added to KWin
+ wtstr = i18n("The placement policy determines where a new window"
+ " will appear on the desktop."
+ " <ul>"
+ " <li><em>Smart</em> will try to achieve a minimum overlap of windows</li>"
+ " <li><em>Maximizing</em> will try to maximize every window to fill the whole screen."
+ " It might be useful to selectively affect placement of some windows using"
+ " the window-specific settings.</li>"
+ " <li><em>Cascade</em> will cascade the windows</li>"
+ " <li><em>Random</em> will use a random position</li>"
+ " <li><em>Centered</em> will place the window centered</li>"
+ " <li><em>Zero-Cornered</em> will place the window in the top-left corner</li>"
+ "</ul>") ;
+
+ TQWhatsThis::add( plcLabel, wtstr);
+ TQWhatsThis::add( placementCombo, wtstr);
+
+ plcLabel->setBuddy(placementCombo);
+ vLay->addWidget(plcLabel, 0);
+ vLay->addWidget(placementCombo, 1, Qt::AlignLeft);
+
+ bLay->addSpacing(10);
+
+ lay->addWidget(windowsBox);
+
+ //iTLabel = new TQLabel(i18n(" Allowed overlap:\n"
+ // "(% of desktop space)"),
+ // plcBox);
+ //iTLabel->tqsetAlignment(AlignTop|AlignHCenter);
+ //pLay->addWidget(iTLabel,1,1);
+
+ //interactiveTrigger = new TQSpinBox(0, 500, 1, plcBox);
+ //pLay->addWidget(interactiveTrigger,1,2);
+
+ //pLay->addRowSpacing(2,KDialog::spacingHint());
+
+ //lay->addWidget(plcBox);
+
+
+ //CT 15mar98 - add EdgeResistance, BorderAttractor, WindowsAttractor config
+ MagicBox = new TQVButtonGroup(i18n("Snap Zones"), this);
+ MagicBox->setMargin(15);
+
+ BrdrSnap = new KIntNumInput(10, MagicBox);
+ BrdrSnap->setSpecialValueText( i18n("none") );
+ BrdrSnap->setRange( 0, MAX_BRDR_SNAP);
+ BrdrSnap->setLabel(i18n("&Border snap zone:"));
+ BrdrSnap->setSteps(1,10);
+ TQWhatsThis::add( BrdrSnap, i18n("Here you can set the snap zone for screen borders, i.e."
+ " the 'strength' of the magnetic field which will make windows snap to the border when"
+ " moved near it.") );
+
+ WndwSnap = new KIntNumInput(10, MagicBox);
+ WndwSnap->setSpecialValueText( i18n("none") );
+ WndwSnap->setRange( 0, MAX_WNDW_SNAP);
+ WndwSnap->setLabel(i18n("&Window snap zone:"));
+ BrdrSnap->setSteps(1,10);
+ TQWhatsThis::add( WndwSnap, i18n("Here you can set the snap zone for windows, i.e."
+ " the 'strength' of the magnetic field which will make windows snap to each other when"
+ " they're moved near another window.") );
+
+ OverlapSnap=new TQCheckBox(i18n("Snap windows onl&y when overlapping"),MagicBox);
+ TQWhatsThis::add( OverlapSnap, i18n("Here you can set that windows will be only"
+ " snapped if you try to overlap them, i.e. they will not be snapped if the windows"
+ " comes only near another window or border.") );
+
+ lay->addWidget(MagicBox);
+ lay->addStretch();
+
+ load();
+
+ // Any changes goes to slotChanged()
+ connect( opaque, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
+ connect( resizeOpaqueOn, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
+ connect( geometryTipOn, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
+ connect( minimizeAnimOn, TQT_SIGNAL(clicked() ), TQT_SLOT(changed()));
+ connect( minimizeAnimSlider, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect( moveResizeMaximized, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect( placementCombo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
+ connect( BrdrSnap, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect( BrdrSnap, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotBrdrSnapChanged(int)));
+ connect( WndwSnap, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect( WndwSnap, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotWndwSnapChanged(int)));
+ connect( OverlapSnap, TQT_SIGNAL(clicked()), TQT_SLOT(changed()));
+
+ // To get suffix to BrdrSnap and WndwSnap inputs with default values.
+ slotBrdrSnapChanged(BrdrSnap->value());
+ slotWndwSnapChanged(WndwSnap->value());
+}
+
+int KMovingConfig::getMove()
+{
+ return (opaque->isChecked())? OPAQUE : TRANSPARENT;
+}
+
+void KMovingConfig::setMove(int trans)
+{
+ opaque->setChecked(trans == OPAQUE);
+}
+
+void KMovingConfig::setGeometryTip(bool showGeometryTip)
+{
+ geometryTipOn->setChecked(showGeometryTip);
+}
+
+bool KMovingConfig::getGeometryTip()
+{
+ return geometryTipOn->isChecked();
+}
+
+// placement policy --- CT 31jan98 ---
+int KMovingConfig::getPlacement()
+{
+ return placementCombo->currentItem();
+}
+
+void KMovingConfig::setPlacement(int plac)
+{
+ placementCombo->setCurrentItem(plac);
+}
+
+bool KMovingConfig::getMinimizeAnim()
+{
+ return minimizeAnimOn->isChecked();
+}
+
+int KMovingConfig::getMinimizeAnimSpeed()
+{
+ return minimizeAnimSlider->value();
+}
+
+void KMovingConfig::setMinimizeAnim(bool anim)
+{
+ minimizeAnimOn->setChecked( anim );
+ minimizeAnimSlider->setEnabled( anim );
+ minimizeAnimSlowLabel->setEnabled( anim );
+ minimizeAnimFastLabel->setEnabled( anim );
+}
+
+void KMovingConfig::setMinimizeAnimSpeed(int speed)
+{
+ minimizeAnimSlider->setValue(speed);
+}
+
+int KMovingConfig::getResizeOpaque()
+{
+ return (resizeOpaqueOn->isChecked())? RESIZE_OPAQUE : RESIZE_TRANSPARENT;
+}
+
+void KMovingConfig::setResizeOpaque(int opaque)
+{
+ resizeOpaqueOn->setChecked(opaque == RESIZE_OPAQUE);
+}
+
+void KMovingConfig::setMoveResizeMaximized(bool a) {
+ moveResizeMaximized->setChecked(a);
+}
+
+void KMovingConfig::slotBrdrSnapChanged(int value) {
+ BrdrSnap->setSuffix(i18n(" pixel", " pixels", value));
+}
+
+void KMovingConfig::slotWndwSnapChanged(int value) {
+ WndwSnap->setSuffix(i18n(" pixel", " pixels", value));
+}
+
+void KMovingConfig::load( void )
+{
+ TQString key;
+
+ config->setGroup( "Windows" );
+
+ key = config->readEntry(KWIN_MOVE, "Opaque");
+ if( key == "Transparent")
+ setMove(TRANSPARENT);
+ else if( key == "Opaque")
+ setMove(OPAQUE);
+
+ //CT 17Jun1998 - variable animation speed from 0 (none!!) to 10 (max)
+ bool anim = config->readBoolEntry(KWIN_MINIMIZE_ANIM, true );
+ int animSpeed = config->readNumEntry(KWIN_MINIMIZE_ANIM_SPEED, 5);
+ if( animSpeed < 1 ) animSpeed = 0;
+ if( animSpeed > 10 ) animSpeed = 10;
+ setMinimizeAnim( anim );
+ setMinimizeAnimSpeed( animSpeed );
+
+ // DF: please keep the default consistent with twin (options.cpp line 145)
+ key = config->readEntry(KWIN_RESIZE_OPAQUE, "Opaque");
+ if( key == "Opaque")
+ setResizeOpaque(RESIZE_OPAQUE);
+ else if ( key == "Transparent")
+ setResizeOpaque(RESIZE_TRANSPARENT);
+
+ //KS 10Jan2003 - Geometry Tip during window move/resize
+ bool showGeomTip = config->readBoolEntry(KWIN_GEOMETRY, false);
+ setGeometryTip( showGeomTip );
+
+ // placement policy --- CT 19jan98 ---
+ key = config->readEntry(KWIN_PLACEMENT);
+ //CT 13mar98 interactive placement
+// if( key.left(11) == "interactive") {
+// setPlacement(INTERACTIVE_PLACEMENT);
+// int comma_pos = key.find(',');
+// if (comma_pos < 0)
+// interactiveTrigger->setValue(0);
+// else
+// interactiveTrigger->setValue (key.right(key.length()
+// - comma_pos).toUInt(0));
+// iTLabel->setEnabled(true);
+// interactiveTrigger->show();
+// }
+// else {
+// interactiveTrigger->setValue(0);
+// iTLabel->setEnabled(false);
+// interactiveTrigger->hide();
+ if( key == "Random")
+ setPlacement(RANDOM_PLACEMENT);
+ else if( key == "Cascade")
+ setPlacement(CASCADE_PLACEMENT); //CT 31jan98
+ //CT 31mar98 manual placement
+ else if( key == "manual")
+ setPlacement(MANUAL_PLACEMENT);
+ else if( key == "Centered")
+ setPlacement(CENTERED_PLACEMENT);
+ else if( key == "ZeroCornered")
+ setPlacement(ZEROCORNERED_PLACEMENT);
+ else if( key == "Maximizing")
+ setPlacement(MAXIMIZING_PLACEMENT);
+ else
+ setPlacement(SMART_PLACEMENT);
+// }
+
+ setMoveResizeMaximized(config->readBoolEntry(KWIN_MOVE_RESIZE_MAXIMIZED, false));
+
+ int v;
+
+ v = config->readNumEntry(KWM_BRDR_SNAP_ZONE, KWM_BRDR_SNAP_ZONE_DEFAULT);
+ if (v > MAX_BRDR_SNAP) setBorderSnapZone(MAX_BRDR_SNAP);
+ else if (v < 0) setBorderSnapZone (0);
+ else setBorderSnapZone(v);
+
+ v = config->readNumEntry(KWM_WNDW_SNAP_ZONE, KWM_WNDW_SNAP_ZONE_DEFAULT);
+ if (v > MAX_WNDW_SNAP) setWindowSnapZone(MAX_WNDW_SNAP);
+ else if (v < 0) setWindowSnapZone (0);
+ else setWindowSnapZone(v);
+
+ OverlapSnap->setChecked(config->readBoolEntry("SnapOnlyWhenOverlapping",false));
+ emit KCModule::changed(false);
+}
+
+void KMovingConfig::save( void )
+{
+ int v;
+
+ config->setGroup( "Windows" );
+
+ v = getMove();
+ if (v == TRANSPARENT)
+ config->writeEntry(KWIN_MOVE,"Transparent");
+ else
+ config->writeEntry(KWIN_MOVE,"Opaque");
+
+ config->writeEntry(KWIN_GEOMETRY, getGeometryTip());
+
+ // placement policy --- CT 31jan98 ---
+ v =getPlacement();
+ if (v == RANDOM_PLACEMENT)
+ config->writeEntry(KWIN_PLACEMENT, "Random");
+ else if (v == CASCADE_PLACEMENT)
+ config->writeEntry(KWIN_PLACEMENT, "Cascade");
+ else if (v == CENTERED_PLACEMENT)
+ config->writeEntry(KWIN_PLACEMENT, "Centered");
+ else if (v == ZEROCORNERED_PLACEMENT)
+ config->writeEntry(KWIN_PLACEMENT, "ZeroCornered");
+ else if (v == MAXIMIZING_PLACEMENT)
+ config->writeEntry(KWIN_PLACEMENT, "Maximizing");
+//CT 13mar98 manual and interactive placement
+// else if (v == MANUAL_PLACEMENT)
+// config->writeEntry(KWIN_PLACEMENT, "Manual");
+// else if (v == INTERACTIVE_PLACEMENT) {
+// TQString tmpstr = TQString("Interactive,%1").arg(interactiveTrigger->value());
+// config->writeEntry(KWIN_PLACEMENT, tmpstr);
+// }
+ else
+ config->writeEntry(KWIN_PLACEMENT, "Smart");
+
+ config->writeEntry(KWIN_MINIMIZE_ANIM, getMinimizeAnim());
+ config->writeEntry(KWIN_MINIMIZE_ANIM_SPEED, getMinimizeAnimSpeed());
+
+ v = getResizeOpaque();
+ if (v == RESIZE_OPAQUE)
+ config->writeEntry(KWIN_RESIZE_OPAQUE, "Opaque");
+ else
+ config->writeEntry(KWIN_RESIZE_OPAQUE, "Transparent");
+
+ config->writeEntry(KWIN_MOVE_RESIZE_MAXIMIZED, moveResizeMaximized->isChecked());
+
+
+ config->writeEntry(KWM_BRDR_SNAP_ZONE,getBorderSnapZone());
+ config->writeEntry(KWM_WNDW_SNAP_ZONE,getWindowSnapZone());
+ config->writeEntry("SnapOnlyWhenOverlapping",OverlapSnap->isChecked());
+
+ if (standAlone)
+ {
+ config->sync();
+ if ( !kapp->dcopClient()->isAttached() )
+ kapp->dcopClient()->attach();
+ kapp->dcopClient()->send("twin*", "", "reconfigure()", TQString(""));
+ }
+ emit KCModule::changed(false);
+}
+
+void KMovingConfig::defaults()
+{
+ setMove(OPAQUE);
+ setResizeOpaque(RESIZE_TRANSPARENT);
+ setGeometryTip(false);
+ setPlacement(SMART_PLACEMENT);
+ setMoveResizeMaximized(false);
+
+ //copied from kcontrol/konq/twindesktop, aleXXX
+ setWindowSnapZone(KWM_WNDW_SNAP_ZONE_DEFAULT);
+ setBorderSnapZone(KWM_BRDR_SNAP_ZONE_DEFAULT);
+ OverlapSnap->setChecked(false);
+
+ setMinimizeAnim( true );
+ setMinimizeAnimSpeed( 5 );
+ emit KCModule::changed(true);
+}
+
+int KMovingConfig::getBorderSnapZone() {
+ return BrdrSnap->value();
+}
+
+void KMovingConfig::setBorderSnapZone(int pxls) {
+ BrdrSnap->setValue(pxls);
+}
+
+int KMovingConfig::getWindowSnapZone() {
+ return WndwSnap->value();
+}
+
+void KMovingConfig::setWindowSnapZone(int pxls) {
+ WndwSnap->setValue(pxls);
+}
+
+KTranslucencyConfig::~KTranslucencyConfig ()
+{
+ if (standAlone)
+ delete config;
+ if (kompmgr)
+ kompmgr->detach();
+}
+
+KTranslucencyConfig::KTranslucencyConfig (bool _standAlone, KConfig *_config, TQWidget *parent, const char *)
+ : KCModule(parent, "kcmkwm"), config(_config), standAlone(_standAlone)
+{
+ kompmgr = 0L;
+ resetKompmgr_ = FALSE;
+ TQVBoxLayout *lay = new TQVBoxLayout (this);
+ kompmgrAvailable_ = kompmgrAvailable();
+ if (!kompmgrAvailable_){
+ KActiveLabel *label = new KActiveLabel(i18n("<qt><b>It seems that alpha channel support is not available.</b><br><br>"
+ "Please make sure you have "
+ "<a href=\"http://www.freedesktop.org/\">Xorg &ge; 6.8</a>,"
+ " and installed the kompmgr that came with twin.<br>"
+ "Also, make sure you have the following entries in your XConfig (e.g. /etc/X11/xorg.conf):<br><br>"
+ "<i>Section \"Extensions\"<br>"
+ "Option \"Composite\" \"Enable\"<br>"
+ "EndSection</i><br><br>"
+ "And if your GPU provides hardware-accelerated Xrender support (mainly nVidia cards):<br><br>"
+ "<i>Option \"RenderAccel\" \"true\"</i><br>"
+ "In <i>Section \"Device\"</i></qt>"), this);
+ lay->addWidget(label);
+ }
+ else
+ {
+ TQTabWidget *tabW = new TQTabWidget(this);
+ TQWidget *tGroup = new TQWidget(tabW);
+ TQVBoxLayout *vLay = new TQVBoxLayout (tGroup,KDialog::marginHint(), KDialog::spacingHint());
+ vLay->addSpacing(11); // to get the proper gb top offset
+
+ onlyDecoTranslucent = new TQCheckBox(i18n("Apply translucency only to decoration"),tGroup);
+ vLay->addWidget(onlyDecoTranslucent);
+
+ vLay->addSpacing(11);
+
+ TQGridLayout *gLay = new TQGridLayout(vLay,4,2,KDialog::spacingHint());
+ gLay->setColStretch(1,1);
+
+ activeWindowTransparency = new TQCheckBox(i18n("Active windows:"),tGroup);
+ gLay->addWidget(activeWindowTransparency,0,0);
+ activeWindowOpacity = new KIntNumInput(100, tGroup);
+ activeWindowOpacity->setRange(0,100);
+ activeWindowOpacity->setSuffix("%");
+ gLay->addWidget(activeWindowOpacity,0,1);
+
+ inactiveWindowTransparency = new TQCheckBox(i18n("Inactive windows:"),tGroup);
+ gLay->addWidget(inactiveWindowTransparency,1,0);
+ inactiveWindowOpacity = new KIntNumInput(100, tGroup);
+ inactiveWindowOpacity->setRange(0,100);
+ inactiveWindowOpacity->setSuffix("%");
+ gLay->addWidget(inactiveWindowOpacity,1,1);
+
+ movingWindowTransparency = new TQCheckBox(i18n("Moving windows:"),tGroup);
+ gLay->addWidget(movingWindowTransparency,2,0);
+ movingWindowOpacity = new KIntNumInput(100, tGroup);
+ movingWindowOpacity->setRange(0,100);
+ movingWindowOpacity->setSuffix("%");
+ gLay->addWidget(movingWindowOpacity,2,1);
+
+ dockWindowTransparency = new TQCheckBox(i18n("Dock windows:"),tGroup);
+ gLay->addWidget(dockWindowTransparency,3,0);
+ dockWindowOpacity = new KIntNumInput(100, tGroup);
+ dockWindowOpacity->setRange(0,100);
+ dockWindowOpacity->setSuffix("%");
+ gLay->addWidget(dockWindowOpacity,3,1);
+
+ vLay->addSpacing(11);
+
+ keepAboveAsActive = new TQCheckBox(i18n("Treat 'keep above' windows as active ones"),tGroup);
+ vLay->addWidget(keepAboveAsActive);
+
+ disableARGB = new TQCheckBox(i18n("Disable ARGB windows (ignores window alpha maps, fixes gtk1 apps)"),tGroup);
+ vLay->addWidget(disableARGB);
+
+ vLay->addStretch();
+ tabW->addTab(tGroup, i18n("Opacity"));
+
+ TQWidget *sGroup = new TQWidget(tabW);
+// sGroup->setCheckable(TRUE);
+ TQVBoxLayout *vLay2 = new TQVBoxLayout (sGroup,11,6);
+ vLay2->addSpacing(11); // to get the proper gb top offset
+ useShadows = new TQCheckBox(i18n("Use shadows (standard effects should be disabled in the Styles module if this is checked)"),sGroup);
+ vLay2->addWidget(useShadows);
+
+ vLay2->addSpacing(11);
+
+ TQGridLayout *gLay2 = new TQGridLayout(vLay2,6,2);
+ gLay2->setColStretch(1,1);
+
+ TQLabel *label2 = new TQLabel(i18n("Base shadow size:"),sGroup);
+ gLay2->addWidget(label2,0,0);
+ inactiveWindowShadowSize = new KIntNumInput(6,sGroup);
+ inactiveWindowShadowSize->setRange(0,32);
+// inactiveWindowShadowSize->setSuffix("px");
+ gLay2->addWidget(inactiveWindowShadowSize,0,1);
+
+ TQLabel *label1 = new TQLabel(i18n("Active window shadow size multiplier:"),sGroup);
+ gLay2->addWidget(label1,1,0);
+ activeWindowShadowSize = new KIntNumInput(12,sGroup);
+ activeWindowShadowSize->setRange(0,32);
+// activeWindowShadowSize->setSuffix("px");
+ gLay2->addWidget(activeWindowShadowSize,1,1);
+
+ TQLabel *label3 = new TQLabel(i18n("Dock shadow size multiplier:"),sGroup);
+ gLay2->addWidget(label3,2,0);
+ dockWindowShadowSize = new KIntNumInput(6,sGroup);
+ dockWindowShadowSize->setRange(0,32);
+// dockWindowShadowSize->setSuffix("px");
+ gLay2->addWidget(dockWindowShadowSize,2,1);
+
+ TQLabel *label3a = new TQLabel(i18n("Menu shadow size multiplier:"),sGroup);
+ gLay2->addWidget(label3a,3,0);
+ menuWindowShadowSize = new KIntNumInput(6,sGroup);
+ menuWindowShadowSize->setRange(0,32);
+// menuWindowShadowSize->setSuffix("px");
+ gLay2->addWidget(menuWindowShadowSize,3,1);
+
+ // Menu shadow settings don't work
+ label3a->hide();
+ menuWindowShadowSize->hide();
+
+ TQLabel *label4 = new TQLabel(i18n("Vertical offset:"),sGroup);
+ gLay2->addWidget(label4,4,0);
+ shadowTopOffset = new KIntNumInput(80,sGroup);
+ shadowTopOffset->setSuffix("%");
+ shadowTopOffset->setRange(-200,200);
+ gLay2->addWidget(shadowTopOffset,4,1);
+
+ TQLabel *label5 = new TQLabel(i18n("Horizontal offset:"),sGroup);
+ gLay2->addWidget(label5,5,0);
+ shadowLeftOffset = new KIntNumInput(0,sGroup);
+ shadowLeftOffset->setSuffix("%");
+ shadowLeftOffset->setRange(-200,200);
+ gLay2->addWidget(shadowLeftOffset,5,1);
+
+ TQLabel *label6 = new TQLabel(i18n("Shadow color:"),sGroup);
+ gLay2->addWidget(label6,5,0);
+ shadowColor = new KColorButton(Qt::black,sGroup);
+ gLay2->addWidget(shadowColor,6,1);
+ gLay2->setColStretch(1,1);
+ vLay2->addSpacing(11);
+ removeShadowsOnMove = new TQCheckBox(i18n("Remove shadows on move"),sGroup);
+ vLay2->addWidget(removeShadowsOnMove);
+ removeShadowsOnResize = new TQCheckBox(i18n("Remove shadows on resize"),sGroup);
+ vLay2->addWidget(removeShadowsOnResize);
+ vLay2->addStretch();
+ tabW->addTab(sGroup, i18n("Shadows"));
+
+ TQWidget *eGroup = new TQWidget(this);
+ TQVBoxLayout *vLay3 = new TQVBoxLayout (eGroup,11,6);
+
+ fadeInWindows = new TQCheckBox(i18n("Fade-in windows (including popups)"),eGroup);
+ fadeInMenuWindows = new TQCheckBox(i18n("Fade-in menus (requires menu fade effect to be disabled in the Styles module)"),eGroup);
+ fadeOnOpacityChange = new TQCheckBox(i18n("Fade between opacity changes"),eGroup);
+ fadeInSpeed = new KIntNumInput(100, eGroup);
+ fadeInSpeed->setRange(1,100);
+ fadeInSpeed->setLabel(i18n("Fade-in speed:"));
+ fadeOutSpeed = new KIntNumInput(100, eGroup);
+ fadeOutSpeed->setRange(1,100);
+ fadeOutSpeed->setLabel(i18n("Fade-out speed:"));
+ vLay3->addWidget(fadeInWindows);
+ vLay3->addWidget(fadeInMenuWindows);
+ vLay3->addWidget(fadeOnOpacityChange);
+ vLay3->addWidget(fadeInSpeed);
+ vLay3->addWidget(fadeOutSpeed);
+ vLay3->addStretch();
+
+ tabW->addTab(eGroup, i18n("Effects"));
+
+ useTranslucency = new TQCheckBox(i18n("Enable the Trinity window composition manager"),this);
+ lay->addWidget(useTranslucency);
+ lay->addWidget(tabW);
+
+ connect(useTranslucency, TQT_SIGNAL(toggled(bool)), tabW, TQT_SLOT(setEnabled(bool)));
+
+ connect(activeWindowTransparency, TQT_SIGNAL(toggled(bool)), activeWindowOpacity, TQT_SLOT(setEnabled(bool)));
+ connect(inactiveWindowTransparency, TQT_SIGNAL(toggled(bool)), inactiveWindowOpacity, TQT_SLOT(setEnabled(bool)));
+ connect(movingWindowTransparency, TQT_SIGNAL(toggled(bool)), movingWindowOpacity, TQT_SLOT(setEnabled(bool)));
+ connect(dockWindowTransparency, TQT_SIGNAL(toggled(bool)), dockWindowOpacity, TQT_SLOT(setEnabled(bool)));
+
+ connect(useTranslucency, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(onlyDecoTranslucent, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(activeWindowTransparency, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(inactiveWindowTransparency, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(movingWindowTransparency, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(dockWindowTransparency, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(keepAboveAsActive, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(disableARGB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(useShadows, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(removeShadowsOnResize, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(removeShadowsOnMove, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+
+ connect(activeWindowOpacity, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(inactiveWindowOpacity, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(movingWindowOpacity, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(dockWindowOpacity, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(dockWindowShadowSize, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(menuWindowShadowSize, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(activeWindowShadowSize, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(inactiveWindowShadowSize, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(shadowTopOffset, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(shadowLeftOffset, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(shadowColor, TQT_SIGNAL(changed(const TQColor&)), TQT_SLOT(changed()));
+ connect(fadeInWindows, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(fadeInMenuWindows, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(fadeOnOpacityChange, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
+ connect(fadeInSpeed, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+ connect(fadeOutSpeed, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(changed()));
+
+ connect(useShadows, TQT_SIGNAL(toggled(bool)), dockWindowShadowSize, TQT_SLOT(setEnabled(bool)));
+ connect(useShadows, TQT_SIGNAL(toggled(bool)), menuWindowShadowSize, TQT_SLOT(setEnabled(bool)));
+ connect(useShadows, TQT_SIGNAL(toggled(bool)), activeWindowShadowSize, TQT_SLOT(setEnabled(bool)));
+ connect(useShadows, TQT_SIGNAL(toggled(bool)), inactiveWindowShadowSize, TQT_SLOT(setEnabled(bool)));
+ connect(useShadows, TQT_SIGNAL(toggled(bool)), shadowTopOffset, TQT_SLOT(setEnabled(bool)));
+ connect(useShadows, TQT_SIGNAL(toggled(bool)), shadowLeftOffset, TQT_SLOT(setEnabled(bool)));
+ connect(useShadows, TQT_SIGNAL(toggled(bool)), shadowColor, TQT_SLOT(setEnabled(bool)));
+
+ load();
+
+ tabW->setEnabled(useTranslucency->isChecked());
+
+ connect(useTranslucency, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(showWarning(bool)));
+
+ // handle kompmgr restarts if necessary
+ connect(useTranslucency, TQT_SIGNAL(toggled(bool)), TQT_SLOT(resetKompmgr()));
+ connect(disableARGB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(resetKompmgr()));
+ connect(useShadows, TQT_SIGNAL(toggled(bool)), TQT_SLOT(resetKompmgr()));
+ connect(inactiveWindowShadowSize, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(resetKompmgr()));
+ connect(shadowTopOffset, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(resetKompmgr()));
+ connect(shadowLeftOffset, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(resetKompmgr()));
+ connect(shadowColor, TQT_SIGNAL(changed(const TQColor&)), TQT_SLOT(resetKompmgr()));
+ connect(fadeInWindows, TQT_SIGNAL(toggled(bool)), TQT_SLOT(resetKompmgr()));
+ connect(fadeInMenuWindows, TQT_SIGNAL(toggled(bool)), TQT_SLOT(resetKompmgr()));
+ connect(fadeOnOpacityChange, TQT_SIGNAL(toggled(bool)), TQT_SLOT(resetKompmgr()));
+ connect(fadeInSpeed, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(resetKompmgr()));
+ connect(fadeOutSpeed, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(resetKompmgr()));
+
+ }
+}
+
+void KTranslucencyConfig::resetKompmgr()
+{
+ resetKompmgr_ = TRUE;
+}
+void KTranslucencyConfig::load( void )
+{
+
+ if (!kompmgrAvailable_)
+ return;
+ config->setGroup( "Notification Messages" );
+ useTranslucency->setChecked(config->readBoolEntry("UseTranslucency",false));
+
+ config->setGroup( "Translucency" );
+ activeWindowTransparency->setChecked(config->readBoolEntry("TranslucentActiveWindows",false));
+ inactiveWindowTransparency->setChecked(config->readBoolEntry("TranslucentInactiveWindows",false));
+ movingWindowTransparency->setChecked(config->readBoolEntry("TranslucentMovingWindows",false));
+ removeShadowsOnMove->setChecked(config->readBoolEntry("RemoveShadowsOnMove",false));
+ removeShadowsOnResize->setChecked(config->readBoolEntry("RemoveShadowsOnResize",false));
+ dockWindowTransparency->setChecked(config->readBoolEntry("TranslucentDocks",false));
+ keepAboveAsActive->setChecked(config->readBoolEntry("TreatKeepAboveAsActive",true));
+ onlyDecoTranslucent->setChecked(config->readBoolEntry("OnlyDecoTranslucent",false));
+
+ activeWindowOpacity->setValue(config->readNumEntry("ActiveWindowOpacity",100));
+ inactiveWindowOpacity->setValue(config->readNumEntry("InactiveWindowOpacity",75));
+ movingWindowOpacity->setValue(config->readNumEntry("MovingWindowOpacity",25));
+ dockWindowOpacity->setValue(config->readNumEntry("DockOpacity",80));
+
+ int ass, iss, dss, mss;
+ dss = config->readNumEntry("DockShadowSize", 33);
+ mss = config->readNumEntry("MenuShadowSize", 33);
+ ass = config->readNumEntry("ActiveWindowShadowSize", 133);
+ iss = config->readNumEntry("InactiveWindowShadowSize", 67);
+
+ activeWindowOpacity->setEnabled(activeWindowTransparency->isChecked());
+ inactiveWindowOpacity->setEnabled(inactiveWindowTransparency->isChecked());
+ movingWindowOpacity->setEnabled(movingWindowTransparency->isChecked());
+ dockWindowOpacity->setEnabled(dockWindowTransparency->isChecked());
+
+ KConfig conf_(TQDir::homeDirPath() + "/.xcompmgrrc");
+ conf_.setGroup("xcompmgr");
+
+ disableARGB->setChecked(conf_.readBoolEntry("DisableARGB",FALSE));
+
+ useShadows->setChecked(conf_.readEntry("Compmode","").compare("CompClientShadows") == 0);
+ shadowTopOffset->setValue(-1*(conf_.readNumEntry("ShadowOffsetY",-80)));
+ shadowLeftOffset->setValue(-1*(conf_.readNumEntry("ShadowOffsetX",0)));
+
+ int ss = conf_.readNumEntry("ShadowRadius",6);
+ dockWindowShadowSize->setValue((int)(dss*ss/100.0));
+ menuWindowShadowSize->setValue((int)(mss*ss/100.0));
+ activeWindowShadowSize->setValue((int)(ass*ss/100.0));
+ inactiveWindowShadowSize->setValue((int)(iss*ss/100.0));
+
+ TQString hex = conf_.readEntry("ShadowColor","#000000");
+ uint r, g, b;
+ r = g = b = 256;
+
+ if (sscanf(hex.latin1(), "0x%02x%02x%02x", &r, &g, &b)!=3 || r > 255 || g > 255 || b > 255)
+ shadowColor->setColor(Qt::black);
+ else
+ shadowColor->setColor(TQColor(r,g,b));
+
+ fadeInWindows->setChecked(conf_.readBoolEntry("FadeWindows",FALSE));
+ fadeInMenuWindows->setChecked(conf_.readBoolEntry("FadeMenuWindows",FALSE));
+ fadeOnOpacityChange->setChecked(conf_.readBoolEntry("FadeTrans",FALSE));
+ fadeInSpeed->setValue((int)(conf_.readDoubleNumEntry("FadeInStep",0.070)*1000.0));
+ fadeOutSpeed->setValue((int)(conf_.readDoubleNumEntry("FadeOutStep",0.070)*1000.0));
+
+ emit KCModule::changed(false);
+}
+
+void KTranslucencyConfig::save( void )
+{
+ if (!kompmgrAvailable_)
+ return;
+ config->setGroup( "Notification Messages" );
+ config->writeEntry("UseTranslucency",useTranslucency->isChecked());
+
+ config->setGroup( "Translucency" );
+ config->writeEntry("TranslucentActiveWindows",activeWindowTransparency->isChecked());
+ config->writeEntry("TranslucentInactiveWindows",inactiveWindowTransparency->isChecked());
+ config->writeEntry("TranslucentMovingWindows",movingWindowTransparency->isChecked());
+ config->writeEntry("TranslucentDocks",dockWindowTransparency->isChecked());
+ config->writeEntry("TreatKeepAboveAsActive",keepAboveAsActive->isChecked());
+ config->writeEntry("ActiveWindowOpacity",activeWindowOpacity->value());
+ config->writeEntry("InactiveWindowOpacity",inactiveWindowOpacity->value());
+ config->writeEntry("MovingWindowOpacity",movingWindowOpacity->value());
+ config->writeEntry("DockOpacity",dockWindowOpacity->value());
+ // for simplification:
+ // xcompmgr supports a general shadow radius and additionally lets external apps set a multiplicator for each window
+ // (speed reasons, so the shadow matrix hasn't to be recreated for every window)
+ // we set inactive windows to 100%, the radius to the inactive window value and adjust the multiplicators for docks and active windows
+ // this way the user can set the three values without caring about the radius/multiplicator stuff
+ // additionally we find a value between big and small values to have a more smooth appereance
+ config->writeEntry("DockShadowSize",(int)(200.0 * dockWindowShadowSize->value() / (activeWindowShadowSize->value() + inactiveWindowShadowSize->value())));
+ config->writeEntry("MenuShadowSize",(int)(200.0 * menuWindowShadowSize->value() / (activeWindowShadowSize->value() + inactiveWindowShadowSize->value())));
+ config->writeEntry("ActiveWindowShadowSize",(int)(200.0 * activeWindowShadowSize->value() / (activeWindowShadowSize->value() + inactiveWindowShadowSize->value())));
+ config->writeEntry("InactiveWindowShadowSize",(int)(200.0 * inactiveWindowShadowSize->value() / (activeWindowShadowSize->value() + inactiveWindowShadowSize->value())));
+
+ config->writeEntry("RemoveShadowsOnMove",removeShadowsOnMove->isChecked());
+ config->writeEntry("RemoveShadowsOnResize",removeShadowsOnResize->isChecked());
+ config->writeEntry("OnlyDecoTranslucent", onlyDecoTranslucent->isChecked());
+ config->writeEntry("ResetKompmgr",resetKompmgr_);
+
+ KConfig *conf_ = new KConfig(TQDir::homeDirPath() + "/.xcompmgrrc");
+ conf_->setGroup("xcompmgr");
+
+ conf_->writeEntry("Compmode",useShadows->isChecked()?"CompClientShadows":"");
+ conf_->writeEntry("DisableARGB",disableARGB->isChecked());
+ conf_->writeEntry("ShadowOffsetY",-1*shadowTopOffset->value());
+ conf_->writeEntry("ShadowOffsetX",-1*shadowLeftOffset->value());
+
+
+ int r, g, b;
+ shadowColor->color().rgb( &r, &g, &b );
+ TQString hex;
+ hex.sprintf("0x%02X%02X%02X", r,g,b);
+ conf_->writeEntry("ShadowColor",hex);
+ conf_->writeEntry("ShadowRadius",(activeWindowShadowSize->value() + inactiveWindowShadowSize->value()) / 2);
+ conf_->writeEntry("FadeWindows",fadeInWindows->isChecked());
+ conf_->writeEntry("FadeMenuWindows",fadeInMenuWindows->isChecked());
+ conf_->writeEntry("FadeTrans",fadeOnOpacityChange->isChecked());
+ conf_->writeEntry("FadeInStep",fadeInSpeed->value()/1000.0);
+ conf_->writeEntry("FadeOutStep",fadeOutSpeed->value()/1000.0);
+
+ delete conf_;
+
+ if (standAlone)
+ {
+ config->sync();
+ if ( !kapp->dcopClient()->isAttached() )
+ kapp->dcopClient()->attach();
+ kapp->dcopClient()->send("twin*", "", "reconfigure()", TQString(""));
+ }
+ if (useTranslucency->isChecked())
+ startKompmgr();
+ emit KCModule::changed(false);
+}
+
+void KTranslucencyConfig::defaults()
+{
+ if (!kompmgrAvailable_)
+ return;
+ useTranslucency->setChecked(false);
+ onlyDecoTranslucent->setChecked(false);
+ activeWindowTransparency->setChecked(false);
+ inactiveWindowTransparency->setChecked(false);
+ movingWindowTransparency->setChecked(false);
+ dockWindowTransparency->setChecked(false);
+ keepAboveAsActive->setChecked(true);
+ disableARGB->setChecked(false);
+
+ activeWindowOpacity->setValue(100);
+ inactiveWindowOpacity->setValue(75);
+ movingWindowOpacity->setValue(25);
+ dockWindowOpacity->setValue(80);
+
+ dockWindowShadowSize->setValue(6);
+ menuWindowShadowSize->setValue(6);
+ activeWindowShadowSize->setValue(12);
+ inactiveWindowShadowSize->setValue(6);
+ shadowTopOffset->setValue(80);
+ shadowLeftOffset->setValue(0);
+
+ activeWindowOpacity->setEnabled(false);
+ inactiveWindowOpacity->setEnabled(false);
+ movingWindowOpacity->setEnabled(false);
+ dockWindowOpacity->setEnabled(false);
+ useShadows->setChecked(FALSE);
+ removeShadowsOnMove->setChecked(FALSE);
+ removeShadowsOnResize->setChecked(FALSE);
+ shadowColor->setColor(Qt::black);
+ fadeInWindows->setChecked(FALSE);
+ fadeInMenuWindows->setChecked(FALSE);
+ fadeOnOpacityChange->setChecked(FALSE);
+ fadeInSpeed->setValue(70);
+ fadeOutSpeed->setValue(70);
+ emit KCModule::changed(true);
+}
+
+
+bool KTranslucencyConfig::kompmgrAvailable()
+{
+ bool ret;
+ KProcess proc;
+ proc << "kompmgr" << "-v";
+ ret = proc.start(KProcess::DontCare, KProcess::AllOutput);
+ proc.detach();
+ return ret;
+}
+
+void KTranslucencyConfig::startKompmgr()
+{
+ bool ret;
+ KProcess proc;
+ proc << "kompmgr";
+ ret = proc.start(KProcess::DontCare);
+}
+
+void KTranslucencyConfig::showWarning(bool alphaActivated)
+{
+// if (alphaActivated)
+// KMessageBox::information(this, i18n("<qt>Translucency support is new and may cause problems<br> including crashes (sometimes the translucency engine, seldom even X).</qt>"), i18n("Warning"));
+}
+
+#include "windows.moc"
diff --git a/twin/kcmtwin/twinoptions/windows.h b/twin/kcmtwin/twinoptions/windows.h
new file mode 100644
index 000000000..e3b81d07a
--- /dev/null
+++ b/twin/kcmtwin/twinoptions/windows.h
@@ -0,0 +1,297 @@
+/*
+ * windows.h
+ *
+ * Copyright (c) 1997 Patrick Dowler dowler@morgul.fsh.uvic.ca
+ * Copyright (c) 2001 Waldo Bastian bastian@kde.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __KWINDOWCONFIG_H__
+#define __KWINDOWCONFIG_H__
+
+#include <tqwidget.h>
+#include <kcmodule.h>
+#include <config.h>
+
+class TQRadioButton;
+class TQCheckBox;
+class TQPushButton;
+class TQComboBox;
+class TQGroupBox;
+class TQLabel;
+class TQSlider;
+class TQButtonGroup;
+class TQSpinBox;
+class TQVButtonGroup;
+
+class KColorButton;
+class KIntNumInput;
+
+#define TRANSPARENT 0
+#define OPAQUE 1
+
+#define CLICK_TO_FOCUS 0
+#define FOCUS_FOLLOW_MOUSE 1
+
+#define TITLEBAR_PLAIN 0
+#define TITLEBAR_SHADED 1
+
+#define RESIZE_TRANSPARENT 0
+#define RESIZE_OPAQUE 1
+
+#define SMART_PLACEMENT 0
+#define MAXIMIZING_PLACEMENT 1
+#define CASCADE_PLACEMENT 2
+#define RANDOM_PLACEMENT 3
+#define CENTERED_PLACEMENT 4
+#define ZEROCORNERED_PLACEMENT 5
+#define INTERACTIVE_PLACEMENT 6
+#define MANUAL_PLACEMENT 7
+
+#define CLICK_TO_FOCUS 0
+#define FOCUS_FOLLOWS_MOUSE 1
+#define FOCUS_UNDER_MOUSE 2
+#define FOCUS_STRICTLY_UNDER_MOUSE 3
+
+class TQSpinBox;
+
+class KFocusConfig : public KCModule
+{
+ Q_OBJECT
+public:
+ KFocusConfig( bool _standAlone, KConfig *_config, TQWidget *parent=0, const char* name=0 );
+ ~KFocusConfig();
+
+ void load();
+ void save();
+ void defaults();
+
+private slots:
+ void setDelayFocusEnabled();
+ void setAutoRaiseEnabled();
+ void autoRaiseOnTog(bool);//CT 23Oct1998
+ void delayFocusOnTog(bool);
+ void clickRaiseOnTog(bool);
+ void updateAltTabMode();
+ void updateActiveMouseScreen();
+ void changed() { emit KCModule::changed(true); }
+
+
+private:
+
+ int getFocus( void );
+ int getAutoRaiseInterval( void );
+ int getDelayFocusInterval( void );
+
+ void setFocus(int);
+ void setAutoRaiseInterval(int);
+ void setAutoRaise(bool);
+ void setDelayFocusInterval(int);
+ void setDelayFocus(bool);
+ void setClickRaise(bool);
+ void setSeparateScreenFocus(bool);
+ void setActiveMouseScreen(bool);
+ void setAltTabMode(bool);
+ void setTraverseAll(bool);
+ void setRollOverDesktops(bool);
+ void setShowPopupinfo(bool);
+
+ TQButtonGroup *fcsBox;
+ TQComboBox *focusCombo;
+ TQCheckBox *autoRaiseOn;
+ TQCheckBox *delayFocusOn;
+ TQCheckBox *clickRaiseOn;
+ KIntNumInput *autoRaise;
+ KIntNumInput *delayFocus;
+ TQCheckBox *separateScreenFocus;
+ TQCheckBox *activeMouseScreen;
+
+ TQButtonGroup *kbdBox;
+ TQCheckBox *altTabPopup;
+ TQCheckBox *traverseAll;
+ TQCheckBox *rollOverDesktops;
+ TQCheckBox *showPopupinfo;
+
+ KConfig *config;
+ bool standAlone;
+};
+
+class KMovingConfig : public KCModule
+{
+ Q_OBJECT
+public:
+ KMovingConfig( bool _standAlone, KConfig *config, TQWidget *parent=0, const char* name=0 );
+ ~KMovingConfig();
+
+ void load();
+ void save();
+ void defaults();
+
+private slots:
+ void setMinimizeAnim( bool );
+ void setMinimizeAnimSpeed( int );
+ void changed() { emit KCModule::changed(true); }
+ void slotBrdrSnapChanged( int );
+ void slotWndwSnapChanged( int );
+
+private:
+ int getMove( void );
+ bool getMinimizeAnim( void );
+ int getMinimizeAnimSpeed( void );
+ int getResizeOpaque ( void );
+ bool getGeometryTip( void ); //KS
+ int getPlacement( void ); //CT
+
+ void setMove(int);
+ void setResizeOpaque(int);
+ void setGeometryTip(bool); //KS
+ void setPlacement(int); //CT
+ void setMoveResizeMaximized(bool);
+
+ TQButtonGroup *windowsBox;
+ TQCheckBox *opaque;
+ TQCheckBox *resizeOpaqueOn;
+ TQCheckBox *geometryTipOn;
+ TQCheckBox* minimizeAnimOn;
+ TQSlider *minimizeAnimSlider;
+ TQLabel *minimizeAnimSlowLabel, *minimizeAnimFastLabel;
+ TQCheckBox *moveResizeMaximized;
+
+ TQComboBox *placementCombo;
+
+ KConfig *config;
+ bool standAlone;
+
+ int getBorderSnapZone();
+ void setBorderSnapZone( int );
+ int getWindowSnapZone();
+ void setWindowSnapZone( int );
+
+ TQVButtonGroup *MagicBox;
+ KIntNumInput *BrdrSnap, *WndwSnap;
+ TQCheckBox *OverlapSnap;
+
+};
+
+class KAdvancedConfig : public KCModule
+{
+ Q_OBJECT
+public:
+ KAdvancedConfig( bool _standAlone, KConfig *config, TQWidget *parent=0, const char* name=0 );
+ ~KAdvancedConfig();
+
+ void load();
+ void save();
+ void defaults();
+
+private slots:
+ void shadeHoverChanged(bool);
+
+ //copied from kcontrol/konq/twindesktop, aleXXX
+ void setEBorders();
+
+ void changed() { emit KCModule::changed(true); }
+
+private:
+
+ int getShadeHoverInterval (void );
+ void setAnimateShade(bool);
+ void setShadeHover(bool);
+ void setShadeHoverInterval(int);
+
+ TQCheckBox *animateShade;
+ TQButtonGroup *shBox;
+ TQCheckBox *shadeHoverOn;
+ KIntNumInput *shadeHover;
+
+ KConfig *config;
+ bool standAlone;
+
+ int getElectricBorders( void );
+ int getElectricBorderDelay();
+ void setElectricBorders( int );
+ void setElectricBorderDelay( int );
+
+ TQVButtonGroup *electricBox;
+ TQRadioButton *active_disable;
+ TQRadioButton *active_move;
+ TQRadioButton *active_always;
+ KIntNumInput *delays;
+
+ void setFocusStealing( int );
+ void setHideUtilityWindowsForInactive( bool );
+
+ TQComboBox* focusStealing;
+ TQCheckBox* hideUtilityWindowsForInactive;
+};
+
+class KProcess;
+class KTranslucencyConfig : public KCModule
+{
+ Q_OBJECT
+public:
+ KTranslucencyConfig( bool _standAlone, KConfig *config, TQWidget *parent=0, const char* name=0 );
+ ~KTranslucencyConfig();
+
+ void load();
+ void save();
+ void defaults();
+
+private:
+ TQCheckBox *useTranslucency;
+ TQCheckBox *activeWindowTransparency;
+ TQCheckBox *inactiveWindowTransparency;
+ TQCheckBox *movingWindowTransparency;
+ TQCheckBox *dockWindowTransparency;
+ TQCheckBox *keepAboveAsActive;
+ TQCheckBox *disableARGB;
+ TQCheckBox *fadeInWindows;
+ TQCheckBox *fadeInMenuWindows;
+ TQCheckBox *fadeOnOpacityChange;
+ TQCheckBox *useShadows;
+ TQCheckBox *removeShadowsOnResize;
+ TQCheckBox *removeShadowsOnMove;
+ TQGroupBox *sGroup;
+ TQCheckBox *onlyDecoTranslucent;
+// TQPushButton *xcompmgrButton;
+ KIntNumInput *activeWindowOpacity;
+ KIntNumInput *inactiveWindowOpacity;
+ KIntNumInput *movingWindowOpacity;
+ KIntNumInput *dockWindowOpacity;
+ KIntNumInput *dockWindowShadowSize;
+ KIntNumInput *menuWindowShadowSize;
+ KIntNumInput *activeWindowShadowSize;
+ KIntNumInput *inactiveWindowShadowSize;
+ KIntNumInput *shadowTopOffset;
+ KIntNumInput *shadowLeftOffset;
+ KIntNumInput *fadeInSpeed;
+ KIntNumInput *fadeOutSpeed;
+ KColorButton *shadowColor;
+ KConfig *config;
+ bool standAlone;
+ bool alphaActivated;
+ bool resetKompmgr_;
+ bool kompmgrAvailable();
+ void startKompmgr();
+ bool kompmgrAvailable_;
+ KProcess *kompmgr;
+
+private slots:
+ void resetKompmgr();
+ void showWarning(bool alphaActivated);
+
+};
+#endif