static void eog_reload_plugin_activate (EogWindowActivatable *activatable) { GtkUIManager *manager; EogReloadPlugin *plugin = EOG_RELOAD_PLUGIN (activatable); eog_debug (DEBUG_PLUGINS); manager = eog_window_get_ui_manager (plugin->window); plugin->ui_action_group = gtk_action_group_new ("EogReloadPluginActions"); gtk_action_group_set_translation_domain (plugin->ui_action_group, GETTEXT_PACKAGE); gtk_action_group_add_actions (plugin->ui_action_group, action_entries, G_N_ELEMENTS (action_entries), plugin->window); gtk_ui_manager_insert_action_group (manager, plugin->ui_action_group, -1); plugin->ui_id = gtk_ui_manager_add_ui_from_string (manager, ui_definition, -1, NULL); g_warn_if_fail (plugin->ui_id != 0); }
static void _selection_changed_cb (EogThumbView *thumbview, gpointer user_data) { EogReloadPlugin *plugin = EOG_RELOAD_PLUGIN (user_data); if (G_LIKELY (plugin)) eog_reload_plugin_update_action_state (plugin); }
static void eog_reload_plugin_dispose (GObject *object) { EogReloadPlugin *plugin = EOG_RELOAD_PLUGIN (object); eog_debug_message (DEBUG_PLUGINS, "EogReloadPlugin disposing"); if (plugin->window != NULL) { g_object_unref (plugin->window); plugin->window = NULL; } G_OBJECT_CLASS (eog_reload_plugin_parent_class)->dispose (object); }
static void eog_reload_plugin_activate (EogWindowActivatable *activatable) { const gchar * const accel_keys[] = { "R", NULL }; EogReloadPlugin *plugin = EOG_RELOAD_PLUGIN (activatable); GMenu *model, *menu; GMenuItem *item; GSimpleAction *action; eog_debug (DEBUG_PLUGINS); model= eog_window_get_gear_menu_section (plugin->window, "plugins-section"); g_return_if_fail (G_IS_MENU (model)); /* Setup and inject action */ action = g_simple_action_new (EOG_RELOAD_PLUGIN_ACTION, NULL); g_signal_connect(action, "activate", G_CALLBACK (reload_cb), plugin->window); g_action_map_add_action (G_ACTION_MAP (plugin->window), G_ACTION (action)); g_object_unref (action); g_signal_connect (G_OBJECT (eog_window_get_thumb_view (plugin->window)), "selection-changed", G_CALLBACK (_selection_changed_cb), plugin); eog_reload_plugin_update_action_state (plugin); /* Append entry to the window's gear menu */ menu = g_menu_new (); g_menu_append (menu, _("Reload Image"), "win." EOG_RELOAD_PLUGIN_ACTION); item = g_menu_item_new_section (NULL, G_MENU_MODEL (menu)); g_menu_item_set_attribute (item, "id", "s", EOG_RELOAD_PLUGIN_MENU_ID); g_menu_item_set_attribute (item, G_MENU_ATTRIBUTE_ICON, "s", "view-refresh-symbolic"); g_menu_append_item (model, item); g_object_unref (item); g_object_unref (menu); /* Define accelerator keys */ gtk_application_set_accels_for_action (GTK_APPLICATION (EOG_APP), "win." EOG_RELOAD_PLUGIN_ACTION, accel_keys); }
static void eog_reload_plugin_deactivate (EogWindowActivatable *activatable) { GtkUIManager *manager; EogReloadPlugin *plugin = EOG_RELOAD_PLUGIN (activatable); eog_debug (DEBUG_PLUGINS); manager = eog_window_get_ui_manager (plugin->window); gtk_ui_manager_remove_ui (manager, plugin->ui_id); gtk_ui_manager_remove_action_group (manager, plugin->ui_action_group); }
static void eog_reload_plugin_deactivate (EogWindowActivatable *activatable) { const gchar * const empty_accels[1] = { NULL }; EogReloadPlugin *plugin = EOG_RELOAD_PLUGIN (activatable); GMenu *menu; GMenuModel *model; gint i; eog_debug (DEBUG_PLUGINS); menu = eog_window_get_gear_menu_section (plugin->window, "plugins-section"); g_return_if_fail (G_IS_MENU (menu)); /* Remove menu entry */ model = G_MENU_MODEL (menu); for (i = 0; i < g_menu_model_get_n_items (model); i++) { gchar *id; if (g_menu_model_get_item_attribute (model, i, "id", "s", &id)) { const gboolean found = (g_strcmp0 (id, EOG_RELOAD_PLUGIN_MENU_ID) == 0); g_free (id); if (found) { g_menu_remove (menu, i); break; } } } /* Unset accelerator */ gtk_application_set_accels_for_action(GTK_APPLICATION (EOG_APP), "win." EOG_RELOAD_PLUGIN_ACTION, empty_accels); /* Disconnect selection-changed handler as the thumbview would * otherwise still cause callbacks during its own disposal */ g_signal_handlers_disconnect_by_func (eog_window_get_thumb_view (plugin->window), _selection_changed_cb, plugin); /* Finally remove action */ g_action_map_remove_action (G_ACTION_MAP (plugin->window), EOG_RELOAD_PLUGIN_ACTION); }
static void eog_reload_plugin_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { EogReloadPlugin *plugin = EOG_RELOAD_PLUGIN (object); switch (prop_id) { case PROP_WINDOW: g_value_set_object (value, plugin->window); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }