]> git.lyx.org Git - features.git/commitdiff
Add mechanism to change icons in RTL mode
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sun, 21 Jul 2019 23:20:30 +0000 (01:20 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 18 Jun 2020 13:48:42 +0000 (15:48 +0200)
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.

49 files changed:
lib/Makefile.am
lib/images/bidi_ltr_depth-decrement.svgz [new file with mode: 0644]
lib/images/bidi_ltr_depth-increment.svgz [new file with mode: 0644]
lib/images/bidi_ltr_layout-toggle_Description.svgz [new file with mode: 0644]
lib/images/bidi_ltr_layout-toggle_Enumerate.svgz [new file with mode: 0644]
lib/images/bidi_ltr_layout-toggle_Itemize.svgz [new file with mode: 0644]
lib/images/bidi_ltr_layout-toggle_List.svgz [new file with mode: 0644]
lib/images/bidi_ltr_layout-toggle_Section.svgz [new file with mode: 0644]
lib/images/bidi_rtl_depth-decrement.svgz [new file with mode: 0644]
lib/images/bidi_rtl_depth-increment.svgz [new file with mode: 0644]
lib/images/bidi_rtl_layout-toggle_Description.svgz [new file with mode: 0644]
lib/images/bidi_rtl_layout-toggle_Enumerate.svgz [new file with mode: 0644]
lib/images/bidi_rtl_layout-toggle_Itemize.svgz [new file with mode: 0644]
lib/images/bidi_rtl_layout-toggle_List.svgz [new file with mode: 0644]
lib/images/bidi_rtl_layout-toggle_Section.svgz [new file with mode: 0644]
lib/images/classic/bidi_ltr_depth-decrement.png [new file with mode: 0644]
lib/images/classic/bidi_ltr_depth-increment.png [new file with mode: 0644]
lib/images/classic/bidi_ltr_layout-toggle_Description.png [new file with mode: 0644]
lib/images/classic/bidi_ltr_layout-toggle_Enumerate.png [new file with mode: 0644]
lib/images/classic/bidi_ltr_layout-toggle_Itemize.png [new file with mode: 0644]
lib/images/classic/bidi_ltr_layout-toggle_List.png [new file with mode: 0644]
lib/images/classic/bidi_ltr_layout-toggle_Section.png [new file with mode: 0644]
lib/images/classic/bidi_rtl_depth-decrement.png [new file with mode: 0644]
lib/images/classic/bidi_rtl_depth-increment.png [new file with mode: 0644]
lib/images/classic/bidi_rtl_layout-toggle_Description.png [new file with mode: 0644]
lib/images/classic/bidi_rtl_layout-toggle_Enumerate.png [new file with mode: 0644]
lib/images/classic/bidi_rtl_layout-toggle_Itemize.png [new file with mode: 0644]
lib/images/classic/bidi_rtl_layout-toggle_List.png [new file with mode: 0644]
lib/images/classic/bidi_rtl_layout-toggle_Section.png [new file with mode: 0644]
lib/images/oxygen/bidi_ltr_depth-decrement.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_ltr_depth-increment.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_ltr_layout-toggle_Description.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_ltr_layout-toggle_Enumerate.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_ltr_layout-toggle_Itemize.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_ltr_layout-toggle_List.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_ltr_layout-toggle_Section.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_rtl_depth-decrement.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_rtl_depth-increment.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_rtl_layout-toggle_Description.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_rtl_layout-toggle_Enumerate.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_rtl_layout-toggle_Itemize.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_rtl_layout-toggle_List.svgz [new file with mode: 0644]
lib/images/oxygen/bidi_rtl_layout-toggle_Section.svgz [new file with mode: 0644]
lib/ui/stdtoolbars.inc
src/FuncCode.h
src/LyXAction.cpp
src/frontends/qt/Action.cpp
src/frontends/qt/GuiApplication.cpp
src/frontends/qt/GuiToolbar.cpp

index ac49a2da62ea6286dce99e9f3f4468a22582bfc9..4b5e6a7149f592609f0f3e54c5d14aa37fbe156c 100644 (file)
@@ -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 (file)
index 0000000..45bee9d
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 (file)
index 0000000..088996d
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 (file)
index 0000000..00cc0aa
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 (file)
index 0000000..aaab675
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 (file)
index 0000000..53bde57
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 (file)
index 0000000..5266ad5
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 (file)
index 0000000..65b4335
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 (file)
index 0000000..cd87995
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 (file)
index 0000000..7a77e62
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 (file)
index 0000000..8a421ea
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 (file)
index 0000000..203ac9f
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 (file)
index 0000000..dc8b357
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 (file)
index 0000000..b24502f
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 (file)
index 0000000..8d9e340
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 (file)
index 0000000..deddc47
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 (file)
index 0000000..07afff7
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 (file)
index 0000000..c9305c5
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 (file)
index 0000000..8c63143
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 (file)
index 0000000..92a67f0
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 (file)
index 0000000..6875511
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 (file)
index 0000000..e17c0dd
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 (file)
index 0000000..c5c10d0
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 (file)
index 0000000..82517d8
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 (file)
index 0000000..9725c96
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 (file)
index 0000000..9b22744
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 (file)
index 0000000..2e86102
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 (file)
index 0000000..5f0c84e
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 (file)
index 0000000..e17c0dd
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 (file)
index 0000000..fe32886
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 (file)
index 0000000..3cf9dfd
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 (file)
index 0000000..aa0ae3a
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 (file)
index 0000000..ad79d56
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 (file)
index 0000000..bf45803
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 (file)
index 0000000..036a6f9
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 (file)
index 0000000..2e14680
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 (file)
index 0000000..ceb1a7d
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 (file)
index 0000000..b2890f4
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 (file)
index 0000000..4c906b1
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 (file)
index 0000000..19907b4
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 (file)
index 0000000..1f71c41
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 (file)
index 0000000..ca26ee0
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 (file)
index 0000000..ba5dfa5
Binary files /dev/null and b/lib/images/oxygen/bidi_rtl_layout-toggle_Section.svgz differ
index 10bb531b5db3643022fb75ca9fcaed2a295820f5..2c7ad20b459272a2e708ba53b9f8ed487e501801 100644 (file)
@@ -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"
index 7a2c2cf1f2c1a7dcd5210342e38a21510cc5b475..f2021dd6d07297b47547433836a118cf03f641b2 100644 (file)
@@ -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
 };
 
index 55c90ca1b36041d3b7afc5ad5e8aab9c8b7b6b16..9187c785059ef039ace4a1c8cea4337c3b683923 100644 (file)
@@ -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 <DIRECTION> <ACTION>
+ * \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.
index bd102e6b73a8f987c248ec55dec6e07759ee35c0..0609351a4152111c2697c47e4aae8dbc330d2477 100644 (file)
@@ -76,6 +76,7 @@ void Action::update()
                setCheckable(false);
        }
 
+       setVisible(!status.unknown());
        setEnabled(status.enabled());
 }
 
index 458d8e3c0f77fcd6b58cef5694930330a6309938..e67a47621817ad1fb1f5c35339dd0db110cfbfde 100644 (file)
 #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);
index 9da33067018ef0ad6045b543891834e911fd6017..2e8c2b4ec0ead835b523024ea02ed304b77388ce 100644 (file)
@@ -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: