1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#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;
}
|