summaryrefslogtreecommitdiffstats
path: root/src/widgetplugins.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgetplugins.cpp')
-rw-r--r--src/widgetplugins.cpp235
1 files changed, 235 insertions, 0 deletions
diff --git a/src/widgetplugins.cpp b/src/widgetplugins.cpp
new file mode 100644
index 0000000..462030e
--- /dev/null
+++ b/src/widgetplugins.cpp
@@ -0,0 +1,235 @@
+/***************************************************************************
+ widgetplugins.cpp - description
+ -------------------
+ begin : Mi Aug 27 2003
+ copyright : (C) 2003 by Martin Witte
+ email : witte@kawo1.rwth-aachen.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "include/widgetplugins.h"
+#include "include/pluginmanager.h"
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <twin.h>
+#include <tqwidget.h>
+#include <tdeconfig.h>
+#include <tdelocale.h>
+
+WidgetPluginBase::WidgetPluginBase(const TQString &name, const TQString &description)
+ : PluginBase(name, description),
+ m_geoCacheValid(false),
+ m_geoRestoreFlag(false),
+ m_restoreShow(false)
+{
+}
+
+/*
+TQWidget *WidgetPluginBase::getWidget()
+{
+ return dynamic_cast<TQWidget*>(this);
+}
+
+
+const TQWidget *WidgetPluginBase::getWidget() const
+{
+ return dynamic_cast<const TQWidget*>(this);
+}
+*/
+
+void WidgetPluginBase::notifyManager(bool shown)
+{
+ if (m_manager)
+ m_manager->noticeWidgetPluginShown(this, shown);
+}
+
+
+bool WidgetPluginBase::isReallyVisible(const TQWidget *_w) const
+{
+ const TQWidget *w = _w ? _w : getWidget();
+ if (!w) return false;
+ KWin::WindowInfo i = KWin::WindowInfo(w->winId(), 0, 0);
+ return (i.mappingState() == NET::Visible)
+ && w->isVisible()
+ && (i.onAllDesktops() || i.isOnCurrentDesktop());
+}
+
+
+bool WidgetPluginBase::isAnywhereVisible(const TQWidget *_w) const
+{
+ const TQWidget *w = _w ? _w : getWidget();
+ if (!w) return false;
+ return w->isVisible();
+}
+
+
+void WidgetPluginBase::pShow(bool on)
+{
+ TQWidget *w = getWidget();
+ if (!w) return;
+ if (on && !isReallyVisible(w))
+ w->show();
+ else if (!on && !w->isHidden())
+ w->hide();
+}
+
+
+void WidgetPluginBase::pToggleShown()
+{
+ TQWidget *w = getWidget();
+ if (!w) return;
+ if (!isReallyVisible(w))
+ w->show();
+ else
+ w->hide();
+}
+
+
+void WidgetPluginBase::pShowOnOrgDesktop()
+{
+ KWin::setMainWindow(getWidget(), 0);
+
+ logDebug(TQString("%1::pShowOnOrgDesktop: all: %2, desktop: %3, visible:%4, anywherevisible:%5, cachevalid: %6").arg(name()).arg(m_saveSticky).arg(m_saveDesktop).arg(isReallyVisible()).arg(isAnywhereVisible()).arg(m_geoCacheValid));
+ if (m_geoCacheValid && (!isReallyVisible() || m_geoRestoreFlag) ) {
+ TQWidget *w = getWidget();
+ if (!w) return;
+ WId id = w->winId();
+
+ KWin::setOnAllDesktops(id, m_saveSticky);
+ if (!m_saveSticky) {
+ KWin::setOnDesktop(id, m_saveDesktop);
+ }
+
+ w->resize(m_saveGeometry.size());
+ w->move(m_saveGeometry.topLeft());
+
+ if (m_saveMinimized) {
+ w->showMinimized();
+ KWin::iconifyWindow(id);
+ } else if (m_saveMaximized) {
+ w->showMaximized();
+ } else {
+ w->showNormal();
+ KWin::deIconifyWindow(id);
+ }
+
+ }
+}
+
+void WidgetPluginBase::pShow()
+{
+ KWin::setMainWindow(getWidget(), 0);
+
+ logDebug(TQString("%1::pShow: all: %2, desktop: %3, visible:%4, anywherevisible:%5, cachevalid: %6").arg(name()).arg(m_saveSticky).arg(m_saveDesktop).arg(isReallyVisible()).arg(isAnywhereVisible()).arg(m_geoCacheValid));
+ if (m_geoCacheValid && (!isReallyVisible() || m_geoRestoreFlag) ) {
+ TQWidget *w = getWidget();
+ if (!w) return;
+ WId id = w->winId();
+
+ KWin::setOnAllDesktops(id, m_saveSticky);
+ if (!m_saveSticky)
+ KWin::setOnDesktop(id, KWin::currentDesktop());
+
+ w->resize(m_saveGeometry.size());
+ w->move(m_saveGeometry.topLeft());
+ KWin::deIconifyWindow(id);
+ }
+}
+
+
+void WidgetPluginBase::pHide()
+{
+ logDebug(TQString("%1::pHide1: all: %2, desktop: %3, visible:%4, anywherevisible:%5, cachevalid: %6").arg(name()).arg(m_saveSticky).arg(m_saveDesktop).arg(isReallyVisible()).arg(isAnywhereVisible()).arg(m_geoCacheValid));
+ getKWinState();
+ logDebug(TQString("%1::pHide2: all: %2, desktop: %3, visible:%4, anywherevisible:%5, cachevalid: %6").arg(name()).arg(m_saveSticky).arg(m_saveDesktop).arg(isReallyVisible()).arg(isAnywhereVisible()).arg(m_geoCacheValid));
+}
+
+
+void WidgetPluginBase::pShowEvent(TQShowEvent *)
+{
+ notifyManager (true);
+}
+
+
+void WidgetPluginBase::pHideEvent(TQHideEvent *)
+{
+ notifyManager (false);
+}
+
+
+void WidgetPluginBase::getKWinState(const TQWidget *_w) const
+{
+ if (m_geoRestoreFlag) return;
+
+ const TQWidget *w = _w ? _w : getWidget();
+ if (!w) return;
+ if (w->isVisible()) {
+ KWin::WindowInfo i = KWin::WindowInfo(w->winId(), 0, 0);
+ m_saveMinimized = i.isMinimized();
+ m_saveMaximized = w->isMaximized();
+ m_saveSticky = i.onAllDesktops();
+ m_saveDesktop = i.desktop();
+ m_saveGeometry = TQRect(w->pos(), w->size());
+ m_geoCacheValid = true;
+ }
+}
+
+
+void WidgetPluginBase::saveState (TDEConfig *config) const
+{
+ const TQWidget *w = getWidget();
+ getKWinState(w);
+
+ config->writeEntry("hidden", w ? w->isHidden() : false);
+ config->writeEntry("minimized", m_saveMinimized);
+ config->writeEntry("maximized", m_saveMaximized);
+ config->writeEntry("sticky", m_saveSticky);
+ config->writeEntry("desktop", m_saveDesktop);
+ config->writeEntry("geometry", m_saveGeometry);
+ config->writeEntry("geoCacheValid", m_geoCacheValid);
+}
+
+
+void WidgetPluginBase::restoreState (TDEConfig *config, bool showByDefault)
+{
+ m_geoCacheValid = config->readBoolEntry("geoCacheValid", false);
+ m_saveDesktop = config->readNumEntry ("desktop", 1);
+ m_saveSticky = config->readBoolEntry("sticky", false);
+ m_saveMaximized = config->readBoolEntry("maximized", false);
+ m_saveMinimized = config->readBoolEntry("minimized", false);
+ m_saveGeometry = config->readRectEntry("geometry");
+
+ m_restoreShow = !config->readBoolEntry("hidden", !showByDefault);
+}
+
+
+void WidgetPluginBase::restoreState (TDEConfig *config)
+{
+ restoreState(config, true);
+}
+
+
+void WidgetPluginBase::startPlugin()
+{
+ PluginBase::startPlugin();
+
+ TQWidget *w = getWidget();
+ if (w) {
+ m_geoRestoreFlag = true;
+ if (!m_restoreShow) w->hide();
+ else w->show();
+ m_geoRestoreFlag = false;
+ }
+}
+