diff options
Diffstat (limited to 'kicker/applets/systemtray')
| -rw-r--r-- | kicker/applets/systemtray/systemtrayapplet.cpp | 428 | ||||
| -rw-r--r-- | kicker/applets/systemtray/systemtrayapplet.h | 10 |
2 files changed, 228 insertions, 210 deletions
diff --git a/kicker/applets/systemtray/systemtrayapplet.cpp b/kicker/applets/systemtray/systemtrayapplet.cpp index 25a6de7de..0175bd689 100644 --- a/kicker/applets/systemtray/systemtrayapplet.cpp +++ b/kicker/applets/systemtray/systemtrayapplet.cpp @@ -28,6 +28,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include <tqcursor.h> #include <tqpopupmenu.h> +#include <tqspinbox.h> +#include <tqcheckbox.h> #include <tqtimer.h> #include <tqpixmap.h> #include <tqevent.h> @@ -35,6 +37,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include <tqgrid.h> #include <tqpainter.h> #include <tqimage.h> +#include <tqlayout.h> +#include <tqwhatsthis.h> #include <dcopclient.h> #include <tdeapplication.h> @@ -58,12 +62,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include <X11/Xlib.h> -#define ICON_MARGIN 1 #define ICON_END_MARGIN KickerSettings::showDeepButtons()?4:0 extern "C" { - KDE_EXPORT KPanelApplet* init(TQWidget *parent, const TQString& configFile) + TDE_EXPORT KPanelApplet* init(TQWidget *parent, const TQString& configFile) { TDEGlobal::locale()->insertCatalogue("ksystemtrayapplet"); return new SystemTrayApplet(configFile, KPanelApplet::Normal, @@ -74,20 +77,23 @@ extern "C" SystemTrayApplet::SystemTrayApplet(const TQString& configFile, Type type, int actions, TQWidget *parent, const char *name) : KPanelApplet(configFile, type, actions, parent, name), - m_showFrame(KickerSettings::showDeepButtons()?true:false), + m_showFrame(KickerSettings::showDeepButtons()), m_showHidden(false), - m_expandButton(0), - m_leftSpacer(0), - m_rightSpacer(0), - m_clockApplet(0), - m_settingsDialog(0), + m_expandButton(nullptr), + m_leftSpacer(nullptr), + m_rightSpacer(nullptr), + m_clockApplet(nullptr), + m_settingsDialog(nullptr), m_iconSelector(0), - m_autoRetractTimer(0), + m_autoRetractTimer(nullptr), m_autoRetract(false), m_iconSize(24), m_showClockInTray(false), - m_showClockSettingCB(0), - m_layout(0) + m_showClockSettingCB(nullptr), + m_iconMargin(1), + m_iconMarginSB(nullptr), + m_iconSpacing(1), + m_iconSpacingSB(nullptr) { DCOPObject::setObjId("SystemTrayApplet"); loadSettings(); @@ -99,19 +105,19 @@ SystemTrayApplet::SystemTrayApplet(const TQString& configFile, Type type, int ac m_clockApplet = new ClockApplet(configFile, KPanelApplet::Normal, KPanelApplet::Preferences, this, "clockapplet"); updateClockGeometry(); - connect(m_clockApplet, TQT_SIGNAL(clockReconfigured()), this, TQT_SLOT(updateClockGeometry())); - connect(m_clockApplet, TQT_SIGNAL(updateLayout()), this, TQT_SLOT(updateClockGeometry())); + connect(m_clockApplet, TQ_SIGNAL(clockReconfigured()), this, TQ_SLOT(updateClockGeometry())); + connect(m_clockApplet, TQ_SIGNAL(updateLayout()), this, TQ_SLOT(updateClockGeometry())); setBackgroundOrigin(AncestorOrigin); - twin_module = new KWinModule(TQT_TQOBJECT(this)); + twin_module = new KWinModule(this); - // kApplication notifies us of settings changes. added to support + // tdeApp notifies us of settings changes. added to support // disabling of frame effect on mouse hover - kapp->dcopClient()->setNotifications(true); + tdeApp->dcopClient()->setNotifications(true); connectDCOPSignal("kicker", "kicker", "configurationChanged()", "loadSettings()", false); - TQTimer::singleShot(0, this, TQT_SLOT(initialize())); + TQTimer::singleShot(0, this, TQ_SLOT(initialize())); } void SystemTrayApplet::updateClockGeometry() @@ -119,14 +125,14 @@ void SystemTrayApplet::updateClockGeometry() if (m_clockApplet) { m_clockApplet->setPosition(position()); - if (orientation() == TQt::Horizontal) - { - m_clockApplet->setFixedSize(m_clockApplet->widthForHeight(height()),height()); - } - else - { - m_clockApplet->setFixedSize(width(),m_clockApplet->heightForWidth(width())); - } + if (orientation() == TQt::Horizontal) + { + m_clockApplet->setFixedSize(m_clockApplet->widthForHeight(height()),height()); + } + else + { + m_clockApplet->setFixedSize(width(),m_clockApplet->heightForWidth(width())); + } } } @@ -151,10 +157,10 @@ void SystemTrayApplet::initialize() } // the KWinModule notifies us when tray windows are added or removed - connect( twin_module, TQT_SIGNAL( systemTrayWindowAdded(WId) ), - this, TQT_SLOT( systemTrayWindowAdded(WId) ) ); - connect( twin_module, TQT_SIGNAL( systemTrayWindowRemoved(WId) ), - this, TQT_SLOT( updateTrayWindows() ) ); + connect( twin_module, TQ_SIGNAL( systemTrayWindowAdded(WId) ), + this, TQ_SLOT( systemTrayWindowAdded(WId) ) ); + connect( twin_module, TQ_SIGNAL( systemTrayWindowRemoved(WId) ), + this, TQ_SLOT( updateTrayWindows() ) ); TQCString screenstr; screenstr.setNum(tqt_xscreen()); @@ -190,7 +196,7 @@ void SystemTrayApplet::initialize() XSendEvent (display, root, False, StructureNotifyMask, (XEvent *)&xev); } - + setBackground(); } @@ -249,20 +255,22 @@ void SystemTrayApplet::preferences() KDialogBase::Ok | KDialogBase::Apply | KDialogBase::Cancel, KDialogBase::Ok, true); m_settingsDialog->resize(450, 400); - connect(m_settingsDialog, TQT_SIGNAL(applyClicked()), this, TQT_SLOT(applySettings())); - connect(m_settingsDialog, TQT_SIGNAL(okClicked()), this, TQT_SLOT(applySettings())); - connect(m_settingsDialog, TQT_SIGNAL(finished()), this, TQT_SLOT(settingsDialogFinished())); + connect(m_settingsDialog, TQ_SIGNAL(applyClicked()), this, TQ_SLOT(applySettings())); + connect(m_settingsDialog, TQ_SIGNAL(okClicked()), this, TQ_SLOT(applySettings())); + connect(m_settingsDialog, TQ_SIGNAL(finished()), this, TQ_SLOT(settingsDialogFinished())); - TQGrid *settingsGrid = m_settingsDialog->makeGridMainWidget( 2, TQt::Vertical); + TQWidget *settingsWidget = m_settingsDialog->makeMainWidget(); + TQVBoxLayout *settingsLayout = new TQVBoxLayout(settingsWidget); - m_showClockSettingCB = new TQCheckBox(i18n("Show Clock in Tray"), settingsGrid); + m_showClockSettingCB = new TQCheckBox(i18n("Show clock in tray"), settingsWidget); m_showClockSettingCB->setChecked(m_showClockInTray); + settingsLayout->addWidget(m_showClockSettingCB); + settingsLayout->setSpacing(m_settingsDialog->spacingHint()); - //m_iconSelector = new TDEActionSelector(m_settingsDialog); - m_iconSelector = new TDEActionSelector(settingsGrid); + m_iconSelector = new TDEActionSelector(settingsWidget); m_iconSelector->setAvailableLabel(i18n("Hidden icons:")); m_iconSelector->setSelectedLabel(i18n("Visible icons:")); - //m_settingsDialog->setMainWidget(m_iconSelector); + settingsLayout->addWidget(m_iconSelector); TQListBox *hiddenListBox = m_iconSelector->availableListBox(); TQListBox *shownListBox = m_iconSelector->selectedListBox(); @@ -289,6 +297,38 @@ void SystemTrayApplet::preferences() } } + TQGridLayout *marginGrid = new TQGridLayout(2, 3); + marginGrid->setSpacing(m_settingsDialog->spacingHint()); + marginGrid->setColStretch(2,1); // last empty column operates as a spacer + + TQLabel *iconMarginL = new TQLabel(i18n("Icon &margin:"), settingsWidget); + m_iconMarginSB = new TQSpinBox(0, 20, 1, settingsWidget); + m_iconMarginSB->setSuffix(i18n(" px")); + m_iconMarginSB->setValue(m_iconMargin); + iconMarginL->setBuddy(m_iconMarginSB); + TQWhatsThis::add(iconMarginL, i18n( "Preferred margin between icons in the system tray and outer border.<br>" + "Note that the actual margins can be either larger (in case there is " + "extra free space on the panel) or smaller (in case the panel is " + "not able to fit a single row).") ); + + marginGrid->addWidget(iconMarginL, 0, 0); + marginGrid->addWidget(m_iconMarginSB, 0, 1); + + TQLabel *iconSpacingL = new TQLabel(i18n("Icon &spacing:"), settingsWidget); + m_iconSpacingSB = new TQSpinBox(0, 20, 1, settingsWidget); + m_iconSpacingSB->setSuffix(i18n(" px")); + m_iconSpacingSB->setValue(m_iconSpacing); + iconSpacingL->setBuddy(m_iconSpacingSB); + TQWhatsThis::add(iconSpacingL, i18n( "Minimal spacing between adjacent icons in the system tray.<br>" + "Note that the actual spacing can be larger (in case there is " + "extra free space on the panel).") ); + + + marginGrid->addWidget(iconSpacingL, 1, 0); + marginGrid->addWidget(m_iconSpacingSB, 1, 1); + + settingsLayout->addLayout(marginGrid); + m_settingsDialog->show(); } @@ -307,6 +347,8 @@ void SystemTrayApplet::applySettings() } m_showClockInTray = m_showClockSettingCB->isChecked(); + m_iconMargin = m_iconMarginSB->value(); + m_iconSpacing = m_iconSpacingSB->value(); TDEConfig *conf = config(); @@ -356,6 +398,8 @@ void SystemTrayApplet::applySettings() conf->setGroup("System Tray"); conf->writeEntry("ShowClockInTray", m_showClockInTray); + conf->writeEntry("IconMargin", m_iconMargin); + conf->writeEntry("IconSpacing", m_iconSpacing); conf->sync(); @@ -448,12 +492,12 @@ void SystemTrayApplet::showExpandButton(bool show) .width(), height() - 4); } - connect(m_expandButton, TQT_SIGNAL(clicked()), - this, TQT_SLOT(toggleExpanded())); + connect(m_expandButton, TQ_SIGNAL(clicked()), + this, TQ_SLOT(toggleExpanded())); m_autoRetractTimer = new TQTimer(this, "m_autoRetractTimer"); - connect(m_autoRetractTimer, TQT_SIGNAL(timeout()), - this, TQT_SLOT(checkAutoRetract())); + connect(m_autoRetractTimer, TQ_SIGNAL(timeout()), + this, TQ_SLOT(checkAutoRetract())); } else { @@ -474,21 +518,21 @@ void SystemTrayApplet::orientationChange( Orientation /*orientation*/ ) } void SystemTrayApplet::iconSizeChanged() { - loadSettings(); - updateVisibleWins(); - layoutTray(); - - TrayEmbedList::iterator emb = m_shownWins.begin(); - while (emb != m_shownWins.end()) { - (*emb)->setFixedSize(m_iconSize, m_iconSize); - ++emb; - } - - emb = m_hiddenWins.begin(); - while (emb != m_hiddenWins.end()) { - (*emb)->setFixedSize(m_iconSize, m_iconSize); - ++emb; - } + loadSettings(); + updateVisibleWins(); + layoutTray(); + + TrayEmbedList::iterator emb = m_shownWins.begin(); + while (emb != m_shownWins.end()) { + (*emb)->setFixedSize(m_iconSize, m_iconSize); + ++emb; + } + + emb = m_hiddenWins.begin(); + while (emb != m_hiddenWins.end()) { + (*emb)->setFixedSize(m_iconSize, m_iconSize); + ++emb; + } } void SystemTrayApplet::loadSettings() @@ -501,7 +545,7 @@ void SystemTrayApplet::loadSettings() conf->reparseConfiguration(); conf->setGroup("General"); - if (conf->readBoolEntry("ShowPanelFrame", false) || m_showFrame) // Does ShowPanelFrame even exist? + if (conf->readBoolEntry("ShowPanelFrame", false) || m_showFrame) // Does ShowPanelFrame even exist? { setFrameStyle(Panel | Sunken); } @@ -516,6 +560,8 @@ void SystemTrayApplet::loadSettings() conf->setGroup("System Tray"); m_iconSize = conf->readNumEntry("systrayIconWidth", 22); m_showClockInTray = conf->readNumEntry("ShowClockInTray", false); + m_iconMargin = conf->readNumEntry("IconMargin", 1); + m_iconSpacing = conf->readNumEntry("IconSpacing", 1); } void SystemTrayApplet::systemTrayWindowAdded( WId w ) @@ -559,7 +605,7 @@ void SystemTrayApplet::embedWindow( WId w, bool kde_tray ) return; } - connect(emb, TQT_SIGNAL(embeddedWindowDestroyed()), TQT_SLOT(updateTrayWindows())); + connect(emb, TQ_SIGNAL(embeddedWindowDestroyed()), TQ_SLOT(updateTrayWindows())); emb->setFixedSize(m_iconSize, m_iconSize); if (shouldHide(w)) @@ -627,7 +673,7 @@ void SystemTrayApplet::updateVisibleWins() (*emb)->hide(); } } - + TQMap< QXEmbed*, TQString > names; // cache window names and classes TQMap< QXEmbed*, TQString > classes; for( TrayEmbedList::const_iterator it = m_shownWins.begin(); @@ -682,8 +728,8 @@ void SystemTrayApplet::refreshExpandButton() if (orientation() == TQt::Vertical) a = m_showHidden ? TQt::DownArrow : TQt::UpArrow; else - a = (m_showHidden ^ kapp->reverseLayout()) ? TQt::RightArrow : TQt::LeftArrow; - + a = (m_showHidden ^ tdeApp->reverseLayout()) ? TQt::RightArrow : TQt::LeftArrow; + m_expandButton->setArrowType(a); } @@ -796,7 +842,7 @@ int SystemTrayApplet::maxIconHeight() const int largest = m_iconSize; TrayEmbedList::const_iterator lastEmb = m_shownWins.end(); - for (TrayEmbedList::const_iterator emb = m_shownWins.begin(); emb != m_shownWins.end(); ++emb) + for (TrayEmbedList::const_iterator emb = m_shownWins.begin(); emb != lastEmb; ++emb) { if (*emb == 0) { @@ -838,11 +884,11 @@ bool SystemTrayApplet::eventFilter(TQObject* watched, TQEvent* e) TQPoint p; if (e->type() == TQEvent::ContextMenu) { - p = TQT_TQCONTEXTMENUEVENT(e)->globalPos(); + p = static_cast<TQContextMenuEvent*>(e)->globalPos(); } else if (e->type() == TQEvent::MouseButtonPress) { - TQMouseEvent* me = TQT_TQMOUSEEVENT(e); + TQMouseEvent* me = static_cast<TQMouseEvent*>(e); if (me->button() == TQt::RightButton) { p = me->globalPos(); @@ -853,9 +899,9 @@ bool SystemTrayApplet::eventFilter(TQObject* watched, TQEvent* e) { TQPopupMenu* contextMenu = new TQPopupMenu(this); contextMenu->insertItem(SmallIcon("configure"), i18n("Configure System Tray..."), - this, TQT_SLOT(configure())); + this, TQ_SLOT(configure())); - contextMenu->exec(TQT_TQCONTEXTMENUEVENT(e)->globalPos()); + contextMenu->exec(static_cast<TQContextMenuEvent*>(e)->globalPos()); delete contextMenu; return true; @@ -881,7 +927,7 @@ int SystemTrayApplet::widthForHeight(int h) const me->setFixedHeight(h); } - return sizeHint().width(); + return sizeHint().width(); } int SystemTrayApplet::heightForWidth(int w) const @@ -900,7 +946,7 @@ int SystemTrayApplet::heightForWidth(int w) const me->setFixedWidth(w); } - return sizeHint().height(); + return sizeHint().height(); } void SystemTrayApplet::moveEvent( TQMoveEvent* ) @@ -913,27 +959,15 @@ void SystemTrayApplet::resizeEvent( TQResizeEvent* ) { layoutTray(); // we need to give ourselves a chance to adjust our size before calling this - TQTimer::singleShot(0, this, TQT_SIGNAL(updateLayout())); + TQTimer::singleShot(0, this, TQ_SIGNAL(updateLayout())); } void SystemTrayApplet::layoutTray() { setUpdatesEnabled(false); - int iconCount = m_shownWins.count(); - - if (m_showHidden) - { - iconCount += m_hiddenWins.count(); - } - - /* heightWidth = height or width in pixels (depends on orientation()) - * nbrOfLines = number of rows or cols (depends on orientation()) - * line = what line to draw an icon in */ - int i = 0, line, nbrOfLines, heightWidth; + int i = 0; bool showExpandButton = m_expandButton && m_expandButton->isVisibleTo(this); - delete m_layout; - m_layout = new TQGridLayout(this, 1, 1, ICON_MARGIN, ICON_MARGIN); if (m_expandButton) { @@ -947,41 +981,58 @@ void SystemTrayApplet::layoutTray() } } + // delete and recreate the tray layout from scratch + delete layout(); + + TQBoxLayout *mainLayout; + + if (orientation() == TQt::Vertical) { + mainLayout = new TQVBoxLayout(this); + } else { + mainLayout = new TQHBoxLayout(this); + } + + mainLayout->addWidget(m_leftSpacer); + + if (showExpandButton) { + mainLayout->addWidget(m_expandButton, TQt::AlignHCenter | TQt::AlignVCenter); + } + + TQGridLayout *iconLayout = new TQGridLayout(mainLayout, 1, 1, m_iconSpacing); + iconLayout->setMargin(m_iconMargin); + + mainLayout->addWidget(m_rightSpacer); + + if (m_clockApplet) { + mainLayout->addWidget(m_clockApplet); + } + // col = column or row, depends on orientation(), // the opposite direction of line int col = 0; - // - // The margin and spacing specified in the layout implies that: - // [-- ICON_MARGIN pixels --] [-- first icon --] [-- ICON_MARGIN pixels --] ... [-- ICON_MARGIN pixels --] [-- last icon --] [-- ICON_MARGIN pixels --] // - // So, if we say that iconWidth is the icon width plus the ICON_MARGIN pixels spacing, then the available width for the icons - // is the widget width minus ICON_MARGIN pixels margin. Forgetting these ICON_MARGIN pixels broke the layout algorithm in KDE <= 3.5.9. + // The margin and spacing specified in the layout implies that it looks like: + // + // [-- m_iconMargin px --] [-- first icon --] [-- m_iconSpacing px --] ... [-- m_iconSpacing px --] [-- last icon --] [-- m_iconMargin px --] + // + // So, the panel size with this layout should conform to the relation: // - // This fix makes the workarounds in the heightForWidth() and widthForHeight() methods unneeded. + // panelSize == iconSize*nbrOfLines + 2*m_iconMargin + (nbrOfLines-1)*m_iconSpacing. // + // Solving it for number of lines we get: + // + // panelSize - 2*m_iconMargin + m_iconSpacing + // nbrOfLines = -------------------------------------------- + // iconSize + m_iconSpacing if (orientation() == TQt::Vertical) { - int iconWidth = maxIconWidth() + ICON_MARGIN; // +2 for the margins that implied by the layout - heightWidth = width() - ICON_MARGIN; - // to avoid nbrOfLines=0 we ensure heightWidth >= iconWidth! - heightWidth = heightWidth < iconWidth ? iconWidth : heightWidth; - nbrOfLines = heightWidth / iconWidth; - - m_layout->addMultiCellWidget(m_leftSpacer, - 0, 0, - 0, nbrOfLines - 1, - TQt::AlignHCenter | TQt::AlignVCenter); - col = 1; - - if (showExpandButton) - { - m_layout->addMultiCellWidget(m_expandButton, - 1, 1, - 0, nbrOfLines - 1, - TQt::AlignHCenter | TQt::AlignVCenter); - col = 2; + int nbrOfLines = (width() - 2*m_iconMargin + m_iconSpacing) / + (maxIconWidth() + m_iconSpacing); + if (nbrOfLines < 1) { + nbrOfLines = 1; // avoid nbrOfLines==0 or negative (in case m_iconMargin is unreasonably large) + iconLayout->setMargin( (width() - maxIconWidth()) / 2); // also adjust the margins, so the icons won't get shifted beyond visibility } if (m_showHidden) @@ -990,9 +1041,9 @@ void SystemTrayApplet::layoutTray() for (TrayEmbedList::const_iterator emb = m_hiddenWins.begin(); emb != lastEmb; ++emb) { - line = i % nbrOfLines; + int line = i % nbrOfLines; (*emb)->show(); - m_layout->addWidget((*emb), col, line, + iconLayout->addWidget((*emb), col, line, TQt::AlignHCenter | TQt::AlignVCenter); if ((line + 1) == nbrOfLines) @@ -1008,9 +1059,9 @@ void SystemTrayApplet::layoutTray() for (TrayEmbedList::const_iterator emb = m_shownWins.begin(); emb != lastEmb; ++emb) { - line = i % nbrOfLines; + int line = i % nbrOfLines; (*emb)->show(); - m_layout->addWidget((*emb), col, line, + iconLayout->addWidget((*emb), col, line, TQt::AlignHCenter | TQt::AlignVCenter); if ((line + 1) == nbrOfLines) @@ -1021,43 +1072,14 @@ void SystemTrayApplet::layoutTray() ++i; } - m_layout->addMultiCellWidget(m_rightSpacer, - col, col, - 0, nbrOfLines - 1, - TQt::AlignHCenter | TQt::AlignVCenter); - - if (m_clockApplet) { - if (m_showClockInTray) - m_clockApplet->show(); - else - m_clockApplet->hide(); - - m_layout->addMultiCellWidget(m_clockApplet, - col+1, col+1, - 0, nbrOfLines - 1, - TQt::AlignHCenter | TQt::AlignVCenter); - } } else // horizontal { - int iconHeight = maxIconHeight() + ICON_MARGIN; // +2 for the margins that implied by the layout - heightWidth = height() - ICON_MARGIN; - heightWidth = heightWidth < iconHeight ? iconHeight : heightWidth; // to avoid nbrOfLines=0 - nbrOfLines = heightWidth / iconHeight; - - m_layout->addMultiCellWidget(m_leftSpacer, - 0, nbrOfLines - 1, - 0, 0, - TQt::AlignHCenter | TQt::AlignVCenter); - col = 1; - - if (showExpandButton) - { - m_layout->addMultiCellWidget(m_expandButton, - 0, nbrOfLines - 1, - 1, 1, - TQt::AlignHCenter | TQt::AlignVCenter); - col = 2; + int nbrOfLines = (height() - 2*m_iconMargin + m_iconSpacing) / + (maxIconHeight() + m_iconSpacing); + if (nbrOfLines < 1) { + nbrOfLines = 1; // avoid nbrOfLines==0 or negative (in case m_iconMargin is unreasonably large) + iconLayout->setMargin( (height() - maxIconHeight()) / 2); // also adjust the margins, so the icons won't shift beyond viability } if (m_showHidden) @@ -1065,9 +1087,9 @@ void SystemTrayApplet::layoutTray() TrayEmbedList::const_iterator lastEmb = m_hiddenWins.end(); for (TrayEmbedList::const_iterator emb = m_hiddenWins.begin(); emb != lastEmb; ++emb) { - line = i % nbrOfLines; + int line = i % nbrOfLines; (*emb)->show(); - m_layout->addWidget((*emb), line, col, + iconLayout->addWidget((*emb), line, col, TQt::AlignHCenter | TQt::AlignVCenter); if ((line + 1) == nbrOfLines) @@ -1083,9 +1105,9 @@ void SystemTrayApplet::layoutTray() for (TrayEmbedList::const_iterator emb = m_shownWins.begin(); emb != lastEmb; ++emb) { - line = i % nbrOfLines; + int line = i % nbrOfLines; (*emb)->show(); - m_layout->addWidget((*emb), line, col, + iconLayout->addWidget((*emb), line, col, TQt::AlignHCenter | TQt::AlignVCenter); if ((line + 1) == nbrOfLines) @@ -1095,23 +1117,13 @@ void SystemTrayApplet::layoutTray() ++i; } + } - m_layout->addMultiCellWidget(m_rightSpacer, - 0, nbrOfLines - 1, - col, col, - TQt::AlignHCenter | TQt::AlignVCenter); - - if (m_clockApplet) { - if (m_showClockInTray) - m_clockApplet->show(); - else - m_clockApplet->hide(); - - m_layout->addMultiCellWidget(m_clockApplet, - 0, nbrOfLines - 1, - col+1, col+1, - TQt::AlignHCenter | TQt::AlignVCenter); - } + if (m_clockApplet) { + if (m_showClockInTray) + m_clockApplet->show(); + else + m_clockApplet->hide(); } setUpdatesEnabled(true); @@ -1119,6 +1131,8 @@ void SystemTrayApplet::layoutTray() setBackground(); updateClockGeometry(); + + update(); } void SystemTrayApplet::paletteChange(const TQPalette & /* oldPalette */) @@ -1129,11 +1143,11 @@ void SystemTrayApplet::paletteChange(const TQPalette & /* oldPalette */) void SystemTrayApplet::setBackground() { TrayEmbedList::const_iterator lastEmb; - + lastEmb = m_shownWins.end(); for (TrayEmbedList::const_iterator emb = m_shownWins.begin(); emb != lastEmb; ++emb) (*emb)->setBackground(); - + lastEmb = m_hiddenWins.end(); for (TrayEmbedList::const_iterator emb = m_hiddenWins.begin(); emb != lastEmb; ++emb) (*emb)->setBackground(); @@ -1176,43 +1190,43 @@ void TrayEmbed::setBackground() void TrayEmbed::ensureBackgroundSet() { - XWindowAttributes winprops; - XGetWindowAttributes(x11Display(), embeddedWinId(), &winprops); - if (winprops.depth == 32) { - // This is a nasty little hack to make sure that tray icons / applications which do not match our QXEmbed native depth are still displayed properly, - // i.e without irritating white/grey borders where the tray icon's transparency is supposed to be... - // Essentially it converts a 24 bit Xlib Pixmap to a 32 bit Xlib Pixmap - - TQPixmap bg(width(), height()); - - // Get the RGB background image - bg.fill(parentWidget(), pos()); - TQImage bgImage = bg.convertToImage(); - - // Create the ARGB pixmap - Pixmap argbpixmap = XCreatePixmap(x11Display(), embeddedWinId(), width(), height(), 32); - GC gc; - gc = XCreateGC(x11Display(), embeddedWinId(), 0, 0); - int w = bgImage.width(); - int h = bgImage.height(); - for (int y = 0; y < h; ++y) { - TQRgb *ls = (TQRgb *)bgImage.scanLine( y ); - for (int x = 0; x < w; ++x) { - TQRgb l = ls[x]; - int r = int( tqRed( l ) ); - int g = int( tqGreen( l ) ); - int b = int( tqBlue( l ) ); - int a = int( tqAlpha( l ) ); - XSetForeground(x11Display(), gc, (a << 24) | (r << 16) | (g << 8) | b ); - XDrawPoint(x11Display(), argbpixmap, gc, x, y); - } - } - XFlush(x11Display()); - XSetWindowBackgroundPixmap(x11Display(), embeddedWinId(), argbpixmap); - XFreePixmap(x11Display(), argbpixmap); - XFreeGC(x11Display(), gc); - - // Repaint - XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); - } + XWindowAttributes winprops; + XGetWindowAttributes(x11Display(), embeddedWinId(), &winprops); + if (winprops.depth == 32) { + // This is a nasty little hack to make sure that tray icons / applications which do not match our QXEmbed native depth are still displayed properly, + // i.e without irritating white/grey borders where the tray icon's transparency is supposed to be... + // Essentially it converts a 24 bit Xlib Pixmap to a 32 bit Xlib Pixmap + + TQPixmap bg(width(), height()); + + // Get the RGB background image + bg.fill(parentWidget(), pos()); + TQImage bgImage = bg.convertToImage(); + + // Create the ARGB pixmap + Pixmap argbpixmap = XCreatePixmap(x11Display(), embeddedWinId(), width(), height(), 32); + GC gc; + gc = XCreateGC(x11Display(), embeddedWinId(), 0, 0); + int w = bgImage.width(); + int h = bgImage.height(); + for (int y = 0; y < h; ++y) { + TQRgb *ls = (TQRgb *)bgImage.scanLine( y ); + for (int x = 0; x < w; ++x) { + TQRgb l = ls[x]; + int r = int( tqRed( l ) ); + int g = int( tqGreen( l ) ); + int b = int( tqBlue( l ) ); + int a = int( tqAlpha( l ) ); + XSetForeground(x11Display(), gc, (a << 24) | (r << 16) | (g << 8) | b ); + XDrawPoint(x11Display(), argbpixmap, gc, x, y); + } + } + XFlush(x11Display()); + XSetWindowBackgroundPixmap(x11Display(), embeddedWinId(), argbpixmap); + XFreePixmap(x11Display(), argbpixmap); + XFreeGC(x11Display(), gc); + + // Repaint + XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); + } } diff --git a/kicker/applets/systemtray/systemtrayapplet.h b/kicker/applets/systemtray/systemtrayapplet.h index 2b49ce93e..26a02de1c 100644 --- a/kicker/applets/systemtray/systemtrayapplet.h +++ b/kicker/applets/systemtray/systemtrayapplet.h @@ -27,8 +27,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include <tqvaluevector.h> #include <tqstringlist.h> #include <tqevent.h> -#include <tqlayout.h> -#include <tqcheckbox.h> #include <qxembed.h> #include <dcopobject.h> @@ -40,6 +38,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "simplebutton.h" class TQGridLayout; +class TQSpinBox; +class TQCheckBox; class TQTimer; class KWinModule; class TrayEmbed; @@ -120,7 +120,11 @@ private: int m_iconSize; bool m_showClockInTray; TQCheckBox *m_showClockSettingCB; - TQGridLayout* m_layout; + int m_iconMargin; + TQSpinBox *m_iconMarginSB; + int m_iconSpacing; + TQSpinBox *m_iconSpacingSB; + TQLayout* m_layout; }; class TrayEmbed : public QXEmbed |
