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

Reply via email to