summaryrefslogtreecommitdiff
path: root/plugins/reload/eom-reload-plugin.c
blob: b3b05f17ec1505baf509944e4569ed2cb7bb86ab (plain)
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
118
119
120
121
122
123
124
125
126
127
128
#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;
}