diff options
Diffstat (limited to 'opensuse/tdebase/kdesktop_icons.diff')
-rw-r--r-- | opensuse/tdebase/kdesktop_icons.diff | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/opensuse/tdebase/kdesktop_icons.diff b/opensuse/tdebase/kdesktop_icons.diff new file mode 100644 index 000000000..5d208b0dd --- /dev/null +++ b/opensuse/tdebase/kdesktop_icons.diff @@ -0,0 +1,311 @@ +Index: kdesktop/KDesktopIface.h +=================================================================== +--- kdesktop/KDesktopIface.h.orig ++++ kdesktop/KDesktopIface.h +@@ -107,6 +107,35 @@ k_dcop: + * space for desktop icons + */ + virtual void desktopIconsAreaChanged(const QRect &area, int screen) = 0; ++ ++ /** ++ * Find the next free place for a not yet existing icon, so it fits ++ * in the user arrangement. Basicly prepare for icons to be moved in. ++ * It will try to find a place in the virtual grid near col,row ++ * where no other icon is. ++ * ++ * If you specify -1 for row or column, it will try to find the next ++ * free room where no other icon follows. E.g. if you specify column ++ * = -1 and row = 0, kdesktop will find the next vertical placement ++ * so that the icon appears at the end of the existing icons preferable ++ * in the first column. If the first column is full, it will find the ++ * next free room in the second column. ++ * ++ * If you specify both column and row, kdesktop won't care for aligning, ++ * or surrounding icons, but try to find the free place near the given ++ * grid place (e.g. specify 0,0 to find the nearest place in the left ++ * upper corner). ++ */ ++ virtual QPoint findPlaceForIcon( int column, int row) = 0; ++ ++ /// copy the desktop file in the Desktop and place it at x, y ++ virtual void addIcon(const QString &url, int x, int y) = 0; ++ ++ /// same with specific destination ++ virtual void addIcon(const QString &url, const QString &dest, int x, int y) = 0; ++ ++ /// remove the desktop file (either full path or relative) ++ virtual void removeIcon(const QString &dest) = 0; + }; + + #endif +Index: kdesktop/desktop.cc +=================================================================== +--- kdesktop/desktop.cc.orig ++++ kdesktop/desktop.cc +@@ -32,6 +32,9 @@ + #include <unistd.h> + #include <kcolordrag.h> + #include <kurldrag.h> ++#include <stdlib.h> ++#include <kio/job.h> ++#include <qfile.h> + + #include <qdir.h> + #include <qevent.h> +@@ -58,6 +61,7 @@ + #include <kglobalsettings.h> + #include <kpopupmenu.h> + #include <kapplication.h> ++#include <kdirlister.h> + // Create the equivalent of KAccelBase::connectItem + // and then remove this include and fix reconnects in initRoot() -- ellis + //#include <kaccelbase.h> +@@ -983,4 +987,47 @@ bool KDesktop::event(QEvent * e) + return QWidget::event(e); + } + ++QPoint KDesktop::findPlaceForIcon( int column, int row ) ++{ ++ if (m_pIconView) ++ return m_pIconView->findPlaceForIcon(column, row); ++ else ++ return QPoint(-1, -1); ++} ++ ++void KDesktop::addIcon(const QString & _url, int x, int y) ++{ ++ addIcon( _url, KGlobalSettings::desktopPath(), x, y ); ++} ++ ++void KDesktop::addIcon(const QString & _url, const QString & _dest, int x, int y) ++{ ++ QString filename = _url.mid(_url.findRev('/') + 1); ++ ++ QValueList<KIO::CopyInfo> files; ++ KIO::CopyInfo i; ++ i.uSource = KURL::fromPathOrURL( _url ); ++ i.uDest = KURL::fromPathOrURL( _dest ); ++ i.uDest.addPath( filename ); ++ files.append(i); ++ if (!QFile::exists(i.uDest.prettyURL().replace("file://",QString::null))) { m_pIconView->slotAboutToCreate( QPoint( x, y ), files ); ++ KIO::copy( i.uSource, i.uDest, false ); } ++ ++// m_pIconView->addFuturePosition(filename, x, y); ++ // qDebug("addIcon %s %s %d %d", _url.latin1(), _dest.latin1(), x, y); ++// system(QString("cp \"%1\" \"%2/%3\"").arg(KURL(_url).path()).arg(KURL(_dest).path()).arg(filename).latin1()); ++// m_pIconView->update( _dest ); ++} ++ ++void KDesktop::removeIcon(const QString &_url) ++{ ++ if (_url.at(0) != '/') { ++ qDebug("removeIcon with relative path not supported for now"); ++ return; ++ } ++ unlink(KURL(_url).path().latin1()); ++ QString dest = _url.left(_url.findRev('/') + 1); ++ m_pIconView->update( dest ); ++} ++ + #include "desktop.moc" +Index: kdesktop/desktop.h +=================================================================== +--- kdesktop/desktop.h.orig ++++ kdesktop/desktop.h +@@ -164,6 +164,11 @@ protected: + virtual void setIconsEnabled( bool enable ); + virtual bool event ( QEvent * e ); + ++ virtual QPoint findPlaceForIcon( int column, int row); ++ virtual void addIcon(const QString &url, int x, int y); ++ virtual void addIcon(const QString &url, const QString &dest, int x, int y); ++ virtual void removeIcon(const QString &url); ++ + private slots: + void desktopResized(); + +Index: kdesktop/kdiconview.cc +=================================================================== +--- kdesktop/kdiconview.cc.orig ++++ kdesktop/kdiconview.cc +@@ -962,6 +962,18 @@ void KDIconView::slotNewItems( const KFi + kdDebug(1214) << "KDIconView::slotNewItems count=" << entries.count() << endl; + KFileItemListIterator it(entries); + KFileIVI* fileIVI = 0L; ++ ++ if (m_nextItemPos.isNull() && !m_dotDirectory) { ++ // Not found, we'll need to save the new pos ++ kdDebug(1214)<<"Neither a drop position stored nor m_dotDirectory set"<<endl; ++ m_dotDirectory = new KSimpleConfig( dotDirectoryPath(), true ); ++ // recursion ++ slotNewItems( entries ); ++ delete m_dotDirectory; ++ m_dotDirectory = 0; ++ return; ++ } ++ + for (; it.current(); ++it) + { + KURL url = it.current()->url(); +@@ -1026,15 +1038,6 @@ void KDIconView::slotNewItems( const KFi + kdDebug(1214)<<"Using saved position"<<endl; + } + } +- else +- { +- // Not found, we'll need to save the new pos +- kdDebug(1214)<<"slotNewItems(): New item without position information, try to find a sane location"<<endl; +- +- moveToFreePosition(fileIVI); +- +- m_bNeedSave = true; +- } + } + } + +@@ -1638,6 +1641,98 @@ void KDIconView::moveToFreePosition(QIco + } + + ++QPoint KDIconView::findPlaceForIconCol( int column, int dx, int dy) ++{ ++ if (column < 0) ++ return QPoint(); ++ ++ QRect rect; ++ rect.moveTopLeft( QPoint(column * dx, 0) ); ++ rect.setWidth(dx); ++ rect.setHeight(dy); ++ ++ if (rect.right() > viewport()->width()) ++ return QPoint(); ++ ++ while ( rect.bottom() < viewport()->height() - spacing() ) ++ { ++ if ( !isFreePosition(0,rect) ) ++ rect.moveBy(0, rect.height()); ++ else ++ return rect.topLeft(); ++ } ++ ++ return QPoint(); ++} ++ ++QPoint KDIconView::findPlaceForIconRow( int row, int dx, int dy ) ++{ ++ if (row < 0) ++ return QPoint(); ++ ++ QRect rect; ++ rect.moveTopLeft(QPoint(0, row * dy)); ++ rect.setWidth(dx); ++ rect.setHeight(dy); ++ ++ if (rect.bottom() > viewport()->height()) ++ return QPoint(); ++ ++ while (rect.right() < viewport()->width() - spacing()) ++ { ++ if (!isFreePosition(0,rect)) ++ rect.moveBy(rect.width()+spacing(), 0); ++ else ++ return rect.topLeft(); ++ } ++ ++ return QPoint(); ++} ++ ++QPoint KDIconView::findPlaceForIcon( int column, int row) ++{ ++ int dx = gridXValue(), dy = 0; ++ QIconViewItem *item = firstItem(); ++ for ( ; item; item = item->nextItem() ) { ++ dx = QMAX( dx, item->width() ); ++ dy = QMAX( dy, item->height() ); ++ } ++ ++ dx += spacing(); ++ dy += spacing(); ++ ++ if (row == -1) { ++ int max_cols = viewport()->width() / dx; ++ int delta = 0; ++ QPoint res; ++ do { ++ delta++; ++ res = findPlaceForIconCol(column + (delta / 2) * (-2 * (delta % 2) + 1), ++ dx, dy); ++ if (delta / 2 > QMAX(max_cols - column, column)) ++ return res; ++ } while (res.isNull()); ++ return res; ++ } ++ ++ if (column == -1) { ++ int max_rows = viewport()->height() / dy; ++ int delta = 0; ++ QPoint res; ++ do { ++ delta++; ++ res = findPlaceForIconRow(row + (delta / 2) * (-2 * (delta % 2) + 1), ++ dx, dy); ++ if (delta / 2 > QMAX(max_rows - row, row)) ++ return res; ++ } while (res.isNull()); ++ return res; ++ } ++ ++ // very unlikely - if I may add that ++ return QPoint(0, 0); ++} ++ + void KDIconView::saveIconPositions() + { + kdDebug(1214) << "KDIconView::saveIconPositions" << endl; +@@ -1665,4 +1760,11 @@ void KDIconView::saveIconPositions() + m_dotDirectory->sync(); + } + ++void KDIconView::update( const QString &_url ) ++{ ++ if (m_dirLister) ++ m_dirLister->updateDirectory( _url ); ++} ++ ++ + #include "kdiconview.moc" +Index: kdesktop/kdiconview.h +=================================================================== +--- kdesktop/kdiconview.h.orig ++++ kdesktop/kdiconview.h +@@ -73,6 +73,8 @@ public: + + QStringList selectedURLs(); + ++ void update( const QString &url ); ++ + /** + * Save the icon positions + */ +@@ -103,6 +105,10 @@ public: + + void startDirLister(); + ++ QPoint findPlaceForIconCol( int column, int dx, int dy ); ++ QPoint findPlaceForIconRow( int row, int dx, int dy ); ++ QPoint findPlaceForIcon( int column, int row ); ++ + protected slots: + + // slots connected to the icon view +@@ -112,8 +118,9 @@ protected slots: + void slotMouseButtonClickedKDesktop(int _button, QIconViewItem* _item, const QPoint& _global); + void slotContextMenuRequested(QIconViewItem* _item, const QPoint& _global); + void slotEnableAction( const char * name, bool enabled ); ++public slots: + void slotAboutToCreate(const QPoint &pos, const QValueList<KIO::CopyInfo> &files); +- ++protected slots: + void slotItemRenamed(QIconViewItem*, const QString &name); + + // slots connected to the directory lister |