Accepting request 360928 from KDE:Qt5
- Added QMimeDatabase-follow-symlinks-when-checking-for-FIFO.patch to fix dolphin freeze when opening a folder containing symlinks to special files (boo#957006, qtbug#48529) - Update Add-option-to-disable-session-management-by-closing-windows.patch to version actually commited upstream OBS-URL: https://build.opensuse.org/request/show/360928 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libqt5-qtbase?expand=0&rev=51
This commit is contained in:
parent
0a13522eeb
commit
c50dd144b0
@ -1,180 +1,207 @@
|
|||||||
From 2722dd7bb544949ff8ca9fe2cfb7b41ceaaddc56 Mon Sep 17 00:00:00 2001
|
From e7bf0edfd49de9a4d8285fbe8d878f8fda910e6d Mon Sep 17 00:00:00 2001
|
||||||
From: Andreas Hartmetz <ahartmetz@gmail.com>
|
From: Andreas Hartmetz <ahartmetz@gmail.com>
|
||||||
Date: Tue, 19 Jan 2016 14:30:18 +0100
|
Date: Tue, 19 Jan 2016 14:30:18 +0100
|
||||||
Subject: [PATCH 1/1] Add option to disable "session management by closing
|
Subject: Add option to disable "session management by closing windows".
|
||||||
windows".
|
|
||||||
|
|
||||||
That feature is a poor man's session management for applications
|
That feature is a poor man's session management for applications
|
||||||
that do not implement any specific session management features.
|
that do not implement any specific session management features.
|
||||||
It badly interferes with proper session management support, so
|
It badly interferes with proper session management support, so
|
||||||
applications must be able to disable it.
|
applications must be able to disable it.
|
||||||
|
|
||||||
This fixes some KDE applications dying too early, before they are
|
This enables fixing applications with
|
||||||
enumerated for the list of applications to restart on session
|
QGuiApplication::quitOnLastWindowClosed() true - the default -
|
||||||
restore, thus preventing them from being restored. See
|
dying too early, before they are enumerated for the list of
|
||||||
|
applications to restart on session restore, thus preventing them
|
||||||
|
from being restored. See
|
||||||
https://bugs.kde.org/show_bug.cgi?id=354724
|
https://bugs.kde.org/show_bug.cgi?id=354724
|
||||||
|
|
||||||
|
[ChangeLog][QtGui] Qt asking to close windows on session exit as
|
||||||
|
a fallback session management mechanism has been made optional.
|
||||||
|
Disabling it fixes session management for applications that
|
||||||
|
implement full session management. See
|
||||||
|
QGuiApplication::isFallbackSessionManagementEnabled().
|
||||||
|
|
||||||
Task-number: QTBUG-49667
|
Task-number: QTBUG-49667
|
||||||
Change-Id: Ib22e58c9c64351dea8b7e2a74db91d26dd7ab7aa
|
Change-Id: Ib22e58c9c64351dea8b7e2a74db91d26dd7ab7aa
|
||||||
|
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
|
||||||
|
Reviewed-by: David Faure <david.faure@kdab.com>
|
||||||
---
|
---
|
||||||
|
.../widgets/mainwindows/application/mainwindow.cpp | 16 ++++++
|
||||||
|
.../widgets/mainwindows/application/mainwindow.h | 2 +
|
||||||
.../code/src_gui_kernel_qguiapplication.cpp | 1 +
|
.../code/src_gui_kernel_qguiapplication.cpp | 1 +
|
||||||
src/gui/kernel/qguiapplication.cpp | 14 +++++-
|
src/gui/kernel/qguiapplication.cpp | 60 +++++++++++++++++++++-
|
||||||
src/gui/kernel/qsessionmanager.cpp | 55 +++++++++++++++++++++-
|
src/gui/kernel/qguiapplication.h | 3 ++
|
||||||
src/gui/kernel/qsessionmanager.h | 3 ++
|
src/gui/kernel/qguiapplication_p.h | 1 +
|
||||||
src/gui/kernel/qsessionmanager_p.h | 1 +
|
src/gui/kernel/qsessionmanager.cpp | 19 ++++---
|
||||||
5 files changed, 71 insertions(+), 3 deletions(-)
|
7 files changed, 90 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
diff --git a/src/gui/doc/snippets/code/src_gui_kernel_qguiapplication.cpp b/src/gui/doc/snippets/code/src_gui_kernel_qguiapplication.cpp
|
diff --git a/src/gui/doc/snippets/code/src_gui_kernel_qguiapplication.cpp b/src/gui/doc/snippets/code/src_gui_kernel_qguiapplication.cpp
|
||||||
index 4ddf8c8..3006d19 100644
|
index 4ddf8c8..63fdb3b 100644
|
||||||
--- a/src/gui/doc/snippets/code/src_gui_kernel_qguiapplication.cpp
|
--- a/src/gui/doc/snippets/code/src_gui_kernel_qguiapplication.cpp
|
||||||
+++ b/src/gui/doc/snippets/code/src_gui_kernel_qguiapplication.cpp
|
+++ b/src/gui/doc/snippets/code/src_gui_kernel_qguiapplication.cpp
|
||||||
@@ -58,6 +58,7 @@ MyMainWidget::MyMainWidget(QWidget *parent)
|
@@ -53,6 +53,7 @@ int main(int argc, char *argv[])
|
||||||
|
MyMainWidget::MyMainWidget(QWidget *parent)
|
||||||
void MyMainWidget::commitData(QSessionManager& manager)
|
:QWidget(parent)
|
||||||
{
|
{
|
||||||
+ manager.setAutoCloseWindowsEnabled(false);
|
+ QGuiApplication::setFallbackSessionManagementEnabled(false);
|
||||||
if (manager.allowsInteraction()) {
|
connect(qApp, SIGNAL(commitDataRequest(QSessionManager)), SLOT(commitData(QSessionManager)));
|
||||||
int ret = QMessageBox::warning(
|
}
|
||||||
mainWindow,
|
|
||||||
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
|
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
|
||||||
index 770f847..40f2d5f 100644
|
index 65d679c..8f1c62f 100644
|
||||||
--- a/src/gui/kernel/qguiapplication.cpp
|
--- a/src/gui/kernel/qguiapplication.cpp
|
||||||
+++ b/src/gui/kernel/qguiapplication.cpp
|
+++ b/src/gui/kernel/qguiapplication.cpp
|
||||||
@@ -3087,6 +3087,12 @@ void QGuiApplicationPrivate::setApplicationState(Qt::ApplicationState state, boo
|
@@ -138,6 +138,8 @@ QPlatformTheme *QGuiApplicationPrivate::platform_theme = 0;
|
||||||
the session manager may or may not do this afterwards, depending on the
|
|
||||||
context.
|
|
||||||
|
|
||||||
+ When you connect to this signal to ask the user for permission to close
|
QList<QObject *> QGuiApplicationPrivate::generic_plugin_list;
|
||||||
+ the application and / or commit application data, you should also call
|
|
||||||
+ QSessionManager::setAutoCloseWindowsEnabled(false) on \a manager to disable
|
+bool QGuiApplicationPrivate::is_fallback_session_management_enabled = true;
|
||||||
+ a feature that helps applications that do not support full session
|
|
||||||
+ management, but hurts applications that do.
|
|
||||||
+
|
+
|
||||||
\warning Within this signal, no user interaction is possible, \e
|
enum ApplicationResourceFlags
|
||||||
unless you ask the \a manager for explicit permission. See
|
{
|
||||||
QSessionManager::allowsInteraction() and
|
ApplicationPaletteExplicitlySet = 0x1,
|
||||||
@@ -3095,7 +3101,8 @@ void QGuiApplicationPrivate::setApplicationState(Qt::ApplicationState state, boo
|
@@ -3082,6 +3084,55 @@ void QGuiApplicationPrivate::setApplicationState(Qt::ApplicationState state, boo
|
||||||
|
emit qApp->applicationStateChanged(applicationState);
|
||||||
|
}
|
||||||
|
|
||||||
|
+// ### Qt6: consider removing the feature or making it less intrusive
|
||||||
|
+/*!
|
||||||
|
+ \since 5.6
|
||||||
|
+
|
||||||
|
+ Returns whether QGuiApplication will use fallback session management.
|
||||||
|
+
|
||||||
|
+ The default is \c true.
|
||||||
|
+
|
||||||
|
+ If this is \c true and the session manager allows user interaction,
|
||||||
|
+ QGuiApplication will try to close toplevel windows after
|
||||||
|
+ commitDataRequest() has been emitted. If a window cannot be closed, session
|
||||||
|
+ shutdown will be canceled and the application will keep running.
|
||||||
|
+
|
||||||
|
+ Fallback session management only benefits applications that have an
|
||||||
|
+ "are you sure you want to close this window?" feature or other logic that
|
||||||
|
+ prevents closing a toplevel window depending on certain conditions, and
|
||||||
|
+ that do nothing to explicitly implement session management. In applications
|
||||||
|
+ that \e do implement session management using the proper session management
|
||||||
|
+ API, fallback session management interferes and may break session
|
||||||
|
+ management logic.
|
||||||
|
+
|
||||||
|
+ \warning If all windows \e are closed due to fallback session management
|
||||||
|
+ and quitOnLastWindowClosed() is \c true, the application will quit before
|
||||||
|
+ it is explicitly instructed to quit through the platform's session
|
||||||
|
+ management protocol. That violation of protocol may prevent the platform
|
||||||
|
+ session manager from saving application state.
|
||||||
|
+
|
||||||
|
+ \sa setFallbackSessionManagementEnabled(),
|
||||||
|
+ QSessionManager::allowsInteraction(), saveStateRequest(),
|
||||||
|
+ commitDataRequest(), {Session Management}
|
||||||
|
+*/
|
||||||
|
+bool QGuiApplication::isFallbackSessionManagementEnabled()
|
||||||
|
+{
|
||||||
|
+ return QGuiApplicationPrivate::is_fallback_session_management_enabled;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/*!
|
||||||
|
+ \since 5.6
|
||||||
|
+
|
||||||
|
+ Sets whether QGuiApplication will use fallback session management to
|
||||||
|
+ \a enabled.
|
||||||
|
+
|
||||||
|
+ \sa isFallbackSessionManagementEnabled()
|
||||||
|
+*/
|
||||||
|
+void QGuiApplication::setFallbackSessionManagementEnabled(bool enabled)
|
||||||
|
+{
|
||||||
|
+ QGuiApplicationPrivate::is_fallback_session_management_enabled = enabled;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*!
|
||||||
|
\since 4.2
|
||||||
|
\fn void QGuiApplication::commitDataRequest(QSessionManager &manager)
|
||||||
|
@@ -3106,7 +3157,8 @@ void QGuiApplicationPrivate::setApplicationState(Qt::ApplicationState state, boo
|
||||||
|
|
||||||
\note You should use Qt::DirectConnection when connecting to this signal.
|
\note You should use Qt::DirectConnection when connecting to this signal.
|
||||||
|
|
||||||
- \sa isSessionRestored(), sessionId(), saveStateRequest(), {Session Management}
|
- \sa isSessionRestored(), sessionId(), saveStateRequest(), {Session Management}
|
||||||
+ \sa QSessionManager::setAutoCloseWindowsEnabled(), isSessionRestored(),
|
+ \sa setFallbackSessionManagementEnabled(), isSessionRestored(),
|
||||||
+ sessionId(), saveStateRequest(), {Session Management}
|
+ sessionId(), saveStateRequest(), {Session Management}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -3225,9 +3232,12 @@ void QGuiApplicationPrivate::commitData()
|
@@ -3236,9 +3288,13 @@ void QGuiApplicationPrivate::commitData()
|
||||||
{
|
{
|
||||||
Q_Q(QGuiApplication);
|
Q_Q(QGuiApplication);
|
||||||
is_saving_session = true;
|
is_saving_session = true;
|
||||||
+
|
+
|
||||||
emit q->commitDataRequest(*session_manager);
|
emit q->commitDataRequest(*session_manager);
|
||||||
- if (session_manager->allowsInteraction() && !tryCloseAllWindows())
|
- if (session_manager->allowsInteraction() && !tryCloseAllWindows())
|
||||||
+ if (session_manager->autoCloseWindowsEnabled() && session_manager->allowsInteraction()
|
+ if (is_fallback_session_management_enabled && session_manager->allowsInteraction()
|
||||||
+ && !tryCloseAllWindows())
|
+ && !tryCloseAllWindows()) {
|
||||||
session_manager->cancel();
|
session_manager->cancel();
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
is_saving_session = false;
|
is_saving_session = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
diff --git a/src/gui/kernel/qguiapplication.h b/src/gui/kernel/qguiapplication.h
|
||||||
|
index d995387..3f233d4 100644
|
||||||
|
--- a/src/gui/kernel/qguiapplication.h
|
||||||
|
+++ b/src/gui/kernel/qguiapplication.h
|
||||||
|
@@ -152,6 +152,9 @@ public:
|
||||||
|
QString sessionId() const;
|
||||||
|
QString sessionKey() const;
|
||||||
|
bool isSavingSession() const;
|
||||||
|
+
|
||||||
|
+ static bool isFallbackSessionManagementEnabled();
|
||||||
|
+ static void setFallbackSessionManagementEnabled(bool);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void sync();
|
||||||
|
diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h
|
||||||
|
index 7c7da97..4f0f6fd 100644
|
||||||
|
--- a/src/gui/kernel/qguiapplication_p.h
|
||||||
|
+++ b/src/gui/kernel/qguiapplication_p.h
|
||||||
|
@@ -234,6 +234,7 @@ public:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef QT_NO_SESSIONMANAGER
|
||||||
|
+ static bool is_fallback_session_management_enabled;
|
||||||
|
QSessionManager *session_manager;
|
||||||
|
bool is_session_restored;
|
||||||
|
bool is_saving_session;
|
||||||
diff --git a/src/gui/kernel/qsessionmanager.cpp b/src/gui/kernel/qsessionmanager.cpp
|
diff --git a/src/gui/kernel/qsessionmanager.cpp b/src/gui/kernel/qsessionmanager.cpp
|
||||||
index f4b56fd..4d140f9 100644
|
index f4b56fd..c6d23f1 100644
|
||||||
--- a/src/gui/kernel/qsessionmanager.cpp
|
--- a/src/gui/kernel/qsessionmanager.cpp
|
||||||
+++ b/src/gui/kernel/qsessionmanager.cpp
|
+++ b/src/gui/kernel/qsessionmanager.cpp
|
||||||
@@ -116,7 +116,8 @@ QT_BEGIN_NAMESPACE
|
@@ -64,22 +64,21 @@ QT_BEGIN_NAMESPACE
|
||||||
|
settings.
|
||||||
|
|
||||||
QSessionManagerPrivate::QSessionManagerPrivate(const QString &id,
|
QSessionManager provides an interface between the application and the
|
||||||
const QString &key)
|
- session manager so that the program can work well with the session manager.
|
||||||
- : QObjectPrivate()
|
- In Qt, session management requests for action are handled by the two
|
||||||
+ : QObjectPrivate(),
|
- signals QGuiApplication::commitDataRequest() and
|
||||||
+ autoCloseWindowsEnabled(true)
|
- QGuiApplication::saveStateRequest(). Both provide a reference to a session
|
||||||
{
|
- manager object as argument, to allow the application to communicate with
|
||||||
platformSessionManager = QGuiApplicationPrivate::platformIntegration()->createPlatformSessionManager(id, key);
|
- the session manager. The session manager can only be accessed through these
|
||||||
Q_ASSERT_X(platformSessionManager, "Platform session management",
|
- functions.
|
||||||
@@ -350,6 +351,58 @@ QStringList QSessionManager::discardCommand() const
|
+ platform's session manager. In Qt, session management requests for action
|
||||||
}
|
+ are handled by the two signals QGuiApplication::commitDataRequest() and
|
||||||
|
+ QGuiApplication::saveStateRequest(). Both provide a reference to a
|
||||||
|
+ QSessionManager object as argument. The session manager can only be
|
||||||
|
+ accessed in slots invoked by these signals.
|
||||||
|
+
|
||||||
|
+ \warning If you use QSessionManager, you should disable fallback session
|
||||||
|
+ management: QGuiApplication::setFallbackSessionManagementEnabled().
|
||||||
|
|
||||||
/*!
|
No user interaction is possible \e unless the application gets explicit
|
||||||
+ \since 5.6
|
permission from the session manager. You ask for permission by calling
|
||||||
+
|
allowsInteraction() or, if it is really urgent, allowsErrorInteraction().
|
||||||
+ Sets whether the session manager will try to close application windows during
|
Qt does not enforce this, but the session manager may.
|
||||||
+ session exit to \a enabled.
|
|
||||||
+
|
|
||||||
+ \sa autoCloseWindowsEnabled()
|
|
||||||
+*/
|
|
||||||
+void QSessionManager::setAutoCloseWindowsEnabled(bool enabled)
|
|
||||||
+{
|
|
||||||
+ Q_D(QSessionManager);
|
|
||||||
+ d->autoCloseWindowsEnabled = enabled;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/*!
|
|
||||||
+ \since 5.6
|
|
||||||
+
|
|
||||||
+ Returns whether the session manager will try to close application windows during
|
|
||||||
+ session exit.
|
|
||||||
+
|
|
||||||
+ If this is true immediately after QGuiApplication::commitDataRequest() has been
|
|
||||||
+ emitted, and allowsInteraction() is true, Qt will send CloseEvent to all
|
|
||||||
+ windows of the application. If that fails to close all windows, session exit is
|
|
||||||
+ canceled and the application keeps running.
|
|
||||||
+
|
|
||||||
+ The purpose of that is to give applications without explicit session management
|
|
||||||
+ support a chance to cancel session exit through the common
|
|
||||||
+ "are you sure you want to close this window?" feature.
|
|
||||||
+
|
|
||||||
+ \warning If all windows \e are closed due to this feature,
|
|
||||||
+ that may quit the application before it is explicitly instructed to quit through
|
|
||||||
+ the platform's session management protocol - see
|
|
||||||
+ QGuiApplication::quitOnLastWindowClosed(). That may in turn prevent the platform
|
|
||||||
+ session manager from saving the application's state correctly because the
|
|
||||||
+ application broke the protocol.
|
|
||||||
+
|
|
||||||
+ If your application implements full session management, you should disable this.
|
|
||||||
+
|
|
||||||
+ It is sufficient to set this property once on any instance of QSessionManager
|
|
||||||
+ to set its value for the lifetime of the application - it acts like a class
|
|
||||||
+ static variable.
|
|
||||||
+
|
|
||||||
+ The default is true.
|
|
||||||
+
|
|
||||||
+ \sa setAutoCloseWindowsEnabled()
|
|
||||||
+*/
|
|
||||||
+bool QSessionManager::autoCloseWindowsEnabled() const
|
|
||||||
+{
|
|
||||||
+ Q_D(const QSessionManager);
|
|
||||||
+ return d->autoCloseWindowsEnabled;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/*!
|
|
||||||
\overload
|
|
||||||
|
|
||||||
Low-level write access to the application's identification and state
|
- You can try to abort the shutdown process by calling cancel(). The default
|
||||||
diff --git a/src/gui/kernel/qsessionmanager.h b/src/gui/kernel/qsessionmanager.h
|
- commitData() function does this if some top-level window rejected its
|
||||||
index 36aa391..696d9d8 100644
|
- closeEvent().
|
||||||
--- a/src/gui/kernel/qsessionmanager.h
|
+ You can try to abort the shutdown process by calling cancel().
|
||||||
+++ b/src/gui/kernel/qsessionmanager.h
|
|
||||||
@@ -78,6 +78,9 @@ public:
|
|
||||||
void setDiscardCommand(const QStringList&);
|
|
||||||
QStringList discardCommand() const;
|
|
||||||
|
|
||||||
+ void setAutoCloseWindowsEnabled(bool);
|
For sophisticated session managers provided on Unix/X11, QSessionManager
|
||||||
+ bool autoCloseWindowsEnabled() const;
|
offers further possibilities to fine-tune an application's session
|
||||||
+
|
|
||||||
void setManagerProperty(const QString& name, const QString& value);
|
|
||||||
void setManagerProperty(const QString& name, const QStringList& value);
|
|
||||||
|
|
||||||
diff --git a/src/gui/kernel/qsessionmanager_p.h b/src/gui/kernel/qsessionmanager_p.h
|
|
||||||
index 8949962..0acf865 100644
|
|
||||||
--- a/src/gui/kernel/qsessionmanager_p.h
|
|
||||||
+++ b/src/gui/kernel/qsessionmanager_p.h
|
|
||||||
@@ -65,6 +65,7 @@ public:
|
|
||||||
virtual ~QSessionManagerPrivate();
|
|
||||||
|
|
||||||
QPlatformSessionManager *platformSessionManager;
|
|
||||||
+ bool autoCloseWindowsEnabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
--
|
--
|
||||||
2.6.2.2.g1b5ffa3
|
cgit v0.11.0
|
||||||
|
94
QMimeDatabase-follow-symlinks-when-checking-for-FIFO.patch
Normal file
94
QMimeDatabase-follow-symlinks-when-checking-for-FIFO.patch
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
From 72b4f0d4743826ee14ec06bf0ada26418f4a69be Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Faure <david.faure@kdab.com>
|
||||||
|
Date: Mon, 30 Nov 2015 12:03:18 +0100
|
||||||
|
Subject: [PATCH 1/1] QMimeDatabase: follow symlinks when checking for FIFO
|
||||||
|
etc.
|
||||||
|
|
||||||
|
This was documented, but not what the code did.
|
||||||
|
|
||||||
|
Task-number: QTBUG-48529
|
||||||
|
Change-Id: I4849778c61dcae13be27c62b24717693c0c07d78
|
||||||
|
Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com>
|
||||||
|
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
||||||
|
---
|
||||||
|
src/corelib/mimetypes/qmimedatabase.cpp | 3 ++-
|
||||||
|
.../mimetypes/qmimedatabase/tst_qmimedatabase.cpp | 27 ++++++++++++++++++++++
|
||||||
|
.../mimetypes/qmimedatabase/tst_qmimedatabase.h | 1 +
|
||||||
|
3 files changed, 30 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/corelib/mimetypes/qmimedatabase.cpp b/src/corelib/mimetypes/qmimedatabase.cpp
|
||||||
|
index c1e17b9..fd11dbc 100644
|
||||||
|
--- a/src/corelib/mimetypes/qmimedatabase.cpp
|
||||||
|
+++ b/src/corelib/mimetypes/qmimedatabase.cpp
|
||||||
|
@@ -354,9 +354,10 @@ QMimeType QMimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mo
|
||||||
|
|
||||||
|
#ifdef Q_OS_UNIX
|
||||||
|
// Cannot access statBuf.st_mode from the filesystem engine, so we have to stat again.
|
||||||
|
+ // In addition we want to follow symlinks.
|
||||||
|
const QByteArray nativeFilePath = QFile::encodeName(file.fileName());
|
||||||
|
QT_STATBUF statBuffer;
|
||||||
|
- if (QT_LSTAT(nativeFilePath.constData(), &statBuffer) == 0) {
|
||||||
|
+ if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) {
|
||||||
|
if (S_ISCHR(statBuffer.st_mode))
|
||||||
|
return d->mimeTypeForName(QLatin1String("inode/chardevice"));
|
||||||
|
if (S_ISBLK(statBuffer.st_mode))
|
||||||
|
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
|
||||||
|
index 0171c4a..1b4dc02 100644
|
||||||
|
--- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
|
||||||
|
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
|
||||||
|
@@ -35,6 +35,11 @@
|
||||||
|
|
||||||
|
#include "qstandardpaths.h"
|
||||||
|
|
||||||
|
+#ifdef Q_OS_UNIX
|
||||||
|
+#include <sys/types.h>
|
||||||
|
+#include <sys/stat.h>
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#include <QtCore/QFile>
|
||||||
|
#include <QtCore/QFileInfo>
|
||||||
|
#include <QtCore/QStandardPaths>
|
||||||
|
@@ -646,6 +651,28 @@ void tst_QMimeDatabase::knownSuffix()
|
||||||
|
QCOMPARE(db.suffixForFileName(QString::fromLatin1("foo.tar.bz2")), QString::fromLatin1("tar.bz2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
+void tst_QMimeDatabase::symlinkToFifo() // QTBUG-48529
|
||||||
|
+{
|
||||||
|
+#ifdef Q_OS_UNIX
|
||||||
|
+ QTemporaryDir tempDir;
|
||||||
|
+ QVERIFY(tempDir.isValid());
|
||||||
|
+ const QString dir = tempDir.path();
|
||||||
|
+ const QString fifo = dir + "/fifo";
|
||||||
|
+ QCOMPARE(mkfifo(QFile::encodeName(fifo), 0006), 0);
|
||||||
|
+
|
||||||
|
+ QMimeDatabase db;
|
||||||
|
+ QCOMPARE(db.mimeTypeForFile(fifo).name(), QString::fromLatin1("inode/fifo"));
|
||||||
|
+
|
||||||
|
+ // Now make a symlink to the fifo
|
||||||
|
+ const QString link = dir + "/link";
|
||||||
|
+ QVERIFY(QFile::link(fifo, link));
|
||||||
|
+ QCOMPARE(db.mimeTypeForFile(link).name(), QString::fromLatin1("inode/fifo"));
|
||||||
|
+
|
||||||
|
+#else
|
||||||
|
+ QSKIP("This test requires pipes and symlinks");
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void tst_QMimeDatabase::findByFileName_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QString>("filePath");
|
||||||
|
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.h b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.h
|
||||||
|
index 2827bd2..4b703f1 100644
|
||||||
|
--- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.h
|
||||||
|
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.h
|
||||||
|
@@ -70,6 +70,7 @@ private slots:
|
||||||
|
void suffixes_data();
|
||||||
|
void suffixes();
|
||||||
|
void knownSuffix();
|
||||||
|
+ void symlinkToFifo();
|
||||||
|
void fromThreads();
|
||||||
|
|
||||||
|
// shared-mime-info test suite
|
||||||
|
--
|
||||||
|
2.6.2.2.g1b5ffa3
|
||||||
|
|
@ -1,3 +1,16 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Feb 21 00:52:42 UTC 2016 - wbauer@tmo.at
|
||||||
|
|
||||||
|
- Added QMimeDatabase-follow-symlinks-when-checking-for-FIFO.patch
|
||||||
|
to fix dolphin freeze when opening a folder containing symlinks
|
||||||
|
to special files (boo#957006, qtbug#48529)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Feb 20 16:08:45 UTC 2016 - hrvoje.senjan@gmail.com
|
||||||
|
|
||||||
|
- Update Add-option-to-disable-session-management-by-closing-windows.patch
|
||||||
|
to version actually commited upstream
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Feb 10 12:28:49 UTC 2016 - alarrosa@suse.com
|
Wed Feb 10 12:28:49 UTC 2016 - alarrosa@suse.com
|
||||||
|
|
||||||
|
@ -68,6 +68,7 @@ Patch3005: xcb-fix-yet-another-crash-when-screens-are-disconnected.patch
|
|||||||
Patch3006: xcb-dont-crash-in-mapToNativemapFromNative-if-the-screen-is-null.patch
|
Patch3006: xcb-dont-crash-in-mapToNativemapFromNative-if-the-screen-is-null.patch
|
||||||
Patch3007: qtwidgets_do_not-hide_show_via_WA_OutsideWSRange_for_native_widgets.patch
|
Patch3007: qtwidgets_do_not-hide_show_via_WA_OutsideWSRange_for_native_widgets.patch
|
||||||
Patch3008: Add-option-to-disable-session-management-by-closing-windows.patch
|
Patch3008: Add-option-to-disable-session-management-by-closing-windows.patch
|
||||||
|
Patch3009: QMimeDatabase-follow-symlinks-when-checking-for-FIFO.patch
|
||||||
BuildRequires: alsa-devel
|
BuildRequires: alsa-devel
|
||||||
BuildRequires: cups-devel
|
BuildRequires: cups-devel
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
@ -163,6 +164,7 @@ handling.
|
|||||||
%patch3006 -p1
|
%patch3006 -p1
|
||||||
%patch3007 -p1
|
%patch3007 -p1
|
||||||
%patch3008 -p1
|
%patch3008 -p1
|
||||||
|
%patch3009 -p1
|
||||||
|
|
||||||
# be sure not to use them
|
# be sure not to use them
|
||||||
rm -r src/3rdparty/{libjpeg,freetype,libpng,zlib}
|
rm -r src/3rdparty/{libjpeg,freetype,libpng,zlib}
|
||||||
|
Loading…
Reference in New Issue
Block a user