Hi!

I can't say anything about your patch in generally because I'm just not familiar with the internals of KDE yet ... but (and I don't know if it's your fault) why the hell is the size of the systray icons hardcoded?? (22px). Shouldn't there be a global setting for the icon size?

Best Regards,

Bernhard


2008/6/14, Mathias Kraus <k.matze@gmx.net>:
Hi,

this is my first patch for KDE, so I hope I don't break plasma ;)

OK, it's only a small patch for a layouting bug which occurs when you have a
system tray with multiple rows/columns. See attached picture.

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;

        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;

        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.

Best regards,

Mathias Kraus



_______________________________________________
Panel-devel mailing list
Panel-devel@kde.org
https://mail.kde.org/mailman/listinfo/panel-devel