summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Cocoa: problems quitting application when not using qApp::execRichard Moe Gustavsen2010-01-075-10/+18
| | | | | | | | | | | | | | | | | | This problem has been around before. At that time it had to do with what part of the application received the kEAQuit apple event. In Qt-4.7 we ensure that NSApplication gets run at least once before we do any other event processing in Qt. That way the menu bar gets fully initialized. The backside of the coin is that NSApplication will not let the quit menu send a terminate action to the menu nibs file owner (qmenuloader_mac.mm) when a modal window is showing on screen. This is normally expected behaviour, but in Qt we allow the user to quit when just a single window/dialog is showing on screen. This fix remaps the quit items target from files owner to first responder. That way we can catch the terminate at the window/responder beeing that, and terminate as needed. Task-number: QTBUG-7197 Reviewed-by: Prasanth
* Add QImage::constBits() and QImage::constScanLine()Rhys Weatherley2010-01-062-2/+40
| | | | | | | | QImage::bits() and QImage::scanLine() can create deep copies if the QImage is not const. The constBits() and constScanLine() functions make things more explicit and less error-prone. Reviewed-by: Daniel Pope
* Qt 5 comment added for QT_WA / QT_WA_INLINE removalJoerg Bornemann2010-01-061-0/+1
|
* Our variables are our variables so we prefix them.Alexis Menard2010-01-061-1/+1
| | | | | | AUTODETECT_COCOA -> QT_AUTODETECT_COCOA Reviewed-by:thiago
* Fix compilation breakage caused by merge.Thiago Macieira2010-01-061-1/+1
| | | | | | This function was renamed in b06313579aad82f8dda64ad14384080754f2b222. Reviewed-by: TrustMe
* Change from std::pair to QPair.Thiago Macieira2010-01-061-8/+8
| | | | | | | My Qt is built with -no-stl, so the STL headers aren't included and, thus, std::pair isn't defined. Reviewed-by: Trust Me
* GCC doesn't like comment lines ending in \Thiago Macieira2010-01-061-28/+28
| | | | | | | | src/opengl/gl2paintengineex/qtriangulator.cpp:655:5: warning: multi-line comment So add some padding characters to the right (can't just add spaces though). Reviewed-by: TrustMe
* Don't call invalidate when resetting the QSortFilterProxyModel.Stephen Kelly2010-01-061-1/+0
| | | | | | | | | | | | | | | The invalidate connection is made before connecting the source model, which means it gets called first. If a second proxy model is used with it, the sourceLayoutAboutToBeChanged of the second proxy is therefore called before its sourceReset slot, but after the persistent indexes of the first model have been invalidated. The invalidate call is not needed because clear_mappings is called when the source model is reset anyway. Merge-request: 416 Reviewed-by: Olivier Goffart <ogoffart@trolltech.com>
* Merge branch '4.6'Thiago Macieira2010-01-0537-335/+690
|\ | | | | | | | | Conflicts: src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
| * Remove the need to know the service owner when adding/removing signal rules.Thiago Macieira2010-01-024-34/+21
| | | | | | | | | | Task-number: QTBUG-5979 Reviewed-By: TrustMe
| * Use the watched service name list in matching incoming signals too.Thiago Macieira2010-01-021-2/+8
| | | | | | | | | | Task-number: QTBUG-5979 Reviewed-By: TrustMe
| * Change the QtDBus watched service list to a map to its owner.Thiago Macieira2010-01-022-17/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | Instead of simply counting how many times we're watching a service, also map a service to its owner. This allows us to provide a faster, cached GetNameOwner too. Technically, this could mean that a service that is started in-between event loops could remain invalid for a longer period of time. I'm not sure this is an issue -- will need some testing in KDE. Task-number: QTBUG-5979 Reviewed-By: TrustMe
| * Update debug output to show the connection's ptr and threadThiago Macieira2010-01-021-10/+10
| |
| * Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2009-12-306-4/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( 70b5989bdeea2f73bd950099fc0f0e954550ef54 ) Changes in WebKit/qt since the last update: ++ b/WebKit/qt/ChangeLog 2009-12-30 Janne Koskinen <janne.p.koskinen@digia.com> Reviewed by Simon Hausmann. Upstream Symbian def files from Qt 4.6. These files define the ABI of QtWebKit on Symbian. * symbian/bwins/QtWebKitu.def: Added. * symbian/eabi/QtWebKitu.def: Added.
| * Symbian build fixSimon Hausmann2009-12-301-1/+1
| | | | | | | | | | | | | | | | | | Disable bearer management support in WebKit for builds inside Qt. We can't depend on an external module that depends on what we're building right now :) This is just a stop-gap fix. Reviewed-by: Trust me
| * Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2009-12-304-7/+17
| | | | | | | | | | | | | | | | | | ( c07df5686b431aa5d11643d00308d8f8f59d88b1 ) Changes in WebKit/qt since the last update: * Disable HTML5 Datagrid * Fix RVCT build
| * Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into ↵Qt Continuous Integration System2009-12-3012-15/+255
| |\ | | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-1: Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ( eb1c86da9f5fa43a0e126ef58ab11cbd4d200af7 )
| | * Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into ↵Qt Continuous Integration System2009-12-2912-15/+255
| | |\ | | | | | | | | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-1: Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ( eb1c86da9f5fa43a0e126ef58ab11cbd4d200af7 )
| | | * Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ↵Simon Hausmann2009-12-2912-15/+255
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ( eb1c86da9f5fa43a0e126ef58ab11cbd4d200af7 ) Changes in WebKit/qt since the last update: ++ b/WebKit/qt/ChangeLog 2009-12-14 Holger Hans Peter Freyther <zecke@selfish.org> Reviewed by Kenneth Rohde Christiansen. [Qt] Fix JavaScript prompt behavior for empty/null strings. https://bugs.webkit.org/show_bug.cgi?id=30914 The patch is based on the work done by Gupta Manish. In the default implementation of the JavaScript prompt we are using a QInputDialog to get the text and this has one quirk with regard to not entering any text. In other WebKit ports and in Firefox an empty string is returned but in the Qt case it is a null string. Change the API documentation in QWebPage to mention we want to have a non null string but do the fixup in the ChromeClientQt to support existing code. * Api/qwebpage.cpp: (QWebPage::javaScriptPrompt): Change API documentation * WebCoreSupport/ChromeClientQt.cpp: (WebCore::ChromeClientQt::runJavaScriptPrompt): Fixup null QString
| * | | Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into ↵Qt Continuous Integration System2009-12-293-10/+9
| |\ \ \ | | |/ / | |/| | | | | | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2: Remove pointless const's from functions (internal API) Fixes crash when widget with WA_StaticContents child become toplevel.
| | * | Remove pointless const's from functions (internal API)Tom Cooksey2009-12-292-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This change is in response to the review for b063135, but was missed from that patch. Reviewed-By: Kim
| | * | Fixes crash when widget with WA_StaticContents child become toplevel.Olivier Goffart2009-12-291-6/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Happens for example if a DockWidget is undocked and has a child whith the WA_StaticContents attribute. The parent does not change (so newParent is false) but still, the top level widget change. So staticWidget need to be moved to the new backingstore. Reviewed-by: Benjamin Poulain Task-number: QTBUG-6883
| * | | Merge branch '4.6' of scm.dev.nokia.troll.no:qt/qt-s60-public into ↵Qt Continuous Integration System2009-12-291-4/+0
| |\ \ \ | | |/ / | |/| | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/qt-s60-public: Removed QtWebkit.dll from Qt.sis in Symbian builds
| | * | Removed QtWebkit.dll from Qt.sis in Symbian buildsMiikka Heikkinen2009-12-291-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In preparation for future removal of Webkit from Qt, Qt.sis no longer contains QtWebkit.dll. All projects that have webkit dependency now automatically also add dependency qtwebkit.sis into their .pkg files. To create qtwebkit.sis, run "make sis" in src\3rdparty\webkit\WebCore directory. Task-number: QTBUG-6841 Reviewed-by: Simon Hausmann Reviewed-by: Janne Koskinen
| * | | Fixed a copy-paste error in QRasterPixmapData::metric().Trond Kjernåsen2009-12-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Calling metric() to get the device height in mm of a pixmap when using the raster engine would actually return the width.. Task-number: QTBUG-6985 Reviewed-by: Carlos Duclos
| * | | Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into ↵Qt Continuous Integration System2009-12-2812-219/+262
| |\ \ \ | | |/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2: QUrl::toEncoded() fix for the case of "password, but no username". Fix tst_QFileInfo::isHidden_data on Windows QStyleSheetStyle: Fixed some text croped when having padding with native border. Lots of mostly cosmetic cleanups to GL2 paint engine Move the 0.5 offset we add for aliased rendering to updateMatrix() revert f36fb8b2b63b3734cc2bd66b329ca4fef1204845 Read QWS_SIZE from layer rather than screen Get rid of no_cast_from_ascii warning Docs: Amendments to latest changes to QImageReader docs. images: Document QImageReader::loopCount behaviour for infinite loops gif: Add unit test for QImageReader::size calls gif: 10% speedup on microbenchmark on QImageReader png: Avoid calling QImage::scanLine(int) from within a loop QImageReader: Avoid errorString creation in the normal case Fix text rendering on GL2 paint engine
| | * | QUrl::toEncoded() fix for the case of "password, but no username".David Faure2009-12-281-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QUrl::setPassword() without QUrl::setUserName() is actually useful, e.g. for kde's ldap:// slave. QUrl::toString() already handled this correctly, but QUrl::toEncoded() would forget the password in such a case. Autotest added. Merge-request: 2276 Reviewed-by: Olivier Goffart <ogoffart@trolltech.com>
| | * | QStyleSheetStyle: Fixed some text croped when having padding with native border.Olivier Goffart2009-12-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The native border width need to be taken into account in QRenderRule::boxRect() Task-number: QTBUG-6855 Reviewed-by: Benjamin Poulain
| | * | Lots of mostly cosmetic cleanups to GL2 paint engineTom Cooksey2009-12-284-138/+133
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Move most of drawPixmaps to private * Move most of stroke to private * Remove dead code: context() * Make optimiseForBrushTransform use xform type * Use GLuint for uniform location * Rename lastTexture -> lastTextureUsed * Move qopengl2paintengine_cleanup_vectorpath to private * Re-ordered declarations in header * Remove dead temporaryTransform * Rename use_system_clip -> useSystemClip Reviewed-By: Kim
| | * | Move the 0.5 offset we add for aliased rendering to updateMatrix()Tom Cooksey2009-12-282-33/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old code set and unset a temporary matrix for every draw command when doing aliased rendering. Instead, we just use a flag to indicate that updateMatrix() should add the offset. This means the offset is added only once. When doing lots of small rendering operations on a (non-multisampled) QGLWidget, this gives up to 72% performance boost on the SGX. Reviewed-By: Kim
| | * | Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into ↵Qt Continuous Integration System2009-12-288-49/+79
| | |\ \ | | | |/ | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2: revert f36fb8b2b63b3734cc2bd66b329ca4fef1204845 Read QWS_SIZE from layer rather than screen Get rid of no_cast_from_ascii warning Docs: Amendments to latest changes to QImageReader docs. images: Document QImageReader::loopCount behaviour for infinite loops gif: Add unit test for QImageReader::size calls gif: 10% speedup on microbenchmark on QImageReader png: Avoid calling QImage::scanLine(int) from within a loop QImageReader: Avoid errorString creation in the normal case Fix text rendering on GL2 paint engine
| | | * Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into ↵Qt Continuous Integration System2009-12-278-49/+79
| | | |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2: revert f36fb8b2b63b3734cc2bd66b329ca4fef1204845 Read QWS_SIZE from layer rather than screen Get rid of no_cast_from_ascii warning Docs: Amendments to latest changes to QImageReader docs. images: Document QImageReader::loopCount behaviour for infinite loops gif: Add unit test for QImageReader::size calls gif: 10% speedup on microbenchmark on QImageReader png: Avoid calling QImage::scanLine(int) from within a loop QImageReader: Avoid errorString creation in the normal case Fix text rendering on GL2 paint engine
| | | | * Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into ↵Qt Continuous Integration System2009-12-268-49/+79
| | | | |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2: revert f36fb8b2b63b3734cc2bd66b329ca4fef1204845 Read QWS_SIZE from layer rather than screen Get rid of no_cast_from_ascii warning Docs: Amendments to latest changes to QImageReader docs. images: Document QImageReader::loopCount behaviour for infinite loops gif: Add unit test for QImageReader::size calls gif: 10% speedup on microbenchmark on QImageReader png: Avoid calling QImage::scanLine(int) from within a loop QImageReader: Avoid errorString creation in the normal case Fix text rendering on GL2 paint engine
| | | | | * Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into ↵Qt Continuous Integration System2009-12-258-49/+79
| | | | | |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2: revert f36fb8b2b63b3734cc2bd66b329ca4fef1204845 Read QWS_SIZE from layer rather than screen Get rid of no_cast_from_ascii warning Docs: Amendments to latest changes to QImageReader docs. images: Document QImageReader::loopCount behaviour for infinite loops gif: Add unit test for QImageReader::size calls gif: 10% speedup on microbenchmark on QImageReader png: Avoid calling QImage::scanLine(int) from within a loop QImageReader: Avoid errorString creation in the normal case Fix text rendering on GL2 paint engine
| | | | | | * revert f36fb8b2b63b3734cc2bd66b329ca4fef1204845Ritt Konstantin2009-12-232-9/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | as discussed at #qt-labs special dirs should be hidden on unix to preserve qt3-like behavior unhiding those dirs was not a good idea and now i do revert of my changes Merge-request: 1894 Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
| | | | | | * Read QWS_SIZE from layer rather than screenAnders Bakken2009-12-231-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When running the X11 emulator of DirectFB IDirectFBScreen->GetSize returns the size of the entire X11 Display, not the actual DirectFB window. We can read this from the primary layer instead and this value is correct both on devices and on the desktop. Reviewed-by: Donald Carr <donald.carr@nokia.com>
| | | | | | * Get rid of no_cast_from_ascii warningAnders Bakken2009-12-231-1/+1
| | | | | | |
| | | | | | * Docs: Amendments to latest changes to QImageReader docs.Andreas Aardal Hanssen2009-12-231-17/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Reviewed-by: Holger Hans Peter Freyther <zecke@selfish.org>
| | | | | | * images: Document QImageReader::loopCount behaviour for infinite loopsHolger Hans Peter Freyther2009-12-231-8/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The gif and mng reader will return -1 as QImageReader::loopCount() for infinite images. Document that this -1 is clashing with the error handling of this method. The documentation was mixing the default and error cases. In some cases "Otherwise -1" and "Otherwise 0" was used. Change this to mention the default coming from QImageIOHandler in the "Otherwise" clause and document the error case with -1. Add a test case to check that loopCount() returns -1 for infinite animations. Reviewed-by: Andreas
| | | | | | * gif: 10% speedup on microbenchmark on QImageReaderHolger Hans Peter Freyther2009-12-231-14/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On the microbenchmark of what is executed during pure pageloading in regarding to QImageReader this is an improvement. Do not use the non const QImage::scanLine as this will go through the QImage::detach all the time making QImage::scanLine show up in the profile. Introduce a FAST_SCAN_LINE that is doing the scanLine calculation on local variables. Reviewed-by: Andreas
| | | | | | * png: Avoid calling QImage::scanLine(int) from within a loopHolger Hans Peter Freyther2009-12-231-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Reviewed-by: Andreas
| | | | | | * QImageReader: Avoid errorString creation in the normal caseHolger Hans Peter Freyther2009-12-231-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Deploy the same idiom found in QIODevice::errorString(). Return "Unknown Error" in case of am empty string. This is a tiny improvement for QtWebKit. Reviewed-by: Andreas
| | | | | | * Fix text rendering on GL2 paint engineTom Cooksey2009-12-232-5/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If you draw with a brush, then draw a pixmap, then draw with the same brush, the GL2 engine wouldn't update the fragment shader to use the brush. This is because it detected the brush hadn't changed and so didn't need updating. To fix this, we now set the current brush to noBrush when drawing an image/pixmap so the engine knows it needs to update the GL state for the brush. Reviewed-By: Kim
| * | | | | | Merge branch '4.6' of scm.dev.nokia.troll.no:qt/qt-s60-public into ↵Qt Continuous Integration System2009-12-282-13/+18
| |\ \ \ \ \ \ | | |/ / / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4.6-integration * '4.6' of scm.dev.nokia.troll.no:qt/qt-s60-public: Using qt.iby no longer requires emulator deployment to be done
| | * | | | | Using qt.iby no longer requires emulator deployment to be doneMiikka Heikkinen2009-12-282-13/+18
| | | |_|/ / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Export generated plugin stubs to a known location under epoc32 in all Symbian builds, so that emulator deployment is not the only way to make them available for qt.iby. Task-number: QTBUG-6972 Reviewed-by: Janne Koskinen
| * | | | | Merge branch '4.5' into 4.6-stagingThiago Macieira2009-12-271-1/+3
| |\ \ \ \ \ | | |_|/ / / | |/| | | |
| | * | | | Fix D-Bus marshalling of booleans in optimised code.Thiago Macieira2009-12-271-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | C++ booleans are 1 byte in size, but D-Bus booleans (dbus_bool_t) are 4 bytes. That means a boolean with a zero in the LSB byte but non-zero garbage in the high bytes is a valid "false" in C++, but libdbus-1 will turn that to true when sending. Task-number: QTBUG-7041 Reviewed-By: Trust Me BT: yes
| * | | | | Merge branch '4.5' into 4.6-stagingThiago Macieira2009-12-262-4/+12
| |\ \ \ \ \ | | |/ / / / | | | | / / | | |_|/ / | |/| | | Conflicts: tests/benchmarks/benchmarks.pro
| | * | | Use Mono instead of MonoLSB when writing pbm files.Rhys Weatherley2009-12-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PBM files are MSB, not LSB - the pbm reader was correct, but not the pbm writer. Task-number: QTBUG-6937 Reviewed-by: Sarah Smith
| | * | | Fix memory leak of QGLGlyphCoord objects in the OpenGL1 paint engineRhys Weatherley2009-12-201-3/+11
| | | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-6936 Reviewed-by: Julian de Bhal