Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=1a9b527c18e2614cbd758acd6dc8ceaf82e3ff8d
commit 1a9b527c18e2614cbd758acd6dc8ceaf82e3ff8d Author: Michel Hermier <[email protected]> Date: Sun Jun 8 10:44:36 2014 +0200 libpacman: Remove pmtrans_cbs_t and use signal/slots instead. diff --git a/lib/libpacman/pacman.cpp b/lib/libpacman/pacman.cpp index fcc2037..eac749b 100644 --- a/lib/libpacman/pacman.cpp +++ b/lib/libpacman/pacman.cpp @@ -1060,16 +1060,13 @@ int pacman_trans_init(unsigned char type, unsigned int flags, pacman_trans_cb_ev return -1; } - pmtrans_cbs_t cbs = { - .event = event, - .conv = conv, - .progress = progress - }; - - handle->trans = new __pmtrans_t(handle, (pmtranstype_t)type, flags, cbs); + handle->trans = new __pmtrans_t(handle, (pmtranstype_t)type, flags); if(handle->trans == NULL) { RET_ERR(PM_ERR_MEMORY, -1); } + handle->trans->event.connect(event); + handle->trans->conv.connect(conv); + handle->trans->progress.connect(progress); return _pacman_packages_transaction_init(handle->trans); } diff --git a/lib/libpacman/trans.cpp b/lib/libpacman/trans.cpp index 4b83e03..7b4c51c 100644 --- a/lib/libpacman/trans.cpp +++ b/lib/libpacman/trans.cpp @@ -76,7 +76,7 @@ static int check_oldcache(void) return(0); } -__pmtrans_t::__pmtrans_t(Handle *handle, pmtranstype_t type, unsigned int flags, pmtrans_cbs_t cbs) +__pmtrans_t::__pmtrans_t(Handle *handle, pmtranstype_t type, unsigned int flags) : state(STATE_IDLE) { switch(type) { @@ -94,7 +94,6 @@ __pmtrans_t::__pmtrans_t(Handle *handle, pmtranstype_t type, unsigned int flags, this->handle = handle; m_type = type; this->flags = flags; - this->cbs = cbs; // packages = f_ptrlist_new(); targets = f_stringlist_new(); skiplist = f_stringlist_new(); @@ -189,9 +188,6 @@ int _pacman_trans_event(pmtrans_t *trans, unsigned char event, void *data1, void break; } - if(trans->cbs.event) { - trans->cbs.event(event, data1, data2); - } trans->event(event, data1, data2); return 0; } @@ -1635,12 +1631,15 @@ int __pmtrans_t::commit(pmlist_t **data) _pacman_runhook("pre_sysupgrade", this); } /* remove conflicting and to-be-replaced packages */ - tr = new __pmtrans_t(handle, PM_TRANS_TYPE_REMOVE, PM_TRANS_FLAG_NODEPS, cbs); + tr = new __pmtrans_t(handle, PM_TRANS_TYPE_REMOVE, PM_TRANS_FLAG_NODEPS); if(tr == NULL) { _pacman_log(PM_LOG_ERROR, _("could not create removal transaction")); pm_errno = PM_ERR_MEMORY; goto error; } + tr->event.connect(&event); + tr->conv.connect(&conv); + tr->progress.connect(&progress); for(i = syncpkgs; i; i = i->next) { pmsyncpkg_t *ps = i->data; if(ps->type == PM_SYNC_TYPE_REPLACE) { @@ -1661,8 +1660,6 @@ int __pmtrans_t::commit(pmlist_t **data) _pacman_log(PM_LOG_ERROR, _("could not prepare removal transaction")); goto error; } - /* we want the frontend to be aware of commit details */ - tr->cbs.event = cbs.event; if(tr->commit(NULL) == -1) { _pacman_log(PM_LOG_ERROR, _("could not commit removal transaction")); goto error; @@ -1673,12 +1670,15 @@ int __pmtrans_t::commit(pmlist_t **data) /* install targets */ _pacman_log(PM_LOG_FLOW1, _("installing packages")); - tr = new __pmtrans_t(handle, PM_TRANS_TYPE_UPGRADE, flags | PM_TRANS_FLAG_NODEPS, cbs); + tr = new __pmtrans_t(handle, PM_TRANS_TYPE_UPGRADE, flags | PM_TRANS_FLAG_NODEPS); if(tr == NULL) { _pacman_log(PM_LOG_ERROR, _("could not create transaction")); pm_errno = PM_ERR_MEMORY; goto error; } + tr->event.connect(&event); + tr->conv.connect(&conv); + tr->progress.connect(&progress); for(i = syncpkgs; i; i = i->next) { pmsyncpkg_t *ps = i->data; Package *spkg = ps->pkg_new; diff --git a/lib/libpacman/trans.h b/lib/libpacman/trans.h index b6f2197..9f4598e 100644 --- a/lib/libpacman/trans.h +++ b/lib/libpacman/trans.h @@ -49,12 +49,6 @@ enum { STATE_MAX }; -typedef struct __pmtrans_cbs_t { - pacman_trans_cb_event event; - pacman_trans_cb_conv conv; - pacman_trans_cb_progress progress; -} pmtrans_cbs_t; - struct __pmtrans_t : public ::flib::FObject { @@ -62,7 +56,7 @@ struct __pmtrans_t flib::FSignal<void(unsigned char, void *, void *, void *, int *)> conv; flib::FSignal<void(unsigned char, const char *, int, int, int)> progress; - __pmtrans_t(::libpacman::Handle *handle, pmtranstype_t type, unsigned int flags, pmtrans_cbs_t cbs); + __pmtrans_t(::libpacman::Handle *handle, pmtranstype_t type, unsigned int flags); ~__pmtrans_t(); pmsyncpkg_t *find(const char *pkgname) const; @@ -84,7 +78,6 @@ struct __pmtrans_t FPtrList *syncpkgs; /* FPtrList of (pmsyncpkg_t *) */ FStringList *skiplist; FStringList *triggers; - pmtrans_cbs_t cbs; private: }; @@ -94,17 +87,11 @@ private: #define QUESTION(_t, q, d1, d2, d3, r) \ do { \ pmtrans_t *t = (_t); \ - if(t && t->cbs.conv) { \ - t->cbs.conv((q), (d1), (d2), (d3), (r)); \ - } \ t->conv((q), (d1), (d2), (d3), (r)); \ } while(0) #define PROGRESS(_t, e, p, per, h, r) \ do { \ pmtrans_t *t = (_t); \ - if(t && t->cbs.progress) { \ - t->cbs.progress((e), (p), (per), (h), (r)); \ - } \ t->progress((e), (p), (per), (h), (r)); \ } while(0) _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
