* contrib/hbqt/qtcore/qth/QTimer.qth
! Removed: :singleShot() method as it cannot be implemented
as per documented because of how signal/slots are implemented
in Harbour. Instead, use code like this ( courtesy Ligui ):
::oQtSingleShot := QTimer( ::oQtObject )
::oQtSingleShot:setSingleShot( .T. )
::oQtSingleShot:setInterval( 0 )
::oQtSingleShot:connect( "timeout()", { || ::__OnReadyExec() } )
::oQtSingleShot:start()
* contrib/hbqt/hbmk2_qt.hb
* contrib/hbqt/qtcore/hbqt.h
* contrib/hbqt/qtcore/hbqt_init.cpp
- Removed: a hack introduced some months back where
C++ static items were held in a list them released
at exit of an application. This was double work and
now is not needed at all.
* contrib/hbqt/qtcore/hbqt_bind.cpp
- Reverted: last fix where <qtObject> was compared against
a numeric, which, BTW was a stupid implementation.
A pointer casted to a numeric is always true.
* contrib/hbqt/qtgui/hbqt_init.cpp
- Deleted: deleting the QApplication object.
It was breaking such code:
oWnd:connect( QEvent_Close, {|| QApplication():quit() } )
QApplication():exec()
the reason was any code executed after
QApplication():quit() was rendered unexcutable because
appln was forced to stop execution.
* contrib/hbqt/qtcore/hbqt_hbqevents.cpp
+ Reintroduced: QEvent_Close's return value to true.
It is necessary to intercept this event at appln level.
* contrib/hbqt/qtcore/qth/QLibraryInfo.qth
* contrib/hbqt/qtgui/qth/QDesktopServices.qth
+ Reworked: constructors.
Previous implementation was wrong.
Applied Francesco's thought and it worked, thanks.
* contrib/hbqt/qtgui/qth/QSound.qth
+ Added: two slot methods.
* contrib/hbide/idedocks.prg
! Fixed: one more QIcon() regression, though not used.
* contrib/hbqt/qtcore/hbqt_hbqslots.cpp
! Fixed: to pass correct class name for some type of slots
<pList> in constructors.
* contrib/hbqt/qtcore/hbqt_bind.cpp
* contrib/hbqt/qtcore/qth/QLibraryInfo.qth
* contrib/hbqt/qtgui/qth/QDesktopServices.qth
! Implemented: mechanism to generate a Harbour level class
without the need of a Qt level object for those classes
where methods are executed by Qt code only.
This fixes the bug issue reported by Ligui.
* contrib/hbqt/qtcore/hbqt_bind.cpp
* contrib/hbqt/qtcore/hbqt_misc.prg
+ Implemented: DESTRUCTOR FUNCTION <somePrgOrCFunc()>
* contrib/hbqt/qtgui/hbqt_init.cpp
* contrib/hbqt/qtcore/hbqt_init.cpp
! Fixed: some rare signals issued by Qt with NULL pointers.
This fixes regression reported on user-list a few days back.
And probably fixes many-many unexplained GPF's.
* contrib/hbqt/qtcore/hbqt_bind.cpp
+ Implemented: Events, Slots, Destroyers on thread level.
Previously those were created per object level. This greatly
decreased the os-resource count and also simplifies the code.
Thanks to Przemek for the tip.
+ Implemented: release of all objects per thread level.
hbQT employs internal counter to identify threads.
All widgets are created in one global list which has
made it possible to use Qt's blocking widgets, like
QMessageBox, in Harbour MT applications. It seems that
Qt looks for the event processing only in main appln
thread and hence these widgets were not usable in
other threads. The testbed is hbqt/tests/demoqt.prg
which is now multithreaded. You check it with
menu option <Dialog><Another Dialog>.
+ Formatting: in tracelog entries.
* contrib/hbqt/qtcore/hbqt_hbqevents.cpp
- Commented out: a hack where QClosEvent was being treated
differently then other events.
* contrib/hbqt/tests/demoqt.prg
* Parented: QMessageBox() ( Read below )
* contrib/hbide/idedocks.prg
- Removed: one hack which at begining was there to activate
QMainWindow's docking area resizable.
* contrib/hbide/idemain.prg
+ Changed: ::cWrkCodec to be "EN" by default.
It fixes recent regression in hbIDE for certain users.
* contrib/hbide/idemisc.prg
* Parented: QMessageBox() should always be constructed with a
parent because of special handelling of blocking dialog
where parent is treated slightly different than other
Qt widgets. This fixes a long-standing bug in hbIDE where
appnl was rendered in indefinite loop when "X" button
was employed to terminate and confirm dialog would
not be terminated internally.
So for QMessageBox() and, to be on the safer side, all
widets derived from QDialog() should be constructed
with a parent and at the end be reparented with a
just-to-be-deleted-QWidget(), like:
oMB := QMessageBox( oParent )
...
oMB:setParent( QWidget() )
RETURN something
* harbour/src/common/hbffind.c
* ulAttr -> nAttr
+ added support for softlinks in * nix systems.
Now they are reported with "L" attribute by directory() function.
This modification also fixes directory scanning interrupted by
dummy softlinks.
* harbour/contrib/xhb/dirrec.prg
! fixed double added extension to file mask
* contrib/hbqt/qtcore/hbqt_bind.cpp
+ Added: static HB_CRITICAL_NEW( s_qtMtx ); and parts.
+ Tuned: compilable with or without TSD protocol.
To turn on TSD protocol, change
__HBQT_WITH_MT_SUPPORT__NO => __HBQT_WITH_MT_SUPPORT__
* utils/hbmk2/hbmk2.prg
* made --hbinfo to return information only for the top project
(not nested ones)
This should fix regression of not generating .hbx files for
the hbqt special case since 2012-06-06 16:02 UTC+0200
+ added --hbinfo=nested to return information also on nested
projects
+ --hbinfo will now append an 0x0A byte after each JSON
block, so multiple JSON blocks can be parsed by the caller
* contrib/hbqt/hbqt_commons.hbm
* changed to be friendly with '--hbinfo=nested' hbmk2 option
(not used in Harbour make process)
* contrib/hbamf/amfenc.c
* contrib/hbamf/hbamf.hbx
* contrib/hbamf/hbamfobj.prg
* contrib/hbamf/readme.txt
+ applied Aleksander Czajczynski's patch for a missing class.
Thank you very much, I didn't have to touch it, only
autoupdate the .hbx file.
* contrib/hbrun/hbrun.hbp
* utils/hbmk2/hbmk2.hbp
* utils/hbmk2/Makefile
* package/mpkg_win.nsi
* package/winuni/mpkg_win_uni.nsi
; trying to crawl out from this pool of dynamic mud.
* enabled all embedded headers for both hbmk2 and hbrun
so we're back to square one with this, except that
now hbmk2 also holds the full set of core headers not
just a minimal selection. The reason is to keep hbmk2
as the distributable runner tool. It also syncs all
C compilers and platforms.
* hbmk2 built in -static mode again. It will fix the
'make clean' problem, it will make it distributable.
* hbrun changed to be built in -shared mode to allow
to load dynamic modules.
; so this is the state right now (if I didn't make any mistake):
hbmk2:
all embedded core headers
no contrib modules
static build
no dynamic modules
fully movable/distributable as a runner
cannot be self-registered as .hb runner on Windows
hbrun:
all embedded core headers
some contrib modules
shared build when HB_BUILD_CONTRIB_DYN enabled
dynamic modules possible
less movable/distributable, needs harbour dll, dynamic modules need Harbour dir layout
can be self-registered as .hb runner on Windows
; "Ext:" banner on interactive shell will have blue color
if dynamic modules are enabled and grey if not.
* utils/hbmk2/hbmk2.prg
* minor change to show the actual name of the tool
in the error message requesting a -shared build.
* contrib/rddads/ads1.c
* contrib/rddads/adsfunc.c
* contrib/rddads/adsx.c
* src/common/hbfsapi.c
! deleted explicit newlines at EOL in HB_TRACE() calls
* INSTALL
+ added new '0. GUARANTEES AND LIABILITY' section
! updated instructions to create debug build
* utils/hbmk2/hbmk2.prg
* minor cleanups
* utils/hbmk2/Makefile
+ enabled dynamic version of hbmk2 only for mingw builds.
Rest of the targets may or may not work due to CRTL
usage (fprintf()) from HB_COMPILE*() calls which causes
GPF in currently generated shared builds, most probably
due to double copy of statically linked CRTL code.
mingw uses MSVCRT.DLL, so it's not prone to this.
Solution is either to avoid file handling CRTL calls
in compiler code, or to tweak -shared build setting to
death to make it work for all non-mingw compilers.
Both of these is very difficult.
This means that dynamic module loading from scripts
will only work in hbmk2 built with mingw.
; TOFIX: 'make clean' on contribs doesn't work with mingw,
because harbour dll is deleted before hbmk2 is
called, so it cannot be started for cleanup.
* contrib/hbtip/encoder.prg
* contrib/hbtip/encqp.prg
% use hb_default()
* contrib/hbtip/encqp.prg
! fixed RTE when using TIPEncoderQP class from a dynamically loaded hbtip.
It has been reported long time ago, so now I hacked a local
solution which simply removes inherition from this class,
which works around the problem. Hopefully the core can get
the fixes to allow derived classes to be used from dynamic libs
and this can be reverted. In this case only one variable was
inherited, so it was easy to do. BTW I was trying to use hb_MailAssemble()
from a script which triggered this.
TOFIX: Self contained example (tested on win/mingw):
--- hbmk2 test.hb
#require "hbtip"
PROCEDURE Main()
TIPEncoderBase64():New()
--- ->
Error BASE/3003 Cannot find super class 'TIPENCODER': __CLSINSTSUPER
Called from __CLSINSTSUPER(0)
Called from HBCLASS:CREATE(0)
Called from TIPENCODERBASE64(0)
---
* contrib/hbtip/encqp.prg
* contrib/hbtip/hbtip.hbx
+ added two new functions:
TIP_QPENCODE(), TIP_QPDECODE()
formerly only accessible via OOP code
* utils/hbmk2/hbmk2.prg
% merged FindInPath() and __hbshell_FindInPath() into one
* contrib/hbxbp/xbpdialog.prg
+ Added: Main application windows object name as "PleseDoNotDelete"
* contrib/hbxbp/xbplistbox.prg
- Removed: traces from prev commit.
* contrib/hbqt/qtcore/hbqt_hbqevents.cpp
* contrib/hbqt/qtcore/hbqt_hbqslots.cpp
! Fixed: a couple of potential memory leaks.
* contrib/hbqt/qtcore/hbqt_bind.cpp
+ Implemented: Thread safe global list. Now objects are released
in a proper manner.
+ Added: a hack not to delete a QMainWindow if its name is
"PleaseDoNotDelete". It is scheduled to be removed
once it is resolved that why on certain circumstances, if
a QMainWindow is deleted, it results in GPF.
* contrib/hbrun/hbrun.hbp
* restored to embed headers in hbrun
* utils/hbmk2/hbmk2.prg
! minor cleanups in runner UI
! fixed to open .dbf using cmd 'hbmk2 test.dbf' (emulating
old hbrun behavior)
+ shows error messages when dynamic library failed to load
* contrib/hbblat/hbblat.hbp
* contrib/hbcurl/hbcurl.hbp
* contrib/hbssl/hbssl.hbp
! fix to prev
* contrib/hbpost.hbm
* contrib/hbqt/hbqt_common.hbm
* deleted extra pathsep
* contrib/hbfbird/hbfbird.hbp
* contrib/hbgd/hbgd.hbp
* contrib/sddfb/sddfb.hbp
! fixed to use .dll imp lib source in -hbdyn mode.
it's a fix for experimental HB_INSTALL_3RDDYN option.
* contrib/make.hb
* minor cleanups in errorlevel descriptions
* utils/hbmk2/hbmk2.prg
! fixed finding scripts in path and without extensions
in runner mode
! fixed to not execute '.' when runner mode is started
with 'hbmk2 .' command
* utils/hbmk2/hbmk2.prg
+ will now gather a list of existing 3rd party dll dependencies
using the file-group named 'depimplibsrc'. This list can
be used to install these files to user-specific locations
* contrib/hbpost.hbm
+ added global solution to install 3rd party dll dependencies,
with minor fixes
* contrib/hbblat/hbblat.hbp
* contrib/hbcurl/hbcurl.hbp
* contrib/hbssl/hbssl.hbp
- deleted local solution to install 3rd party dll dependencies
* contrib/hbcurl/hbcurl.hbp
* contrib/hbssl/hbssl.hbp
+ added experimental support to install 3rd party .dll
dependencies for these libs into the Harbour bin dir.
Enabled with new build option, not yet documented,
see it in the patch.
* src/rtl/cdpdet.prg
+ request linkage of all codepages. I chose this to ensure
the detection code can use all CPs automatically and it
won't be unusable if users forget to request CPs
themselves. This has an overhead if someone uses CP
autodetection, but it makes it foolproof.
* utils/hbmk2/hbmk2.prg
* minor formatting
* contrib/hbamf/hbamfobj.prg
* made it more friendly with grep when finding undocumented functions
by removing #translate.
* src/vm/hvm.c
! added HB_STACK_TLS_PRELOAD
* include/harbour.hbx
! added __ITEMSETREF(), __VMITEMID()
* src/rtl/valtoexp.prg
* hb_setItemRef() -> __itemSetRef(). Please tell if it's meant to
be a user-accessible, public core API
* utils/hbmk2/hbmk2.prg
! fixed to ignore HB_INSTALL_PREFIX variable in runner mode.
This points to invalid places while running as part of GNU
Make and prevents autodetection.
TODO: Recheck if it now works without embedded headers.
TODO: Obsolete HB_INSTALL_PREFIX also in hbmk2 mode.
* contrib/xhb/xhbcls.ch
! include hboo.ch
* utils/hbmk2/hbmk2.prg
! Fixed to transform \n to eol in one certain warning
message newly issued from the runner subsystem
* utils/hbmk2/Makefile
* utils/hbmk2/hbmk2.hbp
* contrib/hbrun/hbrun.hbp
! restored to embed core headers. It's required when
running build scripts as part of the GNU Make process,
while HB_INSTALL_PREFIX setting is set to a value where
Harbour isn't installed yet
* contrib/make.hb
* INSTALL
+ re-disabled HB_BUILD_CONTRIB_DYN=yes by default.
The mere presence of dynamic versions of libs was causing
the executables on *nix systems got linked against them,
even in -static mode, which might not be desired. So
until someone finds out how to control this aspect, it's
best to disable then altogether. Or maybe it could enabled
by default only on non-*nix systems.
+ contrib/hbamf/hbamfobj.prg
* contrib/hbamf/amfdec.c
* contrib/hbamf/amfenc.c
* contrib/hbamf/hbamf.hbp
* contrib/hbamf/hbamf.hbx
+ added missing parts as per Aleksander's instructions.
with some renames/formatting. OBJAMF renamed to AMF_OBJ,
please review and test.
https://groups.google.com/d/msg/harbour-devel/EPdeo6zbFt8/FTd7mkyTPawJ
* utils/hbmk2/hbmk2.prg
* minor formatting
* bin/3rdpatch.hb
* contrib/make.hb
* changed to be executed by hbmk2
- contrib/hbrun/extdyn.prg
- contrib/hbrun/hbrun.prg
- contrib/hbrun/hbrun.rc
- contrib/hbrun/headers.prg
- contrib/hbrun/p_ext.hb
- contrib/hbrun/plugins.prg
* contrib/hbrun/hbrun.hbp
% changed to use hbmk2 sources and make file to build hbrun,
implementing the build method described in previous ChangeLog
entry. The lost feature is netio management plugin, which
is now not loaded by default. Plus, since this is a static
build, dynamic extensions don't work.
* contrib/make.hb
* src/pp/ppcore.c
* deleted reference to hbrun in comment
* contrib/hbnetio/utils/hbnetio/netiocon.prg
* contrib/hbnetio/utils/hbnetio/netiomgm.hb
* __hbrun_plugin() -> __hbshell_plugin()
* INSTALL
* minor in previous change
* contrib/make.hb
* contrib/hbrun/hbrun.hbp
* INSTALL
+ enabled HB_BUILD_CONTRIB_DYN=yes by default. It will
cause longer build-times, but it will also create dynamic
builds for all contribs now. HBQT is particularly huge,
so maybe we should disable dynamic libs creations for
them.
; EXPERIMENTAL. This feature has been available for quite
a long time now and some users have tested, but anyways
build breaks are possible.
- contrib/hbrun/extstat.prg
* contrib/hbrun/extdyn.prg
* contrib/hbrun/hbrun.hbp
* contrib/hbrun/hbrun.prg
% simplified the way static contribs are pulled into the
executable. Now the list if linked contribs needs to be
maintained only inside hbrun.hbp
* utils/hbmk2/hbmk2.prg
+ inclusion of embedded core headers can now be enabled
using -DHBMK_WITH_EMBEDDED_HEADERS build-time option for
a minimal set (formely enabled by default in hbmk2)
and -DHBMK_WITH_ALL_EMBEDDED_HEADERS for the full set,
which is compatible with hbrun
* hbmk2 will act as a shell/script runner also if its
own name _starts_ or _ends_ with hbrun, so f.e. hbrun2,
and xhbrun will be okay as well (in sync with other
similar alias name rules).
+ shell screen will now display the list of non-core,
statically linked extra libs
; NOTE: to custom build a complete hbrun emulation from
hbmk2 source, use the following configuration:
1. create file 'hbrun_emu.hbm' with this content:
---
-ohbrun
-static
-DHBMK_WITH_ALL_EMBEDDED_HEADERS
hbct.hbc -request=__HBEXTERN__HBCT__
hbexpat.hbc -request=__HBEXTERN__HBEXPAT__
hbmemio.hbc -request=__HBEXTERN__HBMEMIO__
hbmzip.hbc -request=__HBEXTERN__HBMZIP__
hbnetio.hbc -request=__HBEXTERN__HBNETIO__
hbunix.hbc{unix} -request=__HBEXTERN__HBUNIX__{unix}
hbwin.hbc{allwin} -request=__HBEXTERN__HBWIN__{allwin}
---
2. build hbrun emulation using this command:
$ hbmk2 utils/hbmk2/hbmk2.hbp hbrun_emu.hbm
3. This will create a fully static executable, with
the name hbrun, with all embedded core headers and
statically linked list of contribs listed in the .hbm
file. The list can be configured at will. This is
self-contained executable that can be distributed
easily. Notice however that dynamic extension feature
will not work in this type of build.
* utils/hbmk2/hbmk2.hbp
* minor formatting
* contrib/hbqt/qtcore/hbqt_hbqslots.cpp
* contrib/hbqt/qtcore/hbqt_misc.prg
* contrib/hbqt/qtcore/hbqt_pointer.cpp
* contrib/hbqt/qtcore/qth/filelist.hbm
+ contrib/hbqt/qtcore/qth/HBQSlots.qth
! Reverted: back to the version before Francesco's.