Merge remote-tracking branch 'origin/5.6.0' into 5.6
Change-Id: I91fb2886b4ab8f0b9e2e28329cec69dfa2cb5435
This commit is contained in:
138
dist/changes-5.6.0
vendored
Normal file
138
dist/changes-5.6.0
vendored
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
Qt 5.6 introduces many new features and improvements as well as bugfixes
|
||||||
|
over the 5.5.x series. For more details, refer to the online documentation
|
||||||
|
included in this distribution. The documentation is also available online:
|
||||||
|
|
||||||
|
http://doc.qt.io/qt-5.6
|
||||||
|
|
||||||
|
The Qt version 5.6 series is binary compatible with the 5.5.x series.
|
||||||
|
Applications compiled for 5.5 will continue to run with 5.6.
|
||||||
|
|
||||||
|
Some of the changes listed in this file include issue tracking numbers
|
||||||
|
corresponding to tasks in the Qt Bug Tracker:
|
||||||
|
|
||||||
|
http://bugreports.qt.io/
|
||||||
|
|
||||||
|
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||||
|
information about a particular change.
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* Important Behavior Changes *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
- QAudioOutput now transitions to IdleState instead of ActiveState when
|
||||||
|
calling resume() in push mode. This was already the documented behavior
|
||||||
|
but in practice, it was not respected on any platform. See QTBUG-50390.
|
||||||
|
|
||||||
|
- DirectShow is now the default backend on all desktop versions of Windows,
|
||||||
|
regardless of the compiler used. The Windows Media Foundation backend
|
||||||
|
(WMF) can be re-enabled by configuring Qt with the -wmf-backend option.
|
||||||
|
See QTBUG-45597.
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* Library *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
QtMultimedia
|
||||||
|
------------
|
||||||
|
|
||||||
|
- Added new Playlist QML type.
|
||||||
|
|
||||||
|
- Audio Engine QML types
|
||||||
|
* All types can now be created dynamically and added to the engine
|
||||||
|
using new 'add' functions.
|
||||||
|
|
||||||
|
- MediaPlayer, Audio and Video (QML):
|
||||||
|
* Added new audio role API.
|
||||||
|
* Added playlist support.
|
||||||
|
|
||||||
|
- QMediaPlayer:
|
||||||
|
* Added new audio role API.
|
||||||
|
|
||||||
|
- [QTBUG-49838] Fixed crash when playing very short WAV files with
|
||||||
|
QSoundEffect.
|
||||||
|
|
||||||
|
****************************************************************************
|
||||||
|
* Platform Specific Changes *
|
||||||
|
****************************************************************************
|
||||||
|
|
||||||
|
Android
|
||||||
|
-------
|
||||||
|
|
||||||
|
- QAudioOutput: improved detection of the default buffer size and sample
|
||||||
|
rate.
|
||||||
|
- [QTBUG-35416] Camera QVideoFrames can now me mapped when retrieved using
|
||||||
|
QAbstractVideoSurface or QVideoProbe.
|
||||||
|
- [QTBUG-37837] Fixed crash when recording the camera on specific devices.
|
||||||
|
- [QTBUG-46491] Fixed media player blocking the UI when loading a media.
|
||||||
|
- [QTBUG-49134] Fixed crash when starting the camera on specific devices.
|
||||||
|
- [QTBUG-50282] Fixed QAudioRecorder crashing when trying to start it
|
||||||
|
with invalid settings.
|
||||||
|
|
||||||
|
iOS / OS X
|
||||||
|
----------
|
||||||
|
|
||||||
|
- Greatly improved performance of displaying camera frames using the QML
|
||||||
|
VideoOutput type on iOS.
|
||||||
|
- Camera capture previews from the imageCaptured() signal are now in higher
|
||||||
|
resolutions.
|
||||||
|
- QMediaPlayer::isSeekable() (and QML counterpart) now correctly reports
|
||||||
|
the seekable status.
|
||||||
|
- QAudioRecorder::setVolume() is now functional.
|
||||||
|
- [QTBUG-45570] Fixed media player playback rate not working when set
|
||||||
|
before calling play().
|
||||||
|
- [QTBUG-48057] Media player now correctly seeks as soon as playback starts
|
||||||
|
when the position is changed before calling play().
|
||||||
|
- [QTBUG-48154] Fixed media player volume not working when set before
|
||||||
|
loading a media.
|
||||||
|
- [QTBUG-49170] It is not necessary anymore to set a viewfinder on a
|
||||||
|
QCamera to be able to query the supported viewfinder settings.
|
||||||
|
- [QTBUG-49170] Fixed QCamera ignoring the resolution set in
|
||||||
|
QCameraViewfinderSettings.
|
||||||
|
|
||||||
|
Linux
|
||||||
|
-----
|
||||||
|
|
||||||
|
- QCameraImageProcessing is now functional.
|
||||||
|
- [QTBUG-49531] Fixed QMediaPlayer not being able to play the same resource
|
||||||
|
file more than once.
|
||||||
|
|
||||||
|
QNX
|
||||||
|
---
|
||||||
|
|
||||||
|
- QAudioRecorder::setVolume() is now functional.
|
||||||
|
- [QTBUG-49668] Fixed 'loops' property not working for Audio, Video and
|
||||||
|
MediaPlayer QML types.
|
||||||
|
|
||||||
|
Windows
|
||||||
|
-------
|
||||||
|
|
||||||
|
- [QTBUG-45593] The DirectShow backend now supports HW-accelerated video
|
||||||
|
decoding.
|
||||||
|
- The QML MediaPlayer and Video types previously supported HW-accelerated
|
||||||
|
video decoding only when using the ANGLE OpenGL implementation. It now
|
||||||
|
works with desktop OpenGL as well.
|
||||||
|
- QAudioRecorder::setVolume() is now functional.
|
||||||
|
- QCameraImageProcessing is now functional.
|
||||||
|
- Fixed media player volume not working when set before a media is loaded.
|
||||||
|
- Fixed QVideoFrame::startTime() not returning any value.
|
||||||
|
- Fixed seek requests never being processed when QMediaPlayer::setPosition()
|
||||||
|
is called while the media is not playing.
|
||||||
|
|
||||||
|
WinRT
|
||||||
|
-----
|
||||||
|
|
||||||
|
- Improved camera support: focus, focus lock and video probe APIs are now
|
||||||
|
functional.
|
||||||
|
- [QTBUG-47465] Fixed camera viewfinder aspect ratio.
|
||||||
|
- [QTBUG-47809] Fixed camera frames being upside down after switching
|
||||||
|
between front and back cameras.
|
||||||
|
- [QTBUG-48331][QTBUG-49660] Fixed camera viewfinder frames not being
|
||||||
|
displayed on the Lumia 930 and 1520.
|
||||||
|
- [QTBUG-48534] Fixed QCamera::searchAndLock() blocking the UI.
|
||||||
|
- [QTBUG-48569] Fixed crash when resuming an application that uses the
|
||||||
|
camera.
|
||||||
|
- [QTBUG-48672] Fixed crash when mapping camera frames after the camera
|
||||||
|
has stopped.
|
||||||
|
- [QTBUG-49236] Fixed playback of local files.
|
||||||
|
- [QTBUG-49347] Fixed crash when the application is suspended while
|
||||||
|
a camera focus lock is in progress.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
CXX_MODULE = multimedia
|
CXX_MODULE = multimedia
|
||||||
TARGET = declarative_audioengine
|
TARGET = declarative_audioengine
|
||||||
TARGETPATH = QtAudioEngine
|
TARGETPATH = QtAudioEngine
|
||||||
IMPORT_VERSION = 1.0
|
IMPORT_VERSION = 1.1
|
||||||
|
|
||||||
QT += quick qml multimedia-private
|
QT += quick qml multimedia-private
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import QtQuick.tooling 1.2
|
|||||||
// It is used for QML tooling purposes only.
|
// It is used for QML tooling purposes only.
|
||||||
//
|
//
|
||||||
// This file was auto-generated by:
|
// This file was auto-generated by:
|
||||||
// 'qmlplugindump -nonrelocatable QtAudioEngine 1.0'
|
// 'qmlplugindump -nonrelocatable QtAudioEngine 1.1'
|
||||||
|
|
||||||
Module {
|
Module {
|
||||||
dependencies: []
|
dependencies: ["QtQuick 2.0"]
|
||||||
Component {
|
Component {
|
||||||
name: "QDeclarativeAttenuationModel"
|
name: "QDeclarativeAttenuationModel"
|
||||||
prototype: "QObject"
|
prototype: "QObject"
|
||||||
|
|||||||
@@ -79,17 +79,11 @@ void QDeclarativeAttenuationModel::setName(const QString& name)
|
|||||||
\inherits Item
|
\inherits Item
|
||||||
\preliminary
|
\preliminary
|
||||||
|
|
||||||
This type is part of the \b{QtAudioEngine 1.0} module.
|
|
||||||
|
|
||||||
AttenuationModelLinear must be defined inside \l AudioEngine or be added to it using
|
AttenuationModelLinear must be defined inside \l AudioEngine or be added to it using
|
||||||
\l{QtAudioEngine::AudioEngine::addAttenuationModel()}{AudioEngine.addAttenuationModel()}
|
\l{QtAudioEngine::AudioEngine::addAttenuationModel()}{AudioEngine.addAttenuationModel()}
|
||||||
if AttenuationModelLinear is created dynamically.
|
if AttenuationModelLinear is created dynamically.
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color:"white"
|
color:"white"
|
||||||
width: 300
|
width: 300
|
||||||
@@ -214,17 +208,11 @@ qreal QDeclarativeAttenuationModelLinear::calculateGain(const QVector3D &listene
|
|||||||
\inherits Item
|
\inherits Item
|
||||||
\preliminary
|
\preliminary
|
||||||
|
|
||||||
This type is part of the \b{QtAudioEngine 1.0} module.
|
|
||||||
|
|
||||||
AttenuationModelInverse must be defined inside \l AudioEngine or be added to it using
|
AttenuationModelInverse must be defined inside \l AudioEngine or be added to it using
|
||||||
\l{QtAudioEngine::AudioEngine::addAttenuationModel()}{AudioEngine.addAttenuationModel()}
|
\l{QtAudioEngine::AudioEngine::addAttenuationModel()}{AudioEngine.addAttenuationModel()}
|
||||||
if AttenuationModelInverse is created dynamically.
|
if AttenuationModelInverse is created dynamically.
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color:"white"
|
color:"white"
|
||||||
width: 300
|
width: 300
|
||||||
|
|||||||
@@ -48,17 +48,12 @@ QT_USE_NAMESPACE
|
|||||||
\inherits Item
|
\inherits Item
|
||||||
\preliminary
|
\preliminary
|
||||||
|
|
||||||
This type is part of the \b{QtAudioEngine 1.0} module.
|
|
||||||
|
|
||||||
An instance of AudioCategory can be accessed through \l {QtAudioEngine::AudioEngine::categories}
|
An instance of AudioCategory can be accessed through \l {QtAudioEngine::AudioEngine::categories}
|
||||||
{AudioEngine.categories} with its unique name and must be defined inside AudioEngine or be added
|
{AudioEngine.categories} with its unique name and must be defined inside AudioEngine or be added
|
||||||
to it using \l{QtAudioEngine::AudioEngine::addAudioCategory()}{AudioEngine.addAudioCategory()} if
|
to it using \l{QtAudioEngine::AudioEngine::addAudioCategory()}{AudioEngine.addAudioCategory()} if
|
||||||
AudioCategory is created dynamically.
|
AudioCategory is created dynamically.
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color:"white"
|
color:"white"
|
||||||
width: 300
|
width: 300
|
||||||
|
|||||||
@@ -57,12 +57,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
\inherits Item
|
\inherits Item
|
||||||
\preliminary
|
\preliminary
|
||||||
|
|
||||||
\c AudioEngine is part of the \b{QtAudioEngine 1.0} module.
|
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color:"white"
|
color:"white"
|
||||||
width: 300
|
width: 300
|
||||||
|
|||||||
@@ -49,15 +49,10 @@ QT_USE_NAMESPACE
|
|||||||
\inherits Item
|
\inherits Item
|
||||||
\preliminary
|
\preliminary
|
||||||
|
|
||||||
This type is part of the \b{QtAudioEngine 1.0} module.
|
|
||||||
|
|
||||||
AudioListener will have only one global instance and you can either access it through the
|
AudioListener will have only one global instance and you can either access it through the
|
||||||
listener property of AudioEngine:
|
listener property of AudioEngine:
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color:"white"
|
color:"white"
|
||||||
width: 300
|
width: 300
|
||||||
@@ -92,9 +87,6 @@ QT_USE_NAMESPACE
|
|||||||
or alternatively, by defining an AudioListener outside AudioEngine:
|
or alternatively, by defining an AudioListener outside AudioEngine:
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color:"white"
|
color:"white"
|
||||||
width: 300
|
width: 300
|
||||||
|
|||||||
@@ -51,17 +51,12 @@ QT_USE_NAMESPACE
|
|||||||
\inherits Item
|
\inherits Item
|
||||||
\preliminary
|
\preliminary
|
||||||
|
|
||||||
\c AudioSample is part of the \b{QtAudioEngine 1.0} module.
|
|
||||||
|
|
||||||
It can be accessed through QtAudioEngine::AudioEngine::samples with its unique
|
It can be accessed through QtAudioEngine::AudioEngine::samples with its unique
|
||||||
name and must be defined inside AudioEngine or be added to it using
|
name and must be defined inside AudioEngine or be added to it using
|
||||||
\l{QtAudioEngine::AudioEngine::addAudioSample()}{AudioEngine.addAudioSample()}
|
\l{QtAudioEngine::AudioEngine::addAudioSample()}{AudioEngine.addAudioSample()}
|
||||||
if AudioSample is created dynamically.
|
if AudioSample is created dynamically.
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color:"white"
|
color:"white"
|
||||||
width: 300
|
width: 300
|
||||||
|
|||||||
@@ -53,16 +53,11 @@ QT_USE_NAMESPACE
|
|||||||
\inherits Item
|
\inherits Item
|
||||||
\preliminary
|
\preliminary
|
||||||
|
|
||||||
This type is part of the \b{QtAudioEngine 1.0} module.
|
|
||||||
|
|
||||||
PlayVariation must be defined inside a \l Sound or be added to it using
|
PlayVariation must be defined inside a \l Sound or be added to it using
|
||||||
\l{QtAudioEngine::Sound::addPlayVariation()}{Sound.addPlayVariation()}
|
\l{QtAudioEngine::Sound::addPlayVariation()}{Sound.addPlayVariation()}
|
||||||
if PlayVariation is created dynamically.
|
if PlayVariation is created dynamically.
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color:"white"
|
color:"white"
|
||||||
width: 300
|
width: 300
|
||||||
|
|||||||
@@ -159,16 +159,12 @@ void QDeclarativeSoundCone::setEngine(QDeclarativeAudioEngine *engine)
|
|||||||
\inherits Item
|
\inherits Item
|
||||||
\preliminary
|
\preliminary
|
||||||
|
|
||||||
This type is part of the \b{QtAudioEngine 1.0} module.
|
|
||||||
|
|
||||||
Sound can be accessed through QtAudioEngine::AudioEngine::sounds with its unique name
|
Sound can be accessed through QtAudioEngine::AudioEngine::sounds with its unique name
|
||||||
and must be defined inside AudioEngine or be added to it using
|
and must be defined inside AudioEngine or be added to it using
|
||||||
\l{QtAudioEngine::AudioEngine::addSound()}{AudioEngine.addSound()}
|
\l{QtAudioEngine::AudioEngine::addSound()}{AudioEngine.addSound()}
|
||||||
if \l Sound is created dynamically.
|
if \l Sound is created dynamically.
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color:"white"
|
color:"white"
|
||||||
|
|||||||
@@ -52,15 +52,10 @@ QT_USE_NAMESPACE
|
|||||||
\inherits Item
|
\inherits Item
|
||||||
\preliminary
|
\preliminary
|
||||||
|
|
||||||
This type is part of the \b{QtAudioEngine 1.0} module.
|
|
||||||
|
|
||||||
There are two ways to create SoundInstance objects. You can obtain it by calling newInstance
|
There are two ways to create SoundInstance objects. You can obtain it by calling newInstance
|
||||||
method of a \l Sound:
|
method of a \l Sound:
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id:root
|
id:root
|
||||||
color:"white"
|
color:"white"
|
||||||
@@ -98,9 +93,6 @@ QT_USE_NAMESPACE
|
|||||||
easier qml bindings:
|
easier qml bindings:
|
||||||
|
|
||||||
\qml
|
\qml
|
||||||
import QtQuick 2.0
|
|
||||||
import QtAudioEngine 1.0
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id:root
|
id:root
|
||||||
color:"white"
|
color:"white"
|
||||||
|
|||||||
@@ -177,12 +177,12 @@ what changed, and what you might need to change when porting code.
|
|||||||
\section2 QML Types
|
\section2 QML Types
|
||||||
The QML types are accessed by using:
|
The QML types are accessed by using:
|
||||||
\code
|
\code
|
||||||
import QtMultimedia 5.5
|
import QtMultimedia 5.6
|
||||||
\endcode
|
\endcode
|
||||||
\annotatedlist multimedia_qml
|
\annotatedlist multimedia_qml
|
||||||
The following types are accessed by using \l{Qt Audio Engine QML Types}{Qt Audio Engine}:
|
The following types are accessed by using \l{Qt Audio Engine QML Types}{Qt Audio Engine}:
|
||||||
\code
|
\code
|
||||||
import QtAudioEngine 1.0
|
import QtAudioEngine 1.1
|
||||||
\endcode
|
\endcode
|
||||||
\annotatedlist multimedia_audioengine
|
\annotatedlist multimedia_audioengine
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmlmodule QtAudioEngine 1.0
|
\qmlmodule QtAudioEngine 1.1
|
||||||
\title Qt Audio Engine QML Types
|
\title Qt Audio Engine QML Types
|
||||||
\ingroup qmlmodules
|
\ingroup qmlmodules
|
||||||
\brief Provides QML types for 3D positional audio playback and content management.
|
\brief Provides QML types for 3D positional audio playback and content management.
|
||||||
@@ -37,7 +37,7 @@ Engine provides types for 3D positional audio playback and content management.
|
|||||||
The QML types can be imported into your application using the following import
|
The QML types can be imported into your application using the following import
|
||||||
statement in your .qml file:
|
statement in your .qml file:
|
||||||
\code
|
\code
|
||||||
import QtAudioEngine 1.0
|
import QtAudioEngine 1.1
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
\section1 Qt Audio Engine Features
|
\section1 Qt Audio Engine Features
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
import statement in your \c {.qml} file.
|
import statement in your \c {.qml} file.
|
||||||
|
|
||||||
\code
|
\code
|
||||||
import QtMultimedia 5.5
|
import QtMultimedia 5.6
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
If you intend to use the C++ classes in your application, include the C++
|
If you intend to use the C++ classes in your application, include the C++
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmlmodule QtMultimedia 5.5
|
\qmlmodule QtMultimedia 5.6
|
||||||
\title Qt Multimedia QML Types
|
\title Qt Multimedia QML Types
|
||||||
\ingroup qmlmodules
|
\ingroup qmlmodules
|
||||||
\brief Provides QML types for multimedia support.
|
\brief Provides QML types for multimedia support.
|
||||||
@@ -42,7 +42,7 @@ The QML types for \l{Qt Multimedia} support the basic use cases such as:
|
|||||||
The QML types can be imported into your application using the following import
|
The QML types can be imported into your application using the following import
|
||||||
statement in your .qml file:
|
statement in your .qml file:
|
||||||
\code
|
\code
|
||||||
import QtMultimedia 5.5
|
import QtMultimedia 5.6
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
\section1 QML types
|
\section1 QML types
|
||||||
|
|||||||
@@ -34,6 +34,8 @@
|
|||||||
#include "QtCore/qdebug.h"
|
#include "QtCore/qdebug.h"
|
||||||
#include "mfaudioendpointcontrol.h"
|
#include "mfaudioendpointcontrol.h"
|
||||||
|
|
||||||
|
#include <mmdeviceapi.h>
|
||||||
|
|
||||||
MFAudioEndpointControl::MFAudioEndpointControl(QObject *parent)
|
MFAudioEndpointControl::MFAudioEndpointControl(QObject *parent)
|
||||||
: QAudioOutputSelectorControl(parent)
|
: QAudioOutputSelectorControl(parent)
|
||||||
, m_currentActivate(0)
|
, m_currentActivate(0)
|
||||||
|
|||||||
@@ -36,7 +36,6 @@
|
|||||||
|
|
||||||
#include <mfapi.h>
|
#include <mfapi.h>
|
||||||
#include <mfidl.h>
|
#include <mfidl.h>
|
||||||
#include <mmdeviceapi.h>
|
|
||||||
|
|
||||||
#include "qaudiooutputselectorcontrol.h"
|
#include "qaudiooutputselectorcontrol.h"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user