+ case ICON_INFO: {
+ // only need to do this once.
+ if (initialized_)
+ break;
+ // and we will not keep trying if we fail
+ initialized_ = true;
+ FuncRequest func = lyxaction.lookupFunc(name_);
+ docstring icon_name = frontend::Application::iconName(func, true);
+ // FIXME: We should use the icon directly instead of
+ // going through FileName. The code below won't work
+ // if the icon is embedded in the executable through
+ // the Qt resource system.
+ // This is only a negligible performance problem:
+ // If the installed icon differs from the resource icon the
+ // installed one is preferred anyway, and all icons that are
+ // embedded in the resources are installed as well.
+ FileName file(to_utf8(icon_name));
+ if (file.onlyFileNameWithoutExt() == "unknown") {
+ string dir = "images";
+ FileName file2(imageLibFileSearch(dir, name_, "svgz,png"));
+ if (!file2.empty())
+ file = file2;
+ }
+ if (!file.exists())
+ break;
+ int percent_scale = 100;
+ if (use_gui) {
+ // Compute the scale factor for the icon such that its
+ // width on screen is equal to 1em in pixels.
+ // The scale factor is rounded to the integer nearest
+ // to the float value of the ratio 100*iconsize/imgsize.
+ int imgsize = QImage(toqstr(file.absFileName())).width();
+ if (imgsize > 0) {
+ int iconsize = Length(1, Length::EM).inPixels(1);
+ percent_scale = (100 * iconsize + imgsize / 2)/imgsize;
+ }
+ }
+ InsetGraphics * inset = new InsetGraphics(buffer_);
+ InsetGraphicsParams igp;
+ igp.filename = file;
+ igp.lyxscale = percent_scale;
+ igp.scale = string();
+ igp.width = Length(1, Length::EM);
+ inset->setParams(igp);
+ clear();
+ Font const f(inherit_font, buffer().params().language);
+ paragraphs().front().insertInset(0, inset, f,
+ Change(Change::UNCHANGED));
+ break;
+ }