diff --git a/escher/src/layout_field.cpp b/escher/src/layout_field.cpp index 43796de71..bce750824 100644 --- a/escher/src/layout_field.cpp +++ b/escher/src/layout_field.cpp @@ -234,7 +234,11 @@ bool LayoutField::privateHandleEvent(Ion::Events::Event event) { setEditing(true); } if (event.hasText()) { - handleEventWithText(event.text()); + if(event.text() == "%" && Ion::Events::isLockActive() ){ + m_contentView.cursor()->performBackspace(); + } else { + handleEventWithText(event.text()); + } } else if (event == Ion::Events::Paste) { handleEventWithText(Clipboard::sharedClipboard()->storedText(), false, true); } else { diff --git a/escher/src/text_area.cpp b/escher/src/text_area.cpp index 0b61fa3cf..10dfe6c91 100644 --- a/escher/src/text_area.cpp +++ b/escher/src/text_area.cpp @@ -112,8 +112,6 @@ bool TextArea::handleEvent(Ion::Events::Event event) { contentView()->moveCursorGeo(INT_MAX/2, 0); } else if (event == Ion::Events::Backspace) { return removePreviousGlyph(); - } else if (event.hasText()) { - return handleEventWithText(event.text()); } else if (event == Ion::Events::EXE) { return handleEventWithText("\n"); } else if (event == Ion::Events::Clear) { @@ -122,6 +120,14 @@ bool TextArea::handleEvent(Ion::Events::Event event) { } } else if (event == Ion::Events::Paste) { return handleEventWithText(Clipboard::sharedClipboard()->storedText()); + } else if (event == Ion::Events::Percent) { + return removePreviousGlyph(); + } else if (event.hasText()) { + if(event.text() == "%" && Ion::Events::isLockActive()){ + return removePreviousGlyph(); + } else { + return handleEventWithText(event.text()); + } } else { return false; } diff --git a/ion/include/ion/events.h b/ion/include/ion/events.h index ec55f9ea4..1caffaeb7 100644 --- a/ion/include/ion/events.h +++ b/ion/include/ion/events.h @@ -55,6 +55,7 @@ ShiftAlphaStatus shiftAlphaStatus(); void setShiftAlphaStatus(ShiftAlphaStatus s); bool isShiftActive(); bool isAlphaActive(); +bool isLockActive(); void updateModifiersFromEvent(Event e); // Plain @@ -180,6 +181,7 @@ constexpr Event ShiftThree = Event::ShiftKey(Keyboard::Key::Three); constexpr Event Colon = Event::AlphaKey(Keyboard::Key::XNT); constexpr Event SemiColon = Event::AlphaKey(Keyboard::Key::Var); constexpr Event DoubleQuotes = Event::AlphaKey(Keyboard::Key::Toolbox); +constexpr Event Percent = Event::AlphaKey(Keyboard::Key::Back); constexpr Event LowerA = Event::AlphaKey(Keyboard::Key::Exp); constexpr Event LowerB = Event::AlphaKey(Keyboard::Key::Ln); @@ -218,7 +220,6 @@ constexpr Event Exclamation = Event::AlphaKey(Keyboard::Key::Dot); constexpr Event alphaans = Event::AlphaKey(Keyboard::Key::Ans); // Shift + Alpha -constexpr Event Percent = Event::ShiftAlphaKey(Keyboard::Key::Back); constexpr Event SimpleQuote = Event::ShiftAlphaKey(Keyboard::Key::Toolbox); constexpr Event UpperA = Event::ShiftAlphaKey(Keyboard::Key::Exp); diff --git a/ion/include/ion/keyboard/layout_B2/layout_events.h b/ion/include/ion/keyboard/layout_B2/layout_events.h index 01338d947..8c8c46f07 100644 --- a/ion/include/ion/keyboard/layout_B2/layout_events.h +++ b/ion/include/ion/keyboard/layout_B2/layout_events.h @@ -87,7 +87,7 @@ static constexpr const char * s_nameForEvent[255] = { //Shift+Alpha, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, - nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, "Percent", "UpperA", "UpperB", "UpperC", "UpperD", "UpperE", "UpperF", "UpperG", "UpperH", "UpperI", "UpperJ", "UpperK", "UpperL", "UpperM", "UpperN", "UpperO", "UpperP", "UpperQ", nullptr, diff --git a/ion/include/ion/keyboard/layout_B3/layout_events.h b/ion/include/ion/keyboard/layout_B3/layout_events.h index fc9f20fe2..9e1fde2af 100644 --- a/ion/include/ion/keyboard/layout_B3/layout_events.h +++ b/ion/include/ion/keyboard/layout_B3/layout_events.h @@ -87,7 +87,7 @@ static constexpr const char * s_nameForEvent[255] = { //Shift+Alpha, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, - nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, "Percent", "UpperA", "UpperB", "UpperC", "UpperD", "UpperE", "UpperF", "UpperG", "UpperH", "UpperI", "UpperJ", "UpperK", "UpperL", "UpperM", "UpperN", "UpperO", "UpperP", "UpperQ", nullptr, diff --git a/ion/src/shared/events_modifier.cpp b/ion/src/shared/events_modifier.cpp index 959350c8b..ddfdb4c10 100644 --- a/ion/src/shared/events_modifier.cpp +++ b/ion/src/shared/events_modifier.cpp @@ -18,6 +18,10 @@ bool isAlphaActive() { return sShiftAlphaStatus == ShiftAlphaStatus::Alpha || sShiftAlphaStatus == ShiftAlphaStatus::ShiftAlpha || sShiftAlphaStatus == ShiftAlphaStatus::AlphaLock || sShiftAlphaStatus == ShiftAlphaStatus::ShiftAlphaLock; ; } + +bool isLockActive() { + return sShiftAlphaStatus == ShiftAlphaStatus::AlphaLock || sShiftAlphaStatus == ShiftAlphaStatus::ShiftAlphaLock; +} void setShiftAlphaStatus(ShiftAlphaStatus s) { sShiftAlphaStatus = s;