#ifdef HAVE_CONFIG_H #include #endif #include "eom-reload-plugin.h" #include #include #include #include #include #include #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 = "" "" "" "" "" "" ""; 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; }