initial
This commit is contained in:
394
gedit/gedit-plugin-info.c
Executable file
394
gedit/gedit-plugin-info.c
Executable file
@@ -0,0 +1,394 @@
|
||||
/*
|
||||
* gedit-plugin-info.c
|
||||
* This file is part of gedit
|
||||
*
|
||||
* Copyright (C) 2002-2005 - Paolo Maggi
|
||||
* Copyright (C) 2007 - Paolo Maggi, Steve Frécinaux
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the gedit Team, 2002-2007. See the AUTHORS file for a
|
||||
* list of people on the gedit Team.
|
||||
* See the ChangeLog files for a list of changes.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <glib/gi18n.h>
|
||||
#include <glib.h>
|
||||
|
||||
#include "gedit-plugin-info.h"
|
||||
#include "gedit-plugin-info-priv.h"
|
||||
#include "gedit-debug.h"
|
||||
#include "gedit-plugin.h"
|
||||
|
||||
void
|
||||
_gedit_plugin_info_ref (GeditPluginInfo *info)
|
||||
{
|
||||
g_atomic_int_inc (&info->refcount);
|
||||
}
|
||||
|
||||
static GeditPluginInfo *
|
||||
gedit_plugin_info_copy (GeditPluginInfo *info)
|
||||
{
|
||||
_gedit_plugin_info_ref (info);
|
||||
return info;
|
||||
}
|
||||
|
||||
void
|
||||
_gedit_plugin_info_unref (GeditPluginInfo *info)
|
||||
{
|
||||
if (!g_atomic_int_dec_and_test (&info->refcount))
|
||||
return;
|
||||
|
||||
if (info->plugin != NULL)
|
||||
{
|
||||
gedit_debug_message (DEBUG_PLUGINS, "Unref plugin %s", info->name);
|
||||
|
||||
g_object_unref (info->plugin);
|
||||
}
|
||||
|
||||
g_free (info->file);
|
||||
g_free (info->module_name);
|
||||
g_strfreev (info->dependencies);
|
||||
g_free (info->name);
|
||||
g_free (info->desc);
|
||||
g_free (info->icon_name);
|
||||
g_free (info->website);
|
||||
g_free (info->copyright);
|
||||
g_free (info->loader);
|
||||
g_free (info->version);
|
||||
g_strfreev (info->authors);
|
||||
|
||||
g_free (info);
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_plugin_info_get_type:
|
||||
*
|
||||
* Retrieves the #GType object which is associated with the #GeditPluginInfo
|
||||
* class.
|
||||
*
|
||||
* Return value: the GType associated with #GeditPluginInfo.
|
||||
**/
|
||||
GType
|
||||
gedit_plugin_info_get_type (void)
|
||||
{
|
||||
static GType the_type = 0;
|
||||
|
||||
if (G_UNLIKELY (!the_type))
|
||||
the_type = g_boxed_type_register_static (
|
||||
"GeditPluginInfo",
|
||||
(GBoxedCopyFunc) gedit_plugin_info_copy,
|
||||
(GBoxedFreeFunc) _gedit_plugin_info_unref);
|
||||
|
||||
return the_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_plugin_info_new:
|
||||
* @filename: the filename where to read the plugin information
|
||||
*
|
||||
* Creates a new #GeditPluginInfo from a file on the disk.
|
||||
*
|
||||
* Return value: a newly created #GeditPluginInfo.
|
||||
*/
|
||||
GeditPluginInfo *
|
||||
_gedit_plugin_info_new (const gchar *file)
|
||||
{
|
||||
GeditPluginInfo *info;
|
||||
GKeyFile *plugin_file = NULL;
|
||||
gchar *str;
|
||||
|
||||
g_return_val_if_fail (file != NULL, NULL);
|
||||
|
||||
gedit_debug_message (DEBUG_PLUGINS, "Loading plugin: %s", file);
|
||||
|
||||
info = g_new0 (GeditPluginInfo, 1);
|
||||
info->refcount = 1;
|
||||
info->file = g_strdup (file);
|
||||
|
||||
plugin_file = g_key_file_new ();
|
||||
if (!g_key_file_load_from_file (plugin_file, file, G_KEY_FILE_NONE, NULL))
|
||||
{
|
||||
g_warning ("Bad plugin file: %s", file);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (!g_key_file_has_key (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"IAge",
|
||||
NULL))
|
||||
{
|
||||
gedit_debug_message (DEBUG_PLUGINS,
|
||||
"IAge key does not exist in file: %s", file);
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Check IAge=2 */
|
||||
if (g_key_file_get_integer (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"IAge",
|
||||
NULL) != 2)
|
||||
{
|
||||
gedit_debug_message (DEBUG_PLUGINS,
|
||||
"Wrong IAge in file: %s", file);
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Get module name */
|
||||
str = g_key_file_get_string (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"Module",
|
||||
NULL);
|
||||
|
||||
if ((str != NULL) && (*str != '\0'))
|
||||
{
|
||||
info->module_name = str;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("Could not find 'Module' in %s", file);
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Get the dependency list */
|
||||
info->dependencies = g_key_file_get_string_list (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"Depends",
|
||||
NULL,
|
||||
NULL);
|
||||
if (info->dependencies == NULL)
|
||||
{
|
||||
gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Depends' in %s", file);
|
||||
info->dependencies = g_new0 (gchar *, 1);
|
||||
}
|
||||
|
||||
/* Get the loader for this plugin */
|
||||
str = g_key_file_get_string (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"Loader",
|
||||
NULL);
|
||||
|
||||
if ((str != NULL) && (*str != '\0'))
|
||||
{
|
||||
info->loader = str;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* default to the C loader */
|
||||
info->loader = g_strdup("c");
|
||||
}
|
||||
|
||||
/* Get Name */
|
||||
str = g_key_file_get_locale_string (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"Name",
|
||||
NULL, NULL);
|
||||
if (str)
|
||||
info->name = str;
|
||||
else
|
||||
{
|
||||
g_warning ("Could not find 'Name' in %s", file);
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Get Description */
|
||||
str = g_key_file_get_locale_string (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"Description",
|
||||
NULL, NULL);
|
||||
if (str)
|
||||
info->desc = str;
|
||||
else
|
||||
gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Description' in %s", file);
|
||||
|
||||
/* Get Icon */
|
||||
str = g_key_file_get_locale_string (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"Icon",
|
||||
NULL, NULL);
|
||||
if (str)
|
||||
info->icon_name = str;
|
||||
else
|
||||
gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Icon' in %s, using 'gedit-plugin'", file);
|
||||
|
||||
|
||||
/* Get Authors */
|
||||
info->authors = g_key_file_get_string_list (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"Authors",
|
||||
NULL,
|
||||
NULL);
|
||||
if (info->authors == NULL)
|
||||
gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Authors' in %s", file);
|
||||
|
||||
|
||||
/* Get Copyright */
|
||||
str = g_key_file_get_string (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"Copyright",
|
||||
NULL);
|
||||
if (str)
|
||||
info->copyright = str;
|
||||
else
|
||||
gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Copyright' in %s", file);
|
||||
|
||||
/* Get Website */
|
||||
str = g_key_file_get_string (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"Website",
|
||||
NULL);
|
||||
if (str)
|
||||
info->website = str;
|
||||
else
|
||||
gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Website' in %s", file);
|
||||
|
||||
/* Get Version */
|
||||
str = g_key_file_get_string (plugin_file,
|
||||
"Gedit Plugin",
|
||||
"Version",
|
||||
NULL);
|
||||
if (str)
|
||||
info->version = str;
|
||||
else
|
||||
gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Version' in %s", file);
|
||||
|
||||
g_key_file_free (plugin_file);
|
||||
|
||||
/* If we know nothing about the availability of the plugin,
|
||||
set it as available */
|
||||
info->available = TRUE;
|
||||
|
||||
return info;
|
||||
|
||||
error:
|
||||
g_free (info->file);
|
||||
g_free (info->module_name);
|
||||
g_free (info->name);
|
||||
g_free (info->loader);
|
||||
g_free (info);
|
||||
g_key_file_free (plugin_file);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gedit_plugin_info_is_active (GeditPluginInfo *info)
|
||||
{
|
||||
g_return_val_if_fail (info != NULL, FALSE);
|
||||
|
||||
return info->available && info->plugin != NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gedit_plugin_info_is_available (GeditPluginInfo *info)
|
||||
{
|
||||
g_return_val_if_fail (info != NULL, FALSE);
|
||||
|
||||
return info->available != FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gedit_plugin_info_is_configurable (GeditPluginInfo *info)
|
||||
{
|
||||
gedit_debug_message (DEBUG_PLUGINS, "Is '%s' configurable?", info->name);
|
||||
|
||||
g_return_val_if_fail (info != NULL, FALSE);
|
||||
|
||||
if (info->plugin == NULL || !info->available)
|
||||
return FALSE;
|
||||
|
||||
return gedit_plugin_is_configurable (info->plugin);
|
||||
}
|
||||
|
||||
const gchar *
|
||||
gedit_plugin_info_get_module_name (GeditPluginInfo *info)
|
||||
{
|
||||
g_return_val_if_fail (info != NULL, NULL);
|
||||
|
||||
return info->module_name;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
gedit_plugin_info_get_name (GeditPluginInfo *info)
|
||||
{
|
||||
g_return_val_if_fail (info != NULL, NULL);
|
||||
|
||||
return info->name;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
gedit_plugin_info_get_description (GeditPluginInfo *info)
|
||||
{
|
||||
g_return_val_if_fail (info != NULL, NULL);
|
||||
|
||||
return info->desc;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
gedit_plugin_info_get_icon_name (GeditPluginInfo *info)
|
||||
{
|
||||
g_return_val_if_fail (info != NULL, NULL);
|
||||
|
||||
/* use the gedit-plugin icon as a default if the plugin does not
|
||||
have its own */
|
||||
if (info->icon_name != NULL &&
|
||||
gtk_icon_theme_has_icon (gtk_icon_theme_get_default (),
|
||||
info->icon_name))
|
||||
return info->icon_name;
|
||||
else
|
||||
return "gedit-plugin";
|
||||
}
|
||||
|
||||
const gchar **
|
||||
gedit_plugin_info_get_authors (GeditPluginInfo *info)
|
||||
{
|
||||
g_return_val_if_fail (info != NULL, (const gchar **)NULL);
|
||||
|
||||
return (const gchar **) info->authors;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
gedit_plugin_info_get_website (GeditPluginInfo *info)
|
||||
{
|
||||
g_return_val_if_fail (info != NULL, NULL);
|
||||
|
||||
return info->website;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
gedit_plugin_info_get_copyright (GeditPluginInfo *info)
|
||||
{
|
||||
g_return_val_if_fail (info != NULL, NULL);
|
||||
|
||||
return info->copyright;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
gedit_plugin_info_get_version (GeditPluginInfo *info)
|
||||
{
|
||||
g_return_val_if_fail (info != NULL, NULL);
|
||||
|
||||
return info->version;
|
||||
}
|
Reference in New Issue
Block a user