static GSimpleActionGroup * create_action_group(ReaderWindowPrivate *priv) { GSimpleActionGroup *actions = g_simple_action_group_new(); gboolean side_pane = cainteoir_settings_get_boolean(priv->settings, "index", "visible", TRUE); priv->index_pane_action = g_simple_action_new_stateful("side-pane", nullptr, g_variant_new_boolean(side_pane)); g_action_map_add_action(G_ACTION_MAP(actions), G_ACTION(priv->index_pane_action)); g_signal_connect(priv->index_pane_action, "activate", G_CALLBACK(on_index_pane_toggle_action), priv); priv->open_action = g_simple_action_new("open", nullptr); g_action_map_add_action(G_ACTION_MAP(actions), G_ACTION(priv->open_action)); g_signal_connect(priv->open_action, "activate", G_CALLBACK(on_open_file_action), priv); priv->play_stop_action = g_simple_action_new("play-stop", nullptr); g_action_map_add_action(G_ACTION_MAP(actions), G_ACTION(priv->play_stop_action)); g_signal_connect(priv->play_stop_action, "activate", G_CALLBACK(on_play_stop_action), priv); priv->record_action = g_simple_action_new("record", nullptr); g_action_map_add_action(G_ACTION_MAP(actions), G_ACTION(priv->record_action)); g_signal_connect(priv->record_action, "activate", G_CALLBACK(on_record_action), priv); return actions; }
static void toggle_italic (GtkToggleButton *button, gpointer data) { GMenuModel *model; GActionGroup *group; GSimpleAction *action; gboolean adding; GMenuModel *m; GtkTreeView *tv = data; GtkTreeModel *store; model = g_object_get_data (G_OBJECT (button), "model"); group = g_object_get_data (G_OBJECT (button), "group"); store = gtk_tree_view_get_model (tv); adding = gtk_toggle_button_get_active (button); m = g_menu_model_get_item_link (model, g_menu_model_get_n_items (model) - 1, G_MENU_LINK_SECTION); if (adding) { action = g_simple_action_new_stateful ("italic", NULL, g_variant_new_boolean (FALSE)); g_action_map_add_action (G_ACTION_MAP (group), G_ACTION (action)); g_signal_connect (action, "activate", G_CALLBACK (activate_toggle), NULL); g_object_unref (action); action_list_add (store, "italic"); g_menu_insert (G_MENU (m), 1, "Italic", "italic"); } else { g_action_map_remove_action (G_ACTION_MAP (group), "italic"); action_list_remove (store, "italic"); g_menu_remove (G_MENU (m), 1); } }
static void drawing_area_hierarchy_changed (GtkWidget *widget, GtkWidget *previous_toplevel) { DrawingArea *area = (DrawingArea *) widget; GSimpleActionGroup *action_group; GSimpleAction *action; GtkWidget *toplevel; gint i; if (previous_toplevel && area->pad_controller) { gtk_widget_remove_controller (previous_toplevel, GTK_EVENT_CONTROLLER (area->pad_controller)); area->pad_controller = NULL; } toplevel = gtk_widget_get_toplevel (GTK_WIDGET (area)); if (!GTK_IS_WINDOW (toplevel)) return; action_group = g_simple_action_group_new (); area->pad_controller = gtk_pad_controller_new (G_ACTION_GROUP (action_group), NULL); for (i = 0; i < G_N_ELEMENTS (pad_actions); i++) { if (pad_actions[i].type == GTK_PAD_ACTION_BUTTON) { action = g_simple_action_new (pad_actions[i].action_name, NULL); g_object_set_data (G_OBJECT (action), "color", (gpointer) pad_colors[i]); g_signal_connect (action, "activate", G_CALLBACK (on_pad_button_activate), area); } else { action = g_simple_action_new_stateful (pad_actions[i].action_name, G_VARIANT_TYPE_DOUBLE, NULL); g_signal_connect (action, "activate", G_CALLBACK (on_pad_knob_change), area); } g_action_map_add_action (G_ACTION_MAP (action_group), G_ACTION (action)); g_object_unref (action); } gtk_pad_controller_set_action_entries (area->pad_controller, pad_actions, G_N_ELEMENTS (pad_actions)); gtk_widget_add_controller (toplevel, GTK_EVENT_CONTROLLER (area->pad_controller)); }
static void photos_import_dialog_init (PhotosImportDialog *self) { GApplication *app; GVariant *initial_state; PhotosSearchContextState *state; gtk_widget_init_template (GTK_WIDGET (self)); app = g_application_get_default (); state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app)); self->cancellable = g_cancellable_new (); self->collections = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref); self->action_group = g_simple_action_group_new (); gtk_widget_insert_action_group (GTK_WIDGET (self), "dialog", G_ACTION_GROUP (self->action_group)); initial_state = g_variant_new_string (""); self->add_existing_action = g_simple_action_new_stateful ("add-existing", G_VARIANT_TYPE_STRING, initial_state); g_signal_connect_swapped (self->add_existing_action, "notify::state", G_CALLBACK (photos_import_dialog_add_existing_notify_state), self); g_action_map_add_action (G_ACTION_MAP (self->action_group), G_ACTION (self->add_existing_action)); self->item_mngr = g_object_ref (state->item_mngr); { g_autoptr (GError) error = NULL; self->queue = photos_tracker_queue_dup_singleton (NULL, &error); if (G_UNLIKELY (error != NULL)) g_warning ("Unable to create PhotosTrackerQueue: %s", error->message); } if (G_LIKELY (self->queue != NULL)) { g_autoptr (PhotosQuery) query = NULL; query = photos_query_builder_fetch_collections_local (state); photos_tracker_queue_select (self->queue, query, self->cancellable, photos_import_dialog_fetch_collections_local_query_executed, self, NULL); } photos_import_dialog_show_add_existing (self, FALSE); gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_OK, FALSE); }
static void gcal_application_set_app_menu (GApplication *app) { GcalApplicationPrivate *priv; GMenu *app_menu; GMenu *view_as; GSimpleAction *about; GSimpleAction *quit; g_return_if_fail (GCAL_IS_APPLICATION (app)); priv = GCAL_APPLICATION (app)->priv; app_menu = g_menu_new (); priv->view = g_simple_action_new_stateful ( "view", G_VARIANT_TYPE_STRING, g_settings_get_value (priv->settings, "active-view")); g_signal_connect (priv->view, "activate", G_CALLBACK (gcal_application_change_view), app); g_action_map_add_action ( G_ACTION_MAP (app), G_ACTION (priv->view)); view_as = g_menu_new (); g_menu_append (view_as, _("Weeks"), "app.view::week"); g_menu_append (view_as, _("Months"), "app.view::month"); g_menu_append_section (app_menu, _("View as"), G_MENU_MODEL (view_as)); about = g_simple_action_new ("about", NULL); g_signal_connect (about, "activate", G_CALLBACK (gcal_application_show_about), app); g_action_map_add_action ( G_ACTION_MAP (app), G_ACTION (about)); g_menu_append (app_menu, _("About"), "app.about"); quit = g_simple_action_new ("quit", NULL); g_signal_connect (quit, "activate", G_CALLBACK (gcal_application_quit), app); g_action_map_add_action ( G_ACTION_MAP (app), G_ACTION (quit)); g_menu_append (app_menu, _("Quit"), "app.quit"); gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL (app_menu)); }
static void add_actions (GApplication *app) { GSimpleActionGroup *actions; GSimpleAction *action; actions = g_simple_action_group_new (); action = g_simple_action_new ("simple-action", NULL); g_signal_connect (action, "activate", G_CALLBACK (activate_action), app); g_simple_action_group_insert (actions, G_ACTION (action)); g_object_unref (action); action = g_simple_action_new_stateful ("toggle-action", NULL, g_variant_new_boolean (FALSE)); g_signal_connect (action, "activate", G_CALLBACK (activate_toggle_action), app); g_simple_action_group_insert (actions, G_ACTION (action)); g_object_unref (action); g_application_set_action_group (app, G_ACTION_GROUP (actions)); g_object_unref (actions); }
void _rb_add_display_page_actions (GActionMap *map, GObject *shell, const GActionEntry *actions, gint n_entries) { int i; for (i = 0; i < n_entries; i++) { GSimpleAction *action; const GVariantType *parameter_type; DisplayPageActionData *page_action_data; if (g_action_map_lookup_action (map, actions[i].name) != NULL) { /* action was already added */ continue; } if (actions[i].parameter_type) { parameter_type = G_VARIANT_TYPE (actions[i].parameter_type); } else { parameter_type = NULL; } if (actions[i].state) { GVariant *state; GError *error = NULL; state = g_variant_parse (NULL, actions[i].state, NULL, NULL, &error); if (state == NULL) { g_critical ("could not parse state value '%s' for action " "%s: %s", actions[i].state, actions[i].name, error->message); g_error_free (error); continue; } action = g_simple_action_new_stateful (actions[i].name, parameter_type, state); } else { action = g_simple_action_new (actions[i].name, parameter_type); } if (actions[i].activate) { GClosure *closure; page_action_data = g_slice_new0 (DisplayPageActionData); page_action_data->u.gaction = (DisplayPageActionActivateCallback) actions[i].activate; page_action_data->shell = shell; g_object_add_weak_pointer (shell, &page_action_data->shell); closure = g_cclosure_new (G_CALLBACK (display_page_action_activate_cb), page_action_data, (GClosureNotify) display_page_action_data_destroy); g_signal_connect_closure (action, "activate", closure, FALSE); } if (actions[i].change_state) { GClosure *closure; page_action_data = g_slice_new0 (DisplayPageActionData); page_action_data->u.gactionstate = (DisplayPageActionChangeStateCallback) actions[i].change_state; page_action_data->shell = shell; g_object_add_weak_pointer (shell, &page_action_data->shell); closure = g_cclosure_new (G_CALLBACK (display_page_action_change_state_cb), page_action_data, (GClosureNotify) display_page_action_data_destroy); g_signal_connect_closure (action, "change-state", closure, FALSE); } g_action_map_add_action (map, G_ACTION (action)); g_object_unref (action); } }
static void photos_application_startup (GApplication *application) { PhotosApplication *self = PHOTOS_APPLICATION (application); PhotosApplicationPrivate *priv = self->priv; GError *error; GSimpleAction *action; GrlRegistry *registry; GtkSettings *settings; GVariant *state; G_APPLICATION_CLASS (photos_application_parent_class) ->startup (application); gegl_init (NULL, NULL); grl_init (NULL, NULL); registry = grl_registry_get_default (); error = NULL; if (!grl_registry_load_plugin_by_id (registry, "grl-flickr", &error)) { g_warning ("Unable to load Grilo's Flickr plugin: %s", error->message); g_error_free (error); } priv->settings = g_settings_new ("org.gnome.desktop.background"); priv->resource = photos_get_resource (); g_resources_register (priv->resource); settings = gtk_settings_get_default (); g_object_set (settings, "gtk-application-prefer-dark-theme", TRUE, NULL); priv->facebook_miner = gom_miner_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, "org.gnome.OnlineMiners.Facebook", "/org/gnome/OnlineMiners/Facebook", NULL, NULL); priv->flickr_miner = gom_miner_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, "org.gnome.OnlineMiners.Flickr", "/org/gnome/OnlineMiners/Flickr", NULL, NULL); priv->item_mngr = photos_item_manager_dup_singleton (); /* A dummy reference to keep it alive during the lifetime of the * application. */ priv->camera_cache = photos_camera_cache_dup_singleton (); priv->mode_cntrlr = photos_mode_controller_dup_singleton (); action = g_simple_action_new ("about", NULL); g_signal_connect_swapped (action, "activate", G_CALLBACK (photos_application_about), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (action)); g_object_unref (action); priv->fs_action = g_simple_action_new ("fullscreen", NULL); g_signal_connect_swapped (priv->fs_action, "activate", G_CALLBACK (photos_application_fullscreen), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (priv->fs_action)); g_signal_connect_swapped (priv->mode_cntrlr, "can-fullscreen-changed", G_CALLBACK (photos_application_can_fullscreen_changed), self); state = g_variant_new ("b", FALSE); priv->gear_action = g_simple_action_new_stateful ("gear-menu", NULL, state); g_signal_connect (priv->gear_action, "activate", G_CALLBACK (photos_application_action_toggle), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (priv->gear_action)); priv->open_action = g_simple_action_new ("open-current", NULL); g_signal_connect_swapped (priv->open_action, "activate", G_CALLBACK (photos_application_open_current), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (priv->open_action)); priv->print_action = g_simple_action_new ("print-current", NULL); g_signal_connect_swapped (priv->print_action, "activate", G_CALLBACK (photos_application_print_current), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (priv->print_action)); priv->properties_action = g_simple_action_new ("properties", NULL); g_signal_connect_swapped (priv->properties_action, "activate", G_CALLBACK (photos_application_properties), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (priv->properties_action)); priv->remote_display_action = g_simple_action_new ("remote-display-current", NULL); g_signal_connect_swapped (priv->remote_display_action, "activate", G_CALLBACK (photos_application_remote_display_current), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (priv->remote_display_action)); action = g_simple_action_new ("quit", NULL); g_signal_connect_swapped (action, "activate", G_CALLBACK (photos_application_quit), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (action)); g_object_unref (action); state = g_variant_new ("b", FALSE); priv->search_action = g_simple_action_new_stateful ("search", NULL, state); g_signal_connect (priv->search_action, "activate", G_CALLBACK (photos_application_action_toggle), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (priv->search_action)); priv->sel_all_action = g_simple_action_new ("select-all", NULL); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (priv->sel_all_action)); priv->sel_none_action = g_simple_action_new ("select-none", NULL); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (priv->sel_none_action)); priv->set_bg_action = g_simple_action_new ("set-background", NULL); g_signal_connect_swapped (priv->set_bg_action, "activate", G_CALLBACK (photos_application_set_bg), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (priv->set_bg_action)); g_signal_connect_swapped (priv->mode_cntrlr, "window-mode-changed", G_CALLBACK (photos_application_window_mode_changed), self); photos_application_init_app_menu (self); gtk_application_add_accelerator (GTK_APPLICATION (self), "<Primary>q", "app.quit", NULL); gtk_application_add_accelerator (GTK_APPLICATION (self), "F11", "app.fullscreen", NULL); gtk_application_add_accelerator (GTK_APPLICATION (self), "F10", "app.gear-menu", NULL); gtk_application_add_accelerator (GTK_APPLICATION (self), "<Primary>p", "app.print-current", NULL); gtk_application_add_accelerator (GTK_APPLICATION (self), "<Primary>f", "app.search", NULL); gtk_application_add_accelerator (GTK_APPLICATION (self), "<Primary>a", "app.select-all", NULL); }
static void impl_activate (PeasActivatable *activatable) { RBVisualizerPlugin *pi = RB_VISUALIZER_PLUGIN (activatable); RBDisplayPageGroup *page_group; RhythmDBEntry *entry; GSimpleAction *fullscreen; RBShell *shell; GMenu *menu; g_object_get (pi, "object", &shell, NULL); pi->settings = g_settings_new ("org.gnome.rhythmbox.plugins.visualizer"); g_signal_connect_object (pi->settings, "changed", G_CALLBACK (settings_changed_cb), pi, 0); /* create UI actions and menus and stuff */ fullscreen = g_simple_action_new_stateful ("visualizer-toggle", G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean (FALSE)); menu = rb_visualizer_create_popup_menu ("app.visualizer-toggle"); g_object_ref_sink (menu); /* create visualizer page */ pi->page = rb_visualizer_page_new (G_OBJECT (pi), shell, fullscreen, G_MENU_MODEL (menu)); g_signal_connect_object (pi->page, "start", G_CALLBACK (start_visualizer_cb), pi, 0); g_signal_connect_object (pi->page, "stop", G_CALLBACK (stop_visualizer_cb), pi, 0); /* don't do anything if we couldn't create a video sink (clutter is broken, etc.) */ g_object_get (pi->page, "sink", &pi->sink, NULL); if (pi->sink == NULL) { g_object_unref (shell); return; } /* prepare style stuff for fullscreen display */ rb_visualizer_fullscreen_load_style (G_OBJECT (pi)); /* add the visualizer page to the UI */ page_group = rb_display_page_group_get_by_id ("display"); if (page_group == NULL) { page_group = rb_display_page_group_new (G_OBJECT (shell), "display", _("Display"), RB_DISPLAY_PAGE_GROUP_CATEGORY_TOOLS); rb_shell_append_display_page (shell, RB_DISPLAY_PAGE (page_group), NULL); } g_object_set (pi->page, "visibility", FALSE, NULL); rb_shell_append_display_page (shell, RB_DISPLAY_PAGE (pi->page), RB_DISPLAY_PAGE (page_group)); /* get player objects */ g_object_get (shell, "shell-player", &pi->shell_player, NULL); g_object_get (pi->shell_player, "player", &pi->player, NULL); /* only show the page in the page tree when playing something */ g_signal_connect_object (pi->shell_player, "playing-song-changed", G_CALLBACK (playing_song_changed_cb), pi, 0); entry = rb_shell_player_get_playing_entry (pi->shell_player); playing_song_changed_cb (pi->shell_player, entry, pi); if (entry != NULL) { rhythmdb_entry_unref (entry); } /* figure out how to insert the visualizer into the playback pipeline */ if (g_object_class_find_property (G_OBJECT_GET_CLASS (pi->player), "playbin")) { rb_debug ("using playbin-based visualization"); pi->playbin_notify_id = g_signal_connect_object (pi->player, "notify::playbin", G_CALLBACK (playbin_notify_cb), pi, 0); g_object_get (pi->player, "playbin", &pi->playbin, NULL); if (pi->playbin != NULL) { mutate_playbin (pi, pi->playbin); } } else if (RB_IS_PLAYER_GST_TEE (pi->player)) { rb_debug ("using tee-based visualization"); } else { g_warning ("unknown player backend type"); g_object_unref (pi->player); pi->player = NULL; } g_object_unref (shell); }