diff options
Diffstat (limited to 'plugins/reload')
-rw-r--r-- | plugins/reload/eom-reload-plugin.c | 151 | ||||
-rw-r--r-- | plugins/reload/eom-reload-plugin.h | 53 | ||||
-rw-r--r-- | plugins/reload/reload.eom-plugin.desktop.in | 9 |
3 files changed, 213 insertions, 0 deletions
diff --git a/plugins/reload/eom-reload-plugin.c b/plugins/reload/eom-reload-plugin.c new file mode 100644 index 0000000..9b3dcc7 --- /dev/null +++ b/plugins/reload/eom-reload-plugin.c @@ -0,0 +1,151 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "eom-reload-plugin.h" + +#include <gmodule.h> +#include <glib/gi18n-lib.h> + +#include <eom-debug.h> +#include <eom-scroll-view.h> +#include <eom-thumb-view.h> +#include <eom-image.h> + +#define WINDOW_DATA_KEY "EomReloadWindowData" + +EOM_PLUGIN_REGISTER_TYPE(EomReloadPlugin, eom_reload_plugin) + +typedef struct +{ + GtkActionGroup *ui_action_group; + guint ui_id; +} WindowData; + +static void +reload_cb (GtkAction *action, + EomWindow *window) +{ + eom_window_reload_image (window); +} + +static const gchar * const ui_definition = + "<ui><menubar name=\"MainMenu\">" + "<menu name=\"ToolsMenu\" action=\"Tools\"><separator/>" + "<menuitem name=\"EomPluginReload\" action=\"EomPluginRunReload\"/>" + "<separator/></menu></menubar>" + "<popup name=\"ViewPopup\"><separator/>" + "<menuitem action=\"EomPluginRunReload\"/><separator/>" + "</popup></ui>"; + +static const GtkActionEntry action_entries[] = +{ + { "EomPluginRunReload", + GTK_STOCK_REFRESH, + N_("Reload Image"), + "R", + N_("Reload current image"), + G_CALLBACK (reload_cb) } +}; + +static void +free_window_data (WindowData *data) +{ + g_return_if_fail (data != NULL); + + eom_debug (DEBUG_PLUGINS); + + g_object_unref (data->ui_action_group); + + g_free (data); +} + +static void +eom_reload_plugin_init (EomReloadPlugin *plugin) +{ + eom_debug_message (DEBUG_PLUGINS, "EomReloadPlugin initializing"); +} + +static void +eom_reload_plugin_finalize (GObject *object) +{ + eom_debug_message (DEBUG_PLUGINS, "EomReloadPlugin finalizing"); + + G_OBJECT_CLASS (eom_reload_plugin_parent_class)->finalize (object); +} + +static void +impl_activate (EomPlugin *plugin, + EomWindow *window) +{ + GtkUIManager *manager; + WindowData *data; + + eom_debug (DEBUG_PLUGINS); + + data = g_new (WindowData, 1); + + manager = eom_window_get_ui_manager (window); + + data->ui_action_group = gtk_action_group_new ("EomReloadPluginActions"); + + gtk_action_group_set_translation_domain (data->ui_action_group, + GETTEXT_PACKAGE); + + gtk_action_group_add_actions (data->ui_action_group, + action_entries, + G_N_ELEMENTS (action_entries), + window); + + gtk_ui_manager_insert_action_group (manager, + data->ui_action_group, + -1); + + g_object_set_data_full (G_OBJECT (window), + WINDOW_DATA_KEY, + data, + (GDestroyNotify) free_window_data); + + data->ui_id = gtk_ui_manager_add_ui_from_string (manager, + ui_definition, + -1, NULL); + g_warn_if_fail (data->ui_id != 0); +} + +static void +impl_deactivate (EomPlugin *plugin, + EomWindow *window) +{ + GtkUIManager *manager; + WindowData *data; + + eom_debug (DEBUG_PLUGINS); + + manager = eom_window_get_ui_manager (window); + + data = (WindowData *) g_object_get_data (G_OBJECT (window), + WINDOW_DATA_KEY); + g_return_if_fail (data != NULL); + + gtk_ui_manager_remove_ui (manager, + data->ui_id); + + gtk_ui_manager_remove_action_group (manager, + data->ui_action_group); + + g_object_set_data (G_OBJECT (window), + WINDOW_DATA_KEY, + NULL); +} + +static void +eom_reload_plugin_class_init (EomReloadPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + EomPluginClass *plugin_class = EOM_PLUGIN_CLASS (klass); + + object_class->finalize = eom_reload_plugin_finalize; + + plugin_class->activate = impl_activate; + plugin_class->deactivate = impl_deactivate; +} diff --git a/plugins/reload/eom-reload-plugin.h b/plugins/reload/eom-reload-plugin.h new file mode 100644 index 0000000..19a5d4c --- /dev/null +++ b/plugins/reload/eom-reload-plugin.h @@ -0,0 +1,53 @@ +#ifndef __EOM_RELOAD_PLUGIN_H__ +#define __EOM_RELOAD_PLUGIN_H__ + +#include <glib.h> +#include <glib-object.h> +#include <eom-plugin.h> + +G_BEGIN_DECLS + +/* + * Type checking and casting macros + */ +#define EOM_TYPE_RELOAD_PLUGIN (eom_reload_plugin_get_type ()) +#define EOM_RELOAD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EOM_TYPE_RELOAD_PLUGIN, EomReloadPlugin)) +#define EOM_RELOAD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EOM_TYPE_RELOAD_PLUGIN, EomReloadPluginClass)) +#define EOM_IS_RELOAD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EOM_TYPE_RELOAD_PLUGIN)) +#define EOM_IS_RELOAD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EOM_TYPE_RELOAD_PLUGIN)) +#define EOM_RELOAD_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EOM_TYPE_RELOAD_PLUGIN, EomReloadPluginClass)) + +/* Private structure type */ +typedef struct _EomReloadPluginPrivate EomReloadPluginPrivate; + +/* + * Main object structure + */ +typedef struct _EomReloadPlugin EomReloadPlugin; + +struct _EomReloadPlugin +{ + EomPlugin parent_instance; +}; + +/* + * Class definition + */ +typedef struct _EomReloadPluginClass EomReloadPluginClass; + +struct _EomReloadPluginClass +{ + EomPluginClass parent_class; +}; + +/* + * Public methods + */ +GType eom_reload_plugin_get_type (void) G_GNUC_CONST; + +/* All the plugins must implement this function */ +G_MODULE_EXPORT GType register_eom_plugin (GTypeModule *module); + +G_END_DECLS + +#endif /* __EOM_RELOAD_PLUGIN_H__ */ diff --git a/plugins/reload/reload.eom-plugin.desktop.in b/plugins/reload/reload.eom-plugin.desktop.in new file mode 100644 index 0000000..eec527b --- /dev/null +++ b/plugins/reload/reload.eom-plugin.desktop.in @@ -0,0 +1,9 @@ +[Eom Plugin] +Module=reload +IAge=2 +_Name=Reload Image +Icon=gtk-refresh +_Description=Reload current image +Authors=Lucas Rocha <[email protected]> +Copyright=Copyright © 2007 Lucas Rocha +Website=http://www.gnome.org/projects/eom |