static void activate (GApplication *app, gpointer user_data) { GtkWidget *win; GtkWidget *button; GSimpleActionGroup *doc_actions; GtkBuilder *builder; GMenuModel *doc_menu; GMenuModel *win_menu; GMenu *button_menu; GMenuItem *section; if (gtk_application_get_windows (GTK_APPLICATION (app)) != NULL) return; win = gtk_application_window_new (GTK_APPLICATION (app)); doc_actions = g_simple_action_group_new (); g_action_map_add_action_entries (G_ACTION_MAP (doc_actions), doc_entries, G_N_ELEMENTS (doc_entries), win); g_action_map_add_action_entries (G_ACTION_MAP (win), win_entries, G_N_ELEMENTS (win_entries), win); builder = gtk_builder_new (); gtk_builder_add_from_string (builder, menu_ui, -1, NULL); doc_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "doc-menu")); win_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "win-menu")); button_menu = g_menu_new (); section = g_menu_item_new_section (NULL, doc_menu); g_menu_item_set_attribute (section, "action-namespace", "s", "doc"); g_menu_append_item (button_menu, section); g_object_unref (section); section = g_menu_item_new_section (NULL, win_menu); g_menu_item_set_attribute (section, "action-namespace", "s", "win"); g_menu_append_item (button_menu, section); g_object_unref (section); button = gtk_menu_button_new (); gtk_button_set_label (GTK_BUTTON (button), "Menu"); gtk_widget_insert_action_group (button, "doc", G_ACTION_GROUP (doc_actions)); gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), G_MENU_MODEL (button_menu)); gtk_container_add (GTK_CONTAINER (win), button); gtk_container_set_border_width (GTK_CONTAINER (win), 12); gtk_widget_show_all (win); g_object_unref (button_menu); g_object_unref (doc_actions); g_object_unref (builder); }
void gw_application_set_win_menubar (GwApplication *application, GMenuModel *menumodel) { //Sanity checks g_return_if_fail (application != NULL); g_return_if_fail (menumodel != NULL); if (g_menu_model_get_n_items (menumodel) == 0) return; //Declarations GMenuModel *menubar; gint length; //Initializations menubar = gtk_application_get_menubar (GTK_APPLICATION (application)); g_return_if_fail (menubar != NULL); length = g_menu_model_get_n_items (menubar); //Clear the menubar while (length-- > 0) g_menu_remove (G_MENU (menubar), 0); //Add the menuitem linking the menus { GMenuItem *menuitem = g_menu_item_new_section (NULL, menumodel); if (menuitem != NULL) { g_menu_append_item (G_MENU (menubar), menuitem); g_object_unref (menuitem); menuitem = NULL; } gw_application_add_accelerators (application, menubar); } }
static void impl_activate (EogWindowActivatable *activatable) { const gchar * const accel_keys[] = { "W", NULL }; EogFitToWidthPlugin *plugin = EOG_FIT_TO_WIDTH_PLUGIN (activatable); GMenu *model, *menu; GMenuItem *item; GSimpleAction *action; GAction *ref_action; 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_FIT_TO_WIDTH_PLUGIN_ACTION, NULL); g_signal_connect(action, "activate", G_CALLBACK (fit_to_width_cb), plugin->window); g_action_map_add_action (G_ACTION_MAP (plugin->window), G_ACTION (action)); /* Bind to the zoom-normal action's enabled property to only enable * fit-to-width zooming if zooming is generally enabled */ ref_action = g_action_map_lookup_action (G_ACTION_MAP (plugin->window), "zoom-normal"); if (ref_action) g_object_bind_property (ref_action, "enabled", action, "enabled", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); g_object_unref (action); /* Append entry to the window's gear menu */ menu = g_menu_new (); g_menu_append (menu, _("Fit to width"), "win." EOG_FIT_TO_WIDTH_PLUGIN_ACTION); item = g_menu_item_new_section (NULL, G_MENU_MODEL (menu)); g_menu_item_set_attribute (item, "id", "s", EOG_FIT_TO_WIDTH_PLUGIN_MENU_ID); g_menu_item_set_attribute (item, G_MENU_ATTRIBUTE_ICON, "s", "zoom-fit-best-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_FIT_TO_WIDTH_PLUGIN_ACTION, accel_keys); }
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 enable_plugin (const gchar *name) { GMenuModel *plugin_menu; GAction *action; g_print ("Enabling '%s' plugin\n", name); action = (GAction *)g_simple_action_new (name, NULL); g_signal_connect (action, "activate", G_CALLBACK (plugin_action), (gpointer)name); g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), action); g_print ("Actions of '%s' plugin added\n", name); g_object_unref (action); plugin_menu = find_plugin_menu (); if (plugin_menu) { GMenu *section; GMenuItem *item; gchar *label; gchar *action_name; section = g_menu_new (); label = g_strdup_printf ("Turn text %s", name); action_name = g_strconcat ("app.", name, NULL); g_menu_insert (section, 0, label, action_name); g_free (label); g_free (action_name); item = g_menu_item_new_section (NULL, (GMenuModel*)section); g_menu_item_set_attribute (item, "id", "s", name); g_menu_append_item (G_MENU (plugin_menu), item); g_object_unref (item); g_object_unref (section); g_print ("Menus of '%s' plugin added\n", name); } else g_warning ("Plugin menu not found\n"); if (g_strcmp0 (name, "red") == 0) is_red_plugin_enabled = TRUE; else is_black_plugin_enabled = TRUE; }
static void impl_activate (EogWindowActivatable *activatable) { EogPostrPlugin *plugin = EOG_POSTR_PLUGIN (activatable); GMenu *model, *menu; GMenuItem *item; GSimpleAction *action; eog_debug (DEBUG_PLUGINS); g_return_if_fail (plugin->window != NULL); 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_POSTR_PLUGIN_ACTION, NULL); g_signal_connect(action, "activate", G_CALLBACK (postr_cb), plugin->window); g_action_map_add_action (G_ACTION_MAP (plugin->window), G_ACTION (action)); g_object_unref (action); /* Append entry to the window's gear menu */ menu = g_menu_new (); g_menu_append (menu, _("Upload to Flickr"), "win." EOG_POSTR_PLUGIN_ACTION); item = g_menu_item_new_section (NULL, G_MENU_MODEL (menu)); g_menu_item_set_attribute (item, "id", "s", EOG_POSTR_PLUGIN_MENU_ID); g_menu_item_set_attribute (item, G_MENU_ATTRIBUTE_ICON, "s", "postr"); g_menu_append_item (model, item); g_object_unref (item); g_object_unref (menu); }
static GMenu *menu_btn_build_menu() { GMenu *menu; GMenu *playlist_submenu; GMenu *sub_submenu; GMenu *view_submenu; GMenuItem *playlist_section; GMenuItem *sub_section; GMenuItem *view_section; GMenuItem *load_sub_menu_item; GMenuItem *playlist_toggle_menu_item; GMenuItem *playlist_save_menu_item; GMenuItem *fullscreen_menu_item; GMenuItem *normal_size_menu_item; GMenuItem *double_size_menu_item; GMenuItem *half_size_menu_item; menu = g_menu_new(); playlist_submenu = g_menu_new(); sub_submenu = g_menu_new(); view_submenu = g_menu_new(); playlist_section = g_menu_item_new_section(NULL, G_MENU_MODEL(playlist_submenu)); sub_section = g_menu_item_new_section(NULL, G_MENU_MODEL(sub_submenu)); view_section = g_menu_item_new_section(NULL, G_MENU_MODEL(view_submenu)); playlist_toggle_menu_item = g_menu_item_new(_("_Toggle Playlist"), "app.playlist_toggle"); playlist_save_menu_item = g_menu_item_new(_("_Save Playlist"), "app.playlist_save"); load_sub_menu_item = g_menu_item_new(_("_Load Subtitle"), "app.loadsub"); fullscreen_menu_item = g_menu_item_new(_("_Fullscreen"), "app.fullscreen"); normal_size_menu_item = g_menu_item_new(_("_Normal Size"), "app.normalsize"); double_size_menu_item = g_menu_item_new(_("_Double Size"), "app.doublesize"); half_size_menu_item = g_menu_item_new(_("_Half Size"), "app.halfsize"); g_menu_append_item(playlist_submenu, playlist_toggle_menu_item); g_menu_append_item(playlist_submenu, playlist_save_menu_item); g_menu_append_item(sub_submenu, load_sub_menu_item); g_menu_append_item(view_submenu, fullscreen_menu_item); g_menu_append_item(view_submenu, normal_size_menu_item); g_menu_append_item(view_submenu, double_size_menu_item); g_menu_append_item(view_submenu, half_size_menu_item); g_menu_append_item(menu, playlist_section); g_menu_append_item(menu, sub_section); g_menu_append_item(menu, view_section); return menu; }