From: ValdikSS Date: Tue, 9 Jan 2024 01:21:52 +0000 (+0300) Subject: Report proper media-source-supported IPP field on numeric InputSlots. #859 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47d0ee3877a34b3cc30686a2c51a10b2833e05b6;p=thirdparty%2Fcups.git Report proper media-source-supported IPP field on numeric InputSlots. #859 Windows 11 version 22H2 build 22621.2861 silently fails to add Mopria auto-discovered printer if it reports a number (a digit as a string) in media-source-supported field. If you try to add such a printer using modern control panel, it will show endless "connecting…" message, and if you add it using old control panel, it would be added "successfully", but under "unrecognized" device type, and you won't be able to print on it. Fix the issue by * By comparing also by human-readable InputSlot name * By mapping number to "tray-N" string --- diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c index d148e90766..18ff6dd1ba 100644 --- a/cups/ppd-cache.c +++ b/cups/ppd-cache.c @@ -1284,7 +1284,9 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ i --, choice ++, map ++) { if (!_cups_strncasecmp(choice->choice, "Auto", 4) || - !_cups_strcasecmp(choice->choice, "Default")) + !_cups_strncasecmp(choice->text, "Auto", 4) || + !_cups_strcasecmp(choice->choice, "Default") || + !_cups_strcasecmp(choice->text, "Default")) pwg_name = "auto"; else if (!_cups_strcasecmp(choice->choice, "Cassette")) pwg_name = "main"; @@ -1308,6 +1310,26 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ pwg_name = "side"; else if (!_cups_strcasecmp(choice->choice, "Roll")) pwg_name = "main-roll"; + else if (!_cups_strcasecmp(choice->choice, "0")) + pwg_name = "tray-1"; + else if (!_cups_strcasecmp(choice->choice, "1")) + pwg_name = "tray-2"; + else if (!_cups_strcasecmp(choice->choice, "2")) + pwg_name = "tray-3"; + else if (!_cups_strcasecmp(choice->choice, "3")) + pwg_name = "tray-4"; + else if (!_cups_strcasecmp(choice->choice, "4")) + pwg_name = "tray-5"; + else if (!_cups_strcasecmp(choice->choice, "5")) + pwg_name = "tray-6"; + else if (!_cups_strcasecmp(choice->choice, "6")) + pwg_name = "tray-7"; + else if (!_cups_strcasecmp(choice->choice, "7")) + pwg_name = "tray-8"; + else if (!_cups_strcasecmp(choice->choice, "8")) + pwg_name = "tray-9"; + else if (!_cups_strcasecmp(choice->choice, "9")) + pwg_name = "tray-10"; else { /*