Hi I finally got the code to work. I can't guarantee that it will work in all cases but at least it did for me.
Overwrite QSL/HorizontalCategoriesMenu/body.tpl with this code
Code:
{if:isSubtree()}
<ul class="flyout-menu{if:!isSubtree()} catalog-categories catalog-categories-tree{else:} sublevel{end:}">
{else:}<li><a href="">Shop</a> <ul class="flyout-menu sublevel">
{end:}
{foreach:getCategories(rootId),idx,_category}
<li {displayItemClass(idx,_categoryArraySize,_category):h}>
<a href="{buildURL(#category#,##,_ARRAY_(#category_id#^_category.getCategoryId()))}" {displayLinkClass(idx,_categoryArraySize,_category):h} title="{_category.getName()}">{_category.getName()}{if:isShowProductNum()&isSubtree()} ({_category.countProducts()}){end:}</a><span class="icon-triangle" IF="isShowTriangle()&_category.hasSubcategories()"></span><widget template="{getBody()}" rootId="{_category.getCategoryId()}" IF="_category.getSubcategoriesCount()&!isRootOnly()}" is_subtree />
<span class="category-icon" IF="isShowCatIcon()&isSubtree()"><widget class="\XLite\View\Image" image="{_category.image}" maxWidth="16" maxHeight="16" /></span>
</li>
{end:}</li>
{foreach:getViewList(#topCategories.children#,_ARRAY_(#rootId#^getParam(#rootId#),#is_subtree#^getParam(#is_subtree#))),idx,w}
<li {displayListItemClass(idx,wArraySize,w):h}>{w.display()}</li>
{end:}
</ul>
good luck!