From: Jean-Marc Lasgouttes Date: Sun, 21 Jul 2019 23:20:30 +0000 (+0200) Subject: Add mechanism to change icons in RTL mode X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=d1e68bcae2305bc0d4b95feefd9702dc68653d61;p=features.git Add mechanism to change icons in RTL mode When the cursor in RTL text, icons for "depth-increment" or "layout-toggle Enumerate" look wrong. To fix this, the lfun "bidi" is introduced. "bidi ltr func" behaves like "func" in LTR text, but is unknown in RTL text. "bidi rtl" does the opposite. This allows to add two icons, but only have one icon available. When no document is available, only LTR is assumed. To make this work, the handling of unknown functions in toolbar has been changed so this these functions can change dynamically their existence. The icon themes `default', `oxygen' and `classic' have been updated accordingly. Fixes bug #4451. --- diff --git a/lib/Makefile.am b/lib/Makefile.am index ac49a2da62..4b5e6a7149 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -516,6 +516,20 @@ dist_images_DATA1X = \ images/all-changes-accept.svgz \ images/all-changes-reject.svgz \ images/banner.svgz \ + images/bidi_ltr_depth-decrement.svgz \ + images/bidi_ltr_depth-increment.svgz \ + images/bidi_ltr_layout-toggle_Description.svgz \ + images/bidi_ltr_layout-toggle_Enumerate.svgz \ + images/bidi_ltr_layout-toggle_Itemize.svgz \ + images/bidi_ltr_layout-toggle_List.svgz \ + images/bidi_ltr_layout-toggle_Section.svgz \ + images/bidi_rtl_depth-decrement.svgz \ + images/bidi_rtl_depth-increment.svgz \ + images/bidi_rtl_layout-toggle_Description.svgz \ + images/bidi_rtl_layout-toggle_Enumerate.svgz \ + images/bidi_rtl_layout-toggle_Itemize.svgz \ + images/bidi_rtl_layout-toggle_List.svgz \ + images/bidi_rtl_layout-toggle_Section.svgz \ images/bookmark-goto.svgz \ images/bookmark-goto_0.svgz \ images/bookmark-save.svgz \ @@ -1802,6 +1816,20 @@ imagesoxygendir = $(imagesdir)/oxygen dist_imagesoxygen_DATA1X = \ images/oxygen/all-changes-accept.svgz \ images/oxygen/all-changes-reject.svgz \ + images/oxygen/bidi_ltr_depth-decrement.svgz \ + images/oxygen/bidi_ltr_depth-increment.svgz \ + images/oxygen/bidi_ltr_layout-toggle_Description.svgz \ + images/oxygen/bidi_ltr_layout-toggle_Enumerate.svgz \ + images/oxygen/bidi_ltr_layout-toggle_Itemize.svgz \ + images/oxygen/bidi_ltr_layout-toggle_List.svgz \ + images/oxygen/bidi_ltr_layout-toggle_Section.svgz \ + images/oxygen/bidi_rtl_depth-decrement.svgz \ + images/oxygen/bidi_rtl_depth-increment.svgz \ + images/oxygen/bidi_rtl_layout-toggle_Description.svgz \ + images/oxygen/bidi_rtl_layout-toggle_Enumerate.svgz \ + images/oxygen/bidi_rtl_layout-toggle_Itemize.svgz \ + images/oxygen/bidi_rtl_layout-toggle_List.svgz \ + images/oxygen/bidi_rtl_layout-toggle_Section.svgz \ images/oxygen/bookmark-goto.svgz \ images/oxygen/bookmark-goto_0.svgz \ images/oxygen/bookmark-save.svgz \ @@ -2005,6 +2033,20 @@ imagesclassicdir = $(imagesdir)/classic dist_imagesclassic_DATA = \ images/classic/all-changes-accept.png \ images/classic/all-changes-reject.png \ + images/classic/bidi_ltr_depth-decrement.png \ + images/classic/bidi_ltr_depth-increment.png \ + images/classic/bidi_ltr_layout-toggle_Description.png \ + images/classic/bidi_ltr_layout-toggle_Enumerate.png \ + images/classic/bidi_ltr_layout-toggle_Itemize.png \ + images/classic/bidi_ltr_layout-toggle_List.png \ + images/classic/bidi_ltr_layout-toggle_Section.png \ + images/classic/bidi_rtl_depth-decrement.png \ + images/classic/bidi_rtl_depth-increment.png \ + images/classic/bidi_rtl_layout-toggle_Description.png \ + images/classic/bidi_rtl_layout-toggle_Enumerate.png \ + images/classic/bidi_rtl_layout-toggle_Itemize.png \ + images/classic/bidi_rtl_layout-toggle_List.png \ + images/classic/bidi_rtl_layout-toggle_Section.png \ images/classic/bookmark-goto.png \ images/classic/bookmark-goto_0.png \ images/classic/bookmark-save.png \ diff --git a/lib/images/bidi_ltr_depth-decrement.svgz b/lib/images/bidi_ltr_depth-decrement.svgz new file mode 100644 index 0000000000..45bee9d34c Binary files /dev/null and b/lib/images/bidi_ltr_depth-decrement.svgz differ diff --git a/lib/images/bidi_ltr_depth-increment.svgz b/lib/images/bidi_ltr_depth-increment.svgz new file mode 100644 index 0000000000..088996d87a Binary files /dev/null and b/lib/images/bidi_ltr_depth-increment.svgz differ diff --git a/lib/images/bidi_ltr_layout-toggle_Description.svgz b/lib/images/bidi_ltr_layout-toggle_Description.svgz new file mode 100644 index 0000000000..00cc0aa282 Binary files /dev/null and b/lib/images/bidi_ltr_layout-toggle_Description.svgz differ diff --git a/lib/images/bidi_ltr_layout-toggle_Enumerate.svgz b/lib/images/bidi_ltr_layout-toggle_Enumerate.svgz new file mode 100644 index 0000000000..aaab67546a Binary files /dev/null and b/lib/images/bidi_ltr_layout-toggle_Enumerate.svgz differ diff --git a/lib/images/bidi_ltr_layout-toggle_Itemize.svgz b/lib/images/bidi_ltr_layout-toggle_Itemize.svgz new file mode 100644 index 0000000000..53bde574fa Binary files /dev/null and b/lib/images/bidi_ltr_layout-toggle_Itemize.svgz differ diff --git a/lib/images/bidi_ltr_layout-toggle_List.svgz b/lib/images/bidi_ltr_layout-toggle_List.svgz new file mode 100644 index 0000000000..5266ad5801 Binary files /dev/null and b/lib/images/bidi_ltr_layout-toggle_List.svgz differ diff --git a/lib/images/bidi_ltr_layout-toggle_Section.svgz b/lib/images/bidi_ltr_layout-toggle_Section.svgz new file mode 100644 index 0000000000..65b4335fec Binary files /dev/null and b/lib/images/bidi_ltr_layout-toggle_Section.svgz differ diff --git a/lib/images/bidi_rtl_depth-decrement.svgz b/lib/images/bidi_rtl_depth-decrement.svgz new file mode 100644 index 0000000000..cd87995389 Binary files /dev/null and b/lib/images/bidi_rtl_depth-decrement.svgz differ diff --git a/lib/images/bidi_rtl_depth-increment.svgz b/lib/images/bidi_rtl_depth-increment.svgz new file mode 100644 index 0000000000..7a77e6261d Binary files /dev/null and b/lib/images/bidi_rtl_depth-increment.svgz differ diff --git a/lib/images/bidi_rtl_layout-toggle_Description.svgz b/lib/images/bidi_rtl_layout-toggle_Description.svgz new file mode 100644 index 0000000000..8a421ea1f5 Binary files /dev/null and b/lib/images/bidi_rtl_layout-toggle_Description.svgz differ diff --git a/lib/images/bidi_rtl_layout-toggle_Enumerate.svgz b/lib/images/bidi_rtl_layout-toggle_Enumerate.svgz new file mode 100644 index 0000000000..203ac9f86b Binary files /dev/null and b/lib/images/bidi_rtl_layout-toggle_Enumerate.svgz differ diff --git a/lib/images/bidi_rtl_layout-toggle_Itemize.svgz b/lib/images/bidi_rtl_layout-toggle_Itemize.svgz new file mode 100644 index 0000000000..dc8b357494 Binary files /dev/null and b/lib/images/bidi_rtl_layout-toggle_Itemize.svgz differ diff --git a/lib/images/bidi_rtl_layout-toggle_List.svgz b/lib/images/bidi_rtl_layout-toggle_List.svgz new file mode 100644 index 0000000000..b24502f98b Binary files /dev/null and b/lib/images/bidi_rtl_layout-toggle_List.svgz differ diff --git a/lib/images/bidi_rtl_layout-toggle_Section.svgz b/lib/images/bidi_rtl_layout-toggle_Section.svgz new file mode 100644 index 0000000000..8d9e340c13 Binary files /dev/null and b/lib/images/bidi_rtl_layout-toggle_Section.svgz differ diff --git a/lib/images/classic/bidi_ltr_depth-decrement.png b/lib/images/classic/bidi_ltr_depth-decrement.png new file mode 100644 index 0000000000..deddc474fe Binary files /dev/null and b/lib/images/classic/bidi_ltr_depth-decrement.png differ diff --git a/lib/images/classic/bidi_ltr_depth-increment.png b/lib/images/classic/bidi_ltr_depth-increment.png new file mode 100644 index 0000000000..07afff7619 Binary files /dev/null and b/lib/images/classic/bidi_ltr_depth-increment.png differ diff --git a/lib/images/classic/bidi_ltr_layout-toggle_Description.png b/lib/images/classic/bidi_ltr_layout-toggle_Description.png new file mode 100644 index 0000000000..c9305c57fb Binary files /dev/null and b/lib/images/classic/bidi_ltr_layout-toggle_Description.png differ diff --git a/lib/images/classic/bidi_ltr_layout-toggle_Enumerate.png b/lib/images/classic/bidi_ltr_layout-toggle_Enumerate.png new file mode 100644 index 0000000000..8c63143b89 Binary files /dev/null and b/lib/images/classic/bidi_ltr_layout-toggle_Enumerate.png differ diff --git a/lib/images/classic/bidi_ltr_layout-toggle_Itemize.png b/lib/images/classic/bidi_ltr_layout-toggle_Itemize.png new file mode 100644 index 0000000000..92a67f092a Binary files /dev/null and b/lib/images/classic/bidi_ltr_layout-toggle_Itemize.png differ diff --git a/lib/images/classic/bidi_ltr_layout-toggle_List.png b/lib/images/classic/bidi_ltr_layout-toggle_List.png new file mode 100644 index 0000000000..6875511aab Binary files /dev/null and b/lib/images/classic/bidi_ltr_layout-toggle_List.png differ diff --git a/lib/images/classic/bidi_ltr_layout-toggle_Section.png b/lib/images/classic/bidi_ltr_layout-toggle_Section.png new file mode 100644 index 0000000000..e17c0dd24b Binary files /dev/null and b/lib/images/classic/bidi_ltr_layout-toggle_Section.png differ diff --git a/lib/images/classic/bidi_rtl_depth-decrement.png b/lib/images/classic/bidi_rtl_depth-decrement.png new file mode 100644 index 0000000000..c5c10d09d8 Binary files /dev/null and b/lib/images/classic/bidi_rtl_depth-decrement.png differ diff --git a/lib/images/classic/bidi_rtl_depth-increment.png b/lib/images/classic/bidi_rtl_depth-increment.png new file mode 100644 index 0000000000..82517d8a00 Binary files /dev/null and b/lib/images/classic/bidi_rtl_depth-increment.png differ diff --git a/lib/images/classic/bidi_rtl_layout-toggle_Description.png b/lib/images/classic/bidi_rtl_layout-toggle_Description.png new file mode 100644 index 0000000000..9725c96ccf Binary files /dev/null and b/lib/images/classic/bidi_rtl_layout-toggle_Description.png differ diff --git a/lib/images/classic/bidi_rtl_layout-toggle_Enumerate.png b/lib/images/classic/bidi_rtl_layout-toggle_Enumerate.png new file mode 100644 index 0000000000..9b227449cb Binary files /dev/null and b/lib/images/classic/bidi_rtl_layout-toggle_Enumerate.png differ diff --git a/lib/images/classic/bidi_rtl_layout-toggle_Itemize.png b/lib/images/classic/bidi_rtl_layout-toggle_Itemize.png new file mode 100644 index 0000000000..2e861020d5 Binary files /dev/null and b/lib/images/classic/bidi_rtl_layout-toggle_Itemize.png differ diff --git a/lib/images/classic/bidi_rtl_layout-toggle_List.png b/lib/images/classic/bidi_rtl_layout-toggle_List.png new file mode 100644 index 0000000000..5f0c84e08e Binary files /dev/null and b/lib/images/classic/bidi_rtl_layout-toggle_List.png differ diff --git a/lib/images/classic/bidi_rtl_layout-toggle_Section.png b/lib/images/classic/bidi_rtl_layout-toggle_Section.png new file mode 100644 index 0000000000..e17c0dd24b Binary files /dev/null and b/lib/images/classic/bidi_rtl_layout-toggle_Section.png differ diff --git a/lib/images/oxygen/bidi_ltr_depth-decrement.svgz b/lib/images/oxygen/bidi_ltr_depth-decrement.svgz new file mode 100644 index 0000000000..fe3288675e Binary files /dev/null and b/lib/images/oxygen/bidi_ltr_depth-decrement.svgz differ diff --git a/lib/images/oxygen/bidi_ltr_depth-increment.svgz b/lib/images/oxygen/bidi_ltr_depth-increment.svgz new file mode 100644 index 0000000000..3cf9dfd067 Binary files /dev/null and b/lib/images/oxygen/bidi_ltr_depth-increment.svgz differ diff --git a/lib/images/oxygen/bidi_ltr_layout-toggle_Description.svgz b/lib/images/oxygen/bidi_ltr_layout-toggle_Description.svgz new file mode 100644 index 0000000000..aa0ae3a816 Binary files /dev/null and b/lib/images/oxygen/bidi_ltr_layout-toggle_Description.svgz differ diff --git a/lib/images/oxygen/bidi_ltr_layout-toggle_Enumerate.svgz b/lib/images/oxygen/bidi_ltr_layout-toggle_Enumerate.svgz new file mode 100644 index 0000000000..ad79d56820 Binary files /dev/null and b/lib/images/oxygen/bidi_ltr_layout-toggle_Enumerate.svgz differ diff --git a/lib/images/oxygen/bidi_ltr_layout-toggle_Itemize.svgz b/lib/images/oxygen/bidi_ltr_layout-toggle_Itemize.svgz new file mode 100644 index 0000000000..bf45803ce7 Binary files /dev/null and b/lib/images/oxygen/bidi_ltr_layout-toggle_Itemize.svgz differ diff --git a/lib/images/oxygen/bidi_ltr_layout-toggle_List.svgz b/lib/images/oxygen/bidi_ltr_layout-toggle_List.svgz new file mode 100644 index 0000000000..036a6f9cfc Binary files /dev/null and b/lib/images/oxygen/bidi_ltr_layout-toggle_List.svgz differ diff --git a/lib/images/oxygen/bidi_ltr_layout-toggle_Section.svgz b/lib/images/oxygen/bidi_ltr_layout-toggle_Section.svgz new file mode 100644 index 0000000000..2e1468008a Binary files /dev/null and b/lib/images/oxygen/bidi_ltr_layout-toggle_Section.svgz differ diff --git a/lib/images/oxygen/bidi_rtl_depth-decrement.svgz b/lib/images/oxygen/bidi_rtl_depth-decrement.svgz new file mode 100644 index 0000000000..ceb1a7d186 Binary files /dev/null and b/lib/images/oxygen/bidi_rtl_depth-decrement.svgz differ diff --git a/lib/images/oxygen/bidi_rtl_depth-increment.svgz b/lib/images/oxygen/bidi_rtl_depth-increment.svgz new file mode 100644 index 0000000000..b2890f425a Binary files /dev/null and b/lib/images/oxygen/bidi_rtl_depth-increment.svgz differ diff --git a/lib/images/oxygen/bidi_rtl_layout-toggle_Description.svgz b/lib/images/oxygen/bidi_rtl_layout-toggle_Description.svgz new file mode 100644 index 0000000000..4c906b12e0 Binary files /dev/null and b/lib/images/oxygen/bidi_rtl_layout-toggle_Description.svgz differ diff --git a/lib/images/oxygen/bidi_rtl_layout-toggle_Enumerate.svgz b/lib/images/oxygen/bidi_rtl_layout-toggle_Enumerate.svgz new file mode 100644 index 0000000000..19907b4464 Binary files /dev/null and b/lib/images/oxygen/bidi_rtl_layout-toggle_Enumerate.svgz differ diff --git a/lib/images/oxygen/bidi_rtl_layout-toggle_Itemize.svgz b/lib/images/oxygen/bidi_rtl_layout-toggle_Itemize.svgz new file mode 100644 index 0000000000..1f71c416fd Binary files /dev/null and b/lib/images/oxygen/bidi_rtl_layout-toggle_Itemize.svgz differ diff --git a/lib/images/oxygen/bidi_rtl_layout-toggle_List.svgz b/lib/images/oxygen/bidi_rtl_layout-toggle_List.svgz new file mode 100644 index 0000000000..ca26ee0bb6 Binary files /dev/null and b/lib/images/oxygen/bidi_rtl_layout-toggle_List.svgz differ diff --git a/lib/images/oxygen/bidi_rtl_layout-toggle_Section.svgz b/lib/images/oxygen/bidi_rtl_layout-toggle_Section.svgz new file mode 100644 index 0000000000..ba5dfa5e16 Binary files /dev/null and b/lib/images/oxygen/bidi_rtl_layout-toggle_Section.svgz differ diff --git a/lib/ui/stdtoolbars.inc b/lib/ui/stdtoolbars.inc index 10bb531b5d..2c7ad20b45 100644 --- a/lib/ui/stdtoolbars.inc +++ b/lib/ui/stdtoolbars.inc @@ -113,12 +113,20 @@ ToolbarSet Toolbar "extra" "Extra" Item "Default" "layout" - Item "Numbered list" "layout-toggle Enumerate" - Item "Itemized list" "layout-toggle Itemize" - Item "List" "layout-toggle List" - Item "Description" "layout-toggle Description" - Item "Increase depth" "depth-increment" - Item "Decrease depth" "depth-decrement" + # The bidi function is used here to select a different + # icon depending on the direction of the current text. + Item "Numbered list" "bidi ltr layout-toggle Enumerate" + Item "Numbered list" "bidi rtl layout-toggle Enumerate" + Item "Itemized list" "bidi ltr layout-toggle Itemize" + Item "Itemized list" "bidi rtl layout-toggle Itemize" + Item "List" "bidi ltr layout-toggle List" + Item "List" "bidi rtl layout-toggle List" + Item "Description" "bidi ltr layout-toggle Description" + Item "Description" "bidi rtl layout-toggle Description" + Item "Increase depth" "bidi ltr depth-increment" + Item "Increase depth" "bidi rtl depth-increment" + Item "Decrease depth" "bidi ltr depth-decrement" + Item "Decrease depth" "bidi rtl depth-decrement" Separator Item "Insert figure float" "float-insert figure" Item "Insert table float" "float-insert table" diff --git a/src/FuncCode.h b/src/FuncCode.h index 7a2c2cf1f2..f2021dd6d0 100644 --- a/src/FuncCode.h +++ b/src/FuncCode.h @@ -485,6 +485,7 @@ enum FuncCode LFUN_BUFFER_WRITE_AS_TEMPLATE, // spitz, 20190323 LFUN_TABULAR_STYLE_INSERT, // spitz, 20190325 LFUN_PARAGRAPH_SELECT, // Kornel, 20190416 + LFUN_BIDI, LFUN_LASTACTION // end of the table }; diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp index 55c90ca1b3..9187c78505 100644 --- a/src/LyXAction.cpp +++ b/src/LyXAction.cpp @@ -332,6 +332,20 @@ void LyXAction::init() { LFUN_BIBTEX_DATABASE_DEL, "bibtex-database-del", Noop, Edit }, +/*! + * \var lyx::FuncCode lyx::LFUN_BIDI + * \li Action: Helper function for bidirectional toolbar icons + * \li Notion: In a text, the function is marked as `unknown' when the + current direction does not correspond to DIRECTION (ltr + or rtl). Otherwise the function behaves exactly as + ACTION. The result is that ACTION will be associated to + a different icon depending on text direction. + * \li Syntax: bidi + * \li Origin: JMarc, 21 July 2019 + * \endvar + */ + { LFUN_BIDI, "bidi", Noop, System }, + /*! * \var lyx::FuncCode lyx::LFUN_BOOKMARK_CLEAR * \li Action: Clears the list of saved bookmarks. diff --git a/src/frontends/qt/Action.cpp b/src/frontends/qt/Action.cpp index bd102e6b73..0609351a41 100644 --- a/src/frontends/qt/Action.cpp +++ b/src/frontends/qt/Action.cpp @@ -76,6 +76,7 @@ void Action::update() setCheckable(false); } + setVisible(!status.unknown()); setEnabled(status.enabled()); } diff --git a/src/frontends/qt/GuiApplication.cpp b/src/frontends/qt/GuiApplication.cpp index 458d8e3c0f..e67a476218 100644 --- a/src/frontends/qt/GuiApplication.cpp +++ b/src/frontends/qt/GuiApplication.cpp @@ -70,11 +70,11 @@ #include "support/lassert.h" #include "support/lstrings.h" #include "support/lyxalgo.h" // sorted -#include "support/textutils.h" #include "support/Messages.h" #include "support/os.h" #include "support/Package.h" #include "support/TempFile.h" +#include "support/textutils.h" #ifdef Q_OS_MAC #include "support/AppleScript.h" @@ -928,7 +928,7 @@ public: struct GuiApplication::Private { Private(): language_model_(0), meta_fake_bit(NoModifier), - global_menubar_(0) + global_menubar_(0) { #if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400) #if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN) @@ -1292,6 +1292,24 @@ bool GuiApplication::getStatus(FuncRequest const & cmd, FuncStatus & flag) const break; } + case LFUN_BIDI: { + string const dir = cmd.getArg(0); + string const lfun = cmd.getLongArg(1); + BufferView const * bv = + current_view_ ? current_view_->currentBufferView() : nullptr; + bool rtl = bv ? bv->cursor().innerParagraph().isRTL(bv->buffer().params()) + : layoutDirection() == Qt::RightToLeft; + if (((rtl && dir != "rtl") || (!rtl && dir != "ltr"))) { + flag.setUnknown(true); + flag.setEnabled(false); + } else { + FuncRequest func(lyxaction.lookupFunc(lfun)); + func.setOrigin(cmd.origin()); + flag = getStatus(func); + } + break; + } + case LFUN_CURSOR_FOLLOWS_SCROLLBAR_TOGGLE: case LFUN_REPEAT: case LFUN_PREFERENCES_SAVE: @@ -1869,6 +1887,7 @@ void GuiApplication::dispatch(FuncRequest const & cmd, DispatchResult & dr) lyxrc.cursor_follows_scrollbar = !lyxrc.cursor_follows_scrollbar; break; + // --- syntax commands ---------------------------- case LFUN_REPEAT: { // repeat command string countstr; @@ -2020,6 +2039,18 @@ void GuiApplication::dispatch(FuncRequest const & cmd, DispatchResult & dr) break; } + case LFUN_BIDI: { + string const lfun = cmd.getLongArg(1); + FuncRequest func(lyxaction.lookupFunc(cmd.getLongArg(1))); + func.setOrigin(cmd.origin()); + FuncStatus const stat = getStatus(func); + if (stat.enabled()) { + dispatch(func); + break; + } + break; + } + case LFUN_PREFERENCES_SAVE: lyxrc.write(support::makeAbsPath("preferences", package().user_support().absFileName()), false); diff --git a/src/frontends/qt/GuiToolbar.cpp b/src/frontends/qt/GuiToolbar.cpp index 9da3306701..2e8c2b4ec0 100644 --- a/src/frontends/qt/GuiToolbar.cpp +++ b/src/frontends/qt/GuiToolbar.cpp @@ -519,8 +519,7 @@ void GuiToolbar::add(ToolbarItem const & item) break; } case ToolbarItem::COMMAND: { - if (!getStatus(*item.func_).unknown()) - addAction(addItem(item)); + addAction(addItem(item)); break; } default: