+bool DroppingController::eventFilter( QObject *obj, QEvent *event )
+{
+ switch( event->type() )
+ {
+ case QEvent::MouseButtonPress:
+ b_draging = true;
+ return true;
+ case QEvent::MouseButtonRelease:
+ b_draging = false;
+ return true;
+ case QEvent::MouseMove:
+ {
+ if( !b_draging ) return true;
+ QWidget *widg = static_cast<QWidget*>(obj);
+
+ QByteArray itemData;
+ QDataStream dataStream( &itemData, QIODevice::WriteOnly );
+
+ int i = -1;
+ i = controlLayout->indexOf( widg );
+ if( i == -1 )
+ {
+ i = controlLayout->indexOf( widg->parentWidget() );
+ widg = widg->parentWidget();
+ /* NOTE: be extra-careful Now with widg access */
+ }
+
+ if( i == -1 ) return true;
+ doubleInt *dI = widgetList.at( i );
+
+ int i_type = dI->i_type;
+ int i_option = dI->i_option;
+ dataStream << i_type << i_option;
+
+ /* With correct mimedata */
+ QMimeData *mimeData = new QMimeData;
+ mimeData->setData( "vlc/button-bar", itemData );
+
+ QDrag *drag = new QDrag( widg );
+ drag->setMimeData( mimeData );
+
+ /* Start the effective drag */
+ drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::MoveAction);
+
+ widgetList.removeAt( i );
+ controlLayout->removeWidget( widg );
+ widg->hide();
+ b_draging = false;
+ }
+ return true;
+
+ case QEvent::EnabledChange:
+ case QEvent::Hide:
+ case QEvent::HideToParent:
+ case QEvent::Move:
+ case QEvent::ZOrderChange:
+ return true;
+ default:
+ return false;
+ }
+}
+