Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
408 results
Show changes
Commits on Source (2)
......@@ -46,19 +46,15 @@ typedef enum libvlc_dialog_question_type
/**
* Dialog callbacks to be implemented
*
* @attention starting with vlc 4.0.0 the error callback (pf_display_error) is
* no longer part of this struct and need to be registered separately
* using @a libvlc_dialog_set_error_callback
*
* @see libvlc_dialog_set_error_callback
*/
typedef struct libvlc_dialog_cbs
{
/**
* Called when an error message needs to be displayed
*
* @param p_data opaque pointer for the callback
* @param psz_title title of the dialog
* @param psz_text text of the dialog
*/
void (*pf_display_error)(void *p_data, const char *psz_title,
const char *psz_text);
/**
* Called when a login dialog needs to be displayed
*
......@@ -154,6 +150,16 @@ typedef struct libvlc_dialog_cbs
float f_position, const char *psz_text);
} libvlc_dialog_cbs;
/**
* Called when an error message needs to be displayed
*
* @param p_data opaque pointer for the callback
* @param psz_title title of the dialog
* @param psz_text text of the dialog
*/
typedef void (*libvlc_dialog_error_cbs)(void *p_data, const char *psz_title, const char *psz_text);
/**
* Register callbacks in order to handle VLC dialogs
*
......@@ -166,6 +172,18 @@ LIBVLC_API void
libvlc_dialog_set_callbacks(libvlc_instance_t *p_instance,
const libvlc_dialog_cbs *p_cbs, void *p_data);
/*
* Register callback in order to handle VLC error messages
*
* @version LibVLC 4.0.0 and later.
*
* @param p_cbs a pointer to callback, or NULL to unregister callback.
* @param p_data opaque pointer for the callback
*/
LIBVLC_API void
libvlc_dialog_set_error_callback(libvlc_instance_t *p_instance,
libvlc_dialog_error_cbs p_cbs, void *p_data);
/**
* Associate an opaque pointer with the dialog id
*
......
......@@ -274,16 +274,6 @@ vlc_dialog_is_cancelled(vlc_object_t *p_obj, vlc_dialog_id *p_id);
*/
typedef struct vlc_dialog_cbs
{
/**
* Called when an error message needs to be displayed
*
* @param p_data opaque pointer for the callback
* @param psz_title title of the dialog
* @param psz_text text of the dialog
*/
void (*pf_display_error)(void *p_data, const char *psz_title,
const char *psz_text);
/**
* Called when a login dialog needs to be displayed
*
......@@ -379,6 +369,15 @@ typedef struct vlc_dialog_cbs
float f_position, const char *psz_text);
} vlc_dialog_cbs;
/**
* Called when an error message needs to be displayed
*
* @param p_data opaque pointer for the callback
* @param psz_title title of the dialog
* @param psz_text text of the dialog
*/
typedef void (*vlc_dialog_error_cbs)(void *p_data, const char *psz_title, const char *psz_text);
/**
* Register callbacks to handle VLC dialogs
*
......@@ -391,6 +390,20 @@ vlc_dialog_provider_set_callbacks(vlc_object_t *p_obj,
#define vlc_dialog_provider_set_callbacks(a, b, c) \
vlc_dialog_provider_set_callbacks(VLC_OBJECT(a), b, c)
/**
* Register callbacks to handle VLC error messages
*
* @version LibVLC 4.0.0 and later.
*
* @param p_cbs a pointer to the callback, or NULL to unregister the callback.
* @param p_data opaque pointer for the callback
*/
VLC_API void
vlc_dialog_provider_set_error_callback(vlc_object_t *p_obj,
vlc_dialog_error_cbs p_cbs, void *p_data);
#define vlc_dialog_provider_set_error_callback(a, b, c) \
vlc_dialog_provider_set_error_callback(VLC_OBJECT(a), b, c)
/**
* Associate an opaque pointer with the dialog id
*/
......
......@@ -44,15 +44,6 @@ vlc_to_libvlc_dialog_question_type(vlc_dialog_question_type i_type)
}
}
static void
display_error_cb(void *p_data, const char *psz_title, const char *psz_text)
{
libvlc_instance_t *p_instance = p_data;
p_instance->dialog.cbs.pf_display_error(p_instance->dialog.data, psz_title,
psz_text);
}
static void
display_login_cb(void *p_data, vlc_dialog_id *p_id, const char *psz_title,
const char *psz_text, const char *psz_default_username,
......@@ -124,8 +115,6 @@ libvlc_dialog_set_callbacks(libvlc_instance_t *p_instance,
if (p_cbs != NULL)
{
const vlc_dialog_cbs dialog_cbs = {
.pf_display_error = p_cbs->pf_display_error != NULL ?
display_error_cb : NULL,
.pf_display_login = p_cbs->pf_display_login ?
display_login_cb : NULL,
.pf_display_question = p_cbs->pf_display_question != NULL ?
......@@ -146,6 +135,14 @@ libvlc_dialog_set_callbacks(libvlc_instance_t *p_instance,
vlc_dialog_provider_set_callbacks(p_libvlc, NULL, NULL);
}
void
libvlc_dialog_set_error_callback(libvlc_instance_t *p_instance,
libvlc_dialog_error_cbs p_cbs, void *p_data)
{
libvlc_int_t *p_libvlc = p_instance->p_libvlc_int;
vlc_dialog_provider_set_error_callback(p_libvlc, p_cbs, p_data);
}
void
libvlc_dialog_set_context(libvlc_dialog_id *p_id, void *p_context)
{
......
......@@ -186,7 +186,6 @@ static void updateProgressCallback(void *p_data,
/* subscribe to various interactive dialogues */
const vlc_dialog_cbs cbs = {
displayErrorCallback,
displayLoginCallback,
displayQuestionCallback,
displayProgressCallback,
......@@ -194,6 +193,7 @@ static void updateProgressCallback(void *p_data,
updateProgressCallback
};
vlc_dialog_provider_set_error_callback(p_intf, displayErrorCallback, (__bridge void *)self);
vlc_dialog_provider_set_callbacks(p_intf, &cbs, (__bridge void *)self);
}
......@@ -206,6 +206,7 @@ static void updateProgressCallback(void *p_data,
intf_thread_t *p_intf = getIntf();
vlc_dialog_provider_set_callbacks(p_intf, NULL, NULL);
vlc_dialog_provider_set_error_callback(p_intf, NULL, NULL);
}
-(void)awakeFromNib
......
......@@ -24,11 +24,23 @@
#include <vlc_dialog.h>
#include <qt.hpp>
#include "maininterface/mainctx.hpp"
//=================================================================================================
// DialogErrorModel
//=================================================================================================
/* explicit */ DialogErrorModel::DialogErrorModel(QObject * parent) : QAbstractListModel(parent) {}
DialogErrorModel::DialogErrorModel(qt_intf_t * intf, QObject * parent)
: QAbstractListModel(parent)
, m_intf(intf)
{
vlc_dialog_provider_set_error_callback(intf, &DialogErrorModel::onError, this);
}
DialogErrorModel::~DialogErrorModel()
{
vlc_dialog_provider_set_error_callback(m_intf, nullptr, nullptr);
}
//-------------------------------------------------------------------------------------------------
// QAbstractItemModel implementation
......@@ -74,6 +86,19 @@ QHash<int, QByteArray> DialogErrorModel::roleNames() const /* override */
// Private functions
//-------------------------------------------------------------------------------------------------
void DialogErrorModel::onError(void * p_data,
const char * psz_title, const char * psz_text)
{
auto model = static_cast<DialogErrorModel *>(p_data);
DialogErrorModel::DialogError error { psz_title, psz_text };
QMetaObject::invokeMethod(model, [model, error = std::move(error)]()
{
model->pushError(error);
});
}
void DialogErrorModel::pushError(const DialogError & error)
{
int row = m_data.count();
......@@ -100,17 +125,41 @@ int DialogErrorModel::count() const
// DialogModel
//=================================================================================================
/* explicit */ DialogModel::DialogModel(qt_intf_t * intf, QObject * parent)
: QObject(parent), m_intf(intf)
DialogModel::DialogModel(QObject* parent)
: QObject(parent)
{
m_model = new DialogErrorModel(this);
}
const vlc_dialog_cbs cbs =
{
onError, onLogin, onQuestion, onProgress, onCancelled, onProgressUpdated
};
DialogModel::~DialogModel()
{
if (m_ctx)
vlc_dialog_provider_set_callbacks(m_ctx->getIntf(), nullptr, nullptr);
}
vlc_dialog_provider_set_callbacks(intf, &cbs, this);
MainCtx* DialogModel::getCtx() const
{
return m_ctx;
}
void DialogModel::setCtx(MainCtx* ctx)
{
if (ctx == m_ctx)
return;
if (ctx) {
m_ctx = ctx;
const vlc_dialog_cbs cbs =
{
onLogin, onQuestion, onProgress, onCancelled, onProgressUpdated
};
vlc_dialog_provider_set_callbacks(ctx->getIntf(), &cbs, this);
} else {
if (m_ctx)
vlc_dialog_provider_set_callbacks(m_ctx->getIntf(), nullptr, nullptr);
m_ctx = nullptr;
}
emit ctxChanged();
}
//-------------------------------------------------------------------------------------------------
......@@ -142,18 +191,6 @@ int DialogErrorModel::count() const
// Private static functions
//-------------------------------------------------------------------------------------------------
/* static */ void DialogModel::onError(void * p_data,
const char * psz_title, const char * psz_text)
{
DialogModel * model = static_cast<DialogModel *>(p_data);
DialogErrorModel::DialogError error { psz_title, psz_text };
QMetaObject::invokeMethod(model, [model, error = std::move(error)]()
{
model->m_model->pushError(error);
});
}
/* static */ void DialogModel::onLogin(void * p_data, vlc_dialog_id * dialogId,
const char * psz_title, const char * psz_text,
......@@ -200,12 +237,3 @@ int DialogErrorModel::count() const
emit model->cancelled(dialogId);
}
//-------------------------------------------------------------------------------------------------
// Properties
//-------------------------------------------------------------------------------------------------
DialogErrorModel * DialogModel::model() const
{
return m_model;
}
......@@ -34,14 +34,6 @@
#include "qt.hpp"
// Forward declarations
class DialogModel;
//-------------------------------------------------------------------------------------------------
// DialogId
//-------------------------------------------------------------------------------------------------
class DialogId
{
Q_GADGET
......@@ -61,9 +53,6 @@ public: // Variables
Q_DECLARE_METATYPE(DialogId)
//-------------------------------------------------------------------------------------------------
// DialogErrorModel
//-------------------------------------------------------------------------------------------------
class DialogErrorModel : public QAbstractListModel
{
......@@ -88,7 +77,8 @@ private:
};
public:
explicit DialogErrorModel(QObject * parent = nullptr);
explicit DialogErrorModel(qt_intf_t* intf, QObject * parent = nullptr);
~DialogErrorModel();
public: // QAbstractItemModel implementation
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const override;
......@@ -101,6 +91,8 @@ public: // QAbstractItemModel reimplementation
private: // Functions
void pushError(const DialogError & error);
static void onError(void * p_data, const char * psz_title, const char * psz_text);
signals:
void modelChanged();
......@@ -111,29 +103,24 @@ public: // Properties
private: // Variables
QList<DialogError> m_data;
private:
friend class DialogModel;
qt_intf_t* m_intf = nullptr;
};
//-------------------------------------------------------------------------------------------------
// DialogModel
//-------------------------------------------------------------------------------------------------
class DialogModel : public QObject
{
Q_OBJECT
Q_ENUMS(QuestionType)
Q_PROPERTY(DialogErrorModel * model READ model CONSTANT FINAL)
Q_PROPERTY(MainCtx* ctx READ getCtx WRITE setCtx NOTIFY ctxChanged FINAL)
public: // Enums
// NOTE: Is it really useful to have this declared here ?
enum QuestionType { QUESTION_NORMAL, QUESTION_WARNING, QUESTION_CRITICAL };
public:
explicit DialogModel(qt_intf_t * intf, QObject * parent = nullptr);
explicit DialogModel(QObject *parent = nullptr);
~DialogModel();
public: // Interface
Q_INVOKABLE void post_login(DialogId dialogId, const QString & username,
......@@ -145,8 +132,6 @@ public: // Interface
Q_INVOKABLE void dismiss(DialogId dialogId);
private: // Static functions
static void onError(void * p_data, const char * psz_title, const char * psz_text);
static void onLogin(void * p_data, vlc_dialog_id * dialogId, const char * psz_title,
const char * psz_text, const char * psz_default_username,
bool b_ask_store);
......@@ -165,11 +150,11 @@ private: // Static functions
static void onCancelled(void * p_data, vlc_dialog_id * dialogId);
public:
MainCtx* getCtx() const;
void setCtx(MainCtx*);
signals:
void errorBegin();
void errorEnd ();
void login(DialogId dialogId, const QString & title,
const QString & text, const QString & defaultUsername,
bool b_ask_store);
......@@ -184,13 +169,10 @@ signals:
void cancelled(DialogId dialogId);
public: // Properties
DialogErrorModel * model() const;
private: // Variables
DialogErrorModel * m_model;
void ctxChanged();
qt_intf_t * m_intf;
private:
MainCtx* m_ctx = nullptr;
};
#endif // DIALOGMODEL_HPP
......@@ -34,11 +34,6 @@ Item {
property Item bgContent: null
//---------------------------------------------------------------------------------------------
// Private
readonly property DialogErrorModel _model: DialogModel.model
//---------------------------------------------------------------------------------------------
// Signal
//---------------------------------------------------------------------------------------------
......@@ -49,14 +44,14 @@ Item {
// Events
//---------------------------------------------------------------------------------------------
Component.onCompleted: if (_model.count) errorPopup.state = "visible"
Component.onCompleted: if (DialogErrorModel.count) errorPopup.state = "visible"
Component.onDestruction: {
if (questionDialog.dialogId !== null) {
DialogModel.dismiss(questionDialog.dialogId)
dialogModel.dismiss(questionDialog.dialogId)
questionDialog.dialogId = null
} if (loginDialog.dialogId !== null) {
DialogModel.dismiss(loginDialog.dialogId)
dialogModel.dismiss(loginDialog.dialogId)
loginDialog.dialogId = null
}
}
......@@ -75,7 +70,7 @@ Item {
Connections
{
target: DialogModel
target: dialogModel
onLogin: {
loginDialog.dialogId = dialogId
......@@ -106,20 +101,20 @@ Item {
if (questionDialog.dialogId === dialogId) {
questionDialog.close()
questionDialog.dialogId = null
DialogModel.dismiss(dialogId)
dialogModel.dismiss(dialogId)
} else if (loginDialog.dialogId === dialogId) {
loginDialog.close()
loginDialog.dialogId = null
DialogModel.dismiss(dialogId)
dialogModel.dismiss(dialogId)
} else {
DialogModel.dismiss(dialogId)
dialogModel.dismiss(dialogId)
}
}
}
Connections
{
target: _model
target: DialogErrorModel
onCountChanged: errorPopup.state = "visible"
}
......@@ -128,6 +123,12 @@ Item {
// Childs
//---------------------------------------------------------------------------------------------
DialogModel {
id: dialogModel
ctx: MainCtx
}
Widgets.DrawerExt {
id: errorPopup
anchors {
......@@ -149,13 +150,13 @@ Item {
anchors.fill: parent
anchors.margins: VLCStyle.fontHeight_normal / 2
ScrollBar.vertical: ScrollBar{}
contentY: VLCStyle.fontHeight_normal * ((_model.count * 2) - 4)
contentY: VLCStyle.fontHeight_normal * ((DialogErrorModel.count * 2) - 4)
clip: true
ListView {
width: parent.width
height: VLCStyle.fontHeight_normal * _model.count * 2
model: _model
height: VLCStyle.fontHeight_normal * DialogErrorModel.count * 2
model: DialogErrorModel
delegate: Column {
Text {
text: model.title
......@@ -305,13 +306,13 @@ Item {
onAccepted: {
if (loginDialog.dialogId !== null) {
DialogModel.post_login(loginDialog.dialogId, username.text, password.text, savePassword.checked)
dialogModel.post_login(loginDialog.dialogId, username.text, password.text, savePassword.checked)
loginDialog.dialogId = null
}
}
onRejected: {
if (loginDialog.dialogId !== null) {
DialogModel.dismiss(loginDialog.dialogId)
dialogModel.dismiss(loginDialog.dialogId)
loginDialog.dialogId = null
}
}
......@@ -366,7 +367,7 @@ Item {
Keys.onPressed: Navigation.defaultKeyAction(event)
onClicked: {
DialogModel.dismiss(questionDialog.dialogId)
dialogModel.dismiss(questionDialog.dialogId)
questionDialog.dialogId = null
questionDialog.close()
}
......@@ -385,7 +386,7 @@ Item {
Keys.onPressed: Navigation.defaultKeyAction(event)
onClicked: {
DialogModel.post_action1(questionDialog.dialogId)
dialogModel.post_action1(questionDialog.dialogId)
questionDialog.dialogId = null
questionDialog.close()
}
......@@ -402,7 +403,7 @@ Item {
Keys.onPressed: Navigation.defaultKeyAction(event)
onClicked: {
DialogModel.post_action2(questionDialog.dialogId)
dialogModel.post_action2(questionDialog.dialogId)
questionDialog.dialogId = null
questionDialog.close()
}
......
......@@ -126,7 +126,7 @@ MainUI::MainUI(qt_intf_t *p_intf, MainCtx *mainCtx, QWindow* interfaceWindow, Q
SingletonRegisterHelper<NavigationHistory>::setInstance( new NavigationHistory(this) );
SingletonRegisterHelper<I18n>::setInstance( new I18n(this) );
SingletonRegisterHelper<SystemPalette>::setInstance( new SystemPalette(this) );
SingletonRegisterHelper<DialogModel>::setInstance( new DialogModel(m_intf, this));
SingletonRegisterHelper<DialogErrorModel>::setInstance( new DialogErrorModel(m_intf, this));
SingletonRegisterHelper<QmlKeyHelper>::setInstance( new QmlKeyHelper(this) );
if (m_mainCtx->hasMediaLibrary())
......@@ -207,7 +207,7 @@ void MainUI::registerQMLTypes()
qmlRegisterSingletonType<I18n>(uri, versionMajor, versionMinor, "I18n", SingletonRegisterHelper<I18n>::callback);
qmlRegisterSingletonType<DialogsProvider>(uri, versionMajor, versionMinor, "DialogsProvider", SingletonRegisterHelper<DialogsProvider>::callback);
qmlRegisterSingletonType<SystemPalette>(uri, versionMajor, versionMinor, "SystemPalette", SingletonRegisterHelper<SystemPalette>::callback);
qmlRegisterSingletonType<DialogModel>(uri, versionMajor, versionMinor, "DialogModel", SingletonRegisterHelper<DialogModel>::callback);
qmlRegisterSingletonType<DialogErrorModel>(uri, versionMajor, versionMinor, "DialogErrorModel", SingletonRegisterHelper<DialogErrorModel>::callback);
qmlRegisterSingletonType<QmlKeyHelper>(uri, versionMajor, versionMinor, "KeyHelper", SingletonRegisterHelper<QmlKeyHelper>::callback);
qmlRegisterUncreatableType<QAbstractItemModel>(uri, versionMajor, versionMinor, "QtAbstractItemModel", "");
......@@ -245,6 +245,7 @@ void MainUI::registerQMLTypes()
qmlRegisterType<AboutModel>( uri, versionMajor, versionMinor, "AboutModel" );
qmlRegisterUncreatableType<DialogErrorModel>( uri, versionMajor, versionMinor, "DialogErrorModel", "");
qmlRegisterType<DialogModel>(uri, versionMajor, versionMinor, "DialogModel");
qRegisterMetaType<DialogId>();
qmlRegisterUncreatableType<DialogId>( uri, versionMajor, versionMinor, "DialogId", "");
......
......@@ -40,6 +40,9 @@ struct vlc_dialog_provider
vlc_dialog_cbs cbs;
void * p_cbs_data;
vlc_dialog_error_cbs err_cbs;
void * p_err_cbs_data;
vlc_dialog_ext_update_cb pf_ext_update;
void * p_ext_data;
};
......@@ -157,6 +160,9 @@ libvlc_InternalDialogInit(libvlc_int_t *p_libvlc)
memset(&p_provider->cbs, 0, sizeof(p_provider->cbs));
p_provider->p_cbs_data = NULL;
p_provider->err_cbs = NULL;
p_provider->p_err_cbs_data = NULL;
p_provider->pf_ext_update = NULL;
p_provider->p_ext_data = NULL;
libvlc_priv(p_libvlc)->p_dialog_provider = p_provider;
......@@ -271,6 +277,29 @@ vlc_dialog_provider_set_callbacks(vlc_object_t *p_obj,
vlc_mutex_unlock(&p_provider->lock);
}
#undef vlc_dialog_provider_set_error_callback
void
vlc_dialog_provider_set_error_callback(vlc_object_t *p_obj,
vlc_dialog_error_cbs p_cbs, void *p_data)
{
assert(p_obj != NULL);
vlc_dialog_provider *p_provider = get_dialog_provider(p_obj, false);
vlc_mutex_lock(&p_provider->lock);
if (p_cbs == NULL)
{
p_provider->err_cbs = NULL;
p_provider->p_err_cbs_data = NULL;
}
else
{
p_provider->err_cbs = p_cbs;
p_provider->p_err_cbs_data = p_data;
}
vlc_mutex_unlock(&p_provider->lock);
}
static void
dialog_wait_interrupted(void *p_data)
{
......@@ -328,7 +357,7 @@ dialog_display_error_va(vlc_dialog_provider *p_provider, const char *psz_title,
const char *psz_fmt, va_list ap)
{
vlc_mutex_lock(&p_provider->lock);
if (p_provider->cbs.pf_display_error == NULL)
if (p_provider->err_cbs == NULL)
{
vlc_mutex_unlock(&p_provider->lock);
return VLC_EGENERIC;
......@@ -341,7 +370,7 @@ dialog_display_error_va(vlc_dialog_provider *p_provider, const char *psz_title,
return VLC_ENOMEM;
}
p_provider->cbs.pf_display_error(p_provider->p_cbs_data, psz_title, psz_text);
p_provider->err_cbs(p_provider->p_err_cbs_data, psz_title, psz_text);
free(psz_text);
vlc_mutex_unlock(&p_provider->lock);
......
......@@ -533,6 +533,7 @@ vlc_dialog_id_post_login
vlc_dialog_id_set_context
vlc_dialog_is_cancelled
vlc_dialog_provider_set_callbacks
vlc_dialog_provider_set_error_callback
vlc_dialog_provider_set_ext_callback
vlc_dialog_release
vlc_dialog_update_progress
......
......@@ -294,7 +294,6 @@ main(int i_argc, char *ppsz_argv[])
printf("testing dialog callbacks\n");
const vlc_dialog_cbs cbs = {
.pf_display_error = display_error_cb,
.pf_display_login = display_login_cb,
.pf_display_question = display_question_cb,
.pf_display_progress = display_progress_cb,
......@@ -303,7 +302,9 @@ main(int i_argc, char *ppsz_argv[])
};
struct cb_answer ans = { 0 };
vlc_dialog_provider_set_callbacks(p_libvlc->p_libvlc_int, &cbs, &ans);
vlc_dialog_provider_set_error_callback(p_libvlc->p_libvlc_int, &display_error_cb, &ans);
test_dialogs(VLC_OBJECT(p_libvlc->p_libvlc_int), &ans, 100000);
vlc_dialog_provider_set_error_callback(p_libvlc->p_libvlc_int, NULL, NULL);
vlc_dialog_provider_set_callbacks(p_libvlc->p_libvlc_int, NULL, NULL);
libvlc_release(p_libvlc);
......