Beispiel #1
0
static GIcon *
g_content_type_get_icon_internal (const gchar *type,
                                  gboolean     symbolic)
{
  char *mimetype_icon;
  char *generic_mimetype_icon = NULL;
  char *q;
  char *xdg_mimetype_icon;
  char *legacy_mimetype_icon;
  char *xdg_mimetype_generic_icon;
  char *icon_names[5];
  int n = 0;
  GIcon *themed_icon;
  const char *file_template;

  g_return_val_if_fail (type != NULL, NULL);

  if (symbolic)
    {
      file_template = "%s-symbolic";
    }
  else
    {
      file_template = "%s";
    }

  G_LOCK (gio_xdgmime);
  xdg_mimetype_icon = g_strdup_printf (file_template, xdg_mime_get_icon (type));
  G_UNLOCK (gio_xdgmime);
  xdg_mimetype_generic_icon = g_content_type_get_generic_icon_name (type);

  mimetype_icon = g_strdup_printf (file_template, type);
  if (xdg_mimetype_generic_icon)
    generic_mimetype_icon = g_strdup_printf (file_template, xdg_mimetype_generic_icon);

  while ((q = strchr (mimetype_icon, '/')) != NULL)
    *q = '-';

  /* Not all icons have migrated to the new icon theme spec, look for old names too */
  legacy_mimetype_icon = g_strconcat ("gnome-mime-", mimetype_icon, NULL);

  if (xdg_mimetype_icon)
    icon_names[n++] = xdg_mimetype_icon;

  icon_names[n++] = mimetype_icon;
  icon_names[n++] = legacy_mimetype_icon;

  if (generic_mimetype_icon)
    icon_names[n++] = generic_mimetype_icon;

  themed_icon = g_themed_icon_new_from_names (icon_names, n);

  g_free (xdg_mimetype_icon);
  g_free (xdg_mimetype_generic_icon);
  g_free (mimetype_icon);
  g_free (legacy_mimetype_icon);
  g_free (generic_mimetype_icon);

  return themed_icon;
}
static GIcon *
g_content_type_get_icon_internal (const gchar *type,
                                  gboolean     symbolic)
{
  char *mimetype_icon;
  char *generic_mimetype_icon = NULL;
  char *q;
  char *xdg_mimetype_icon = NULL;
  char *xdg_mimetype_generic_icon;
  char *icon_names[3];
  int n = 0;
  GIcon *themed_icon;
  const char *file_template;
  const char  *xdg_icon;

  g_return_val_if_fail (type != NULL, NULL);

  if (symbolic)
    {
      file_template = "%s-symbolic";
    }
  else
    {
      file_template = "%s";
    }

  G_LOCK (gio_xdgmime);
  xdg_icon = xdg_mime_get_icon (type);
  G_UNLOCK (gio_xdgmime);
  if (xdg_icon != NULL)
    xdg_mimetype_icon = g_strdup_printf (file_template, xdg_icon);

  if (xdg_mimetype_icon)
    icon_names[n++] = xdg_mimetype_icon;

  mimetype_icon = g_strdup_printf (file_template, type);
  while ((q = strchr (mimetype_icon, '/')) != NULL)
    *q = '-';

  icon_names[n++] = mimetype_icon;

  xdg_mimetype_generic_icon = g_content_type_get_generic_icon_name (type);
  if (xdg_mimetype_generic_icon)
    generic_mimetype_icon = g_strdup_printf (file_template, xdg_mimetype_generic_icon);
  if (generic_mimetype_icon)
    icon_names[n++] = generic_mimetype_icon;

  themed_icon = g_themed_icon_new_from_names (icon_names, n);

  g_free (xdg_mimetype_icon);
  g_free (xdg_mimetype_generic_icon);
  g_free (mimetype_icon);
  g_free (generic_mimetype_icon);

  return themed_icon;
}
Beispiel #3
0
static GIcon *
g_content_type_get_icon_internal (const gchar *type,
                                  gboolean     symbolic)
{
  char *mimetype_icon;
  char *generic_mimetype_icon = NULL;
  char *q;
  char *xdg_mimetype_icon = NULL;
  char *xdg_mimetype_generic_icon;
  char *icon_names[3];
  int n = 0;
  GIcon *themed_icon;
  const char  *xdg_icon;
  const char *suffix;

  g_return_val_if_fail (type != NULL, NULL);

  if (symbolic)
    suffix = "-symbolic";
  else
    suffix = "";

  G_LOCK (gio_xdgmime);
  xdg_icon = xdg_mime_get_icon (type);
  G_UNLOCK (gio_xdgmime);
   if (xdg_icon != NULL)
    xdg_mimetype_icon = g_strconcat (xdg_icon, suffix, NULL);

  if (xdg_mimetype_icon)
    icon_names[n++] = xdg_mimetype_icon;

  mimetype_icon = g_strconcat (type, suffix, NULL);
  while ((q = strchr (mimetype_icon, '/')) != NULL)
    *q = '-';

  icon_names[n++] = mimetype_icon;

  xdg_mimetype_generic_icon = g_content_type_get_generic_icon_name (type);
  if (xdg_mimetype_generic_icon)
    generic_mimetype_icon = g_strconcat (xdg_mimetype_generic_icon, suffix, NULL);
  if (generic_mimetype_icon)
    icon_names[n++] = generic_mimetype_icon;

  themed_icon = g_themed_icon_new_from_names (icon_names, n);

  g_free (xdg_mimetype_icon);
  g_free (xdg_mimetype_generic_icon);
  g_free (mimetype_icon);
  g_free (generic_mimetype_icon);

  return themed_icon;
}
Beispiel #4
0
static PyObject *get_icon (PyObject *self, PyObject *args)
{
    const char* mime;

    if (!PyArg_ParseTuple(args, "s", &mime))
        return NULL;

    const char* result = xdg_mime_get_icon(mime);

    if (result == NULL)
        Py_RETURN_NONE;

    return PyString_FromString(result);
}
Beispiel #5
0
static GIcon *
g_content_type_get_icon_internal (const gchar *type,
                                  gboolean     symbolic)
{
  char *mimetype_icon;
  char *generic_mimetype_icon = NULL;
  char *q;
  char *icon_names[6];
  int n = 0;
  GIcon *themed_icon;
  const char  *xdg_icon;
  int i;

  g_return_val_if_fail (type != NULL, NULL);

  G_LOCK (gio_xdgmime);
  xdg_icon = xdg_mime_get_icon (type);
  G_UNLOCK (gio_xdgmime);

  if (xdg_icon)
    icon_names[n++] = g_strdup (xdg_icon);

  mimetype_icon = g_strdup (type);
  while ((q = strchr (mimetype_icon, '/')) != NULL)
    *q = '-';

  icon_names[n++] = mimetype_icon;

  generic_mimetype_icon = g_content_type_get_generic_icon_name (type);
  if (generic_mimetype_icon)
    icon_names[n++] = generic_mimetype_icon;

  if (symbolic)
    {
      for (i = 0; i < n; i++)
        {
          icon_names[n + i] = icon_names[i];
          icon_names[i] = g_strconcat (icon_names[i], "-symbolic", NULL);
        }

      n += n;
    }

  themed_icon = g_themed_icon_new_from_names (icon_names, n);

  for (i = 0; i < n; i++)
    g_free (icon_names[i]);

  return themed_icon;
}
Beispiel #6
0
const String& MimeType::icon_name(void) {
	if(!(status & MIME_LOADED) && mtype.empty())
		return micon;

	if(status & ICON_LOADED)
		return micon;

	/* check first for user aliases */
	const char* ic = xdg_mime_get_icon(mtype.c_str());
	if(ic) {
		micon = ic;

		status |= ICON_LOADED;
		return micon;
	}

	/* clear whatever we had previous */
	micon.clear();

	String::size_type pos = mtype.find('/', 0);
	if(pos == String::npos)
		return micon;

	/*
	 * XDG Mime guys decided that folders are named under 'inode/directory.xml'. 
	 * But icon naming standard say it should contain name 'folder' (sigh!).
	 *
	 * FIXME: strncmp() here?
	 */
	if(mtype.substr(0, pos) == "inode") {
		micon = mtype.substr(pos + 1);
		if(micon == "directory")
			micon = "folder";
	} else {
		micon = mtype;
		micon[pos] = '-';
	}

	status |= ICON_LOADED;
	return micon;
}