static void prefs_display_items_set_sensitive(PrefsDisplayItemsDialog *dialog) { GtkCList *clist = GTK_CLIST(dialog->shown_clist); gint row; if (!clist->selection) return; row = GPOINTER_TO_INT(clist->selection->data); if (gtk_clist_get_row_data(clist, row)) gtk_widget_set_sensitive(dialog->remove_btn, TRUE); else gtk_widget_set_sensitive(dialog->remove_btn, FALSE); if (row > 0 && row < clist->rows - 1) gtk_widget_set_sensitive(dialog->up_btn, TRUE); else gtk_widget_set_sensitive(dialog->up_btn, FALSE); if (row >= 0 && row < clist->rows - 2) gtk_widget_set_sensitive(dialog->down_btn, TRUE); else gtk_widget_set_sensitive(dialog->down_btn, FALSE); if (gtk_clist_row_is_visible(clist, row) != GTK_VISIBILITY_FULL) gtk_clist_moveto(clist, row, 0, 0.5, 0); }
static gint fontsel_set_style_by_name (StyleSelect *select) { FontFace *font_face = NULL; GtkCList *clist; gint row; g_return_val_if_fail (select != NULL, FALSE); font_face = g_tree_lookup (select->family, select->style_name); if (font_face) { clist = g_object_get_data (G_OBJECT (select->fontsel), "style_list"); row = gtk_clist_find_row_from_data (GTK_CLIST (clist), font_face); gtk_clist_select_row (GTK_CLIST (clist), row, 0); if ( !(gtk_clist_row_is_visible (clist, row) & GTK_VISIBILITY_FULL)) gtk_clist_moveto (clist, row, 0, 0.0, 0.0); } g_free (select); return FALSE; }
static void ghack_ext_key_hit(GtkWidget *menuWin, GdkEventKey *event, gpointer data) { GtkWidget* clist; extMenu* info = (extMenu*) data; int i; char c = event->string[0]; clist = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(menuWin), "clist")); g_assert(clist != NULL); /* if too long between keystrokes, reset to initial state */ if (event->time - info->lastTime > 500) goto init_state; /* see if current item continue to match */ if (info->charIdx > 0) { if (extcmdlist[info->curItem].ef_txt[info->charIdx] == c) { ++info->charIdx; goto found; } } /* see if the prefix matches a later command in the list */ if (info->curItem >= 0) { for (i = info->curItem + 1; i < info->numRows; ++i) { if (!strncmp(extcmdlist[info->curItem].ef_txt, extcmdlist[i].ef_txt, info->charIdx)) { if (extcmdlist[i].ef_txt[info->charIdx] == c) { ++info->charIdx; info->curItem = i; goto found; } } } } init_state: /* reset to initial state, look for matching 1st character */ for (i = 0; i < info->numRows; ++i) { if (extcmdlist[i].ef_txt[0] == c) { info->charIdx = 1; info->curItem = i; goto found; } } /* no match: leave prior, if any selection in place */ return; found: info->lastTime = event->time; gtk_clist_select_row(GTK_CLIST(clist), info->curItem, 0); if (gtk_clist_row_is_visible(GTK_CLIST(clist), info->curItem) != GTK_VISIBILITY_FULL) gtk_clist_moveto(GTK_CLIST(clist), info->curItem, 0, 0.5, 0); }
static int cleanup(void *useless) { gdk_threads_enter(); gtk_clist_thaw(GTK_CLIST(verb)); gtk_widget_queue_resize(verb->parent); gtk_clist_moveto(GTK_CLIST(verb), GTK_CLIST(verb)->rows - 1, 0, 0, 0); cleanupid = -1; gdk_threads_leave(); return 0; }
void prefs_display_items_dialog_set_visible(PrefsDisplayItemsDialog *dialog, const gint *ids) { GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist); GList *cur; PrefsDisplayItem *item; gint i; gint row; gchar *name; g_return_if_fail(dialog->available_items != NULL); if (!ids) ids = dialog->default_visible_ids; g_return_if_fail(ids != NULL); gtk_clist_clear(shown_clist); if (dialog->visible_items) { g_list_free(dialog->visible_items); dialog->visible_items = NULL; } for (cur = dialog->available_items; cur != NULL; cur = cur->next) { item = cur->data; item->in_use = FALSE; } for (i = 0; ids[i] != -1; i++) { gint id = ids[i]; item = prefs_display_items_get_item_from_id(dialog, id); g_return_if_fail(item != NULL); g_return_if_fail(item->allow_multiple || item->in_use == FALSE); item->in_use = TRUE; name = gettext(item->label); row = gtk_clist_append(shown_clist, (gchar **)&name); gtk_clist_set_row_data(shown_clist, row, item); } name = "--------"; row = gtk_clist_append(shown_clist, (gchar **)&name); gtk_widget_ensure_style(GTK_WIDGET(shown_clist)); gtk_clist_set_foreground (shown_clist, row, >K_WIDGET(shown_clist)->style->text[GTK_STATE_INSENSITIVE]); prefs_display_items_update_available(dialog); prefs_display_items_set_sensitive(dialog); gtk_clist_moveto(shown_clist, 0, 0, 0, 0); }
static void pattern_clist_adjust_visibility (int row, int direction) { GtkVisibility vis; debug(5,"pattern_clist_adjust_visibility(row=%d,direction=%d)",row,direction); vis = gtk_clist_row_is_visible (GTK_CLIST (pattern_clist), row); if (vis != GTK_VISIBILITY_FULL) { gtk_clist_moveto (GTK_CLIST (pattern_clist), row, 0, (direction == 0)? 0.5 : ((direction > 0)? 1.0 : 0.0), 0.0); } }
static void editlist_gui_addnew (GtkWidget * igad) { int i; gchar *nnew[2]; nnew[0] = _("*NEW*"); nnew[1] = _("EDIT ME"); i = gtk_clist_append (GTK_CLIST (editlist_gui_list), nnew); gtk_clist_select_row (GTK_CLIST (editlist_gui_list), i, 0); gtk_clist_moveto (GTK_CLIST (editlist_gui_list), i, 0, 0.5, 0); }
gboolean button_press(GtkWidget *drawing_area, GdkEventButton *event, gpointer action) { if (event->button == 1) /* left button */ { ox = (int)event->x; oy = (int)event->y; erase_rubberbox(drawing_area); } else if (event->button == 3) /* right button */ { if (GPOINTER_TO_UINT(action) == ACTION_LCD_COORDS) { skin_infos.lcd_pos.top = tmp_rect.y; skin_infos.lcd_pos.left = tmp_rect.x; skin_infos.lcd_pos.bottom = tmp_rect.y + tmp_rect.h; skin_infos.lcd_pos.right = tmp_rect.x + tmp_rect.w; gtk_signal_disconnect(GTK_OBJECT(drawing_area), lcd_mouse_motion); gtk_signal_disconnect(GTK_OBJECT(drawing_area), lcd_button_press); lcd_mouse_motion = 0; lcd_button_press = 0; erase_rubberbox(drawing_area); sbar_print(_("Saved LCD coordinates")); } else { skin_infos.keys_pos[clist_row].top = tmp_rect.y; skin_infos.keys_pos[clist_row].left = tmp_rect.x; skin_infos.keys_pos[clist_row].bottom = tmp_rect.y + tmp_rect.h; skin_infos.keys_pos[clist_row].right = tmp_rect.x + tmp_rect.w; gtk_clist_moveto(GTK_CLIST(lookup_widget(GTK_WIDGET(list_keys_dialog), "list_keys")), (((clist_row + 1) < clist_max) ? (clist_row + 1) : 0), 0, 0.5, 0); gtk_clist_select_row(GTK_CLIST(lookup_widget(GTK_WIDGET(list_keys_dialog), "list_keys")), (((clist_row + 1) < clist_max) ? (clist_row + 1) : 0), 0); } } return FALSE; }
static void player_sel_key_hit (GtkWidget *widget, GdkEventKey *event, gpointer data) { const char** roles = data; int i; for (i = 0; roles[i] != 0; ++i) { if (tolower(roles[i][0]) == tolower(event->keyval)) { role_number = i; gtk_clist_select_row( GTK_CLIST (clist), i, 0); if (gtk_clist_row_is_visible(GTK_CLIST(clist), i) != GTK_VISIBILITY_FULL) gtk_clist_moveto(GTK_CLIST(clist), i, 0, 0.5, 0); } } }
static void cb_clist_down(GtkWidget *widget) { gint row; row = selected_row; if (row >= 0 && row < GTK_CLIST(reader_clist)->rows - 1) { gtk_clist_row_move(GTK_CLIST(reader_clist), row, row + 1); gtk_clist_select_row(GTK_CLIST(reader_clist), row + 1, -1); if (gtk_clist_row_is_visible(GTK_CLIST(reader_clist), row + 1) != GTK_VISIBILITY_FULL) gtk_clist_moveto(GTK_CLIST(reader_clist), row + 1, -1, 1.0, 0.0); selected_row = row + 1; list_modified = TRUE; } }
static void editlist_gui_moveup (GtkWidget * igad) { int row; row = gtkutil_clist_selection (editlist_gui_list); if (row != -1 && row > 0) { gtk_clist_freeze (GTK_CLIST (editlist_gui_list)); gtk_clist_swap_rows (GTK_CLIST (editlist_gui_list), row - 1, row); gtk_clist_thaw (GTK_CLIST (editlist_gui_list)); row--; if (gtk_clist_row_is_visible (GTK_CLIST (editlist_gui_list), row) != GTK_VISIBILITY_FULL) gtk_clist_moveto (GTK_CLIST (editlist_gui_list), row, 0, 0.1, 0); } }
static void ghack_menu_window_key(GtkWidget *menuWin, GdkEventKey *event, gpointer data) { int i, numRows; menuItem* item; MenuWinType isMenu; isMenu = (MenuWinType) GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (menuWin), "isMenu")); if (isMenu == MenuMenu) { GtkWidget *clist; gint selection_mode; clist = GTK_WIDGET(gtk_object_get_data (GTK_OBJECT (menuWin), "clist")); g_assert (clist != NULL); numRows = GPOINTER_TO_INT (gtk_object_get_data(GTK_OBJECT(clist), "numRows")); selection_mode = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT(clist), "selection_mode")); for (i = 0; i <= numRows; ++i) { item = (menuItem*) gtk_clist_get_row_data(GTK_CLIST(clist), i); if (item == NULL) continue; if (!strcmp(item->accelerator, "")) continue; if ( (!strcmp(item->accelerator, event->string)) || ((selection_mode == GTK_SELECTION_MULTIPLE) && (event->keyval == ','))) { if (item->selected) { gtk_clist_unselect_row( GTK_CLIST (clist), item->itemNumber, 0); item->selected=FALSE; } else { gtk_clist_select_row( GTK_CLIST (clist), item->itemNumber, 0); if (gtk_clist_row_is_visible(GTK_CLIST(clist), item->itemNumber) != GTK_VISIBILITY_FULL) gtk_clist_moveto(GTK_CLIST(clist), item->itemNumber, 0, 0.5, 0); item->selected=TRUE; } } } } }
static void gradient_select_select (GradientSelect *gsp, gradient_t *gradient) { gint index; index = gradient_list_get_gradient_index (gradients_list, gradient); if (index != -1) { gtk_signal_handler_block_by_data (GTK_OBJECT (gsp->clist), gsp); gtk_clist_select_row (GTK_CLIST (gsp->clist), index, -1); gtk_clist_moveto (GTK_CLIST (gsp->clist), index, 0, 0.5, 0.0); gtk_signal_handler_unblock_by_data (GTK_OBJECT (gsp->clist), gsp); } }
static void editlist_gui_movedown (GtkWidget * igad) { int row; char *temp; row = gtkutil_clist_selection (editlist_gui_list); if (row != -1) { if (!gtk_clist_get_text (GTK_CLIST (editlist_gui_list), row + 1, 0, &temp)) return; gtk_clist_freeze (GTK_CLIST (editlist_gui_list)); gtk_clist_swap_rows (GTK_CLIST (editlist_gui_list), row, row + 1); gtk_clist_thaw (GTK_CLIST (editlist_gui_list)); row++; if (!gtk_clist_row_is_visible (GTK_CLIST (editlist_gui_list), row) != GTK_VISIBILITY_FULL) gtk_clist_moveto (GTK_CLIST (editlist_gui_list), row, 0, 0.9, 0); } }
void x_listbox_select_nth (WListbox *l, int nth) { static int inside; GtkCList *clist; if (inside) return; if (!l->widget.wdata) return; inside = 1; clist = GTK_CLIST (listbox_pull (l->widget.wdata)); gtk_clist_select_row (clist, nth, 0); if (gtk_clist_row_is_visible (clist, nth) != GTK_VISIBILITY_FULL) gtk_clist_moveto (clist, nth, 0, 0.5, 0.0); inside = 0; }
static void fontsel_family_select_callback (GtkCList *clist, gint row, gint column, GdkEventButton *event, gpointer data) { FontFace *font_face = NULL; GtkWidget *clist2 = (GtkWidget *) data; GTree *family; gint face_row = 0; family = gtk_clist_get_row_data (clist, row); gtk_clist_freeze (GTK_CLIST (clist2)); gtk_clist_clear (GTK_CLIST (clist2)); g_tree_foreach (family, (GTraverseFunc) fontsel_style_list_insert, clist2); gtk_clist_thaw (GTK_CLIST (clist2)); if (face_selected && face_selected->style_name) font_face = g_tree_lookup (family, face_selected->style_name); if (! font_face) font_face = g_tree_lookup (family, "Regular"); if (! font_face) font_face = g_tree_lookup (family, "Roman"); if (font_face) face_row = gtk_clist_find_row_from_data (GTK_CLIST (clist2), font_face); gtk_clist_select_row (GTK_CLIST (clist2), face_row, 0); if (! (gtk_clist_row_is_visible (GTK_CLIST (clist2), face_row) & GTK_VISIBILITY_FULL)) gtk_clist_moveto (clist, face_row, 0, 0.0, 0.0); }
void fontsel_set_font_by_name (GtkWidget *fontsel, gchar *family_name, gchar *style_name) { GTree *family = NULL; GtkCList *clist; gint row; StyleSelect *style_select; g_return_if_fail (fontsel != NULL); if (family_name) { family = g_tree_lookup (families, family_name); } if (family) { clist = g_object_get_data (G_OBJECT (fontsel), "family_list"); row = gtk_clist_find_row_from_data (GTK_CLIST (clist), family); gtk_clist_select_row (GTK_CLIST (clist), row, 0); if ( !(gtk_clist_row_is_visible (clist, row) & GTK_VISIBILITY_FULL)) gtk_clist_moveto (clist, row, 0, 0.0, 0.0); if (style_name) { style_select = g_new (StyleSelect, 1); style_select->fontsel = fontsel; style_select->family = family; style_select->style_name = style_name; gtk_idle_add ((GtkFunction)fontsel_set_style_by_name, style_select); } } }
/* Select a moverecord as the "current" one. NOTE: This function must be called _after_ applying the moverecord. */ extern void GTKSetMoveRecord( moverecord *pmr ) { /* highlighted row/col in game record */ static int yCurrent = -1, xCurrent = -1; GtkCList *pcl = GTK_CLIST( pwGameList ); gamelistrow *pglr; int i; /* Avoid lots of screen updates */ if (!frozen) SetAnnotation( pmr ); #ifdef UNDEF { GtkWidget* pwWin = GetPanelWidget(WINDOW_HINT); if (pwWin) { hintdata *phd = g_object_get_data(G_OBJECT(pwWin), "user_data"); phd->fButtonsValid = FALSE; CheckHintButtons(phd); } } #endif if (yCurrent != -1 && xCurrent != -1) { moverecord *pmrLast = NULL; pglr = gtk_clist_get_row_data(pcl, yCurrent); if (pglr) { pmrLast = pglr->apmr[xCurrent - 1]; if (pmrLast) SetCellColour(yCurrent, xCurrent, pmrLast); } if (!pmrLast) gtk_clist_set_cell_style(pcl, yCurrent, xCurrent, psGameList); } yCurrent = xCurrent = -1; if( !pmr ) return; if( pmr == plGame->plNext->p ) { g_assert( pmr->mt == MOVE_GAMEINFO ); yCurrent = 0; if( plGame->plNext->plNext->p ) { moverecord *pmrNext = plGame->plNext->plNext->p; if( pmrNext->mt == MOVE_NORMAL && pmrNext->fPlayer == 1 ) xCurrent = 2; else xCurrent = 1; } else xCurrent = 1; } else { for( i = pcl->rows - 1; i >= 0; i-- ) { pglr = gtk_clist_get_row_data( pcl, i ); if( pglr->apmr[ 1 ] == pmr ) { xCurrent = 2; break; } else if( pglr->apmr[ 0 ] == pmr ) { xCurrent = 1; break; } } yCurrent = i; if( yCurrent >= 0 && !( pmr->mt == MOVE_SETDICE && yCurrent == pcl->rows - 1 ) ) { do { if( ++xCurrent > 2 ) { xCurrent = 1; yCurrent++; } pglr = gtk_clist_get_row_data( pcl, yCurrent ); } while( yCurrent < pcl->rows - 1 && !pglr->apmr[ xCurrent - 1 ] ); if( yCurrent >= pcl->rows ) AddMoveRecordRow(); } } /* Highlight current move */ gtk_clist_set_cell_style(pcl, yCurrent, xCurrent, psCurrent); if( gtk_clist_row_is_visible( pcl, yCurrent ) != GTK_VISIBILITY_FULL ) gtk_clist_moveto( pcl, yCurrent, xCurrent, 0.8f, 0.5f ); }
static void handle_input(gpointer client_data, gint source, GdkInputCondition ic) { int message; gtk_pipe_int_read(&message); switch (message) { case REFRESH_MESSAGE: g_warning("REFRESH MESSAGE IS OBSOLETE !!!"); break; case TOTALTIME_MESSAGE: { int tt; int minutes,seconds; char local_string[20]; GtkObject *adj; gtk_pipe_int_read(&tt); seconds=max_sec=tt/play_mode->rate; minutes=seconds/60; seconds-=minutes*60; sprintf(local_string,"/ %i:%02i",minutes,seconds); gtk_label_set(GTK_LABEL(tot_lbl), local_string); /* Readjust the time scale */ adj = gtk_adjustment_new(0., 0., (gfloat)max_sec, 1., 10., 0.); gtk_signal_connect(GTK_OBJECT(adj), "value_changed", GTK_SIGNAL_FUNC(generic_scale_cb), (gpointer)GTK_CHANGE_LOCATOR); gtk_range_set_adjustment(GTK_RANGE(locator), GTK_ADJUSTMENT(adj)); } break; case MASTERVOL_MESSAGE: { int volume; GtkAdjustment *adj; gtk_pipe_int_read(&volume); adj = gtk_range_get_adjustment(GTK_RANGE(vol_scale)); my_adjustment_set_value(adj, MAX_AMPLIFICATION - volume); } break; case FILENAME_MESSAGE: { char filename[255], title[255]; char *pc; gtk_pipe_string_read(filename); /* Extract basename of the file */ pc = strrchr(filename, '/'); if (pc == NULL) pc = filename; else pc++; sprintf(title, "Timidity %s - %s", timidity_version, pc); gtk_window_set_title(GTK_WINDOW(window), title); /* Clear the text area. */ #ifdef HAVE_GTK_2 textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); gtk_text_buffer_get_start_iter(textbuf, &start_iter); gtk_text_buffer_get_end_iter(textbuf, &end_iter); iter = start_iter; #else gtk_text_freeze(GTK_TEXT(text)); gtk_text_set_point(GTK_TEXT(text), 0); gtk_text_forward_delete(GTK_TEXT(text), gtk_text_get_length(GTK_TEXT(text))); gtk_text_thaw(GTK_TEXT(text)); #endif } break; case FILE_LIST_MESSAGE: { gchar filename[255], *fnames[2]; gint i, number_of_files; /* reset the playing list : play from the start */ file_number_to_play = -1; gtk_pipe_int_read(&number_of_files); for (i = 0; i < number_of_files; i++) { gtk_pipe_string_read(filename); fnames[0] = filename; fnames[1] = NULL; gtk_clist_append(GTK_CLIST(clist), fnames); } gtk_clist_columns_autosize(GTK_CLIST(clist)); } break; case NEXT_FILE_MESSAGE: case PREV_FILE_MESSAGE: case TUNE_END_MESSAGE: { int nbfile; /* When a file ends, launch next if auto_next toggle */ if ( (message==TUNE_END_MESSAGE) && !GTK_CHECK_MENU_ITEM(auto_next)->active ) return; /* Total number of file to play in the list */ nbfile = GTK_CLIST(clist)->rows; if (message == PREV_FILE_MESSAGE) file_number_to_play--; else file_number_to_play++; /* Do nothing if requested file is before first one */ if (file_number_to_play < 0) { file_number_to_play = 0; return; } /* Stop after playing the last file */ if (file_number_to_play >= nbfile) { file_number_to_play = nbfile - 1; return; } if(gtk_clist_row_is_visible(GTK_CLIST(clist), file_number_to_play) != GTK_VISIBILITY_FULL) { gtk_clist_moveto(GTK_CLIST(clist), file_number_to_play, -1, 1.0, 0.0); } gtk_clist_select_row(GTK_CLIST(clist), file_number_to_play, 0); } break; case CURTIME_MESSAGE: { int seconds, minutes; int nbvoice; char local_string[20]; gtk_pipe_int_read(&seconds); gtk_pipe_int_read(&nbvoice); if( is_quitting ) return; minutes=seconds/60; sprintf(local_string,"%2d:%02d", minutes, (int)(seconds % 60)); gtk_label_set(GTK_LABEL(cnt_lbl), local_string); /* Readjust the time scale if not dragging the scale */ if( !locating && (seconds <= max_sec)) { GtkAdjustment *adj; adj = gtk_range_get_adjustment(GTK_RANGE(locator)); my_adjustment_set_value(adj, (gfloat)seconds); } } break; case NOTE_MESSAGE: { int channel; int note; gtk_pipe_int_read(&channel); gtk_pipe_int_read(¬e); g_warning("NOTE chn%i %i", channel, note); } break; case PROGRAM_MESSAGE: { int channel; int pgm; gtk_pipe_int_read(&channel); gtk_pipe_int_read(&pgm); g_warning("NOTE chn%i %i", channel, pgm); } break; case VOLUME_MESSAGE: { int channel; int volume; gtk_pipe_int_read(&channel); gtk_pipe_int_read(&volume); g_warning("VOLUME= chn%i %i", channel, volume); } break; case EXPRESSION_MESSAGE: { int channel; int express; gtk_pipe_int_read(&channel); gtk_pipe_int_read(&express); g_warning("EXPRESSION= chn%i %i", channel, express); } break; case PANNING_MESSAGE: { int channel; int pan; gtk_pipe_int_read(&channel); gtk_pipe_int_read(&pan); g_warning("PANNING= chn%i %i", channel, pan); } break; case SUSTAIN_MESSAGE: { int channel; int sust; gtk_pipe_int_read(&channel); gtk_pipe_int_read(&sust); g_warning("SUSTAIN= chn%i %i", channel, sust); } break; case PITCH_MESSAGE: { int channel; int bend; gtk_pipe_int_read(&channel); gtk_pipe_int_read(&bend); g_warning("PITCH BEND= chn%i %i", channel, bend); } break; case RESET_MESSAGE: g_warning("RESET_MESSAGE"); break; case CLOSE_MESSAGE: gtk_exit(0); break; case CMSG_MESSAGE: { int type; char message[1000]; #ifdef HAVE_GTK_2 gchar *message_u8; #endif gtk_pipe_int_read(&type); gtk_pipe_string_read(message); #ifdef HAVE_GTK_2 message_u8 = g_locale_to_utf8( message, -1, NULL, NULL, NULL ); gtk_text_buffer_get_bounds(textbuf, &start_iter, &end_iter); gtk_text_buffer_insert(textbuf, &end_iter, message_u8, -1); gtk_text_buffer_insert(textbuf, &end_iter, "\n", 1); gtk_text_buffer_get_bounds(textbuf, &start_iter, &end_iter); mark = gtk_text_buffer_create_mark(textbuf, NULL, &end_iter, 1); gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(text), mark, 0.0, 0, 0.0, 1.0); gtk_text_buffer_delete_mark(textbuf, mark); g_free( message_u8 ); #else gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, message, -1); gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, "\n", 1); #endif } break; case LYRIC_MESSAGE: { char message[1000]; #ifdef HAVE_GTK_2 gchar *message_u8; #endif gtk_pipe_string_read(message); #ifdef HAVE_GTK_2 message_u8 = g_locale_to_utf8( message, -1, NULL, NULL, NULL ); gtk_text_buffer_get_bounds(textbuf, &start_iter, &end_iter); // mod JN iter -> end_iter gtk_text_buffer_insert(textbuf, &end_iter, message_u8, -1); gtk_text_buffer_get_bounds(textbuf, &start_iter, &end_iter); mark = gtk_text_buffer_create_mark(textbuf, NULL, &end_iter, 1); gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(text), mark, 0.0, 0, 0.0, 1.0); gtk_text_buffer_delete_mark(textbuf, mark); #else gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, message, -1); #endif } break; default: g_warning("UNKNOWN Gtk+ MESSAGE %i", message); } }