@@ -3767,8 +3767,11 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
37673767 int xdpi , /* Horizontal resolution */
37683768 ydpi ; /* Vertical resolution */
37693769 const char * resptr ; /* Pointer into resolution keyword */
3770- pwg_size_t * pwgsize ; /* Current PWG size */
3771- pwg_map_t * pwgsource , /* Current PWG source */
3770+ pwg_size_t * defsize = NULL , /* Default PWG size */
3771+ * pwgsize ; /* Current PWG size */
3772+ pwg_map_t * defsource = NULL , /* Default PWG source */
3773+ * deftype = NULL , /* Default PWG type */
3774+ * pwgsource , /* Current PWG source */
37723775 * pwgtype ; /* Current PWG type */
37733776 ipp_attribute_t * attr ; /* Attribute data */
37743777 _ipp_value_t * val ; /* Attribute value */
@@ -4300,23 +4303,21 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
43004303 */
43014304
43024305 if ((size = ppdPageSize (ppd , NULL )) != NULL )
4303- pwgsize = _ppdCacheGetSize (p -> pc , size -> name , size );
4306+ defsize = _ppdCacheGetSize (p -> pc , size -> name , size );
43044307 else
4305- pwgsize = NULL ;
4308+ defsize = NULL ;
43064309
4307- ippAddString (p -> ppd_attrs , IPP_TAG_PRINTER , IPP_TAG_KEYWORD ,
4308- "media-default" , NULL ,
4309- pwgsize ? pwgsize -> map .pwg : "unknown" );
4310+ ippAddString (p -> ppd_attrs , IPP_TAG_PRINTER , IPP_TAG_KEYWORD , "media-default" , NULL , defsize ? defsize -> map .pwg : "unknown" );
43104311
43114312 /*
43124313 * media-col-default
43134314 */
43144315
4315- if (pwgsize )
4316+ if (defsize )
43164317 {
43174318 ipp_t * col ; /* Collection value */
43184319
4319- col = new_media_col (pwgsize );
4320+ col = new_media_col (defsize );
43204321
43214322 if ((ppd_attr = ppdFindAttr (ppd , "DefaultMediaType" , NULL )) != NULL )
43224323 {
@@ -4326,7 +4327,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
43264327 {
43274328 if (!strcmp (pwgtype -> ppd , ppd_attr -> value ))
43284329 {
4329- ippAddString (col , IPP_TAG_PRINTER , IPP_TAG_KEYWORD , "media-type" , NULL , pwgtype -> pwg );
4330+ deftype = pwgtype ;
4331+ ippAddString (col , IPP_TAG_PRINTER , IPP_TAG_KEYWORD , "media-type" , NULL , deftype -> pwg );
43304332 break ;
43314333 }
43324334 }
@@ -4340,7 +4342,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
43404342 {
43414343 if (!strcmp (pwgsource -> ppd , ppd_attr -> value ))
43424344 {
4343- ippAddString (col , IPP_TAG_PRINTER , IPP_TAG_KEYWORD , "media-source" , NULL , pwgsource -> pwg );
4345+ defsource = pwgsource ;
4346+ ippAddString (col , IPP_TAG_PRINTER , IPP_TAG_KEYWORD , "media-source" , NULL , defsource -> pwg );
43444347 break ;
43454348 }
43464349 }
@@ -4620,6 +4623,52 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
46204623 }
46214624 }
46224625
4626+ if (defsize )
4627+ {
4628+ // Add default size to media[-col]-ready as needed...
4629+ ipp_t * col = new_media_col (defsize );
4630+ // media-col-ready value
4631+
4632+ if (defsource )
4633+ {
4634+ ippAddString (col , IPP_TAG_PRINTER , IPP_TAG_KEYWORD , "media-source" , NULL , defsource -> pwg );
4635+ }
4636+ else if (media_col_ready )
4637+ {
4638+ char source [128 ]; // media-source value
4639+
4640+ snprintf (source , sizeof (source ), "auto.%d" , ippGetCount (media_col_ready ) + 1 );
4641+ ippAddString (col , IPP_TAG_PRINTER , IPP_TAG_KEYWORD , "media-source" , NULL , source );
4642+ }
4643+ else
4644+ {
4645+ ippAddString (col , IPP_TAG_PRINTER , IPP_CONST_TAG (IPP_TAG_KEYWORD ), "media-source" , NULL , "auto" );
4646+ }
4647+
4648+ if (deftype )
4649+ ippAddString (col , IPP_TAG_PRINTER , IPP_TAG_KEYWORD , "media-type" , NULL , deftype -> pwg );
4650+
4651+ if (media_ready )
4652+ {
4653+ // Only add the default size if it isn't already in the ready list...
4654+ if (!ippContainsString (media_ready , defsize -> map .pwg ))
4655+ ippSetString (p -> ppd_attrs , & media_ready , ippGetCount (media_ready ), defsize -> map .pwg );
4656+ }
4657+ else
4658+ {
4659+ // Add "media-ready"...
4660+ media_ready = ippAddString (p -> ppd_attrs , IPP_TAG_PRINTER , IPP_TAG_KEYWORD , "media-ready" , NULL , defsize -> map .pwg );
4661+ }
4662+
4663+ // Add/update media-col-ready...
4664+ if (media_col_ready )
4665+ ippSetCollection (p -> ppd_attrs , & media_col_ready , ippGetCount (media_col_ready ), col );
4666+ else
4667+ media_col_ready = ippAddCollection (p -> ppd_attrs , IPP_TAG_PRINTER , "media-col-ready" , col );
4668+
4669+ ippDelete (col );
4670+ }
4671+
46234672 ippAddString (p -> ppd_attrs , IPP_TAG_PRINTER , IPP_CONST_TAG (IPP_TAG_TEXT ), "mopria-certified" , NULL , "1.3" );
46244673
46254674 /*
0 commit comments