package: kdebase-3.5.10.tar.bz2 kdemod: kdebase Index: BRANCH_STATUS =================================================================== --- /dev/null +++ BRANCH_STATUS @@ -0,0 +1,2 @@ +current HEAD: 865247 +svn di between //tags/KDE/3.5.10/kdebase and //branches/KDE/3.5/kdebase Index: kcontrol/background/bgrender.cpp =================================================================== --- kcontrol/background/bgrender.cpp.orig +++ kcontrol/background/bgrender.cpp @@ -1163,9 +1163,8 @@ void KVirtualBGRenderer::desktopResized( m_pPixmap = new QPixmap(m_size); m_pPixmap->fill(Qt::black); } - - for (unsigned i=0; idesktopResized(); + + initRenderers(); } Index: kcontrol/info/opengl.cpp =================================================================== --- kcontrol/info/opengl.cpp.orig +++ kcontrol/info/opengl.cpp @@ -608,7 +608,6 @@ static QListViewItem *get_gl_info(Displa } else { kdDebug() << "Error: glXMakeCurrent failed\n"; - glXDestroyContext(dpy, ctx); } glXDestroyContext(dpy, ctx); Index: kicker/taskbar/taskbar.cpp =================================================================== --- kicker/taskbar/taskbar.cpp.orig +++ kicker/taskbar/taskbar.cpp @@ -61,8 +61,6 @@ TaskBar::TaskBar( QWidget *parent, const m_textShadowEngine(0), m_ignoreUpdates(false) { - setFrameStyle( NoFrame ); - arrowType = LeftArrow; blocklayout = true; @@ -81,6 +79,8 @@ TaskBar::TaskBar( QWidget *parent, const connect(&m_relayoutTimer, SIGNAL(timeout()), this, SLOT(reLayout())); + connect(this, SIGNAL(contentsMoving(int, int)), SLOT(setBackground())); + // connect manager connect(TaskManager::the(), SIGNAL(taskAdded(Task::Ptr)), this, SLOT(add(Task::Ptr))); @@ -647,7 +647,7 @@ void TaskBar::reLayoutEventually() if (!blocklayout && !m_ignoreUpdates) { - m_relayoutTimer.start(100, true); + m_relayoutTimer.start(25, true); } } @@ -814,24 +814,16 @@ void TaskBar::reLayout() QTimer::singleShot(100, this, SLOT(publishIconGeometry())); } -void TaskBar::viewportResizeEvent( QResizeEvent* e ) -{ - Panner::viewportResizeEvent(e); - setViewportBackground(); -} - void TaskBar::setViewportBackground() { const QPixmap *bg = parentWidget()->backgroundPixmap(); - viewport()->unsetPalette(); - if (bg) { QPixmap pm(parentWidget()->size()); pm.fill(parentWidget(), pos() + viewport()->pos()); viewport()->setPaletteBackgroundPixmap(pm); - viewport()->setBackgroundOrigin( WidgetOrigin ); + viewport()->setBackgroundOrigin(WidgetOrigin); } else viewport()->setPaletteBackgroundColor(paletteBackgroundColor()); Index: kicker/taskbar/taskbar.h =================================================================== --- kicker/taskbar/taskbar.h.orig +++ kicker/taskbar/taskbar.h @@ -63,12 +63,11 @@ public: QImage* blendGradient(const QSize& size); - void setBackground(); - KTextShadowEngine *textShadowEngine(); public slots: void configure(); + void setBackground(); signals: void containerCountChanged(); @@ -98,7 +97,6 @@ protected: void viewportMouseReleaseEvent( QMouseEvent* ); void viewportMouseDoubleClickEvent( QMouseEvent* ); void viewportMouseMoveEvent( QMouseEvent* ); - void viewportResizeEvent( QResizeEvent * ); void wheelEvent(QWheelEvent*); void propagateMouseEvent( QMouseEvent* ); void resizeEvent( QResizeEvent* ); Index: kicker/libkicker/panner.cpp =================================================================== --- kicker/libkicker/panner.cpp.orig +++ kicker/libkicker/panner.cpp @@ -35,28 +35,28 @@ CONNECTION WITH THE SOFTWARE OR THE USE #include "panner.h" #include "panner.moc" - Panner::Panner( QWidget* parent, const char* name ) - : QScrollView( parent, name ), + : QWidget( parent, name ), _luSB(0), - _rdSB(0) + _rdSB(0), + _cwidth(0), _cheight(0), + _cx(0), _cy(0) { KGlobal::locale()->insertCatalogue("libkicker"); setBackgroundOrigin( AncestorOrigin ); _updateScrollButtonsTimer = new QTimer(this); connect(_updateScrollButtonsTimer, SIGNAL(timeout()), this, SLOT(reallyUpdateScrollButtons())); - - setResizePolicy(Manual); - setVScrollBarMode( QScrollView::AlwaysOff ); - setHScrollBarMode( QScrollView::AlwaysOff ); - - viewport()->setBackgroundMode( PaletteBackground ); - viewport()->setBackgroundOrigin( AncestorOrigin ); + _clipper = new QWidget(this); + _clipper->setBackgroundOrigin(AncestorOrigin); + _clipper->installEventFilter( this ); + _viewport = new QWidget(_clipper); + _viewport->setBackgroundOrigin(AncestorOrigin); + // layout _layout = new QBoxLayout(this, QBoxLayout::LeftToRight); - _layout->addWidget(viewport(), 1); + _layout->addWidget(_clipper, 1); setOrientation(Horizontal); } @@ -64,6 +64,37 @@ Panner::~Panner() { } +void Panner::createScrollButtons() +{ + if (_luSB) + { + return; + } + + // left/up scroll button + _luSB = new SimpleArrowButton(this); + _luSB->installEventFilter(this); + //_luSB->setAutoRepeat(true); + _luSB->setMinimumSize(12, 12); + _luSB->hide(); + _layout->addWidget(_luSB); + connect(_luSB, SIGNAL(pressed()), SLOT(startScrollLeftUp())); + connect(_luSB, SIGNAL(released()), SLOT(stopScroll())); + + // right/down scroll button + _rdSB = new SimpleArrowButton(this); + _rdSB->installEventFilter(this); + //_rdSB->setAutoRepeat(true); + _rdSB->setMinimumSize(12, 12); + _rdSB->hide(); + _layout->addWidget(_rdSB); + connect(_rdSB, SIGNAL(pressed()), SLOT(startScrollRightDown())); + connect(_rdSB, SIGNAL(released()), SLOT(stopScroll())); + + // set up the buttons + setupButtons(); +} + void Panner::setupButtons() { if (orientation() == Horizontal) @@ -110,55 +141,54 @@ void Panner::setOrientation(Orientation reallyUpdateScrollButtons(); } -void Panner::resizeEvent( QResizeEvent* e ) +void Panner::resizeEvent( QResizeEvent* ) { - QScrollView::resizeEvent( e ); - updateScrollButtons(); + //QScrollView::resizeEvent( e ); + //updateScrollButtons(); } void Panner::scrollRightDown() { if(orientation() == Horizontal) // scroll right - scrollBy( 40, 0 ); + scrollBy( _step, 0 ); else // scroll down - scrollBy( 0, 40 ); + scrollBy( 0, _step ); + if (_step < 64) + _step++; } void Panner::scrollLeftUp() { if(orientation() == Horizontal) // scroll left - scrollBy( -40, 0 ); + scrollBy( -_step, 0 ); else // scroll up - scrollBy( 0, -40 ); + scrollBy( 0, -_step ); + if (_step < 64) + _step++; } -void Panner::createScrollButtons() +void Panner::startScrollRightDown() { - if (_luSB) - { - return; - } - - // left/up scroll button - _luSB = new SimpleArrowButton(this); - _luSB->installEventFilter(this); - _luSB->setAutoRepeat(true); - _luSB->setMinimumSize(12, 12); - _luSB->hide(); - _layout->addWidget(_luSB); - connect(_luSB, SIGNAL(clicked()), SLOT(scrollLeftUp())); + _scrollTimer = new QTimer(this); + connect(_scrollTimer, SIGNAL(timeout()), SLOT(scrollRightDown())); + _scrollTimer->start(50); + _step = 8; + scrollRightDown(); +} - // right/down scroll button - _rdSB = new SimpleArrowButton(this); - _rdSB->installEventFilter(this); - _rdSB->setAutoRepeat(true); - _rdSB->setMinimumSize(12, 12); - _rdSB->hide(); - _layout->addWidget(_rdSB); - connect(_rdSB, SIGNAL(clicked()), SLOT(scrollRightDown())); +void Panner::startScrollLeftUp() +{ + _scrollTimer = new QTimer(this); + connect(_scrollTimer, SIGNAL(timeout()), SLOT(scrollLeftUp())); + _scrollTimer->start(50); + _step = 8; + scrollLeftUp(); +} - // set up the buttons - setupButtons(); +void Panner::stopScroll() +{ + delete _scrollTimer; + _scrollTimer = 0; } void Panner::reallyUpdateScrollButtons() @@ -176,7 +206,7 @@ void Panner::reallyUpdateScrollButtons() delta = contentsHeight() - height(); } - if (delta > 1) + if (delta >= 1) { createScrollButtons(); @@ -184,21 +214,11 @@ void Panner::reallyUpdateScrollButtons() // we need to do this every single time _luSB->show(); _rdSB->show(); - - if (orientation() == Horizontal) - { - setMargins(0, 0, _luSB->width() + _rdSB->width(), 0); - } - else - { - setMargins(0, 0, 0, _luSB->height() + _rdSB->height()); - } } else if (_luSB && _luSB->isVisibleTo(this)) { _luSB->hide(); _rdSB->hide(); - setMargins(0, 0, 0, 0); } } @@ -207,8 +227,170 @@ void Panner::updateScrollButtons() _updateScrollButtonsTimer->start(200, true); } +void Panner::setContentsPos(int x, int y) +{ + if (x < 0) + x = 0; + else if (x > (contentsWidth() - visibleWidth())) + x = contentsWidth() - visibleWidth(); + + if (y < 0) + y = 0; + else if (y > (contentsHeight() - visibleHeight())) + y = contentsHeight() - visibleHeight(); + + if (x == contentsX() && y == contentsY()) + return; + + _viewport->move(-x, -y); + emit contentsMoving(x, y); +} + +void Panner::scrollBy(int dx, int dy) +{ + setContentsPos(contentsX() + dx, contentsY() + dy); +} + void Panner::resizeContents( int w, int h ) { - QScrollView::resizeContents( w, h ); + _viewport->resize(w, h); + setContentsPos(contentsX(), contentsY()); updateScrollButtons(); } + +QPoint Panner::contentsToViewport( const QPoint& p ) const +{ + return QPoint(p.x() - contentsX() - _clipper->x(), p.y() - contentsY() - _clipper->y()); +} + +QPoint Panner::viewportToContents( const QPoint& vp ) const +{ + return QPoint(vp.x() + contentsX() + _clipper->x(), vp.y() + contentsY() + _clipper->y()); +} + +void Panner::contentsToViewport( int x, int y, int& vx, int& vy ) const +{ + const QPoint v = contentsToViewport(QPoint(x,y)); + vx = v.x(); + vy = v.y(); +} + +void Panner::viewportToContents( int vx, int vy, int& x, int& y ) const +{ + const QPoint c = viewportToContents(QPoint(vx,vy)); + x = c.x(); + y = c.y(); +} + +void Panner::ensureVisible( int x, int y ) +{ + ensureVisible(x, y, 50, 50); +} + +void Panner::ensureVisible( int x, int y, int xmargin, int ymargin ) +{ + int pw=visibleWidth(); + int ph=visibleHeight(); + + int cx=-contentsX(); + int cy=-contentsY(); + int cw=contentsWidth(); + int ch=contentsHeight(); + + if ( pw < xmargin*2 ) + xmargin=pw/2; + if ( ph < ymargin*2 ) + ymargin=ph/2; + + if ( cw <= pw ) { + xmargin=0; + cx=0; + } + if ( ch <= ph ) { + ymargin=0; + cy=0; + } + + if ( x < -cx+xmargin ) + cx = -x+xmargin; + else if ( x >= -cx+pw-xmargin ) + cx = -x+pw-xmargin; + + if ( y < -cy+ymargin ) + cy = -y+ymargin; + else if ( y >= -cy+ph-ymargin ) + cy = -y+ph-ymargin; + + if ( cx > 0 ) + cx=0; + else if ( cx < pw-cw && cw>pw ) + cx=pw-cw; + + if ( cy > 0 ) + cy=0; + else if ( cy < ph-ch && ch>ph ) + cy=ph-ch; + + setContentsPos( -cx, -cy ); +} + +bool Panner::eventFilter( QObject *obj, QEvent *e ) +{ + if ( obj == _viewport || obj == _clipper ) + { + switch ( e->type() ) + { + case QEvent::Resize: + viewportResizeEvent((QResizeEvent *)e); + break; + case QEvent::MouseButtonPress: + viewportMousePressEvent( (QMouseEvent*)e ); + if ( ((QMouseEvent*)e)->isAccepted() ) + return true; + break; + case QEvent::MouseButtonRelease: + viewportMouseReleaseEvent( (QMouseEvent*)e ); + if ( ((QMouseEvent*)e)->isAccepted() ) + return true; + break; + case QEvent::MouseButtonDblClick: + viewportMouseDoubleClickEvent( (QMouseEvent*)e ); + if ( ((QMouseEvent*)e)->isAccepted() ) + return true; + break; + case QEvent::MouseMove: + viewportMouseMoveEvent( (QMouseEvent*)e ); + if ( ((QMouseEvent*)e)->isAccepted() ) + return true; + break; + default: + break; + } + } + + return QWidget::eventFilter( obj, e ); // always continue with standard event processing +} + +void Panner::viewportResizeEvent( QResizeEvent* ) +{ +} + +void Panner::viewportMousePressEvent( QMouseEvent* e) +{ + e->ignore(); +} + +void Panner::viewportMouseReleaseEvent( QMouseEvent* e ) +{ + e->ignore(); +} + +void Panner::viewportMouseDoubleClickEvent( QMouseEvent* e ) +{ + e->ignore(); +} + +void Panner::viewportMouseMoveEvent( QMouseEvent* e ) +{ + e->ignore(); +} Index: kicker/libkicker/panner.h =================================================================== --- kicker/libkicker/panner.h.orig +++ kicker/libkicker/panner.h @@ -24,14 +24,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE #ifndef __panner_h__ #define __panner_h__ -#include +#include #include "simplebutton.h" class QBoxLayout; class QTimer; -class KDE_EXPORT Panner : public QScrollView +class KDE_EXPORT Panner : public QWidget { Q_OBJECT @@ -43,17 +43,55 @@ public: Qt::Orientation orientation() const { return _orient; } virtual void setOrientation(Orientation orientation); + + QWidget *viewport() const { return _viewport; } + + QRect contentsRect() const { return QRect(0, 0, width(), height()); } + + int contentsX() const { return _viewport ? -_viewport->x() : 0; } + int contentsY() const { return _viewport ? -_viewport->y() : 0; } + int contentsWidth() const { return _viewport ? _viewport->width() : 0; } + int contentsHeight() const { return _viewport ? _viewport->height() : 0; } + void setContentsPos(int x, int y); + + int visibleWidth() const { return _clipper->width(); } + int visibleHeight() const { return _clipper->height(); } + + void contentsToViewport( int x, int y, int& vx, int& vy ) const; + void viewportToContents( int vx, int vy, int& x, int& y ) const; + QPoint contentsToViewport( const QPoint& ) const; + QPoint viewportToContents( const QPoint& ) const; + + void addChild(QWidget *child) { child->show(); } + void removeChild(QWidget *child) { child->hide(); } + int childX(QWidget *child) const { return child->x(); } + int childY(QWidget *child) const { return child->y(); } + void moveChild(QWidget *child, int x, int y) { child->move(x, y); } + + void ensureVisible( int x, int y ); + void ensureVisible( int x, int y, int xmargin, int ymargin ); public slots: virtual void resizeContents( int w, int h ); + void startScrollRightDown(); + void startScrollLeftUp(); + void stopScroll(); void scrollRightDown(); void scrollLeftUp(); void reallyUpdateScrollButtons(); + void scrollBy(int dx, int dy); + +signals: + void contentsMoving(int x, int y); protected: - void resizeEvent(QResizeEvent *ev); - void contentsWheelEvent(QWheelEvent *){;} - void viewportWheelEvent(QWheelEvent *){;} + virtual bool eventFilter( QObject *obj, QEvent *e ); + virtual void resizeEvent(QResizeEvent *ev); + virtual void viewportResizeEvent( QResizeEvent* ); + virtual void viewportMousePressEvent( QMouseEvent* ); + virtual void viewportMouseReleaseEvent( QMouseEvent* ); + virtual void viewportMouseDoubleClickEvent( QMouseEvent* ); + virtual void viewportMouseMoveEvent( QMouseEvent* ); private: void setupButtons(); @@ -65,6 +103,13 @@ private: SimpleArrowButton *_luSB; // Left Scroll Button SimpleArrowButton *_rdSB; // Right Scroll Button QTimer *_updateScrollButtonsTimer; + QTimer *_scrollTimer; + + QWidget *_clipper; + QWidget *_viewport; + int _cwidth, _cheight; + int _cx, _cy; + int _step; }; #endif Index: kicker/extensions/taskbar/taskbarextension.cpp =================================================================== --- kicker/extensions/taskbar/taskbarextension.cpp.orig +++ kicker/extensions/taskbar/taskbarextension.cpp @@ -170,7 +170,6 @@ void TaskBarExtension::setBackgroundThem } unsetPalette(); - m_container->unsetPalette(); if (KickerSettings::useBackgroundTheme()) { @@ -215,17 +214,17 @@ void TaskBarExtension::setBackgroundThem KickerLib::colorize(bgImage); } setPaletteBackgroundPixmap(bgImage); - m_container->setPaletteBackgroundPixmap(bgImage); } } + + m_container->setBackground(); } void TaskBarExtension::updateBackground(const QPixmap& bgImage) { unsetPalette(); setPaletteBackgroundPixmap(bgImage); - m_container->unsetPalette(); - m_container->setPaletteBackgroundPixmap(bgImage); + m_container->setBackground(); } void TaskBarExtension::resizeEvent(QResizeEvent *e) Index: kicker/kicker/core/container_extension.cpp =================================================================== --- kicker/kicker/core/container_extension.cpp.orig +++ kicker/kicker/core/container_extension.cpp @@ -126,6 +126,7 @@ void ExtensionContainer::init() connect(Kicker::the()->kwinModule(), SIGNAL(currentDesktopChanged(int)), this, SLOT( currentDesktopChanged(int))); + setBackgroundOrigin(AncestorOrigin); setFrameStyle(NoFrame); setLineWidth(0); setMargin(0); @@ -163,7 +164,7 @@ void ExtensionContainer::init() { _userHidden = static_cast(tmp); } - + if (m_extension) { // if we have an extension, we need to grab the extension-specific Index: kicker/kicker/core/containerarea.cpp =================================================================== --- kicker/kicker/core/containerarea.cpp.orig +++ kicker/kicker/core/containerarea.cpp @@ -90,15 +90,12 @@ ContainerArea::ContainerArea(KConfig* _c m_addAppletDialog(0) { setBackgroundOrigin( WidgetOrigin ); - viewport()->setBackgroundOrigin( AncestorOrigin ); - m_contents = new QWidget(viewport()); - m_contents->setBackgroundOrigin(AncestorOrigin); + m_contents = viewport(); m_layout = new ContainerAreaLayout(m_contents); - // Install an event filter to propagate layout hints coming from - // m_contents. + // Install an event filter to propagate layout hints coming from m_contents. m_contents->installEventFilter(this); setBackground(); Index: kicker/kicker/core/panelextension.cpp =================================================================== --- kicker/kicker/core/panelextension.cpp.orig +++ kicker/kicker/core/panelextension.cpp @@ -74,7 +74,6 @@ PanelExtension::PanelExtension(const QSt connect(_containerArea, SIGNAL(maintainFocus(bool)), this, SIGNAL(maintainFocus(bool))); _layout->addWidget(_containerArea); - _containerArea->setFrameStyle(QFrame::NoFrame); _containerArea->viewport()->installEventFilter(this); _containerArea->configure(); Index: kicker/applets/systemtray/systemtrayapplet.h =================================================================== --- kicker/applets/systemtray/systemtrayapplet.h.orig +++ kicker/applets/systemtray/systemtrayapplet.h @@ -118,6 +118,7 @@ public: TrayEmbed( bool kdeTray, QWidget* parent = NULL ); bool kdeTray() const { return kde_tray; } void setBackground(); + void getIconSize(int defaultIconSize); private: bool kde_tray; }; Index: kicker/applets/systemtray/systemtrayapplet.cpp =================================================================== --- kicker/applets/systemtray/systemtrayapplet.cpp.orig +++ kicker/applets/systemtray/systemtrayapplet.cpp @@ -54,6 +54,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE #include +#define ICON_MARGIN 1 + extern "C" { KDE_EXPORT KPanelApplet* init(QWidget *parent, const QString& configFile) @@ -459,9 +461,9 @@ void SystemTrayApplet::embedWindow( WId delete emb; return; } - + connect(emb, SIGNAL(embeddedWindowDestroyed()), SLOT(updateTrayWindows())); - emb->setMinimumSize(m_iconSize, m_iconSize); + emb->getIconSize(m_iconSize); if (shouldHide(w)) { @@ -471,7 +473,7 @@ void SystemTrayApplet::embedWindow( WId } else { - emb->hide(); + //emb->hide(); emb->setBackground(); emb->show(); m_shownWins.append(emb); @@ -515,7 +517,7 @@ void SystemTrayApplet::updateVisibleWins { for (; emb != lastEmb; ++emb) { - (*emb)->hide(); + //(*emb)->hide(); (*emb)->setBackground(); (*emb)->show(); } @@ -744,8 +746,7 @@ int SystemTrayApplet::widthForHeight(int } int currentHeight = height(); - int minHeight = m_iconSize + 4; - if (currentHeight != h && currentHeight != minHeight) + if (currentHeight != h) { SystemTrayApplet* me = const_cast(this); me->setMinimumSize(0, 0); @@ -764,8 +765,7 @@ int SystemTrayApplet::heightForWidth(int } int currentWidth = width(); - int minSize = m_iconSize + 4; - if (currentWidth != w && currentWidth != minSize) + if (currentWidth != w) { SystemTrayApplet* me = const_cast(this); me->setMinimumSize(0, 0); @@ -782,10 +782,8 @@ void SystemTrayApplet::moveEvent( QMoveE } -void SystemTrayApplet::resizeEvent( QResizeEvent* e ) +void SystemTrayApplet::resizeEvent( QResizeEvent* ) { - KPanelApplet::resizeEvent(e); - layoutTray(); // we need to give ourselves a chance to adjust our size before calling this QTimer::singleShot(0, this, SIGNAL(updateLayout())); @@ -808,7 +806,7 @@ void SystemTrayApplet::layoutTray() int i = 0, line, nbrOfLines, heightWidth; bool showExpandButton = m_expandButton && m_expandButton->isVisibleTo(this); delete m_layout; - m_layout = new QGridLayout(this, 1, 1, 2, 2); + m_layout = new QGridLayout(this, 1, 1, ICON_MARGIN, ICON_MARGIN); if (m_expandButton) { @@ -828,18 +826,18 @@ void SystemTrayApplet::layoutTray() // // The margin and spacing specified in the layout implies that: - // [-- 2 pixels --] [-- first icon --] [-- 2 pixels --] ... [-- 2 pixels --] [-- last icon --] [-- 2 pixels --] + // [-- 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 2 pixels spacing, then the available width for the icons - // is the widget width minus 2 pixels margin. Forgetting these 2 pixels broke the layout algorithm in KDE <= 3.5.9. + // 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. // - // This fix makes the workaround in the heightForWidth() and widthForHeight() methods unneeded. + // This fix makes the workarounds in the heightForWidth() and widthForHeight() methods unneeded. // if (orientation() == Vertical) { - int iconWidth = maxIconWidth() + 2; // +2 for the margins that implied by the layout - heightWidth = width() - 2; + 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; @@ -860,12 +858,12 @@ void SystemTrayApplet::layoutTray() emb != lastEmb; ++emb) { line = i % nbrOfLines; - (*emb)->hide(); + //(*emb)->hide(); (*emb)->show(); m_layout->addWidget(*emb, col, line, Qt::AlignHCenter | Qt::AlignVCenter); - if (line + 1 == nbrOfLines) + if ((line + 1) == nbrOfLines) { ++col; } @@ -879,12 +877,12 @@ void SystemTrayApplet::layoutTray() emb != lastEmb; ++emb) { line = i % nbrOfLines; - (*emb)->hide(); + //(*emb)->hide(); (*emb)->show(); m_layout->addWidget(*emb, col, line, Qt::AlignHCenter | Qt::AlignVCenter); - if (line + 1 == nbrOfLines) + if ((line + 1) == nbrOfLines) { ++col; } @@ -894,8 +892,8 @@ void SystemTrayApplet::layoutTray() } else // horizontal { - int iconHeight = maxIconHeight() + 2; // +2 for the margins that implied by the layout - heightWidth = height() - 2; + 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; @@ -914,12 +912,12 @@ void SystemTrayApplet::layoutTray() for (TrayEmbedList::const_iterator emb = m_hiddenWins.begin(); emb != lastEmb; ++emb) { line = i % nbrOfLines; - (*emb)->hide(); + //(*emb)->hide(); (*emb)->show(); m_layout->addWidget(*emb, line, col, Qt::AlignHCenter | Qt::AlignVCenter); - if (line + 1 == nbrOfLines) + if ((line + 1) == nbrOfLines) { ++col; } @@ -933,12 +931,12 @@ void SystemTrayApplet::layoutTray() emb != lastEmb; ++emb) { line = i % nbrOfLines; - (*emb)->hide(); + //(*emb)->hide(); (*emb)->show(); m_layout->addWidget(*emb, line, col, Qt::AlignHCenter | Qt::AlignVCenter); - if (line + 1 == nbrOfLines) + if ((line + 1) == nbrOfLines) { ++col; } @@ -975,6 +973,21 @@ TrayEmbed::TrayEmbed( bool kdeTray, QWid : QXEmbed( parent ), kde_tray( kdeTray ) { hide(); +} + +void TrayEmbed::getIconSize(int defaultIconSize) +{ + QSize minSize = minimumSizeHint(); + + int width = minSize.width(); + int height = minSize.height(); + + if (width < 1 || width > defaultIconSize) + width = defaultIconSize; + if (height < 1 || height > defaultIconSize) + height = defaultIconSize; + + setFixedSize(width, height); setBackground(); } @@ -994,9 +1007,7 @@ void TrayEmbed::setBackground() if (!isHidden()) { - hide(); - show(); + XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); } - //XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); } Index: kicker/applets/clock/clock.h =================================================================== --- kicker/applets/clock/clock.h.orig +++ kicker/applets/clock/clock.h @@ -41,6 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE #include #include "settings.h" +#include "kshadowengine.h" class QTimer; class QBoxLayout; @@ -152,6 +153,9 @@ class PlainClock : public QLabel, public bool showDayOfWeek(); protected: + void paintEvent(QPaintEvent *e); + void drawContents(QPainter *p); + QString _timeStr; }; @@ -279,6 +283,8 @@ class ClockApplet : public KPanelApplet, QDate clockGetDate(); virtual void updateKickerTip(KickerTip::Data&); + + KTextShadowEngine *shadowEngine(); k_dcop: void reconfigure(); @@ -335,6 +341,7 @@ class ClockApplet : public KPanelApplet, QStringList _remotezonelist; KPopupMenu* menu; ClockAppletToolTip m_tooltip; + KTextShadowEngine *m_shadowEngine; }; Index: kicker/applets/clock/Makefile.am =================================================================== --- kicker/applets/clock/Makefile.am.orig +++ kicker/applets/clock/Makefile.am @@ -1,7 +1,7 @@ pic_DATA = lcd.png picdir = $(kde_datadir)/clockapplet/pics -INCLUDES = -I$(top_srcdir)/kicker/libkicker $(all_includes) +INCLUDES = -I$(top_srcdir)/kicker/libkicker -I../../libkicker $(all_includes) kde_module_LTLIBRARIES = clock_panelapplet.la Index: kicker/applets/clock/clock.cpp =================================================================== --- kicker/applets/clock/clock.cpp.orig +++ kicker/applets/clock/clock.cpp @@ -57,6 +57,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE #include // libkickermain +#include "kickerSettings.h" #include "clock.h" #include "datepicker.h" #include "zone.h" @@ -219,6 +220,7 @@ ClockWidget::~ClockWidget() PlainClock::PlainClock(ClockApplet *applet, Prefs *prefs, QWidget *parent, const char *name) : QLabel(parent, name), ClockWidget(applet, prefs) { + setWFlags(WNoAutoErase); setBackgroundOrigin(AncestorOrigin); loadSettings(); updateClock(); @@ -228,7 +230,7 @@ PlainClock::PlainClock(ClockApplet *appl int PlainClock::preferedWidthForHeight(int ) const { QString maxLengthTime = KGlobal::locale()->formatTime( QTime( 23, 59 ), _prefs->plainShowSeconds()); - return fontMetrics().width( maxLengthTime+2 ); + return fontMetrics().width( maxLengthTime ) + 8; } @@ -244,7 +246,7 @@ void PlainClock::updateClock() if (_force || newStr != _timeStr) { _timeStr = newStr; - setText(_timeStr); + update(); } } @@ -266,6 +268,32 @@ bool PlainClock::showDayOfWeek() return _prefs->plainShowDayOfWeek(); } +void PlainClock::paintEvent(QPaintEvent *) +{ + QPainter p; + QPixmap buf(size()); + buf.fill(this, 0, 0); + p.begin(&buf); + p.setFont(font()); + p.setPen(paletteForegroundColor()); + drawContents(&p); + drawFrame(&p); + p.end(); + p.begin(this); + p.drawPixmap(0, 0, buf); + p.end(); +} + +void PlainClock::drawContents(QPainter *p) +{ + QRect tr(0, 0, width(), height()); + + if (!KickerSettings::transparent()) + p->drawText(tr, AlignCenter, _timeStr); + else + _applet->shadowEngine()->drawText(*p, tr, AlignCenter, _timeStr, size()); +} + //************************************************************ @@ -834,12 +862,22 @@ void FuzzyClock::drawContents(QPainter * p->setFont(_prefs->fuzzyFont()); p->setPen(_prefs->fuzzyForegroundColor()); - if (_applet->getOrientation() == Vertical) { + + QRect tr; + + if (_applet->getOrientation() == Vertical) + { p->rotate(90); - p->drawText(4, -2, height() - 8, -(width()) + 2, AlignCenter, _timeStr); - } else { - p->drawText(4, 2, width() - 8, height() - 4, AlignCenter, _timeStr); + tr = QRect(4, -2, height() - 8, -(width()) + 2); } + else + tr = QRect(4, 2, width() - 8, height() - 4); + + if (!KickerSettings::transparent()) + p->drawText(tr, AlignCenter, _timeStr); + else + _applet->shadowEngine()->drawText(*p, tr, AlignCenter, _timeStr, size()); + alreadyDrawing = false; } @@ -872,7 +910,8 @@ ClockApplet::ClockApplet(const QString& _prefs(new Prefs(sharedConfig())), zone(new Zone(config())), menu(0), - m_tooltip(this) + m_tooltip(this), + m_shadowEngine(0) { DCOPObject::setObjId("ClockApplet"); _prefs->readConfig(); @@ -910,6 +949,7 @@ ClockApplet::ClockApplet(const QString& ClockApplet::~ClockApplet() { + delete m_shadowEngine; //reverse for the moment KGlobal::locale()->removeCatalogue("clockapplet"); KGlobal::locale()->removeCatalogue("timezones"); // For time zone translations @@ -929,6 +969,16 @@ ClockApplet::~ClockApplet() config()->sync(); } + +KTextShadowEngine *ClockApplet::shadowEngine() +{ + if (!m_shadowEngine) + m_shadowEngine = new KTextShadowEngine(); + + return m_shadowEngine; +} + + int ClockApplet::widthForHeight(int h) const { if (orientation() == Qt::Vertical) Index: kioslave/media/mediamanager/halbackend.cpp =================================================================== --- kioslave/media/mediamanager/halbackend.cpp.orig +++ kioslave/media/mediamanager/halbackend.cpp @@ -851,13 +851,6 @@ QStringList HALBackend::mountoptions(con result << tmp; } - if ( valids.contains("locale") ) - { - value = config.readBoolEntry( "locale", true ); - tmp = QString( "locale=%1" ).arg( value ? "true" : "false" ); - result << tmp; - } - if (valids.contains("utf8")) { value = config.readBoolEntry("utf8", true); @@ -878,6 +871,17 @@ QStringList HALBackend::mountoptions(con result << "shortname=lower"; } + // pass our locale to the ntfs-3g driver so it can translate local characters + if (valids.contains("locale") && fstype == "ntfs-3g") + { + // have to obtain LC_CTYPE as returned by the `locale` command + // check in the same order as `locale` does + char *cType; + if ( (cType = getenv("LC_ALL")) || (cType = getenv("LC_CTYPE")) || (cType = getenv("LANG")) ) { + result << QString("locale=%1").arg(cType); + } + } + if (valids.contains("sync")) { value = config.readBoolEntry("sync", ( valids.contains("flush") && !fstype.endsWith("fat") ) && removable); @@ -931,7 +935,7 @@ bool HALBackend::setMountoptions(const Q QMap valids = MediaManagerUtils::splitOptions(options); - const char *names[] = { "ro", "quiet", "atime", "uid", "utf8", "flush", "sync", "locale", 0 }; + const char *names[] = { "ro", "quiet", "atime", "uid", "utf8", "flush", "sync", 0 }; for (int index = 0; names[index]; ++index) if (valids.contains(names[index])) config.writeEntry(names[index], valids[names[index]] == "true"); @@ -951,10 +955,6 @@ bool HALBackend::setMountoptions(const Q config.writeEntry("automount", valids["automount"]); } - if (valids.contains("locale") ) { - config.writeEntry("locale", valids["locale"]); - } - return true; } @@ -1153,11 +1153,6 @@ QString HALBackend::mount(const Medium * soptions << QString("uid=%1").arg(getuid()); } - if (valids["locale"] == "true") - { - soptions << QString("locale=%1").arg( KGlobal::locale()->language() ); - } - if (valids["ro"] == "true") soptions << "ro"; @@ -1182,6 +1177,11 @@ QString HALBackend::mount(const Medium * soptions << QString("shortname=%1").arg(valids["shortname"]); } + if (valids.contains("locale")) + { + soptions << QString("locale=%1").arg(valids["locale"]); + } + if (valids.contains("journaling")) { QString option = valids["journaling"]; Index: knetattach/knetattach.ui =================================================================== --- knetattach/knetattach.ui.orig +++ knetattach/knetattach.ui @@ -236,7 +236,7 @@ - 32768 + 65535 1