if the graphicswidget isn't on a corona, use the applet's scene
This commit is contained in:
parent
9775682bef
commit
7ed45afaaf
@ -341,8 +341,8 @@ void PopupAppletPrivate::popupConstraintsEvent(Plasma::Constraints constraints)
|
|||||||
q->resize(prefSize);
|
q->resize(prefSize);
|
||||||
emit q->appletTransformedItself();
|
emit q->appletTransformedItself();
|
||||||
}
|
}
|
||||||
//Applet on popup
|
|
||||||
} else {
|
} else {
|
||||||
|
//Applet on popup
|
||||||
if (icon && lay) {
|
if (icon && lay) {
|
||||||
lay->addItem(icon);
|
lay->addItem(icon);
|
||||||
}
|
}
|
||||||
@ -363,56 +363,57 @@ void PopupAppletPrivate::popupConstraintsEvent(Plasma::Constraints constraints)
|
|||||||
delete proxy.data();
|
delete proxy.data();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dialogPtr) {
|
//save the aspect ratio mode in case we drag'n drop in the Desktop later
|
||||||
//save the aspect ratio mode in case we drag'n drop in the Desktop later
|
savedAspectRatio = q->aspectRatioMode();
|
||||||
savedAspectRatio = q->aspectRatioMode();
|
|
||||||
|
|
||||||
if (icon) {
|
if (icon) {
|
||||||
icon->show();
|
icon->show();
|
||||||
q->setAspectRatioMode(Plasma::ConstrainedSquare);
|
q->setAspectRatioMode(Plasma::ConstrainedSquare);
|
||||||
}
|
|
||||||
|
|
||||||
Dialog *dialog = new Dialog();
|
|
||||||
dialog->d->appletPtr = q;
|
|
||||||
dialogPtr = dialog;
|
|
||||||
|
|
||||||
if (icon) {
|
|
||||||
dialog->setAspectRatioMode(savedAspectRatio);
|
|
||||||
}
|
|
||||||
|
|
||||||
//no longer use Qt::Popup since that seems to cause a lot of problem when you drag
|
|
||||||
//stuff out of your Dialog (extenders). Monitor WindowDeactivate events so we can
|
|
||||||
//emulate the same kind of behavior as Qt::Popup (close when you click somewhere
|
|
||||||
//else.
|
|
||||||
|
|
||||||
if (gWidget) {
|
|
||||||
Corona *corona = qobject_cast<Corona *>(gWidget->scene());
|
|
||||||
|
|
||||||
if (corona) {
|
|
||||||
corona->addOffscreenWidget(gWidget);
|
|
||||||
}
|
|
||||||
|
|
||||||
dialog->setGraphicsWidget(gWidget);
|
|
||||||
//gWidget->resize(gWidget->preferredSize());
|
|
||||||
dialog->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | (gWidget->windowFlags() & Qt::X11BypassWindowManagerHint));
|
|
||||||
} else if (qWidget) {
|
|
||||||
QVBoxLayout *l_layout = new QVBoxLayout(dialog);
|
|
||||||
l_layout->setSpacing(0);
|
|
||||||
l_layout->setMargin(0);
|
|
||||||
l_layout->addWidget(qWidget);
|
|
||||||
dialog->adjustSize();
|
|
||||||
dialog->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | (qWidget->windowFlags() & Qt::X11BypassWindowManagerHint));
|
|
||||||
} else {
|
|
||||||
dialog->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
|
|
||||||
}
|
|
||||||
|
|
||||||
restoreDialogSize();
|
|
||||||
KWindowSystem::setState(dialog->winId(), NET::SkipTaskbar | NET::SkipPager);
|
|
||||||
dialog->installEventFilter(q);
|
|
||||||
|
|
||||||
QObject::connect(dialog, SIGNAL(dialogResized()), q, SLOT(dialogSizeChanged()));
|
|
||||||
QObject::connect(dialog, SIGNAL(dialogVisible(bool)), q, SLOT(dialogStatusChanged(bool)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dialog *dialog = new Dialog();
|
||||||
|
dialog->d->appletPtr = q;
|
||||||
|
dialogPtr = dialog;
|
||||||
|
|
||||||
|
if (icon) {
|
||||||
|
dialog->setAspectRatioMode(savedAspectRatio);
|
||||||
|
}
|
||||||
|
|
||||||
|
//no longer use Qt::Popup since that seems to cause a lot of problem when you drag
|
||||||
|
//stuff out of your Dialog (extenders). Monitor WindowDeactivate events so we can
|
||||||
|
//emulate the same kind of behavior as Qt::Popup (close when you click somewhere
|
||||||
|
//else.
|
||||||
|
|
||||||
|
if (gWidget) {
|
||||||
|
Corona *corona = qobject_cast<Corona *>(gWidget->scene());
|
||||||
|
if (!corona) {
|
||||||
|
corona = qobject_cast<Corona *>(q->scene());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (corona) {
|
||||||
|
corona->addOffscreenWidget(gWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
gWidget->show();
|
||||||
|
dialog->setGraphicsWidget(gWidget);
|
||||||
|
dialog->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | (gWidget->windowFlags() & Qt::X11BypassWindowManagerHint));
|
||||||
|
} else if (qWidget) {
|
||||||
|
QVBoxLayout *l_layout = new QVBoxLayout(dialog);
|
||||||
|
l_layout->setSpacing(0);
|
||||||
|
l_layout->setMargin(0);
|
||||||
|
l_layout->addWidget(qWidget);
|
||||||
|
dialog->adjustSize();
|
||||||
|
dialog->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | (qWidget->windowFlags() & Qt::X11BypassWindowManagerHint));
|
||||||
|
} else {
|
||||||
|
dialog->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
|
||||||
|
}
|
||||||
|
|
||||||
|
restoreDialogSize();
|
||||||
|
KWindowSystem::setState(dialog->winId(), NET::SkipTaskbar | NET::SkipPager);
|
||||||
|
dialog->installEventFilter(q);
|
||||||
|
|
||||||
|
QObject::connect(dialog, SIGNAL(dialogResized()), q, SLOT(dialogSizeChanged()));
|
||||||
|
QObject::connect(dialog, SIGNAL(dialogVisible(bool)), q, SLOT(dialogStatusChanged(bool)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user