nsresult nsIconChannel::Init(nsIURI* aURI) { nsCOMPtr<nsIMozIconURI> iconURI = do_QueryInterface(aURI); NS_ASSERTION(iconURI, "URI is not an nsIMozIconURI"); nsAutoCString stockIcon; iconURI->GetStockIcon(stockIcon); nsAutoCString iconSizeString; iconURI->GetIconSize(iconSizeString); uint32_t desiredImageSize; iconURI->GetImageSize(&desiredImageSize); nsAutoCString iconStateString; iconURI->GetIconState(iconStateString); bool disabled = iconStateString.EqualsLiteral("disabled"); // This is a workaround for // https://bugzilla.mozilla.org/show_bug.cgi?id=662299 // Try to find corresponding freedesktop icon and fallback to empty QIcon // if failed. QIcon icon = QIcon::fromTheme(QString(stockIcon.get()).replace("gtk-", "edit-")); QPixmap pixmap = icon.pixmap(desiredImageSize, desiredImageSize, disabled ? QIcon::Disabled : QIcon::Normal); QImage image = pixmap.toImage(); return moz_qicon_to_channel(&image, iconURI, getter_AddRefs(mRealChannel)); }
nsresult nsIconChannel::Init(nsIURI* aURI) { nsCOMPtr<nsIMozIconURI> iconURI = do_QueryInterface(aURI); NS_ASSERTION(iconURI, "URI is not an nsIMozIconURI"); nsCAutoString stockIcon; iconURI->GetStockIcon(stockIcon); nsCAutoString iconSizeString; iconURI->GetIconSize(iconSizeString); PRUint32 desiredImageSize; iconURI->GetImageSize(&desiredImageSize); nsCAutoString iconStateString; iconURI->GetIconState(iconStateString); bool disabled = iconStateString.EqualsLiteral("disabled"); QStyle::StandardPixmap sp_icon = (QStyle::StandardPixmap)0; nsCOMPtr <nsIGtkQtIconsConverter> converter = do_GetService("@mozilla.org/gtkqticonsconverter;1"); if (converter) { PRInt32 res = 0; stockIcon.Cut(0,4); converter->Convert(stockIcon.get(), &res); sp_icon = (QStyle::StandardPixmap)res; // printf("ConvertIcon: icon:'%s' -> res:%i\n", stockIcon.get(), res); } if (!sp_icon) return NS_ERROR_FAILURE; QStyle *style = qApp->style(); NS_ENSURE_TRUE(style, NS_ERROR_NULL_POINTER); QPixmap pixmap = style->standardIcon(sp_icon).pixmap(desiredImageSize, desiredImageSize, disabled?QIcon::Disabled:QIcon::Normal); QImage image = pixmap.toImage(); return moz_qicon_to_channel(&image, iconURI, getter_AddRefs(mRealChannel)); }