[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/netbook/applets/currentappcontrol
From:       Marco Martin <notmart () gmail ! com>
Date:       2009-09-16 20:38:11
Message-ID: 1253133491.687073.6598.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1024567 by mart:

maximize/restore button


 M  +44 -0     currentappcontrol.cpp  
 M  +2 -0      currentappcontrol.h  


--- trunk/KDE/kdebase/workspace/plasma/netbook/applets/currentappcontrol/currentappcontrol.cpp \
#1024566:1024567 @@ -62,8 +62,15 @@
     m_closeTask->setSvg("widgets/configuration-icons", "close");
     m_closeTask->setMaximumWidth(KIconLoader::SizeSmallMedium);
 
+    m_maximizeTask = new Plasma::IconWidget(this);
+    m_maximizeTask->setSvg("widgets/configuration-icons", "maximize");
+    m_maximizeTask->setMaximumWidth(KIconLoader::SizeSmallMedium);
+    m_maximizeTask->setZValue(999);
+
     connect(m_closeTask, SIGNAL(clicked()), this, SLOT(closeWindow()));
     connect(m_closeTask, SIGNAL(pressed(bool)), this, SLOT(setSyncDelay(bool)));
+    connect(m_maximizeTask, SIGNAL(clicked()), this, SLOT(toggleMaximizedWindow()));
+    connect(m_maximizeTask, SIGNAL(pressed(bool)), this, SLOT(setSyncDelay(bool)));
     connect(m_currentTask, SIGNAL(clicked()), this, SLOT(listWindows()));
 }
 
@@ -82,6 +89,7 @@
     lay->setContentsMargins(0, 0, 0, 0);
     lay->setSpacing(0);
     lay->addItem(m_currentTask);
+    lay->addItem(m_maximizeTask);
     lay->addItem(m_closeTask);
     activeWindowChanged(KWindowSystem::activeWindow());
 }
@@ -138,6 +146,7 @@
         m_currentTask->setIcon("preferences-system-windows");
         m_currentTask->setText(i18np("%1 running app", "%1 running apps", \
KWindowSystem::windows().count()-1));  m_closeTask->hide();
+        m_maximizeTask->hide();
     } else {
         m_activeWindow = m_pendingActiveWindow;
         KWindowInfo info = KWindowSystem::windowInfo(m_activeWindow, NET::WMName);
@@ -146,6 +155,7 @@
         //FIXME: this is utterly bad: the layout seems to -not- resize it?
         m_currentTask->resize(size().width() - m_closeTask->size().width(), \
m_currentTask->size().height());  m_closeTask->show();
+        m_maximizeTask->show();
     }
 
     m_pendingActiveWindow = 0;
@@ -170,6 +180,40 @@
     syncActiveWindow();
 }
 
+void CurrentAppControl::toggleMaximizedWindow()
+{
+#ifdef Q_WS_X11
+    KWindowInfo info = KWindowSystem::windowInfo(m_activeWindow, NET::WMState | \
NET::XAWMState | NET::WMDesktop); +    bool on_current = info.isOnCurrentDesktop();
+
+    if (!on_current)
+    {
+        KWindowSystem::setCurrentDesktop(info.desktop());
+    }
+
+    if (info.isMinimized())
+    {
+        KWindowSystem::unminimizeWindow(m_activeWindow);
+    }
+
+    NETWinInfo ni(QX11Info::display(), m_activeWindow, QX11Info::appRootWindow(), \
NET::WMState); +
+    if (!(ni.state() & NET::Max))
+    {
+        ni.setState(NET::Max, NET::Max);
+    }
+    else
+    {
+        ni.setState(0, NET::Max);
+    }
+
+    if (!on_current)
+    {
+        KWindowSystem::forceActiveWindow(m_activeWindow);
+    }
+#endif
+}
+
 void CurrentAppControl::listWindows()
 {
     if (KWindowSystem::compositingActive()) {
--- trunk/KDE/kdebase/workspace/plasma/netbook/applets/currentappcontrol/currentappcontrol.h \
#1024566:1024567 @@ -50,6 +50,7 @@
     void setSyncDelay(bool delay);
     void syncActiveWindow();
     void closeWindow();
+    void toggleMaximizedWindow();
     void listWindows();
     void windowItemClicked();
     void closePopup();
@@ -57,6 +58,7 @@
 private:
     Plasma::IconWidget *m_currentTask;
     Plasma::IconWidget *m_closeTask;
+    Plasma::IconWidget *m_maximizeTask;
     bool m_syncDelay;
     WId m_activeWindow;
     WId m_pendingActiveWindow;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic