From kde-panel-devel Sat Jun 14 23:27:49 2008 From: Sebastian Sauer Date: Sat, 14 Jun 2008 23:27:49 +0000 To: kde-panel-devel Subject: Re: Patch for system tray layouting Message-Id: <200806150127.49865.mail () dipe ! org> X-MARC-Message: https://marc.info/?l=kde-panel-devel&m=121348597929997 On Saturday 14 June 2008, Mathias Kraus wrote: > Hi, Hi Mathias :-) > The bug is in > kdebase/workspace/plasma/applets/systemtray/systemtraywidget.cpp. > In addWidgetToLayout the conditions in line 140 > minimumHeight() + widget->height() + m_mainLayout->spacing() > > maximumHeight() is always true after the first column is full, the same > applies for a vertical panel with rows. > > My patch calculates the maximum number of items that fits into the panel > and jumps into the next row/column if there is an overflow. > > void SystemTrayWidget::addWidgetToLayout(QWidget *widget) > { > // Add the widget to the layout > m_mainLayout->setRowMinimumHeight(m_nextRow, 22); > m_mainLayout->setColumnMinimumWidth(m_nextColumn, 22); > widget->resize(22,22); > m_mainLayout->addWidget(widget, m_nextRow, m_nextColumn, 1, 1, > Qt::AlignCenter); > > // Figure out where the next widget should go > if (m_orientation == Qt::Horizontal) { > // Calculate the items that fit into a column > m_maxCount = (maximumHeight() + m_mainLayout->spacing()) / (widget- > > >height() + m_mainLayout->spacing()) -1; probably guard against widget->height()+m_mainLayout->spacing() == 0 ? > setMinimumSize(QSize(22 * (m_nextColumn + 1) + > m_mainLayout->spacing() * m_nextColumn, > 22 * (m_maxCount + 1) + > m_mainLayout->spacing() * m_maxCount)); > > // Add down then across when horizontal > m_nextRow++; > if (m_nextRow > m_maxCount){ > m_nextColumn++; > m_nextRow = 0; > } > } else { > // Calculate the items that fit into a row > m_maxCount = (maximumWidth() + m_mainLayout->spacing()) / (widget- > > >width() + m_mainLayout->spacing()) -1; here too. > setMinimumSize(QSize(22 * (m_maxCount + 1) + > m_mainLayout->spacing() * m_maxCount, > 22 * (m_nextRow + 1) + m_mainLayout->spacing() > * m_nextRow)); > > // Add across then down when vertical > m_nextColumn++; > if (m_nextColumn > m_maxCount) { > m_nextRow++; > m_nextColumn = 0; > } > } > } > > BTW you guys rock. Keep on the good work. else looks and works fine imho :) _______________________________________________ Panel-devel mailing list Panel-devel@kde.org https://mail.kde.org/mailman/listinfo/panel-devel