diff options
Diffstat (limited to 'kicker/applets/systemtray')
| -rw-r--r-- | kicker/applets/systemtray/systemtrayapplet.cpp | 458 | ||||
| -rw-r--r-- | kicker/applets/systemtray/systemtrayapplet.h | 14 | 
2 files changed, 245 insertions, 227 deletions
| diff --git a/kicker/applets/systemtray/systemtrayapplet.cpp b/kicker/applets/systemtray/systemtrayapplet.cpp index 97b71d1b2..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() == Qt::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, Qt::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(); @@ -432,11 +476,11 @@ void SystemTrayApplet::showExpandButton(bool show)      {          if (!m_expandButton)          { -            m_expandButton = new SimpleArrowButton(this, Qt::UpArrow, 0, KickerSettings::showDeepButtons()); +            m_expandButton = new SimpleArrowButton(this, TQt::UpArrow, 0, KickerSettings::showDeepButtons());              m_expandButton->installEventFilter(this);              refreshExpandButton(); -            if (orientation() == Qt::Vertical) +            if (orientation() == TQt::Vertical)              {                  m_expandButton->setFixedSize(width() - 4,                                               m_expandButton->sizeHint() @@ -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(); @@ -677,13 +723,13 @@ void SystemTrayApplet::refreshExpandButton()          return;      } -    Qt::ArrowType a; +    TQt::ArrowType a; -    if (orientation() == Qt::Vertical) -        a = m_showHidden ? Qt::DownArrow : Qt::UpArrow; +    if (orientation() == TQt::Vertical) +        a = m_showHidden ? TQt::DownArrow : TQt::UpArrow;      else -        a = (m_showHidden ^ kapp->reverseLayout()) ? Qt::RightArrow : Qt::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)          { @@ -833,17 +879,17 @@ int SystemTrayApplet::maxIconHeight() const  bool SystemTrayApplet::eventFilter(TQObject* watched, TQEvent* e)  { -    if (TQT_BASE_OBJECT(watched) == TQT_BASE_OBJECT(m_expandButton)) +    if (watched == m_expandButton)      {          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); -            if (me->button() == Qt::RightButton) +            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; @@ -867,7 +913,7 @@ bool SystemTrayApplet::eventFilter(TQObject* watched, TQEvent* e)  int SystemTrayApplet::widthForHeight(int h) const  { -    if (orientation() == Qt::Vertical) +    if (orientation() == TQt::Vertical)      {          return width();      } @@ -881,12 +927,12 @@ int SystemTrayApplet::widthForHeight(int h) const          me->setFixedHeight(h);      } -    return sizeHint().width();  +    return sizeHint().width();  }  int SystemTrayApplet::heightForWidth(int w) const  { -    if (orientation() == Qt::Horizontal) +    if (orientation() == TQt::Horizontal)      {          return height();      } @@ -900,7 +946,7 @@ int SystemTrayApplet::heightForWidth(int w) const          me->setFixedWidth(w);      } -    return sizeHint().height();  +    return sizeHint().height();  }  void SystemTrayApplet::moveEvent( TQMoveEvent* ) @@ -913,31 +959,19 @@ 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)      { -        if (orientation() == Qt::Vertical) +        if (orientation() == TQt::Vertical)          {              m_expandButton->setFixedSize(width() - 4, m_expandButton->sizeHint().height());          } @@ -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() == Qt::Vertical) +    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, -                                     Qt::AlignHCenter | Qt::AlignVCenter); -        col = 1; - -        if (showExpandButton) -        { -            m_layout->addMultiCellWidget(m_expandButton, -                                         1, 1, -                                         0, nbrOfLines - 1, -                                         Qt::AlignHCenter | Qt::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,10 +1041,10 @@ 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, -                                    Qt::AlignHCenter | Qt::AlignVCenter); +                iconLayout->addWidget((*emb), col, line, +                                    TQt::AlignHCenter | TQt::AlignVCenter);                  if ((line + 1) == nbrOfLines)                  { @@ -1008,10 +1059,10 @@ 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, -                                Qt::AlignHCenter | Qt::AlignVCenter); +            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, -                                     Qt::AlignHCenter | Qt::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, -                                     Qt::AlignHCenter | Qt::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, -                                     Qt::AlignHCenter | Qt::AlignVCenter); -        col = 1; - -        if (showExpandButton) -        { -            m_layout->addMultiCellWidget(m_expandButton, -                                         0, nbrOfLines - 1, -                                         1, 1, -                                         Qt::AlignHCenter | Qt::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,10 +1087,10 @@ 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, -                                    Qt::AlignHCenter | Qt::AlignVCenter); +                iconLayout->addWidget((*emb), line, col, +                                    TQt::AlignHCenter | TQt::AlignVCenter);                  if ((line + 1) == nbrOfLines)                  { @@ -1083,10 +1105,10 @@ 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, -                                Qt::AlignHCenter | Qt::AlignVCenter); +            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, -                                     Qt::AlignHCenter | Qt::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, -                                         Qt::AlignHCenter | Qt::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 e311a1bdd..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; @@ -48,7 +48,7 @@ class TDEActionSelector;  class SystemTrayApplet : public KPanelApplet, public DCOPObject  { -    Q_OBJECT +    TQ_OBJECT      K_DCOP      typedef TQValueVector<TrayEmbed*> TrayEmbedList; @@ -120,12 +120,16 @@ 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  { -    Q_OBJECT +    TQ_OBJECT  public:      TrayEmbed( bool kdeTray, TQWidget* parent = NULL );      ~TrayEmbed(); | 
