static regrow *make_regrow(GtkWidget *ww, GtkSignalFunc play_callback, GtkSignalFunc name_callback) { regrow *r; r = (regrow *)CALLOC(1, sizeof(regrow)); /* assume "ww" is a vbox widget in this case */ r->rw = gtk_hbox_new(false, 0); gtk_box_pack_start(GTK_BOX(ww), r->rw, false, false, 0); gtk_widget_modify_bg(r->rw, GTK_STATE_NORMAL, ss->sgx->highlight_color); gtk_widget_modify_base(r->rw, GTK_STATE_NORMAL, ss->sgx->highlight_color); gtk_widget_show(r->rw); r->pl = gtk_check_button_new(); gtk_box_pack_start(GTK_BOX(r->rw), r->pl, false, false, 2); SG_SIGNAL_CONNECT(r->pl, "toggled", play_callback, r); gtk_widget_show(r->pl); r->nm = gtk_button_new_with_label(""); sg_left_justify_button(r->nm); gtk_box_pack_start(GTK_BOX(r->rw), r->nm, true, true, 2); SG_SIGNAL_CONNECT(r->nm, "clicked", name_callback, r); SG_SIGNAL_CONNECT(r->nm, "enter_notify_event", regrow_mouse_enter_label, r); SG_SIGNAL_CONNECT(r->nm, "leave_notify_event", regrow_mouse_leave_label, r); set_user_data(G_OBJECT(r->nm), (gpointer)r); gtk_widget_modify_bg(r->nm, GTK_STATE_NORMAL, ss->sgx->highlight_color); gtk_widget_modify_base(r->nm, GTK_STATE_NORMAL, ss->sgx->highlight_color); gtk_widget_show(r->nm); return(r); }
static GtkWidget *slist_new_item(slist *lst, const char *label, int row) { GtkWidget *item; item = gtk_button_new_with_label(label); gtk_widget_set_name(item, "white_button"); slist_set_row(item, row); gtk_button_set_relief(GTK_BUTTON(item), GTK_RELIEF_HALF); #if HAVE_GTK_BUTTON_SET_ALIGNMENT gtk_button_set_alignment(GTK_BUTTON(item), 0.05, 1.0); #endif gtk_box_pack_start(GTK_BOX(lst->topics), item, false, false, 0); SG_SIGNAL_CONNECT(item, "clicked", slist_item_clicked, (gpointer)lst); SG_SIGNAL_CONNECT(item, "button_press_event", slist_item_button_pressed, (gpointer)lst); gtk_widget_show(item); return(item); }
GtkWidget *snd_as_widget(int argc, char **argv, GtkWidget *parent, void (*error_func)(const char *msg)) { #else void snd_doit(int argc, char **argv) { #endif GtkWidget *shell; int i; #ifdef SND_AS_WIDGET set_error_display(error_func); ss = snd_main(argc, argv); #else gtk_init(&argc, &argv); #if (!HAVE_GTK_3) #ifndef HAVE_OSX gdk_set_locale(); #endif #endif #endif ss->channel_min_height = CHANNEL_MIN_HEIGHT; ss->Graph_Cursor = DEFAULT_GRAPH_CURSOR; #ifndef SND_AS_WIDGET shell = gtk_window_new(GTK_WINDOW_TOPLEVEL); sg_make_resizable(shell); #endif auto_open_files = argc-1; if (argc > 1) auto_open_file_names = (char **)(argv + 1); ss->startup_title = mus_strdup("snd"); set_sound_style(SOUNDS_VERTICAL); for (i = 1; i < argc; i++) if ((strcmp(argv[i], "-h") == 0) || (strcmp(argv[i], "-horizontal") == 0) || (strcmp(argv[i], "--horizontal") == 0)) set_sound_style(SOUNDS_HORIZONTAL); else if ((strcmp(argv[i], "-v") == 0) || (strcmp(argv[i], "-vertical") == 0) || (strcmp(argv[i], "--vertical") == 0)) set_sound_style(SOUNDS_VERTICAL); else if ((strcmp(argv[i], "-notebook") == 0) || (strcmp(argv[i], "--notebook") == 0)) set_sound_style(SOUNDS_IN_NOTEBOOK); else if ((strcmp(argv[i], "-separate") == 0) || (strcmp(argv[i], "--separate") == 0)) set_sound_style(SOUNDS_IN_SEPARATE_WINDOWS); else if (strcmp(argv[i], "-noglob") == 0) noglob = true; else if (strcmp(argv[i], "-noinit") == 0) noinit = true; else if (strcmp(argv[i], "-nostdin") == 0) nostdin = true; else if ((strcmp(argv[i], "-b") == 0) || (strcmp(argv[i], "-batch") == 0) || (strcmp(argv[i], "--batch") == 0)) batch = true; else if (strcmp(argv[i], "--features") == 0) /* testing (compsnd) */ check_features_list(argv[i + 1]); ss->batch_mode = batch; set_auto_resize(AUTO_RESIZE_DEFAULT); ss->zoom_slider_width = ZOOM_SLIDER_WIDTH; ss->position_slider_width = POSITION_SLIDER_WIDTH; ss->channel_sash_indent = CHANNEL_SASH_INDENT; /* not currently used */ ss->channel_sash_size = CHANNEL_SASH_SIZE; ss->sash_size = SASH_SIZE; ss->sash_indent = SASH_INDENT; ss->toggle_size = TOGGLE_SIZE; ss->graph_is_active = false; ss->bg_gradient = 0.05; ss->white = WHITE_COLOR; ss->black = BLACK_COLOR; ss->light_blue = LIGHT_BLUE_COLOR; ss->lighter_blue = LIGHTER_BLUE_COLOR; ss->red = RED_COLOR; ss->green = GREEN_COLOR; ss->blue = BLUE_COLOR; ss->yellow = YELLOW_COLOR; ss->highlight_color = HIGHLIGHT_COLOR; ss->basic_color = BASIC_COLOR; ss->position_color = POSITION_COLOR; ss->zoom_color = ZOOM_COLOR; ss->cursor_color = CURSOR_COLOR; ss->selection_color = SELECTION_COLOR; ss->mix_color = MIX_COLOR; ss->enved_waveform_color = ENVED_WAVEFORM_COLOR; ss->filter_control_waveform_color = FILTER_CONTROL_WAVEFORM_COLOR; ss->listener_color = LISTENER_COLOR; ss->listener_text_color = LISTENER_TEXT_COLOR; ss->graph_color = GRAPH_COLOR; ss->selected_graph_color = SELECTED_GRAPH_COLOR; ss->data_color = DATA_COLOR; ss->selected_data_color = SELECTED_DATA_COLOR; ss->mark_color = MARK_COLOR; ss->sash_color = SASH_COLOR; ss->text_focus_color = TEXT_FOCUS_COLOR; ss->grid_color = get_in_between_color(ss->data_color, ss->graph_color); ss->selected_grid_color = get_in_between_color(ss->selected_data_color, ss->selected_graph_color); ss->axis_color_set = false; ss->orig_data_color = ss->data_color; ss->orig_selected_data_color = ss->selected_data_color; ss->orig_mark_color = ss->mark_color; ss->orig_mix_color = ss->mix_color; ss->orig_graph_color = ss->graph_color; ss->orig_selected_graph_color = ss->selected_graph_color; ss->orig_listener_color = ss->listener_color; ss->orig_listener_text_color = ss->listener_text_color; ss->orig_cursor_color = ss->cursor_color; ss->orig_basic_color = ss->basic_color; ss->orig_selection_color = ss->selection_color; ss->orig_zoom_color = ss->zoom_color; ss->orig_position_color = ss->position_color; ss->orig_highlight_color = ss->highlight_color; if ((!(set_tiny_font(DEFAULT_TINY_FONT))) && (!(set_tiny_font(FALLBACK_FONT)))) fprintf(stderr, "can't find tiny font: %s", DEFAULT_TINY_FONT); if ((!(set_axis_label_font(DEFAULT_AXIS_LABEL_FONT))) && (!(set_axis_label_font(FALLBACK_FONT)))) fprintf(stderr, "can't find axis label font: %s", DEFAULT_AXIS_LABEL_FONT); if ((!(set_axis_numbers_font(DEFAULT_AXIS_NUMBERS_FONT))) && (!(set_axis_numbers_font(FALLBACK_FONT)))) fprintf(stderr, "can't find axis numbers font: %s", DEFAULT_AXIS_NUMBERS_FONT); if ((!(set_peaks_font(DEFAULT_PEAKS_FONT))) && (!(set_peaks_font(FALLBACK_FONT)))) fprintf(stderr, "can't find peaks font: %s", DEFAULT_PEAKS_FONT); if ((!(set_bold_peaks_font(DEFAULT_BOLD_PEAKS_FONT))) && (!(set_bold_peaks_font(FALLBACK_FONT)))) fprintf(stderr, "can't find bold peaks font: %s", DEFAULT_BOLD_PEAKS_FONT); if (!(set_listener_font(FALLBACK_FONT))) fprintf(stderr, "can't find listener font: %s", FALLBACK_FONT); ss->orig_axis_label_font = mus_strdup(axis_label_font(ss)); ss->orig_axis_numbers_font = mus_strdup(axis_numbers_font(ss)); ss->orig_peaks_font = mus_strdup(peaks_font(ss)); ss->orig_bold_peaks_font = mus_strdup(bold_peaks_font(ss)); ss->orig_listener_font = mus_strdup(listener_font(ss)); ss->orig_tiny_font = mus_strdup(tiny_font(ss)); #if (!HAVE_GTK_3) init_gtk(); #endif MAIN_PANE(ss) = gtk_vbox_new(false, 0); /* not homogenous, spacing 0 */ #if (HAVE_GTK_3) init_gtk(); #endif #ifdef SND_AS_WIDGET MAIN_SHELL(ss) = parent; shell = MAIN_PANE(ss); #else MAIN_SHELL(ss) = shell; gtk_container_add(GTK_CONTAINER(MAIN_SHELL(ss)), MAIN_PANE(ss)); #endif add_menu(); /* adds menubar to MAIN_PANE (via box_pack_start) */ if (with_toolbar(ss)) show_toolbar(); if (sound_style(ss) != SOUNDS_IN_SEPARATE_WINDOWS) { SOUND_PANE(ss) = gtk_vpaned_new(); gtk_container_set_border_width(GTK_CONTAINER(SOUND_PANE(ss)), 0); gtk_container_add(GTK_CONTAINER(MAIN_PANE(ss)), SOUND_PANE(ss)); if (sound_style(ss) == SOUNDS_IN_NOTEBOOK) { SOUND_PANE_BOX(ss) = gtk_notebook_new(); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(SOUND_PANE_BOX(ss)), GTK_POS_TOP); SG_SIGNAL_CONNECT(SOUND_PANE_BOX(ss), "switch_page", notebook_switch_page, NULL); } else { if (sound_style(ss) == SOUNDS_HORIZONTAL) SOUND_PANE_BOX(ss) = gtk_hbox_new(false, 0); else SOUND_PANE_BOX(ss) = gtk_vbox_new(false, 0); } gtk_paned_add1(GTK_PANED(SOUND_PANE(ss)), SOUND_PANE_BOX(ss)); gtk_widget_show(SOUND_PANE_BOX(ss)); gtk_widget_show(SOUND_PANE(ss)); } gtk_widget_show(MAIN_PANE(ss)); gtk_widget_show(MAIN_SHELL(ss)); #ifndef SND_AS_WIDGET #if HAVE_GTK_ADJUSTMENT_GET_UPPER MAIN_WINDOW(ss) = gtk_widget_get_window(MAIN_SHELL(ss)); #else MAIN_WINDOW(ss) = MAIN_SHELL(ss)->window; #endif #else MAIN_WINDOW(ss) = gtk_widget_get_parent_window(MAIN_SHELL(ss)); #endif setup_gcs(); if (batch) gtk_widget_hide(MAIN_SHELL(ss)); else gdk_window_resize(WIDGET_TO_WINDOW(MAIN_SHELL(ss)), INITIAL_WINDOW_WIDTH, INITIAL_WINDOW_HEIGHT); startup_funcs(); #if HAVE_SETJMP_H #if MUS_TRAP_SEGFAULT if (sigsetjmp(envHandleEventsLoop, 1)) { if (!(ss->exiting)) snd_error_without_format("Caught seg fault (will try to continue):\n"); else { snd_error_without_format("Caught seg fault while trying to exit.\n"); exit(0); } } #endif if (setjmp(top_level_jump)) { if (!(ss->jump_ok)) snd_error_without_format("Caught top level error (will try to continue):\n"); else ss->jump_ok = false; } #endif if (ss->startup_errors) { post_it("Error in initialization", ss->startup_errors); free(ss->startup_errors); ss->startup_errors = NULL; } #if HAVE_GTK_3 set_basic_color(ss->basic_color); color_listener(ss->listener_color); color_chan_components(ss->zoom_color, COLOR_ZOOM); color_chan_components(ss->position_color, COLOR_POSITION); #endif #ifndef SND_AS_WIDGET set_up_icon(); gtk_main(); #else return(shell); #endif }
static void startup_funcs(void) { static int auto_open_ctr = 0; #ifndef SND_AS_WIDGET /* trap outer-level Close for cleanup check */ SG_SIGNAL_CONNECT(MAIN_SHELL(ss), "delete_event", window_close, NULL); /* when iconified, we need to hide any dialogs as well */ SG_SIGNAL_CONNECT(MAIN_SHELL(ss), "window_state_event", window_iconify, NULL); #endif ss->graph_cursor = gdk_cursor_new((GdkCursorType)in_graph_cursor(ss)); ss->wait_cursor = gdk_cursor_new(GDK_WATCH); ss->bounds_cursor = gdk_cursor_new(GDK_SB_H_DOUBLE_ARROW); ss->yaxis_cursor = gdk_cursor_new(GDK_SB_V_DOUBLE_ARROW); ss->play_cursor = gdk_cursor_new(GDK_SB_RIGHT_ARROW); ss->loop_play_cursor = gdk_cursor_new(GDK_SB_LEFT_ARROW); ss->arrow_cursor = gdk_cursor_new(GDK_LEFT_PTR); #if HAVE_EXTENSION_LANGUAGE snd_load_init_file(noglob, noinit); #endif #if HAVE_SIGNAL && HAVE_EXTENSION_LANGUAGE && !__MINGW32__ if (!nostdin) { GIOChannel *channel; signal(SIGTTIN, SIG_IGN); signal(SIGTTOU, SIG_IGN); /* these signals are sent by a shell if we start Snd as a background process, * but try to read stdin (needed to support the emacs subjob connection). If * we don't do this, the background job is suspended when the shell sends SIGTTIN. */ channel = g_io_channel_unix_new(STDIN_FILENO); stdin_id = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, (GIOCondition)(G_IO_IN | G_IO_HUP | G_IO_ERR), io_invoke, NULL, NULL); g_io_channel_unref(channel); } #endif while (auto_open_ctr < auto_open_files) auto_open_ctr = handle_next_startup_arg(auto_open_ctr, auto_open_file_names, true, auto_open_files); #ifndef SND_AS_WIDGET if ((ss->init_window_width > 0) && (ss->init_window_height > 0)) set_widget_size(GTK_WIDGET(MAIN_SHELL(ss)), ss->init_window_width, ss->init_window_height); if ((ss->init_window_x != DEFAULT_INIT_WINDOW_X) && (ss->init_window_y != DEFAULT_INIT_WINDOW_Y)) set_widget_position(GTK_WIDGET(MAIN_SHELL(ss)), ss->init_window_x, ss->init_window_y); #endif #if (!HAVE_FAM) if (auto_update_interval(ss) > 0.0) g_timeout_add_full(0, (guint32)(auto_update_interval(ss) * 1000), auto_update_check, NULL, NULL); #endif #if MUS_TRAP_SEGFAULT if (trap_segfault(ss)) signal(SIGSEGV, segv); #endif if ((ss->sounds) && (ss->selected_sound == NO_SELECTION)) { snd_info *sp; sp = ss->sounds[0]; if ((sp) && (sp->inuse == SOUND_NORMAL) && (sp->selected_channel == NO_SELECTION)) /* don't clobber possible select-channel in loaded startup files */ select_channel(sp, 0); } }
static void make_region_dialog(void) { int i, id; regrow *r; chan_info *cp; GtkWidget *infobox, *labels, *labbox; GtkWidget *sep1, *cww, *toppane, *tophbox, *plw, *formw; region_dialog = snd_gtk_dialog_new(); SG_SIGNAL_CONNECT(region_dialog, "delete_event", region_browser_delete_callback, NULL); gtk_window_set_title(GTK_WINDOW(region_dialog), _("Regions")); sg_make_resizable(region_dialog); gtk_container_set_border_width(GTK_CONTAINER(region_dialog), 10); gtk_window_resize(GTK_WINDOW(region_dialog), 400, 500); gtk_widget_realize(region_dialog); help_button = gtk_button_new_from_stock(GTK_STOCK_HELP); gtk_widget_set_name(help_button, "help_button"); dismiss_button = gtk_button_new_from_stock(GTK_STOCK_QUIT); gtk_widget_set_name(dismiss_button, "quit_button"); insert_button = sg_button_new_from_stock_with_label(_("Insert"), GTK_STOCK_PASTE); gtk_widget_set_name(insert_button, "doit_button"); mix_button = sg_button_new_from_stock_with_label(_("Mix"), GTK_STOCK_ADD); gtk_widget_set_name(mix_button, "doit_again_button"); save_as_button = gtk_button_new_from_stock(GTK_STOCK_SAVE_AS); gtk_widget_set_name(save_as_button, "reset_button"); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(region_dialog)->action_area), dismiss_button, true, true, 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(region_dialog)->action_area), insert_button, true, true, 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(region_dialog)->action_area), mix_button, true, true, 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(region_dialog)->action_area), save_as_button, true, true, 4); gtk_box_pack_end(GTK_BOX(GTK_DIALOG(region_dialog)->action_area), help_button, true, true, 4); SG_SIGNAL_CONNECT(insert_button, "clicked", region_insert_callback, NULL); SG_SIGNAL_CONNECT(mix_button, "clicked", region_mix_callback, NULL); SG_SIGNAL_CONNECT(help_button, "clicked", region_help_callback, NULL); SG_SIGNAL_CONNECT(dismiss_button, "clicked", region_ok_callback, NULL); SG_SIGNAL_CONNECT(save_as_button, "clicked", region_save_callback, NULL); gtk_widget_show(insert_button); gtk_widget_show(mix_button); gtk_widget_show(help_button); gtk_widget_show(dismiss_button); gtk_widget_show(save_as_button); region_grf = gtk_vpaned_new(); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(region_dialog)->vbox), region_grf, true, true, 0); gtk_widget_show(region_grf); toppane = gtk_hbox_new(false, 0); gtk_paned_add1(GTK_PANED(region_grf), toppane); gtk_widget_show(toppane); formw = gtk_vbox_new(false, 0); gtk_box_pack_start(GTK_BOX(toppane), formw, true, true, 4); gtk_widget_show(formw); sep1 = gtk_vseparator_new(); /* not hsep -- damned thing insists on drawing a line */ gtk_box_pack_start(GTK_BOX(formw), sep1, false, false, 2); gtk_widget_show(sep1); tophbox = gtk_hbox_new(false, 0); gtk_box_pack_start(GTK_BOX(formw), tophbox, false, false, 4); gtk_widget_show(tophbox); plw = gtk_label_new(_("play")); gtk_box_pack_start(GTK_BOX(tophbox), plw, false, false, 2); gtk_widget_show(plw); sep1 = gtk_vseparator_new(); gtk_box_pack_start(GTK_BOX(formw), sep1, false, false, 2); gtk_widget_show(sep1); region_list = gtk_vbox_new(false, 0); cww = gtk_scrolled_window_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(formw), cww, true, true, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cww), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(cww), region_list); gtk_widget_show(region_list); gtk_widget_show(cww); infobox = gtk_vbox_new(false, 0); gtk_box_pack_start(GTK_BOX(toppane), infobox, false, false, 2); gtk_widget_show(infobox); region_rows = (regrow **)CALLOC(max_regions(ss), sizeof(regrow *)); region_rows_size = max_regions(ss); for (i = 0; i < max_regions(ss); i++) { r = make_regrow(region_list, (void (*)())region_play_callback, (void (*)())region_focus_callback); region_rows[i] = r; r->pos = i; } update_region_browser(false); /* in Gtk, apparently, labels are just the text, not the background (i.e. they're transparent) */ /* we need a button simply to get the background color, then a vbox to put four labels on the button */ /* but we get a button which flashes whenever the mouse comes near it and has "relief" */ /* if we turn off the relief, the colors go away */ /* all I want is an opaque label with a background color */ labels = gtk_button_new(); gtk_box_pack_start(GTK_BOX(infobox), labels, true, true, 2); gtk_widget_show(labels); gtk_widget_modify_bg(labels, GTK_STATE_NORMAL, ss->sgx->highlight_color); SG_SIGNAL_CONNECT(labels, "enter_notify_event", region_labels_mouse_enter, NULL); labbox = gtk_vbox_new(true, 0); gtk_container_add(GTK_CONTAINER(labels), labbox); gtk_widget_show(labbox); gtk_widget_modify_bg(labbox, GTK_STATE_NORMAL, ss->sgx->highlight_color); srate_text = gtk_label_new(_("srate:")); sg_left_justify_label(srate_text); gtk_box_pack_start(GTK_BOX(labbox), srate_text, false, false, 2); gtk_widget_show(srate_text); chans_text = gtk_label_new(_("chans:")); sg_left_justify_label(chans_text); gtk_box_pack_start(GTK_BOX(labbox), chans_text, false, false, 2); gtk_widget_show(chans_text); length_text = gtk_label_new(_("length:")); sg_left_justify_label(length_text); gtk_box_pack_start(GTK_BOX(labbox), length_text, false, false, 2); gtk_widget_show(length_text); maxamp_text = gtk_label_new(_("maxamp:")); sg_left_justify_label(maxamp_text); gtk_box_pack_start(GTK_BOX(labbox), maxamp_text, false, false, 2); gtk_widget_show(maxamp_text); edit_button = gtk_button_new_with_label(_("edit")); SG_SIGNAL_CONNECT(edit_button, "clicked", region_edit_callback, NULL); gtk_box_pack_start(GTK_BOX(infobox), edit_button, true, true, 2); gtk_widget_show(edit_button); gtk_widget_modify_bg(edit_button, GTK_STATE_NORMAL, ss->sgx->lighter_blue); gtk_widget_modify_bg(edit_button, GTK_STATE_ACTIVE, ss->sgx->red); print_button = gtk_button_new_with_label(_("print")); SG_SIGNAL_CONNECT(print_button, "clicked", region_print_callback, NULL); gtk_box_pack_start(GTK_BOX(infobox), print_button, true, true, 2); gtk_widget_show(print_button); gtk_widget_modify_bg(print_button, GTK_STATE_NORMAL, ss->sgx->lighter_blue); gtk_widget_modify_bg(print_button, GTK_STATE_ACTIVE, ss->sgx->red); unlist_button = gtk_button_new_with_label(_("unlist")); SG_SIGNAL_CONNECT(unlist_button, "clicked", region_unlist_callback, NULL); gtk_box_pack_start(GTK_BOX(infobox), unlist_button, true, true, 2); gtk_widget_show(unlist_button); gtk_widget_modify_bg(unlist_button, GTK_STATE_NORMAL, ss->sgx->lighter_blue); gtk_widget_modify_bg(unlist_button, GTK_STATE_ACTIVE, ss->sgx->red); gtk_widget_show(region_dialog); id = region_list_position_to_id(0); rsp = make_simple_channel_display(region_srate(id), region_len(id), WITH_ARROWS, region_graph_style(ss), region_grf, WITHOUT_EVENTS); rsp->inuse = SOUND_REGION; set_current_region(0); cp = rsp->chans[0]; gtk_paned_set_position(GTK_PANED(region_grf), 220); SG_SIGNAL_CONNECT(channel_graph(cp), "expose_event", region_resize_callback, cp); SG_SIGNAL_CONNECT(channel_graph(cp), "configure_event", region_expose_callback, cp); SG_SIGNAL_CONNECT(channel_up_arrow(cp), "button_press_event", region_up_arrow_callback, NULL); SG_SIGNAL_CONNECT(channel_down_arrow(cp), "button_press_event", region_down_arrow_callback, NULL); set_sensitive(channel_f(cp), false); if (region_chans(region_list_position_to_id(0)) > 1) set_sensitive(channel_w(cp), true); cp->chan = 0; rsp->hdr = fixup_region_data(cp, 0, 0); make_region_labels(rsp->hdr); highlight_region(); region_update_graph(cp); add_ss_watcher(SS_FILE_OPEN_WATCHER, reflect_file_in_region_browser, NULL); set_dialog_widget(REGION_DIALOG, region_dialog); }