static VALUE rg_set_accel_group(VALUE self, VALUE accel_group) { gtk_action_set_accel_group(_SELF(self), NIL_P(accel_group) ? NULL : RVAL2GTKACCELGROUP(accel_group)); return self; }
void ppg_actions_load (GtkWidget *widget, GtkAccelGroup *accel_group, GtkActionGroup *action_group) { PpgActionFactory *factory; GType widget_type; GList *list; GList *iter; gint i; g_return_if_fail(GTK_IS_WIDGET(widget)); g_return_if_fail(GTK_IS_ACTION_GROUP(action_group)); g_return_if_fail(factories != NULL); widget_type = G_TYPE_FROM_INSTANCE(widget); for (i = 0; i < factories->len; i++) { factory = &g_array_index(factories, PpgActionFactory, i); ppg_action_factory_create(factory, widget, action_group); } if (accel_group) { if (g_type_is_a(widget_type, GTK_TYPE_WINDOW)) { list = gtk_action_group_list_actions(action_group); for (iter = list; iter; iter = iter->next) { gtk_action_set_accel_group(iter->data, accel_group); } g_list_free(list); gtk_window_add_accel_group(GTK_WINDOW(widget), accel_group); } } }
static void formhistory_app_add_browser_cb (MidoriApp* app, MidoriBrowser* browser, MidoriExtension* extension) { GtkAccelGroup* acg = gtk_accel_group_new (); GtkActionGroup* action_group = midori_browser_get_action_group (browser); GtkAction* action = gtk_action_new ("FormHistoryToggleState", _("Toggle form history state"), _("Activate or deactivate form history for the current tab."), NULL); gtk_window_add_accel_group (GTK_WINDOW (browser), acg); g_object_set_data (G_OBJECT (browser), "FormHistoryExtension", extension); g_signal_connect (action, "activate", G_CALLBACK (formhistory_toggle_state_cb), browser); gtk_action_group_add_action_with_accel (action_group, action, "<Ctrl><Shift>F"); gtk_action_set_accel_group (action, acg); gtk_action_connect_accelerator (action); if (midori_extension_get_boolean (extension, "always-load")) { GList* tabs = midori_browser_get_tabs (browser); for (; tabs; tabs = g_list_next (tabs)) formhistory_add_tab_cb (browser, tabs->data, extension); g_list_free (tabs); g_signal_connect (browser, "add-tab", G_CALLBACK (formhistory_add_tab_cb), extension); } g_signal_connect (extension, "deactivate", G_CALLBACK (formhistory_deactivate_cb), browser); }
static void glide_window_add_accelerator (GlideWindow *w, GtkActionGroup *group, GtkAccelGroup *accels, const gchar *action, const gchar *accel) { GtkAction *a = GTK_ACTION (GLIDE_WINDOW_UI_OBJECT (w, action)); gtk_action_set_accel_group (a, accels); gtk_action_group_add_action_with_accel (group, a, accel); gtk_action_connect_accelerator (a); }
static GtkWidget *add_item(GtkWidget *menu, GtkAccelGroup *accelgrp, GtkActionGroup *actions, const char *name) { GtkAction *action; GtkWidget *item; action = gtk_action_group_get_action(actions, name); g_return_val_if_fail(action != NULL, NULL); gtk_action_set_accel_group(action, accelgrp); item = gtk_action_create_menu_item(action); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); gtk_widget_show(item); return item; }
static gboolean create_popup_menu_item (GeditCollaborationWindowHelper *helper, GtkMenu *menu, const gchar *id, gboolean create_separator) { GtkAction *action; GtkWidget *item; GtkActionGroup *ac; action = get_action (helper, id); g_object_get (action, "action-group", &ac, NULL); if (!gtk_action_get_sensitive (action) || !gtk_action_group_get_sensitive (ac)) { g_object_unref (ac); return FALSE; } gtk_action_set_accel_group (action, gtk_ui_manager_get_accel_group (helper->priv->uimanager)); g_object_unref (ac); if (create_separator) { item = gtk_separator_menu_item_new (); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); } item = gtk_action_create_menu_item (action); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); return TRUE; }
static GtkToolItem * create_item_from_action (EggEditableToolbar *etoolbar, const char *name) { GtkToolItem *item; g_return_val_if_fail (name != NULL, NULL); if (strcmp (name, "_separator") == 0) { item = gtk_separator_tool_item_new (); } else { GtkAction *action = find_action (etoolbar, name); if (action == NULL) return NULL; item = GTK_TOOL_ITEM (gtk_action_create_tool_item (action)); /* Normally done on-demand by the GtkUIManager, but no * such demand may have been made yet, so do it ourselves. */ gtk_action_set_accel_group (action, gtk_ui_manager_get_accel_group(etoolbar->priv->manager)); g_signal_connect_object (action, "notify::sensitive", G_CALLBACK (action_sensitive_cb), item, 0); } gtk_widget_show (GTK_WIDGET (item)); g_object_set_data_full (G_OBJECT (item), EGG_ITEM_NAME, g_strdup (name), g_free); return item; }
/*! \brief Translate a resource tree into a menu structure * * \param [in] menu The GHidMainMenu widget to be acted on * \param [in] shall The base menu shell (a menu bar or popup menu) * \param [in] res The base of the resource tree * */ void ghid_main_menu_real_add_resource (GHidMainMenu *menu, GtkMenuShell *shell, const Resource *res) { int i, j; const Resource *tmp_res; gchar mnemonic = 0; for (i = 0; i < res->c; ++i) { const gchar *accel = NULL; char *menu_label; const char *res_val; const Resource *sub_res = res->v[i].subres; GtkAction *action = NULL; switch (resource_type (res->v[i])) { case 101: /* name, subres: passthrough */ ghid_main_menu_real_add_resource (menu, shell, sub_res); break; case 1: /* no name, subres */ tmp_res = resource_subres (sub_res, "a"); /* accelerator */ res_val = resource_value (sub_res, "m"); /* mnemonic */ if (res_val) mnemonic = res_val[0]; /* The accelerator resource will have two values, like * a={"Ctrl-Q" "Ctrl<Key>q"} * The first Gtk ignores. The second needs to be translated. */ if (tmp_res) accel = check_unique_accel (translate_accelerator (tmp_res->v[1].value)); /* Now look for the first unnamed value (not a subresource) to * figure out the name of the menu or the menuitem. */ res_val = "button"; for (j = 0; j < sub_res->c; ++j) if (resource_type (sub_res->v[j]) == 10) { res_val = _(sub_res->v[j].value); break; } /* Hack '_' in based on mnemonic value */ if (!mnemonic) menu_label = g_strdup (res_val); else { char *post_ = strchr (res_val, mnemonic); if (post_ == NULL) menu_label = g_strdup (res_val); else { GString *tmp = g_string_new (""); g_string_append_len (tmp, res_val, post_ - res_val); g_string_append_c (tmp, '_'); g_string_append (tmp, post_); menu_label = g_string_free (tmp, FALSE); } } /* If the subresource we're processing also has unnamed * subresources, it's a submenu, not a regular menuitem. */ if (sub_res->flags & FLAG_S) { /* SUBMENU */ GtkWidget *submenu = gtk_menu_new (); GtkWidget *item = gtk_menu_item_new_with_mnemonic (menu_label); GtkWidget *tearoff = gtk_tearoff_menu_item_new (); gtk_menu_shell_append (shell, item); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu); /* add tearoff to menu */ gtk_menu_shell_append (GTK_MENU_SHELL (submenu), tearoff); /* recurse on the newly-added submenu */ ghid_main_menu_real_add_resource (menu, GTK_MENU_SHELL (submenu), sub_res); } else { /* NON-SUBMENU: MENU ITEM */ const char *checked = resource_value (sub_res, "checked"); const char *label = resource_value (sub_res, "sensitive"); const char *tip = resource_value (sub_res, "tip"); if (checked) { /* TOGGLE ITEM */ gchar *name = g_strdup_printf ("MainMenuAction%d", action_counter++); action = GTK_ACTION (gtk_toggle_action_new (name, menu_label, tip, NULL)); /* checked=foo is a binary flag (checkbox) * checked=foo,bar is a flag compared to a value (radio) */ gtk_toggle_action_set_draw_as_radio (GTK_TOGGLE_ACTION (action), !!strchr (checked, ',')); } else if (label && strcmp (label, "false") == 0) { /* INSENSITIVE ITEM */ GtkWidget *item = gtk_menu_item_new_with_label (menu_label); gtk_widget_set_sensitive (item, FALSE); gtk_menu_shell_append (shell, item); } else { /* NORMAL ITEM */ gchar *name = g_strdup_printf ("MainMenuAction%d", action_counter++); action = gtk_action_new (name, menu_label, tip, NULL); } } /* Connect accelerator, if there is one */ if (action) { GtkWidget *item; gtk_action_set_accel_group (action, menu->accel_group); gtk_action_group_add_action_with_accel (menu->action_group, action, accel); gtk_action_connect_accelerator (action); g_signal_connect (G_OBJECT (action), "activate", menu->action_cb, (gpointer) sub_res); g_object_set_data (G_OBJECT (action), "resource", (gpointer) sub_res); item = gtk_action_create_menu_item (action); gtk_menu_shell_append (shell, item); menu->actions = g_list_append (menu->actions, action); menu->special_key_cb (accel, action, sub_res); } /* Scan rest of resource in case there is more work */ for (j = 0; j < sub_res->c; j++) { const char *res_name; /* named value = X resource */ if (resource_type (sub_res->v[j]) == 110) { res_name = sub_res->v[j].name; /* translate bg, fg to background, foreground */ if (strcmp (res_name, "fg") == 0) res_name = "foreground"; if (strcmp (res_name, "bg") == 0) res_name = "background"; /* ignore special named values (m, a, sensitive) */ if (strcmp (res_name, "m") == 0 || strcmp (res_name, "a") == 0 || strcmp (res_name, "sensitive") == 0 || strcmp (res_name, "tip") == 0) break; /* log checked and active special values */ if (action && strcmp (res_name, "checked") == 0) g_object_set_data (G_OBJECT (action), "checked-flag", sub_res->v[j].value); else if (action && strcmp (res_name, "active") == 0) g_object_set_data (G_OBJECT (action), "active-flag", sub_res->v[j].value); else /* if we got this far it is supposed to be an X * resource. For now ignore it and warn the user */ Message (_("The gtk gui currently ignores \"%s\"" "as part of a menuitem resource.\n" "Feel free to provide patches\n"), sub_res->v[j].value); } } break; case 10: /* no name, value */ /* If we get here, the resource is "-" or "@foo" for some foo */ if (res->v[i].value[0] == '@') { GList *children; int pos; children = gtk_container_get_children (GTK_CONTAINER (shell)); pos = g_list_length (children); g_list_free (children); if (strcmp (res->v[i].value, "@layerview") == 0) { menu->layer_view_shell = shell; menu->layer_view_pos = pos; } else if (strcmp (res->v[i].value, "@layerpick") == 0) { menu->layer_pick_shell = shell; menu->layer_pick_pos = pos; } else if (strcmp (res->v[i].value, "@routestyles") == 0) { menu->route_style_shell = shell; menu->route_style_pos = pos; } else Message (_("GTK GUI currently ignores \"%s\" in the menu\n" "resource file.\n"), res->v[i].value); } else if (strcmp (res->v[i].value, "-") == 0) { GtkWidget *item = gtk_separator_menu_item_new (); gtk_menu_shell_append (shell, item); } else if (i > 0) { /* This is an action-less menuitem. It is really only useful * when you're starting to build a new menu and you're looking * to get the layout right. */ GtkWidget *item = gtk_menu_item_new_with_label (_(res->v[i].value)); gtk_menu_shell_append (shell, item); } break; } } }
static void dui_set_accel_group(gpointer action, gpointer group) { gtk_action_set_accel_group(action, group); }
static GtkWidget * create_send_receive_submenu (EMailShellView *mail_shell_view) { EShellView *shell_view; EShellWindow *shell_window; EShellBackend *shell_backend; EMailAccountStore *account_store; EMailBackend *backend; EMailSession *session; GtkWidget *menu; GtkAccelGroup *accel_group; GtkUIManager *ui_manager; GtkAction *action; GtkTreeModel *model; GtkTreeIter iter; SendReceiveData *data; g_return_val_if_fail (mail_shell_view != NULL, NULL); shell_view = E_SHELL_VIEW (mail_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); shell_backend = e_shell_view_get_shell_backend (shell_view); backend = E_MAIL_BACKEND (shell_backend); session = e_mail_backend_get_session (backend); account_store = e_mail_ui_session_get_account_store (E_MAIL_UI_SESSION (session)); menu = gtk_menu_new (); ui_manager = e_shell_window_get_ui_manager (shell_window); accel_group = gtk_ui_manager_get_accel_group (ui_manager); action = e_shell_window_get_action (shell_window, "mail-send-receive"); gtk_action_set_accel_group (action, accel_group); gtk_menu_shell_append ( GTK_MENU_SHELL (menu), gtk_action_create_menu_item (action)); action = e_shell_window_get_action ( shell_window, "mail-send-receive-receive-all"); gtk_action_set_accel_group (action, accel_group); gtk_menu_shell_append ( GTK_MENU_SHELL (menu), gtk_action_create_menu_item (action)); action = e_shell_window_get_action ( shell_window, "mail-send-receive-send-all"); gtk_action_set_accel_group (action, accel_group); gtk_menu_shell_append ( GTK_MENU_SHELL (menu), gtk_action_create_menu_item (action)); gtk_menu_shell_append ( GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); data = send_receive_data_new (mail_shell_view, menu); model = GTK_TREE_MODEL (account_store); if (gtk_tree_model_get_iter_first (model, &iter)) { CamelService *service; do { service = NULL; gtk_tree_model_get ( model, &iter, E_MAIL_ACCOUNT_STORE_COLUMN_SERVICE, &service, -1); if (send_receive_can_use_service (account_store, service, &iter)) send_receive_add_to_menu (data, service, -1); if (service) g_object_unref (service); } while (gtk_tree_model_iter_next (model, &iter)); } gtk_widget_show_all (menu); return menu; }
static VALUE rg_set_accel_group(VALUE self, VALUE accel_group) { gtk_action_set_accel_group(_SELF(self), RVAL2GOBJ(accel_group)); return self; }