Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock X-Debbugs-Cc: undef <debian@undef.tools>
Please unblock package osk-sdl [ Reason ] Help users understand the purpose of osk-sdl when the O.S.K appeas during boot without specific context information. [ Impact ] Some users have been unable to use their device, not knowing that the presented keyboard was for disk decryption. [ Tests ] This issue is fixed with a 50 line patch provided by upstream. Manual tests by upstream, as well as with this package have shown that the issue is fixed. [ Risks ] while the code change is non-trivial, it has been throughly tested across two different Linux distributions. I consider the risk to be low. [ Checklist ] [X] all changes are documented in the d/changelog [X] I reviewed all changes and I approve them [X] attach debdiff against the package in testing unblock osk-sdl/0.62.1-2
diff -Nru osk-sdl-0.62.1/debian/changelog osk-sdl-0.62.1/debian/changelog --- osk-sdl-0.62.1/debian/changelog 2021-01-22 21:32:26.000000000 +0000 +++ osk-sdl-0.62.1/debian/changelog 2021-03-16 08:14:26.000000000 +0000 @@ -1,3 +1,10 @@ +osk-sdl (0.62.1-2) unstable; urgency=medium + + [ Jarrah Gosbell ] + * Backport tooltip from 0.64 (unreleased) + + -- Jarrah Gosbell <debian@undef.tools> Tue, 16 Mar 2021 08:14:26 +0000 + osk-sdl (0.62.1-1) unstable; urgency=medium [ undef ] diff -Nru osk-sdl-0.62.1/debian/patches/0001-tooltip-add-support-for-specifying-the-type-of-toolt.patch osk-sdl-0.62.1/debian/patches/0001-tooltip-add-support-for-specifying-the-type-of-toolt.patch --- osk-sdl-0.62.1/debian/patches/0001-tooltip-add-support-for-specifying-the-type-of-toolt.patch 1970-01-01 00:00:00.000000000 +0000 +++ osk-sdl-0.62.1/debian/patches/0001-tooltip-add-support-for-specifying-the-type-of-toolt.patch 2021-03-16 08:14:26.000000000 +0000 @@ -0,0 +1,110 @@ +From 794d4fc5d4a6e38c56b826ce7cca8dc5a373fdcc Mon Sep 17 00:00:00 2001 +From: Clayton Craft <clay...@craftyguy.net> +Date: Thu, 4 Mar 2021 01:16:53 -0800 +Subject: [PATCH 1/3] tooltip: add support for specifying the type of tooltip + to render + +Tooltips can be themed/colored based on type with this change. Only two +types ('info' and 'error') are introduced here. +--- + src/tooltip.cpp | 22 +++++++++++++++++----- + src/tooltip.h | 9 ++++++++- + 2 files changed, 25 insertions(+), 6 deletions(-) + +diff --git a/src/tooltip.cpp b/src/tooltip.cpp +index 5d288e8..e07dfb9 100644 +--- a/src/tooltip.cpp ++++ b/src/tooltip.cpp +@@ -20,11 +20,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. + #include "tooltip.h" + #include "draw_helpers.h" + +-Tooltip::Tooltip(int width, int height, int cornerRadius, Config *config) ++Tooltip::Tooltip(TooltipType type, int width, int height, int cornerRadius, Config *config) + : config(config) + , width(width) + , height(height) + , cornerRadius(cornerRadius) ++ , type(type) + { + } + +@@ -32,6 +33,7 @@ int Tooltip::init(SDL_Renderer *renderer, const std::string &text) + { + SDL_Surface *surface; + Uint32 rmask, gmask, bmask, amask; ++ argb foregroundColor, backgroundColor; + // SDL interprets each pixel as a 32-bit number, so our masks must depend + // on the endianness (byte order) of the machine + #if SDL_BYTEORDER == SDL_BIG_ENDIAN +@@ -52,8 +54,19 @@ int Tooltip::init(SDL_Renderer *renderer, const std::string &text) + return -1; + } + +- Uint32 background = SDL_MapRGB(surface->format, config->inputBoxBackgroundError.r, +- config->inputBoxBackgroundError.g, config->inputBoxBackgroundError.b); ++ switch (type) { ++ case TooltipType::error: ++ foregroundColor = config->inputBoxForegroundError; ++ backgroundColor = config->inputBoxBackgroundError; ++ break; ++ case TooltipType::info: ++ default: ++ foregroundColor = config->inputBoxForeground; ++ backgroundColor = config->inputBoxBackground; ++ break; ++ } ++ ++ Uint32 background = SDL_MapRGB(surface->format, backgroundColor.r, backgroundColor.g, backgroundColor.b); + SDL_FillRect(surface, nullptr, background); + + if (cornerRadius > 0) { +@@ -63,8 +76,7 @@ int Tooltip::init(SDL_Renderer *renderer, const std::string &text) + + TTF_Font *font = TTF_OpenFont(config->keyboardFont.c_str(), config->keyboardFontSize); + SDL_Surface *textSurface; +- SDL_Color textColor = { config->inputBoxForegroundError.r, config->inputBoxForegroundError.g, +- config->inputBoxForegroundError.b, config->inputBoxForegroundError.a }; ++ SDL_Color textColor = { foregroundColor.r, foregroundColor.g, foregroundColor.b, foregroundColor.a }; + textSurface = TTF_RenderText_Blended(font, text.c_str(), textColor); + + SDL_Rect textRect; +diff --git a/src/tooltip.h b/src/tooltip.h +index 9c92d1b..8fa179a 100644 +--- a/src/tooltip.h ++++ b/src/tooltip.h +@@ -25,16 +25,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. + #include <SDL2/SDL_ttf.h> + #include <string> + ++enum class TooltipType { ++ info, ++ error ++}; ++ + class Tooltip { + public: + /** + Constructor ++ @param type TooltipType, the type of tooltip to render + @param width Width of the tooltip + @param height Height of the tooltip + @param cornerRadius Corner radius of the tooltip background box + @param config Config object + */ +- Tooltip(int width, int height, int cornerRadius, Config *config); ++ Tooltip(TooltipType type, int width, int height, int cornerRadius, Config *config); + /** + Initialize tooltip + @param renderer Initialized SDL renderer object +@@ -56,6 +62,7 @@ private: + int width; + int height; + int cornerRadius; ++ TooltipType type; + }; + + #endif +-- +2.20.1 + diff -Nru osk-sdl-0.62.1/debian/patches/0002-main-use-more-descriptive-name-for-pass-error-toolti.patch osk-sdl-0.62.1/debian/patches/0002-main-use-more-descriptive-name-for-pass-error-toolti.patch --- osk-sdl-0.62.1/debian/patches/0002-main-use-more-descriptive-name-for-pass-error-toolti.patch 1970-01-01 00:00:00.000000000 +0000 +++ osk-sdl-0.62.1/debian/patches/0002-main-use-more-descriptive-name-for-pass-error-toolti.patch 2021-03-16 08:14:26.000000000 +0000 @@ -0,0 +1,39 @@ +From 587279eaa3e315eaa48a4f44c839ec76719d9894 Mon Sep 17 00:00:00 2001 +From: Clayton Craft <clay...@craftyguy.net> +Date: Thu, 4 Mar 2021 01:19:00 -0800 +Subject: [PATCH 2/3] main: use more descriptive name for pass error tooltip, + specify type + +--- + src/main.cpp | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/main.cpp b/src/main.cpp +index 46a866b..a9734a0 100644 +--- a/src/main.cpp ++++ b/src/main.cpp +@@ -202,9 +202,9 @@ int main(int argc, char **args) + } + + // Initialize tooltip for password error +- Tooltip tooltip(inputWidth, inputHeight, inputBoxRadius, &config); +- if (tooltip.init(renderer, ErrorText)) { +- SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Failed to initialize tooltip!"); ++ Tooltip passErrorTooltip(TooltipType::error, inputWidth, inputHeight, inputBoxRadius, &config); ++ if (passErrorTooltip.init(renderer, ErrorText)) { ++ SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Failed to initialize passErrorTooltip!"); + exit(EXIT_FAILURE); + } + +@@ -354,7 +354,7 @@ int main(int argc, char **args) + inputBoxRect.y = static_cast<int>(topHalf / 3.5); + // Only show either error box or password input box, not both + if (showPasswordError) { +- tooltip.draw(renderer, inputBoxRect.x, inputBoxRect.y); ++ passErrorTooltip.draw(renderer, inputBoxRect.x, inputBoxRect.y); + } else { + SDL_RenderCopy(renderer, inputBoxTexture, nullptr, &inputBoxRect); + draw_password_box_dots(renderer, &config, inputBoxRect, passphrase.size(), luksDev.unlockRunning()); +-- +2.20.1 + diff -Nru osk-sdl-0.62.1/debian/patches/0003-main-show-tooltip-with-instructions-when-no-pass-has.patch osk-sdl-0.62.1/debian/patches/0003-main-show-tooltip-with-instructions-when-no-pass-has.patch --- osk-sdl-0.62.1/debian/patches/0003-main-show-tooltip-with-instructions-when-no-pass-has.patch 1970-01-01 00:00:00.000000000 +0000 +++ osk-sdl-0.62.1/debian/patches/0003-main-show-tooltip-with-instructions-when-no-pass-has.patch 2021-03-16 08:14:26.000000000 +0000 @@ -0,0 +1,63 @@ +From 410e7c3354dc87720762468758454b487cb26086 Mon Sep 17 00:00:00 2001 +From: Clayton Craft <clay...@craftyguy.net> +Date: Thu, 4 Mar 2021 01:19:36 -0800 +Subject: [PATCH 3/3] main: show tooltip with instructions when no pass has + been entered + +This adds a new tooltip that shows when the app starts, and when no text +is in the input box (including when all text is deleted), informing the +user to input a disk decryption passphrase. + +The tooltip disappears as soon as the user starts entering characters, +and the normal password dots replace it in the input box. + +I decided to use a tooltip in this way since there was not enough space +on the screen to fit it elsewhere when the screen height is small (e.g. +on the N900), and I think this looks rather nice. + +fixes #60 +--- + src/main.cpp | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/src/main.cpp b/src/main.cpp +index a9734a0..f54388c 100644 +--- a/src/main.cpp ++++ b/src/main.cpp +@@ -36,6 +36,7 @@ Uint32 EVENT_RENDER; + bool lastUnlockingState = false; + bool showPasswordError = false; + constexpr char ErrorText[] = "Incorrect passphrase"; ++constexpr char EnterPassText[] = "Enter disk decryption passphrase"; + + int main(int argc, char **args) + { +@@ -208,6 +209,12 @@ int main(int argc, char **args) + exit(EXIT_FAILURE); + } + ++ Tooltip enterPassTooltip(TooltipType::info, inputWidth, inputHeight, inputBoxRadius, &config); ++ if (enterPassTooltip.init(renderer, EnterPassText)) { ++ SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Failed to initialize enterPassTooltip!"); ++ exit(EXIT_FAILURE); ++ } ++ + argb inputBoxColor = config.inputBoxBackground; + + SDL_Surface *inputBox = make_input_box(inputWidth, inputHeight, &inputBoxColor, inputBoxRadius); +@@ -352,9 +359,11 @@ int main(int argc, char **args) + + topHalf = static_cast<int>(HEIGHT - (keyboard.getHeight() * keyboard.getPosition())); + inputBoxRect.y = static_cast<int>(topHalf / 3.5); +- // Only show either error box or password input box, not both ++ // Only show either error tooltip, enter password tooltip, or password input box + if (showPasswordError) { + passErrorTooltip.draw(renderer, inputBoxRect.x, inputBoxRect.y); ++ } else if (passphrase.size() == 0) { ++ enterPassTooltip.draw(renderer, inputBoxRect.x, inputBoxRect.y); + } else { + SDL_RenderCopy(renderer, inputBoxTexture, nullptr, &inputBoxRect); + draw_password_box_dots(renderer, &config, inputBoxRect, passphrase.size(), luksDev.unlockRunning()); +-- +2.20.1 + diff -Nru osk-sdl-0.62.1/debian/patches/series osk-sdl-0.62.1/debian/patches/series --- osk-sdl-0.62.1/debian/patches/series 2021-01-22 21:32:26.000000000 +0000 +++ osk-sdl-0.62.1/debian/patches/series 2021-03-16 08:14:26.000000000 +0000 @@ -1,3 +1,7 @@ set-font.patch whatis-entry.patch fix-key-height.patch + +0001-tooltip-add-support-for-specifying-the-type-of-toolt.patch +0002-main-use-more-descriptive-name-for-pass-error-toolti.patch +0003-main-show-tooltip-with-instructions-when-no-pass-has.patch