+static GtkUIManager *setup_actions()
+{
+ GtkUIManager *manager = gtk_ui_manager_new();
+ GtkActionGroup *actions = gtk_action_group_new("Actions");
+ gtk_action_group_add_actions(actions, action_data,
+ G_N_ELEMENTS(action_data), NULL);
+ gtk_action_group_add_toggle_actions(actions, toggle_action_data,
+ G_N_ELEMENTS(toggle_action_data), NULL);
+ gtk_ui_manager_insert_action_group(manager, actions, 0);
+ gtk_ui_manager_add_ui_from_string(manager, menu_xml, sizeof(menu_xml)-1, NULL);
+ g_object_unref(actions);
+ return manager;
+}
+
+static GtkWidget *setup_window(GtkUIManager *manager, GtkWidget **_notebook)
+{
+ GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ GtkWidget *menu = gtk_ui_manager_get_widget(manager, "/Menu");
+ GtkWidget *notebook = gtk_notebook_new();
+ GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ gtk_box_pack_start(GTK_BOX(vbox), menu, FALSE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(viewer), TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, FALSE, TRUE, 0);
+ g_signal_connect(window, "delete-event", G_CALLBACK(on_delete), NULL);
+ gtk_window_add_accel_group(GTK_WINDOW(window),
+ gtk_ui_manager_get_accel_group(manager));
+ *_notebook = notebook;
+ return window;
+}
+
+static void setup_plugins(GtkUIManager *manager, GtkNotebook *notebook)
+{
+ GtkActionGroup *actions = gtk_action_group_new("Plugins");
+ gtk_ui_manager_insert_action_group(manager, actions, 1);
+ guint merge_id = gtk_ui_manager_new_merge_id(manager);
+ for (GList *cur = gis_plugins_available(plugins); cur; cur = cur->next) {
+ gchar *name = cur->data;
+ GtkToggleAction *action = gtk_toggle_action_new(name, name, NULL, NULL);
+ g_signal_connect(action, "toggled", G_CALLBACK(on_plugin), notebook);
+ gtk_action_group_add_action(actions, GTK_ACTION(action));
+ gtk_ui_manager_add_ui(manager, merge_id, "/Menu/Plugins", name, name,
+ GTK_UI_MANAGER_AUTO, TRUE);
+ if (gis_prefs_get_boolean_v(prefs, "plugins", name, NULL))
+ gtk_toggle_action_set_active(action, TRUE);
+ }
+}
+
+static void restore_states(GtkUIManager *manager)
+{
+ GtkAction *action = gtk_ui_manager_get_action(manager, "/Menu/File/Offline");
+ gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),
+ gis_viewer_get_offline(viewer));
+}
+