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

List:       kde-panel-devel
Subject:    Pager config not working with vertical Panel
From:       Richard Dale <richard.j.dale () gmail ! com>
Date:       2009-07-27 10:01:42
Message-ID: 491684420907270301p518cfff3kadb40d4018c8b172 () mail ! gmail ! com
[Download RAW message or body]

The Pager applet in the kde 4.3 branch doesn't work with a Panel
aligned vertically. The attached patch fixes the bug.

The code before the fix was trying to have only one calculation for
setting either the row or the column in the config dialog and then
deriving the other dimension, and  afterwards swapping the row and
column for the vertical case. The patch duplicates the calculation
instead, and so is longer. Which is the best approach? I don't know -
I think it would be possible to spend a whole morning discussing
different ways of doing this sort of thing. Maybe it shouldn't have
'row' and 'column' variables, but 'constrained_dimension' and
'derived_dimension'..

-- Richard

["pager_vertical_panel_config.patch" (text/x-diff)]

Index: pager.cpp
===================================================================
--- pager.cpp	(revision 1002894)
+++ pager.cpp	(working copy)
@@ -254,15 +254,17 @@
 
     int padding = 2; // Space between miniatures of desktops
     int textMargin = 3; // Space between name of desktop and border
-    int rows = qMax(qMin(m_rows, m_desktopCount), 1);
-    int columns = m_desktopCount / rows + m_desktopCount % rows;
+    int rows = 0;
+    int columns = 0;
 
     //inverse rows and columns in vertical panel
     if (formFactor() == Plasma::Vertical) {
-        int temp = rows;
-        rows = columns;
-        columns = temp;
-    }
+        columns = qMax(qMin(m_columns, m_desktopCount), 1);
+        rows = (m_desktopCount / columns) + (m_desktopCount % columns);
+    } else {
+        rows = qMax(qMin(m_rows, m_desktopCount), 1);
+        columns = (m_desktopCount / rows) + (m_desktopCount % rows);
+	}
 
     qreal leftMargin = 0;
     qreal topMargin = 0;
@@ -479,27 +481,35 @@
     // we need to keep all pager applets consistent since this affects
     // the layout of the desktops as used by the window manager,
     // so we store the row count in the applet global configuration
-    int rows = 0;
     if (formFactor() == Plasma::Vertical) {
-        rows = m_desktopCount / ui.spinRows->value() + m_desktopCount % ui.spinRows->value();
+        int columns = ui.spinRows->value();
+        m_rows = (m_desktopCount / columns) + (m_desktopCount % columns);
+        if (m_columns != columns) {
+            KConfigGroup globalcg = globalConfig();
+            m_columns = columns;
+            if (m_columns > m_desktopCount) {
+                m_columns = m_desktopCount;
+            }
+            globalcg.writeEntry("rows", m_columns);
+            changed = true;
+        }
     } else {
-        rows = ui.spinRows->value();
-    }
-
-    if (m_rows != rows) {
-        KConfigGroup globalcg = globalConfig();
-        m_rows = rows;
-        if (m_rows > m_desktopCount) {
-            m_rows = m_desktopCount;
+        int rows = ui.spinRows->value();
+        m_columns = (m_desktopCount / rows) + (m_desktopCount % rows);
+        if (m_rows != rows) {
+            KConfigGroup globalcg = globalConfig();
+            m_rows = rows;
+            if (m_rows > m_desktopCount) {
+                m_rows = m_desktopCount;
+            }
+            globalcg.writeEntry("rows", m_rows);
+            changed = true;
         }
-        globalcg.writeEntry("rows", m_rows);
-        changed = true;
     }
 
     if (changed) {
         configNeedsSaving();
         // force an update
-        m_columns = 0;
         m_size = QSizeF(-1, -1);
         recalculateGeometry();
         recalculateWindowRects();


_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


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

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