static void impl_attach_window (EphyExtension *extension, EphyWindow *window) { SoupFlyCBData *cb_data; GtkActionGroup *action_group; GtkUIManager *manager; guint merge_id; WindowData *data; EphySoupFlyExtensionPrivate *priv = EPHY_SOUP_FLY_EXTENSION (extension)->priv; LOG ("EphySoupFlyExtension attach_window"); cb_data = g_new (SoupFlyCBData, 1); cb_data->extension = EPHY_SOUP_FLY_EXTENSION (extension); cb_data->window = window; data = g_new (WindowData, 1); data->action_group = action_group = gtk_action_group_new ("EphySoupFlyExtensionActions"); gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); gtk_action_group_add_actions_full (action_group, action_entries, G_N_ELEMENTS (action_entries), cb_data, g_free); manager = GTK_UI_MANAGER (ephy_window_get_ui_manager (window)); gtk_ui_manager_insert_action_group (manager, action_group, 0); data->ui_id = merge_id = gtk_ui_manager_new_merge_id (manager); g_object_set_data_full (G_OBJECT (window), WINDOW_DATA_KEY, data, (GDestroyNotify) free_window_data); gtk_ui_manager_add_ui (manager, merge_id, "/ui/PagePopup/ExtensionsMenu", "SoupFlySep", NULL, GTK_UI_MANAGER_SEPARATOR, FALSE); gtk_ui_manager_add_ui (manager, merge_id, "/ui/PagePopup/ExtensionsMenu", "SoupFly", "SoupFly", GTK_UI_MANAGER_MENUITEM, FALSE); if (priv->is_logging == FALSE) { soup_fly_start (priv->fly); priv->is_logging = TRUE; } }
static gboolean my_compose_create_hook(gpointer cw, gpointer data) { gint ii; GSList *walk; GtkActionEntry *entries; GtkActionGroup *action_group; Compose *compose = (Compose*)cw; guint num_entries = g_slist_length(python_compose_scripts_names); action_group = gtk_action_group_new("PythonPlugin"); gtk_action_group_add_actions(action_group, compose_tools_python_actions, 1, NULL); entries = g_new0(GtkActionEntry, num_entries); ii = 0; for(walk = python_compose_scripts_names; walk; walk = walk->next) { ComposeActionData *dat; entries[ii].name = walk->data; entries[ii].label = walk->data; entries[ii].callback = G_CALLBACK(python_compose_script_callback); dat = g_new0(ComposeActionData, 1); dat->name = g_strdup(walk->data); dat->compose = compose; gtk_action_group_add_actions_full(action_group, &(entries[ii]), 1, dat, ComposeActionData_destroy_cb); ii++; } gtk_ui_manager_insert_action_group(compose->ui_manager, action_group, 0); MENUITEM_ADDUI_MANAGER(compose->ui_manager, "/Menu/Tools", "PythonScripts", "Tools/PythonScripts", GTK_UI_MANAGER_MENU) for(ii = 0; ii < num_entries; ii++) { MENUITEM_ADDUI_MANAGER(compose->ui_manager, "/Menu/" PYTHON_SCRIPTS_ACTION_PREFIX, entries[ii].label, entries[ii].name, GTK_UI_MANAGER_MENUITEM) } g_free(entries); run_auto_script_file_if_it_exists(PYTHON_SCRIPTS_AUTO_COMPOSE, compose); return FALSE; }
int clip_GTK_ACTIONGROUPADDACTIONSFULL(ClipMachine * ClipMachineMemory) { C_object *cagroup = _fetch_co_arg(ClipMachineMemory); ClipArrVar *carr = (ClipArrVar *) _clip_vptr(_clip_spar(ClipMachineMemory, 2)); guint n_actions = _clip_parni(ClipMachineMemory, 3); ClipVar *cfunc = _clip_spar(ClipMachineMemory, 4); C_var *c = NEW(C_var); CHECKARG2(1, MAP_type_of_ClipVarType, NUMERIC_type_of_ClipVarType); CHECKCOBJ(cagroup, GTK_IS_ACTION_GROUP(cagroup->object)); CHECKARG(2, ARRAY_type_of_ClipVarType); CHECKARG(3, NUMERIC_type_of_ClipVarType); CHECKARG2(4, PCODE_type_of_ClipVarType, CCODE_type_of_ClipVarType); if (carr) { GtkActionEntry *acts; gint i; acts = malloc(carr->count_of_ClipArrVar * sizeof(GtkActionEntry)); memset(acts, 0, sizeof(GtkActionEntry) * carr->count_of_ClipArrVar); for (i = 0; i < n_actions; i++) _map_to_action_entry(ClipMachineMemory, &carr->ClipVar_items_of_ClipArrVar[i], &acts[i]); c->ClipMachineMemory = ClipMachineMemory; c->co = cagroup; _clip_mclone(ClipMachineMemory, &c->cfunc, cfunc); gtk_action_group_add_actions_full(GTK_ACTION_GROUP(cagroup->object), acts, n_actions, c, (GDestroyNotify) destroy_d); free(acts); } return 0; err: return 1; }
/** Add one extension item to the UI manager. This function creates a * per-callback data structure for easy access to the opaque Scheme * data block in the callback. It then adds the action to the UI * manager. * * @param ext_info The extension info data block. * * @param per_window The per-window data block maintained by the * plugin. */ static void gnc_menu_additions_menu_setup_one (ExtensionInfo *ext_info, GncPluginMenuAdditionsPerWindow *per_window) { GncMainWindowActionData *cb_data; DEBUG( "Adding %s/%s [%s] as [%s]", ext_info->path, ext_info->ae.label, ext_info->ae.name, ext_info->typeStr ); cb_data = g_new0 (GncMainWindowActionData, 1); cb_data->window = per_window->window; cb_data->data = ext_info->extension; if (ext_info->type == GTK_UI_MANAGER_MENUITEM) ext_info->ae.callback = (GCallback)gnc_plugin_menu_additions_action_cb; gtk_action_group_add_actions_full(per_window->group, &ext_info->ae, 1, cb_data, g_free); gtk_ui_manager_add_ui(per_window->ui_manager, per_window->merge_id, ext_info->path, ext_info->ae.label, ext_info->ae.name, ext_info->type, FALSE); gtk_ui_manager_ensure_update(per_window->ui_manager); }
static void impl_activate (GeditPlugin *plugin, GeditWindow *window) { GtkUIManager *manager; WindowData *data; ActionData *action_data; GList *docs, *l; gedit_debug (DEBUG_PLUGINS); data = g_slice_new (WindowData); action_data = g_slice_new (ActionData); action_data->plugin = plugin; action_data->window = window; manager = gedit_window_get_ui_manager (window); data->action_group = gtk_action_group_new ("GeditSpellPluginActions"); gtk_action_group_set_translation_domain (data->action_group, GETTEXT_PACKAGE); gtk_action_group_add_actions_full (data->action_group, action_entries, G_N_ELEMENTS (action_entries), action_data, (GDestroyNotify) free_action_data); gtk_action_group_add_toggle_actions (data->action_group, toggle_action_entries, G_N_ELEMENTS (toggle_action_entries), window); gtk_ui_manager_insert_action_group (manager, data->action_group, -1); data->ui_id = gtk_ui_manager_new_merge_id (manager); data->message_cid = gtk_statusbar_get_context_id (GTK_STATUSBAR (gedit_window_get_statusbar (window)), "spell_plugin_message"); g_object_set_data_full (G_OBJECT (window), WINDOW_DATA_KEY, data, (GDestroyNotify) free_window_data); gtk_ui_manager_add_ui (manager, data->ui_id, MENU_PATH, "CheckSpell", "CheckSpell", GTK_UI_MANAGER_MENUITEM, FALSE); gtk_ui_manager_add_ui (manager, data->ui_id, MENU_PATH, "AutoSpell", "AutoSpell", GTK_UI_MANAGER_MENUITEM, FALSE); gtk_ui_manager_add_ui (manager, data->ui_id, MENU_PATH, "ConfigSpell", "ConfigSpell", GTK_UI_MANAGER_MENUITEM, FALSE); update_ui_real (window, data); docs = gedit_window_get_documents (window); for (l = docs; l != NULL; l = g_list_next (l)) { set_auto_spell_from_metadata (window, GEDIT_DOCUMENT (l->data), data->action_group); } data->tab_added_id = g_signal_connect (window, "tab-added", G_CALLBACK (tab_added_cb), NULL); data->tab_removed_id = g_signal_connect (window, "tab-removed", G_CALLBACK (tab_removed_cb), NULL); }