summaryrefslogtreecommitdiffstats
path: root/kdeui/kpanelmenu.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch)
tree5ac38a06f3dde268dc7927dc155896926aaf7012 /kdeui/kpanelmenu.cpp
downloadtdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz
tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kdeui/kpanelmenu.cpp')
-rw-r--r--kdeui/kpanelmenu.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/kdeui/kpanelmenu.cpp b/kdeui/kpanelmenu.cpp
new file mode 100644
index 000000000..ab1ed3d35
--- /dev/null
+++ b/kdeui/kpanelmenu.cpp
@@ -0,0 +1,158 @@
+/*****************************************************************
+
+Copyright (c) 1996-2000 the kicker authors. See file AUTHORS.
+ (c) Michael Goffioul <kdeprint@swing.be>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#include <kglobal.h>
+#include <kconfig.h>
+#include <qtimer.h>
+
+#include "kpanelmenu.h"
+#include "kpanelmenu.moc"
+//#include "kaccelmanager.h"
+
+
+class KPanelMenuPrivate
+{
+public:
+ bool init;
+ int clearDelay;
+ QString startPath;
+ QTimer t;
+};
+
+KPanelMenu::KPanelMenu(const QString &startDir, QWidget *parent, const char *name)
+ : KPopupMenu(parent, name)
+{
+ init(startDir);
+}
+
+KPanelMenu::KPanelMenu(QWidget *parent, const char *name)
+ : KPopupMenu(parent, name)
+{
+ init();
+}
+
+void KPanelMenu::init(const QString& path)
+{
+ d = new KPanelMenuPrivate;
+
+ setInitialized( false );
+ d->startPath = path;
+
+ connect(this, SIGNAL(activated(int)), SLOT(slotExec(int)));
+ connect(this, SIGNAL(aboutToShow()), SLOT(slotAboutToShow()));
+
+ // setup cache timer
+ KConfig *config = KGlobal::config();
+ config->setGroup("menus");
+ d->clearDelay = config->readNumEntry("MenuCacheTime", 60000); // 1 minute
+
+ //KAcceleratorManager::manage(this);
+ setKeyboardShortcutsEnabled(true);
+}
+
+KPanelMenu::~KPanelMenu()
+{
+ delete d;
+}
+
+void KPanelMenu::slotAboutToShow()
+{
+ // stop the cache timer
+ if(d->clearDelay)
+ d->t.stop();
+
+ // teared off ?
+ if ( isTopLevel() )
+ d->clearDelay = 0;
+
+ internalInitialize();
+}
+
+void KPanelMenu::slotClear()
+{
+ setInitialized( false );
+ clear();
+}
+
+void KPanelMenu::hideEvent(QHideEvent *ev)
+{
+ // start the cache timer
+ if(d->clearDelay) {
+ disconnect(&(d->t), SIGNAL(timeout()), this, SLOT(slotClear()));
+ connect(&(d->t), SIGNAL(timeout()), this, SLOT(slotClear()));
+ d->t.start(d->clearDelay, true);
+ }
+ QPopupMenu::hideEvent(ev);
+}
+
+void KPanelMenu::disableAutoClear()
+{
+ d->clearDelay = 0;
+}
+
+const QString& KPanelMenu::path() const
+{
+ return d->startPath;
+}
+
+void KPanelMenu::setPath(const QString& p)
+{
+ d->startPath = p;
+}
+
+bool KPanelMenu::initialized() const
+{
+ return d->init;
+}
+
+void KPanelMenu::setInitialized(bool on)
+{
+ d->init = on;
+}
+
+void KPanelMenu::reinitialize()
+{
+ deinitialize();
+ // Yes, reinitialize must call initialize(). Otherwise, menus
+ // may not appear in the right place. Don't change this! If
+ // you want delayed initialization, use deinitialize() instead.
+ internalInitialize();
+}
+
+void KPanelMenu::deinitialize()
+{
+ slotClear();
+}
+
+void KPanelMenu::internalInitialize()
+{
+ if( initialized() )
+ return;
+ initialize();
+ setInitialized( true );
+}
+
+void KPanelMenu::virtual_hook( int id, void* data )
+{ KPopupMenu::virtual_hook( id, data ); }
+