|
@@ -40,29 +40,19 @@ bool ctkFileDialogEventTranslator::translateEvent(QObject *Object,
|
|
|
bool &Error)
|
|
|
{
|
|
|
Q_UNUSED(Error);
|
|
|
- ctkFileDialog* object = NULL;
|
|
|
- for(QObject* test = Object; object == NULL && test != NULL; test = test->parent())
|
|
|
+ ctkFileDialog* fileDialog = NULL;
|
|
|
+ for(QObject* test = Object; fileDialog == NULL && test != NULL; test = test->parent())
|
|
|
{
|
|
|
- object = qobject_cast<ctkFileDialog*>(test);
|
|
|
+ fileDialog = qobject_cast<ctkFileDialog*>(test);
|
|
|
}
|
|
|
|
|
|
- if(!object)
|
|
|
+ if(!fileDialog)
|
|
|
{
|
|
|
return this->Superclass::translateEvent(Object, Event, Error);
|
|
|
}
|
|
|
|
|
|
- // If we find an action on the bottom widget, we return false.
|
|
|
- QWidget* bottomWidget = NULL;
|
|
|
- for(QObject* testWidget = Object; bottomWidget == NULL && testWidget!= NULL; testWidget = testWidget->parent())
|
|
|
- {
|
|
|
- if(object->bottomWidget() == qobject_cast<QWidget*>(testWidget))
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
if((Event->type() == QEvent::Enter || Event->type() == QEvent::ShowToParent) &&
|
|
|
- Object == object)
|
|
|
+ Object == fileDialog)
|
|
|
{
|
|
|
if(this->CurrentObject != Object)
|
|
|
{
|
|
@@ -72,15 +62,34 @@ bool ctkFileDialogEventTranslator::translateEvent(QObject *Object,
|
|
|
}
|
|
|
this->CurrentObject = Object;
|
|
|
|
|
|
- connect(object, SIGNAL(filesSelected(const QStringList&)),
|
|
|
+ connect(fileDialog, SIGNAL(filesSelected(const QStringList&)),
|
|
|
this, SLOT(onFileSelectionChanged(const QStringList&)));
|
|
|
- connect(object, SIGNAL(rejected()), this, SLOT(onRejected()));
|
|
|
- connect(object, SIGNAL(destroyed(QObject*)),
|
|
|
+ connect(fileDialog, SIGNAL(rejected()), this, SLOT(onRejected()));
|
|
|
+ connect(fileDialog, SIGNAL(destroyed(QObject*)),
|
|
|
this, SLOT(onDestroyed(QObject*)));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return true;
|
|
|
+ // All events performed in the dialog widgets are swallowed (e.g. scrollbar
|
|
|
+ // events)...
|
|
|
+ bool acceptEvent = true;
|
|
|
+ // ...except for the events on the bottom widget (if any).
|
|
|
+ QWidget* bottomWidget = fileDialog->bottomWidget();
|
|
|
+ if (bottomWidget)
|
|
|
+ {
|
|
|
+ for(QObject* eventAncestor = Object; eventAncestor != NULL; eventAncestor = eventAncestor->parent())
|
|
|
+ {
|
|
|
+ if (bottomWidget == eventAncestor)
|
|
|
+ {
|
|
|
+ // The event originated from a widget of the bottom widget, let the
|
|
|
+ // other translators record it.
|
|
|
+ acceptEvent = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return acceptEvent;
|
|
|
}
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|