Ticket #4885: 4885-v5.patch

File 4885-v5.patch, 24.6 KB (added by Tony Arie Kolev <kolevtony@…>, 11 years ago)

Finally Tested with development version

  • themes/ProjectGrayhem-OSD/osd.xml

     
    284284        <position>0,320</position>
    285285      </image>
    286286    <textarea name="settings">
    287       <area>50,335,350,32</area>
     287      <area>50,335,250,32</area>
    288288      <font>settings</font>
    289289    </textarea>
    290290  </container>
     
    307307      <multiline>yes</multiline>
    308308   </textarea>
    309309   <textarea name="option1">
    310       <area>120,269,455,30</area>
     310      <area>120,269,395,30</area>
    311311      <font>notify</font>
    312312      <altfont>grayfont</altfont>
    313313   </textarea>
    314314   <textarea name="option2">
    315       <area>120,299,455,30</area>
     315      <area>120,299,395,30</area>
    316316      <font>notify</font>
    317317      <altfont>grayfont</altfont>
    318318   </textarea>
    319319   <textarea name="option3">
    320       <area>120,329,455,30</area>
     320      <area>120,329,395,30</area>
    321321      <font>notify</font>
    322322      <altfont>grayfont</altfont>
    323323   </textarea>
    324324   <textarea name="option4">
    325       <area>120,359,455,30</area>
     325      <area>120,359,395,30</area>
    326326      <font>notify</font>
    327327      <altfont>grayfont</altfont>
    328328   </textarea>
  • themes/blootube-osd/osd.xml

     
    286286        <position>30,30</position>
    287287      </image>
    288288    <textarea name="settings">
    289       <area>50,50,350,32</area>
     289      <area>50,50,250,32</area>
    290290      <font>settings</font>
    291291    </textarea>
    292292  </container>
     
    309309      <multiline>yes</multiline>
    310310   </textarea>
    311311   <textarea name="option1">
    312       <area>120,269,455,30</area>
     312      <area>120,269,395,30</area>
    313313      <font>notify</font>
    314314      <altfont>grayfont</altfont>
    315315   </textarea>
    316316   <textarea name="option2">
    317       <area>120,299,455,30</area>
     317      <area>120,299,395,30</area>
    318318      <font>notify</font>
    319319      <altfont>grayfont</altfont>
    320320   </textarea>
    321321   <textarea name="option3">
    322       <area>120,329,455,30</area>
     322      <area>120,329,395,30</area>
    323323      <font>notify</font>
    324324      <altfont>grayfont</altfont>
    325325   </textarea>
    326326   <textarea name="option4">
    327       <area>120,359,455,30</area>
     327      <area>120,359,395,30</area>
    328328      <font>notify</font>
    329329      <altfont>grayfont</altfont>
    330330   </textarea>
  • myththemes/Gray-OSD/osd.xml

     
    425425      <multiline>yes</multiline>
    426426   </textarea>
    427427   <textarea name="option1">
    428       <area>100,255,455,30</area>
     428      <area>100,255,395,30</area>
    429429      <font>infofont</font>
    430430      <altfont>infofontgray</altfont>
    431431   </textarea>
    432432   <textarea name="option2">
    433       <area>100,285,455,30</area>
     433      <area>100,285,395,30</area>
    434434      <font>infofont</font>
    435435      <altfont>infofontgray</altfont>
    436436   </textarea>
    437437   <textarea name="option3">
    438       <area>100,315,455,30</area>
     438      <area>100,315,395,30</area>
    439439      <font>infofont</font>
    440440      <altfont>infofontgray</altfont>
    441441   </textarea>
    442442   <textarea name="option4">
    443       <area>100,345,455,30</area>
     443      <area>100,345,395,30</area>
    444444      <font>infofont</font>
    445445      <altfont>infofontgray</altfont>
    446446   </textarea>
    447447   <textarea name="option5">
    448       <area>100,375,455,30</area>
     448      <area>100,375,395,30</area>
    449449      <font>infofont</font>
    450450      <altfont>infofontgray</altfont>
    451451    </textarea>
  • myththemes/Titivillus-OSD/osd.xml

     
    359359
    360360  <container name="settings">
    361361    <textarea name="settings">
    362       <area>50,50,350,32</area>
     362      <area>50,50,250,32</area>
    363363      <font>settings</font>
    364364    </textarea>
    365365  </container>
  • myththemes/isthmus/osd.xml

     
    315315
    316316  <container name="settings">
    317317    <textarea name="settings">
    318       <area>50,50,350,32</area>
     318      <area>50,50,250,32</area>
    319319      <font>settings</font>
    320320    </textarea>
    321321  </container>
     
    339339      <multiline>yes</multiline>
    340340   </textarea>
    341341   <textarea name="option1">
    342       <area>100,255,455,30</area>
     342      <area>100,255,395,30</area>
    343343      <font>infofont</font>
    344344      <altfont>infofontgray</altfont>
    345345   </textarea>
    346346   <textarea name="option2">
    347       <area>100,285,455,30</area>
     347      <area>100,285,395,30</area>
    348348      <font>infofont</font>
    349349      <altfont>infofontgray</altfont>
    350350   </textarea>
    351351   <textarea name="option3">
    352       <area>100,315,455,30</area>
     352      <area>100,315,395,30</area>
    353353      <font>infofont</font>
    354354      <altfont>infofontgray</altfont>
    355355   </textarea>
    356356   <textarea name="option4">
    357       <area>100,345,455,30</area>
     357      <area>100,345,395,30</area>
    358358      <font>infofont</font>
    359359      <altfont>infofontgray</altfont>
    360360   </textarea>
    361361   <textarea name="option5">
    362       <area>100,375,455,30</area>
     362      <area>100,375,395,30</area>
    363363      <font>infofont</font>
    364364      <altfont>infofontgray</altfont>
    365365    </textarea>
  • myththemes/Iulius-OSD/osd.xml

     
    251251
    252252  <container name="settings">
    253253    <textarea name="settings">
    254       <area>64,85,350,32</area>
     254      <area>64,85,264,32</area>
    255255      <font>settings</font>
    256256    </textarea>
    257257  </container>
  • myththemes/Retro-OSD/osd.xml

     
    297297        <position>30,30</position>
    298298      </image>
    299299    <textarea name="settings">
    300       <area>50,50,350,32</area>
     300      <area>50,50,250,32</area>
    301301      <font>settings</font>
    302302    </textarea>
    303303  </container>
     
    321321      <multiline>yes</multiline>
    322322   </textarea>
    323323   <textarea name="option1">
    324       <area>120,239,455,30</area>
     324      <area>120,239,395,30</area>
    325325      <font>notify</font>
    326326      <altfont>grayfont</altfont>
    327327   </textarea>
    328328   <textarea name="option2">
    329       <area>120,269,455,30</area>
     329      <area>120,269,395,30</area>
    330330      <font>notify</font>
    331331      <altfont>grayfont</altfont>
    332332   </textarea>
    333333   <textarea name="option3">
    334       <area>120,299,455,30</area>
     334      <area>120,299,395,30</area>
    335335      <font>notify</font>
    336336      <altfont>grayfont</altfont>
    337337   </textarea>
    338338   <textarea name="option4">
    339       <area>120,329,455,30</area>
     339      <area>120,329,395,30</area>
    340340      <font>notify</font>
    341341      <altfont>grayfont</altfont>
    342342   </textarea>
    343343   <textarea name="option5">
    344       <area>120,359,455,30</area>
     344      <area>120,359,395,30</area>
    345345      <font>notify</font>
    346346      <altfont>grayfont</altfont>
    347347    </textarea>
  • mythtv/themes/defaultosd/osd.xml

     
    239239
    240240  <container name="settings">
    241241    <textarea name="settings">
    242         <area>50,50,350,32</area>
     242        <area>50,50,250,32</area>
    243243        <font>settings</font>
    244244    </textarea>
    245245  </container>
  • mythtv/themes/blueosd/osd.xml

     
    276276
    277277  <container name="settings">
    278278    <textarea name="settings">
    279         <area>50,50,350,32</area>
     279        <area>50,50,250,32</area>
    280280        <font>settings</font>
    281281    </textarea>
    282282  </container>
  • mythtv/libs/libmythtv/rtl.cpp

     
     1/*
     2 * Right To Left Languages manipulation for OSD
     3 *
     4 * Copyright Ido Roseman, Daniel Kristjansson,
     5 *            Tony Arie Kolev and Ran Nachmany     2006 - 2009                             
     6 * Distributed as part of MythTV under the GPLv2, or at our option a later
     7 * version of the GPL. See COPYING which should accompany this for details.
     8 */
     9
     10#include <QStringList>
     11#include <Qt3Support/q3cstring.h>
     12#include "rtl.h"
     13
     14#ifdef USING_FRIBIDI
     15#   include "fribidi/fribidi.h"
     16#   include <QTextCodec>
     17#endif // USING_FRIBIDI
     18
     19static QString BasicConvertFromRtoL(const QString &text, bool &isRTL)
     20{
     21    QStringList rtl_string_composer;
     22    bool handle_rtl = false;
     23    QChar prev_char;
     24
     25    isRTL = false;
     26
     27    // Handling Right-to-Left languages.
     28    // Left-to-Right languages are not affected.
     29    for (int i = (int)text.length() - 1; i >= 0; i--)
     30    {
     31        QChar::Direction text_dir = text[i].direction();
     32        if (text_dir != QChar::DirR &&
     33            text_dir != QChar::DirRLE &&
     34            text_dir != QChar::DirRLO)
     35        {
     36            if (handle_rtl || rtl_string_composer.empty())
     37                rtl_string_composer.append(QString());
     38
     39            if (text[i].isSpace() && !prev_char.isNull()
     40                    && prev_char.isDigit() && handle_rtl)
     41                rtl_string_composer.back().append(text[i]);
     42            else
     43                rtl_string_composer.back().prepend(text[i]);
     44
     45            prev_char = text[i];
     46
     47            handle_rtl = false;
     48        }
     49        else
     50        {
     51            if (!handle_rtl)
     52            {
     53                rtl_string_composer.append(QString());
     54                handle_rtl = true;
     55                prev_char = QChar();
     56            }
     57            rtl_string_composer.back().append(text[i]);
     58            isRTL = true;
     59        }
     60    }
     61
     62    QString output = rtl_string_composer.join("");
     63    output.detach();
     64    return output;
     65}
     66
     67QString RTL::ConvertFromRtoL(const QString &text, bool &isRTL) const
     68{
     69#ifndef USING_FRIBIDI
     70    return BasicConvertFromRtoL(text, isRTL);
     71#else
     72    isRTL = false;
     73    QString output = text;
     74    QMutexLocker locker(&fribidi_lock);
     75    if (!codeci)
     76        codeci = QTextCodec::codecForName("utf8");
     77
     78    if (!codeci)
     79        return output;
     80
     81    Q3CString temp = codeci->fromUnicode(output);
     82
     83    FriBidiCharType base;
     84    size_t len;
     85   
     86
     87    bool fribidi_flip_commas = true;
     88    base = (fribidi_flip_commas) ? FRIBIDI_TYPE_ON : FRIBIDI_TYPE_L;
     89
     90    const char *ip = temp;
     91    FriBidiChar logical[strlen(ip) + 1], visual[strlen(ip) + 1];
     92
     93    int char_set_num = fribidi_parse_charset("UTF-8");
     94
     95    len = fribidi_charset_to_unicode(
     96        (FriBidiCharSet) char_set_num, ip, strlen(ip), logical);
     97
     98    FriBidiLevel embedding_level_list[len];
     99    FriBidiStrIndex position_L_to_V_list[len];
     100    FriBidiStrIndex position_V_to_L_list[len];
     101
     102    bool log2vis = fribidi_log2vis(
     103        logical, len, &base, visual, position_L_to_V_list, position_V_to_L_list,
     104        embedding_level_list); // output
     105
     106    if (log2vis)
     107    {
     108        len = fribidi_remove_bidi_marks(visual, len, NULL, NULL, NULL);
     109        for (uint i=0; i < len; i++)
     110        {
     111            if (embedding_level_list[i]%2==1)
     112            {
     113                isRTL = true;
     114                break;
     115            }
     116        }
     117    }
     118
     119    output = "";
     120    for (size_t i = 0; i < len ; i++)
     121        output += QChar(visual[i]);
     122
     123    return output;
     124#endif // !USING_FRIBIDI
     125}
     126
  • mythtv/libs/libmythtv/rtl.h

     
     1#ifndef RTL_H_
     2#define RTL_H_
     3
     4#include <qstring.h>
     5#include <qmutex.h>
     6
     7class QTextCodec;
     8
     9class RTL
     10{
     11  public:
     12    RTL(void) : codeci(NULL) { }
     13
     14    QString ConvertFromRtoL(const QString &text, bool &isRTL) const;
     15
     16  private:
     17    mutable QMutex      fribidi_lock;
     18    mutable QTextCodec *codeci;
     19};
     20
     21#endif
  • mythtv/libs/libmythtv/osdtypes.cpp

     
    1919#include "mythdialogs.h"
    2020#include "mythverbose.h"
    2121
    22 #ifdef USING_FRIBIDI
    23     #include "fribidi/fribidi.h"
    24     #include <QTextCodec>
    25 #endif // USING_FRIBIDI
    26 
    2722/// Shared OSD image cache
    2823OSDImageCache OSDTypeImage::c_cache;
    2924
     
    698693    m_scrollposy(0),
    699694    m_scrollinit(false),
    700695    m_linespacing(1.5f),
    701     m_draw_info_str(QString::null), m_draw_info_len(0),
    702     codeci(NULL)
     696    m_draw_info_str(QString::null), m_rtl(new RTL())
    703697{
    704698}
    705699
     
    722716    m_scrollposy(0),
    723717    m_scrollinit(false),
    724718    m_linespacing(1.5f),
    725     m_draw_info_str(QString::null), m_draw_info_len(0),
    726     codeci(NULL)
     719    m_draw_info_str(QString::null), m_rtl(new RTL())
    727720{
    728721    QMutexLocker locker(&other.m_lock);
    729722
     
    766759
    767760OSDTypeText::~OSDTypeText()
    768761{
     762    if (m_rtl)
     763        delete m_rtl;
    769764}
    770765
    771766void OSDTypeText::SetAltFont(TTFFont *font)
     
    774769    m_altfont = font;
    775770}
    776771
    777 QString OSDTypeText::BasicConvertFromRtoL(const QString &text)
    778 {
    779     QStringList rtl_string_composer;
    780     bool handle_rtl = false;
    781     QChar prev_char;
    782 
    783     // Handling Right-to-Left languages.
    784     // Left-to-Right languages are not affected.
    785     for (int i = (int)text.length() - 1; i >= 0; i--)
    786     {
    787         QChar::Direction text_dir = text[i].direction();
    788         if (text_dir != QChar::DirR &&
    789             text_dir != QChar::DirRLE &&
    790             text_dir != QChar::DirRLO)
    791         {
    792             if (handle_rtl || rtl_string_composer.empty())
    793                 rtl_string_composer.append(QString());
    794 
    795             if (text[i].isSpace() && !prev_char.isNull()
    796                     && prev_char.isDigit() && handle_rtl)
    797                 rtl_string_composer.back().append(text[i]);
    798             else
    799                 rtl_string_composer.back().prepend(text[i]);
    800 
    801             prev_char = text[i];
    802 
    803             handle_rtl = false;
    804         }
    805         else
    806         {
    807             if (!handle_rtl)
    808             {
    809                 rtl_string_composer.append(QString());
    810                 handle_rtl = true;
    811                 prev_char = QChar();
    812             }
    813             rtl_string_composer.back().append(text[i]);
    814         }
    815     }
    816 
    817     QString output = rtl_string_composer.join("");
    818 
    819     return output;
    820 }
    821 
    822 QString OSDTypeText::ConvertFromRtoL(const QString &text) const
    823 {
    824     QString output = BasicConvertFromRtoL(text);
    825 
    826 #ifdef USING_FRIBIDI
    827     QMutexLocker locker(&fribidi_lock);
    828     if (!codeci)
    829         codeci = QTextCodec::codecForName("utf8");
    830 
    831     if (!codeci)
    832         return output;
    833 
    834     QByteArray temp = codeci->fromUnicode(output);
    835 
    836     FriBidiCharType base;
    837     size_t len;
    838 
    839     bool fribidi_flip_commas = true;
    840     base = (fribidi_flip_commas) ? FRIBIDI_TYPE_ON : FRIBIDI_TYPE_L;
    841 
    842     std::vector<FriBidiChar> logical(temp.length() + 1);
    843     std::vector<FriBidiChar> visual(temp.length() + 1);
    844 
    845     int char_set_num = fribidi_parse_charset("UTF-8");
    846 
    847     len = fribidi_charset_to_unicode((FriBidiCharSet) char_set_num,
    848                                      temp.constData(), temp.length(),
    849                                      &logical[0]);
    850 
    851     bool log2vis = fribidi_log2vis(&logical[0], len, &base, &visual[0], NULL,
    852                                    NULL, NULL); // output
    853 
    854     if (log2vis)
    855         len = fribidi_remove_bidi_marks(&visual[0], len, NULL, NULL, NULL);
    856  
    857     output = "";
    858     for (size_t i = 0; i < len ; i++)
    859         output += QChar(visual[i]);
    860 #endif // USING_FRIBIDI
    861 
    862     return output;
    863 }
    864 
    865772void OSDTypeText::SetText(const QString &text)
    866773{
    867774    QMutexLocker locker(&m_lock);
    868     m_message    = ConvertFromRtoL(text);
     775    m_message    = text; m_message.detach();
    869776    m_cursorpos  = m_message.length();
    870777    m_scrollinit = false;
    871778}
     
    873780QString OSDTypeText::GetText(void) const
    874781{
    875782    QMutexLocker locker(&m_lock);
    876     return m_message;
     783    QString tmp = m_message; tmp.detach();
     784    return tmp;
    877785}
    878786
    879787void OSDTypeText::SetDefaultText(const QString &text)
    880788{
    881789    QMutexLocker locker(&m_lock);
    882     m_message     = ConvertFromRtoL(text);
    883     m_default_msg = m_message;
     790    m_message     = text; m_message.detach();
     791    m_default_msg = text; m_default_msg.detach();
    884792    m_scrollinit  = false;
    885793}
    886794
     
    1090998
    1091999    if (text != m_draw_info_str)
    10921000    {
    1093         m_draw_info_str = text;
     1001        m_draw_info_str = text;
     1002        m_draw_info_str.detach();
    10941003        m_draw_info.clear();
    10951004        m_draw_info_len = 0;
    10961005
     
    12031112{
    12041113    QMutexLocker locker(&m_lock);
    12051114
     1115    bool isRTL = false;
     1116    QString msg = m_rtl->ConvertFromRtoL(text, isRTL);
     1117    m_right = isRTL;
     1118
    12061119    if (m_centered || m_right)
    12071120    {
    12081121        int textlength = 0;
     
    12281141    if ((m_usingalt || m_selected) && m_altfont)
    12291142        font = m_altfont;
    12301143
    1231     font->DrawString(surface, rect.left(), rect.top(), text,
     1144    font->DrawString(surface, rect.left(), rect.top(), msg,
    12321145                     rect.right(), rect.bottom(), alphamod, doubl);
    12331146
    12341147    // draw cursor
  • mythtv/libs/libmythtv/libmythtv.pro

     
    281281    HEADERS += osdsurface.h             osdlistbtntype.h
    282282    HEADERS += osdimagecache.h          osdtypeteletext.h
    283283    HEADERS += udpnotify.h                  tvosdmenuentry.h
     284    HEADERS += rtl.h
    284285    SOURCES += osd.cpp                  osdtypes.cpp
    285286    SOURCES += osdsurface.cpp           osdlistbtntype.cpp
    286287    SOURCES += osdimagecache.cpp        osdtypeteletext.cpp
    287288    SOURCES += udpnotify.cpp              tvosdmenuentry.cpp
     289    SOURCES += rtl.cpp
    288290
    289291    # Video output
    290292    HEADERS += videooutbase.h           videoout_null.h
  • mythtv/libs/libmythtv/osdtypes.h

     
    1212#include <qcolor.h>
    1313#include "cc708window.h"
    1414#include "osdimagecache.h"
     15#include "rtl.h"
    1516
    1617using namespace std;
    1718
     
    238239    void SetButton(bool is_button)      { m_button = is_button;     }
    239240    void SetEntryNum(int entrynum)      { m_entrynum = entrynum;    }
    240241
    241     QString ConvertFromRtoL(const QString &text) const;
    242 
    243     static QString BasicConvertFromRtoL(const QString &text);
    244 
    245242  protected:
    246243    ~OSDTypeText();
    247244
     
    292289    mutable uint    m_draw_info_len;
    293290    mutable vector<DrawInfo> m_draw_info;
    294291
    295     mutable QMutex      fribidi_lock;
    296     mutable QTextCodec *codeci;
     292    RTL *m_rtl;
    297293};
    298294   
    299295class OSDTypeImage : public OSDType
  • mythtv/libs/libmythtv/osdlistbtntype.h

     
    3535#include "osdtypes.h"
    3636#include "ttfont.h"
    3737#include "generictree.h"
     38#include "rtl.h"
    3839
    3940class OSDListBtnType;
    4041class OSDListBtnTypeItem;
     
    149150    int       m_levelnum;
    150151    bool      m_visible;
    151152    bool      m_arrowAccel;
     153    bool      m_isRtl;
    152154};
    153155 
    154156class OSDListBtnType : public OSDType
     
    311313    QRect           m_arrowRect;
    312314    QRect           m_pixmapRect;
    313315    QRect           m_textRect;
     316    RTL            *m_rtl;
    314317};
    315318
    316319
  • mythtv/libs/libmythtv/osdlistbtntype.cpp

     
    6767    m_wmult        = (wmult == 0.0f) ? 1.0f : wmult;
    6868    m_hmult        = (hmult == 0.0f) ? 1.0f : hmult;
    6969    m_unbiasedarea = unbias(area,      wmult, hmult);
    7070    m_unbiasedsize = unbias(levelsize, wmult, hmult);
     71
     72    if (gContext->GetSettingOnHost("Language",gContext->GetHostName())=="HE")
     73        m_isRtl = true;
     74    else
     75        m_isRtl = false;
    7176}
    7277
    7378OSDListTreeType::~OSDListTreeType()
    7479{
     
    142147    for (uint i = 0; i < (uint)m_depth; i++)
    143148    {
    144149        QString levelname = QString("level%1").arg(i + 1);
    145150        QRect curlevelarea = m_levelsize;
    146         curlevelarea.translate(m_totalarea.x(), m_totalarea.y());
    147         curlevelarea.translate((m_levelsize.width() + m_levelspacing) * i, 0);
     151       
     152// if we are left to right
     153        if (false == m_isRtl)
     154        {
     155                curlevelarea.translate(m_totalarea.x(), m_totalarea.y());
     156                curlevelarea.translate((m_levelsize.width() + m_levelspacing) * i, 0);
     157        }
     158       
     159// if we are right to left
     160        else
     161        {
     162                curlevelarea.translate(m_totalarea.width(), m_totalarea.y());
     163                curlevelarea.translate( ((-1 - i) * m_levelsize.width()) - m_levelspacing,0);
     164        }
    148165
    149166        OSDListBtnType *newlevel = new OSDListBtnType(
    150167            levelname, curlevelarea, m_wmult, m_hmult, true);
    151168
     
    216233    {
    217234        GetLevel(m_levelnum)->MovePageDown();
    218235        EnterItem();
    219236    }
    220     else if (has_action("LEFT", actions) && (m_levelnum > 0))
     237    else if (!m_isRtl && has_action("LEFT", actions) && (m_levelnum > 0))
    221238    {
    222239        GetLevel(m_levelnum)->Reset();
    223240        GetLevel(m_levelnum)->SetVisible(false);
    224241
    225242        m_levelnum--;
    226243        EnterItem();
    227244    }
    228     else if ((has_action("LEFT", actions) && m_arrowAccel) ||
     245    else if (m_isRtl && has_action("LEFT",actions))
     246        {
     247                // Right to left - left acts as select / advance one stage
     248                if ((m_levelnum + 1 < m_depth) &&
     249                    (currentpos->childCount() > 0))     
     250                {
     251                        GetLevel(m_levelnum)->SetActive(false);
     252                        m_levelnum++;
     253               
     254                        FillLevelFromTree(currentpos, m_levelnum);
     255                        GetLevel(m_levelnum)->SetVisible(true);
     256                        EnterItem();
     257                }
     258                else
     259                {
     260                        SelectItem();
     261                }
     262        }       
     263    else if ((!m_isRtl &&  has_action("LEFT", actions) && m_arrowAccel) ||
    229264             has_action("ESCAPE",   actions) ||
    230265             has_action("CLEAROSD", actions) ||
    231266             has_action("MENU",     actions))
    232267    {
    233268        m_visible = false;
    234269    }
    235     else if (has_action("RIGHT", actions) &&
     270    else if ((!m_isRtl && has_action("RIGHT", actions) && m_arrowAccel) ||
    236271             (m_levelnum + 1 < m_depth) &&
    237272             (currentpos->childCount() > 0))
    238273    {
    239274        GetLevel(m_levelnum)->SetActive(false);
     
    247282             has_action("SELECT", actions))
    248283    {
    249284        SelectItem();
    250285    }
     286    else if ((true ==m_isRtl) && has_action("RIGHT",actions) && (m_levelnum > 0))
     287    {
     288        GetLevel(m_levelnum)->Reset();
     289        GetLevel(m_levelnum)->SetVisible(false);
     290
     291        m_levelnum--;
     292        EnterItem();
     293    }
    251294    else
    252295    {
    253296        return false;
    254297    }
     
    666709
    667710    LoadPixmap(m_checkNonePix, "check-empty");
    668711    LoadPixmap(m_checkHalfPix, "check-half");
    669712    LoadPixmap(m_checkFullPix, "check-full");
    670     LoadPixmap(m_arrowPix, "arrow");
     713    if (gContext->GetSettingOnHost("Language",gContext->GetHostName())=="HE")
     714       LoadPixmap(m_arrowPix, "ltarrow");
     715    else
     716       LoadPixmap(m_arrowPix, "arrow");
    671717
    672718    uint itemWidth = (m_rect.width() + 1) & (~1);
    673719
    674720    InitItem(m_itemRegPix,      itemWidth,    m_itemHeight,
     
    781827
    782828    if (m_checkable)
    783829        m_checkRect  = QRect(margin, (height - ch)/2, cw, ch);
    784830
    785     if (m_showArrow)
    786         m_arrowRect  = QRect(width - aw - margin, (height - ah)/2, aw, ah);
     831    if (m_showArrow)
     832        if (gContext->GetSettingOnHost("Language",gContext->GetHostName())=="HE")
     833                m_arrowRect  = QRect(m_parent->m_contentsRect.x() + margin, (height - ah)/2, aw, ah);
     834        else
     835                m_arrowRect  = QRect(width - aw - margin, (height - ah)/2, aw, ah);
     836       
    787837
    788838    if (m_pixmap)
    789839    {
    790840        int tmp = (m_checkable) ? (2 * margin + m_checkRect.width()) : margin;
     
    795845    tx += (m_checkable) ? m_checkRect.width()  + margin : 0;
    796846    tx += (m_pixmap)    ? m_pixmapRect.width() + margin : 0;
    797847    tw -= (m_checkable) ? m_checkRect.width()  + margin : 0;
    798848    tw -= (m_showArrow) ? m_arrowRect.width()  + margin : 0;
     849   
     850    if (gContext->GetSettingOnHost("Language",gContext->GetHostName())=="HE")
     851        tx += (m_showArrow) ? m_arrowRect.width()  + margin : 0;
     852
    799853    tw -= (m_pixmap)    ? m_pixmapRect.width() + margin : 0;
    800854    m_textRect = QRect(tx, 0, tw, height);
    801855
    802856    m_parent->InsertItem(this);