From 27a53acf7190d20985a927f19fb5d0e90ad25e60 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Wed, 20 Jul 2005 14:06:53 +0000 Subject: Fixes - Added 'rcc-gtk-config' program to examples - Fixed problems in autoconf configuration - Fixed bug in rccLocaleGetCharset - Fixed visibility of all items in gtkui --- configure.in | 36 +++++++++------------ examples/Makefile.am | 10 ++++-- examples/example.c | 13 ++++---- examples/rcc-gtk-config.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++ librcc.spec.in | 10 ++++-- src/librcc.h | 2 ++ src/rcclocale.c | 2 +- src/rccxml.c | 10 +++--- ui/gtk.c | 20 ++++++++++-- 9 files changed, 141 insertions(+), 41 deletions(-) create mode 100644 examples/rcc-gtk-config.c diff --git a/configure.in b/configure.in index 5c0fb24..0699682 100644 --- a/configure.in +++ b/configure.in @@ -92,38 +92,30 @@ AC_CHECK_HEADER(dlfcn.h, [AC_CHECK_LIB(dl, dlopen, [ HAVE_DLOPEN=no ])]) -if test $enable_force_dynamic_engines = yes; then - RCD_LIBS="" - RCD_INCLUDES="" - HAVE_RCD=no - ENCA_LIBS="" - ENCA_INCLUDES="" - HAVE_ENCA=no -else +RCD_LIBS="" +RCD_INCLUDES="" +HAVE_RCD=no +ENCA_LIBS="" +ENCA_INCLUDES="" +HAVE_ENCA=no + +if test "x$enable_force_dynamic_engines" != "xyes"; then AC_CHECK_HEADER(librcd.h, [AC_CHECK_LIB(rcd, rcdGetRussianCharset, [ AC_DEFINE(HAVE_RCD,1,[Defines if libRCD is available]) RCD_LIBS="-lrcd" RCD_INCLUDES="" HAVE_RCD=yes -],[ - RCD_LIBS="" - RCD_INCLUDES="" - HAVE_RCD=no ])]) AC_CHECK_HEADER(enca.h, [AC_CHECK_LIB(enca, enca_analyse, [ AC_DEFINE(HAVE_ENCA,1,[Defines if enca is available]) ENCA_LIBS="-lenca" ENCA_INCLUDES="" HAVE_ENCA=yes -],[ - ENCA_LIBS="" - ENCA_INCLUDES="" - HAVE_ENCA=no ])]) fi -AM_CONDITIONAL(HAVE_RCD, [ test $HAVE_RCD = yes ]) -AM_CONDITIONAL(HAVE_ENCA, [ test $HAVE_ENCA = yes ]) +AM_CONDITIONAL(HAVE_RCD, [ test "x$HAVE_RCD" = "xyes" ]) +AM_CONDITIONAL(HAVE_ENCA, [ test "x$HAVE_ENCA" = "xyes" ]) AC_SUBST(RCD_LIBS) AC_SUBST(RCD_INCLUDES) @@ -131,17 +123,17 @@ AC_SUBST(ENCA_LIBS) AC_SUBST(ENCA_INCLUDES) USE_DLOPEN=no -if test $HAVE_DLOPEN = yes; then - if test $HAVE_ENCA = no; then +if test "x$HAVE_DLOPEN" = "xyes"; then + if test "x$HAVE_ENCA" = "xno"; then HAVE_ENCA=dynamic USE_DLOPEN=yes fi - if test $HAVE_RCD = no; then + if test "x$HAVE_RCD" = "xno"; then HAVE_RCD=dynamic USE_DLOPEN=yes fi - if test $USE_DLOPEN = no; then + if test "x$USE_DLOPEN" = "xno"; then DLOPEN_LIBS="" DLOPEN_INCLUDES="" fi diff --git a/examples/Makefile.am b/examples/Makefile.am index abf3ebb..15df761 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -2,9 +2,15 @@ bin_PROGRAMS= example example_SOURCES= example.c example_LDADD= ../src/librcc.la -EXTRA_DIST= input-russian.txt rcc.xml rcc-example.xml +if HAVE_GTK +bin_PROGRAMS+= rcc-gtk-config +rcc_gtk_config_SOURCES = rcc-gtk-config.c +rcc_gtk_config_LDADD=../ui/librccgtk.la @GTK_LIBS@ +endif + +EXTRA_DIST= input-russian.txt rcc.xml rcc-example.xml mpg123-rcc.patch test-russian: example cat input-russian.txt | ./example -INCLUDES = -I../src -I../ui +INCLUDES = -I../src -I../ui @GTK_INCLUDES@ diff --git a/examples/example.c b/examples/example.c index 820bae0..43fc853 100644 --- a/examples/example.c +++ b/examples/example.c @@ -5,22 +5,23 @@ #include -static rcc_class classes[] = { - { "input", RCC_CLASS_STANDARD, NULL, NULL, "Input Encoding", 0 }, - { "output", RCC_CLASS_STANDARD, "LC_CTYPE", NULL, "Output Encoding", 0 }, - { NULL } -}; int main() { const char *language; char buf[255]; char *recoded; + + rcc_class classes[] = { + { "input", RCC_CLASS_STANDARD, NULL, NULL, "Input Encoding", 0 }, + { "output", RCC_CLASS_STANDARD, "LC_CTYPE", NULL, "Output Encoding", 0 }, + { NULL } + }; setlocale(LC_ALL, ""); rccInit(); rccInitDefaultContext(NULL, 0, 0, classes, 0); - + language = rccGetCurrentLanguageName(NULL); if (language) printf("Current Language: %s\n\n", language); else printf("Unable Detect Language\n\n"); diff --git a/examples/rcc-gtk-config.c b/examples/rcc-gtk-config.c new file mode 100644 index 0000000..eae029e --- /dev/null +++ b/examples/rcc-gtk-config.c @@ -0,0 +1,79 @@ +#include + +#include +#include + +static rcc_class classes[] = { + { "id3", RCC_CLASS_STANDARD, NULL, NULL, "ID3 Encoding", 0 }, + { "pl", RCC_CLASS_STANDARD, "id3", NULL, "PlayList Title Encoding", 0}, + { "plfs", RCC_CLASS_STANDARD, "pl", NULL, "PlayList File Encoding", 0 }, + { "fs", RCC_CLASS_FS, "LC_CTYPE", NULL, "FileSystem Encoding", 0 }, + { "oem", RCC_CLASS_STANDARD, NULL, NULL, "Zip OEM Encoding", 0 }, + { "iso", RCC_CLASS_STANDARD, NULL, NULL, "Zip ISO Encoding", 0 }, + { "out", RCC_CLASS_STANDARD, "LC_CTYPE", NULL, NULL, 0 }, + { NULL } +}; + +static char *config; +static rcc_context ctx; +static rcc_ui_context uictx; + +static void apply_cb(GtkWidget * w, gpointer data) +{ + rccUiUpdate(uictx); + rccSave(ctx, config); +} + + +int main (int argc, char *argv[]) +{ + GtkWidget *window1; + GtkWidget *save, *close, *hbox; + GtkWidget *box; + + + if (argc<1) config = argv[0]; + else config = argv[1]; + + gtk_set_locale (); + gtk_init (&argc, &argv); + + rccInit(); + rccUiInit(); + ctx = rccCreateContext(NULL, 0, 0, classes, 0); + rccLoad(ctx, config); + uictx = rccUiCreateContext(ctx); + + window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_policy(GTK_WINDOW (window1), FALSE, FALSE, FALSE); + gtk_window_set_title (GTK_WINDOW (window1), "LibRCC Config"); + gtk_widget_show(window1); + + box = rccUiGetPage(uictx, NULL); + gtk_widget_show (box); + gtk_container_add (GTK_CONTAINER (window1), box); + + hbox = gtk_hbox_new (TRUE, 0); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (box), hbox, FALSE, FALSE, 0); + + close = gtk_button_new_with_label("Close"); + gtk_widget_show (close); + gtk_signal_connect (GTK_OBJECT (window1), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); + gtk_signal_connect (GTK_OBJECT (close), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); + gtk_box_pack_start (GTK_BOX (hbox), close, FALSE, FALSE, 0); + + save = gtk_button_new_with_label("Save"); + gtk_widget_show (save); + gtk_signal_connect(GTK_OBJECT(save), "clicked", GTK_SIGNAL_FUNC(apply_cb), NULL); + gtk_box_pack_start (GTK_BOX (hbox), save, FALSE, FALSE, 0); + + gtk_main (); + + rccUiFreeContext(uictx); + rccFreeContext(ctx); + rccUiFree(); + rccFree(); + + return 0; +} diff --git a/librcc.spec.in b/librcc.spec.in index ec3025f..768d6c9 100644 --- a/librcc.spec.in +++ b/librcc.spec.in @@ -6,7 +6,7 @@ %define release 0.%{buildname}.%{realrelease}csa %else %define buildname @VERSION@ -%define release %{realrelease} +%define release %{realrelease}csa %endif @@ -52,12 +52,16 @@ is part of rusxmms patch. %install rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/etc +mkdir -p $RPM_BUILD_ROOT/etc/rcc mkdir -p $RPM_BUILD_ROOT/%{prefix}/lib/rcc/engines/ +mkdir -p $RPM_BUILD_ROOT/%{prefix}/bin make install DESTDIR=$RPM_BUILD_ROOT rm -f $RPM_BUILD_ROOT%{prefix}/lib/*.la rm -f $RPM_BUILD_ROOT%{prefix}/lib/rcc/engines/*.a rm -f $RPM_BUILD_ROOT%{prefix}/lib/rcc/engines/*.la +make -C examples +install -m 755 examples/rcc-gtk-config $RPM_BUILD_ROOT/%{prefix}/bin + install -m 644 examples/rcc.xml $RPM_BUILD_ROOT/etc @@ -72,9 +76,11 @@ rm -rf $RPM_BUILD_ROOT %defattr(-, root, root) %doc AUTHORS ChangeLog NEWS README COPYING %doc examples/rcc-example.xml +%dir /etc/rcc /etc/rcc.xml %{prefix}/lib/lib*.so.* %{prefix}/lib/rcc/ +%{prefix}/bin/rcc-gtk-config %files devel %defattr(-, root, root) diff --git a/src/librcc.h b/src/librcc.h index a72274a..6b28813 100644 --- a/src/librcc.h +++ b/src/librcc.h @@ -1,6 +1,8 @@ #ifndef _LIBRCC_H #define _LIBRCC_H +#include + /******************************************************************************* ***************************** Global Defines *********************************** *******************************************************************************/ diff --git a/src/rcclocale.c b/src/rcclocale.c index c0b4e63..99d2b8f 100644 --- a/src/rcclocale.c +++ b/src/rcclocale.c @@ -108,7 +108,7 @@ int rccLocaleGetCharset(char *result, const char *lv, unsigned int n) { for (i=0;((l[i])&&(l[i]!='@'));i++); if (i>=n) return -1; - strncpy(result,l,i); + strncpy(result,l+1,i-1); result[i]=0; return 0; diff --git a/src/rccxml.c b/src/rccxml.c index 65a9c4d..143f930 100644 --- a/src/rccxml.c +++ b/src/rccxml.c @@ -281,12 +281,12 @@ int rccSave(rcc_context ctx, const char *name) { if (!doc) { doc = xmlNewDoc("1.0"); if (!doc) goto clear; + pnode = NULL; + } else { + xpathctx = xmlXPathNewContext(doc); + pnode = rccNodeFind(xpathctx, XPATH_SELECTED); } - xpathctx = xmlXPathNewContext(doc); - if (!xpathctx) goto clear; - - pnode = rccNodeFind(xpathctx, XPATH_SELECTED); if (pnode) { lnode = rccNodeFind(xpathctx, XPATH_SELECTED_LANGUAGE); onode = rccNodeFind(xpathctx, XPATH_SELECTED_OPTIONS); @@ -483,8 +483,6 @@ int rccLoad(rcc_context ctx, const char *name) { if ((!doc)&&(!sysdoc)) goto clear; - - node = rccNodeFind(xpathctx, XPATH_SELECTED_LANGUAGE); if (!node) node = rccNodeFind(sysxpathctx, XPATH_SELECTED_LANGUAGE); if (node) { diff --git a/ui/gtk.c b/ui/gtk.c index 749405e..cf69a87 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -100,11 +100,12 @@ int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) { if (!languages) return -1; list = gtk_menu_new(); + gtk_widget_show(list); for (i=0; languages[i]; i++) { item = gtk_menu_item_new_with_label(rccUiGetLanguageName(uictx, languages[i]->sn)); + gtk_widget_show(item); gtk_signal_connect(GTK_OBJECT(item), "activate", GTK_SIGNAL_FUNC(rccGtkMenuLanguageCB), ctx); gtk_menu_append(GTK_MENU(list), item); - gtk_widget_show(item); } language_id = rccGetSelectedLanguage(rccctx); @@ -113,6 +114,7 @@ int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) { if (ctx->widget) menu = ctx->widget; else { menu = gtk_option_menu_new(); + gtk_widget_show(menu); ctx->widget = menu; } gtk_option_menu_remove_menu(GTK_OPTION_MENU(menu)); @@ -126,6 +128,7 @@ int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) { if (!charsets) return -1; list = gtk_menu_new(); + gtk_widget_show(list); for (i=0;charsets[i];i++) { item = gtk_menu_item_new_with_label(rccUiGetCharsetName(uictx,charsets[i])); gtk_widget_show(item); @@ -135,6 +138,7 @@ int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) { if (ctx->widget) menu = ctx->widget; else { menu = gtk_option_menu_new(); + gtk_widget_show(menu); ctx->widget = menu; } @@ -153,6 +157,7 @@ int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) { if (!engines) return -1; list = gtk_menu_new(); + gtk_widget_show(list); for (i=0;engines[i];i++) { item = gtk_menu_item_new_with_label(rccUiGetEngineName(uictx,engines[i]->title)); gtk_widget_show(item); @@ -162,6 +167,7 @@ int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) { if (ctx->widget) menu = ctx->widget; else { menu = gtk_option_menu_new(); + gtk_widget_show(menu); ctx->widget = menu; } @@ -177,6 +183,7 @@ int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) { case RCC_OPTION_RANGE_TYPE_BOOLEAN: if (!ctx->widget) { item = gtk_check_button_new_with_label(rccUiGetOptionName(uictx, rccUiMenuGetOption(ctx))); + gtk_widget_show(item); ctx->widget = item; } gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ctx->widget), rccGetOption(rccctx, rccUiMenuGetOption(ctx))); @@ -189,6 +196,7 @@ int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) { if (!optnames) return -1; list = gtk_menu_new(); + gtk_widget_show(list); for (i=0;optnames[i];i++) { item = gtk_menu_item_new_with_label(optnames[i]); gtk_widget_show(item); @@ -196,6 +204,7 @@ int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) { } menu = gtk_option_menu_new(); + gtk_widget_show(menu); ctx->widget = menu; gtk_option_menu_remove_menu(GTK_OPTION_MENU(menu)); @@ -218,9 +227,11 @@ int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) { rcc_ui_box rccUiBoxCreate(rcc_ui_menu_context ctx, const char *title) { GtkWidget *hbox, *label; hbox = gtk_hbox_new(FALSE, BOX_SPACING); + gtk_widget_show(hbox); gtk_container_border_width(GTK_CONTAINER(hbox), BOX_BORDER); if ((ctx->type != RCC_UI_MENU_OPTION)||(rccUiMenuGetRangeType(ctx) != RCC_OPTION_RANGE_TYPE_BOOLEAN)) { label = gtk_label_new(title); + gtk_widget_show(label); gtk_widget_set_usize(label, TITLE_WIDTH, TITLE_HEIGHT); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); } @@ -234,9 +245,11 @@ rcc_ui_frame rccUiFrameCreate(rcc_ui_frame_context ctx, const char *title) { if (!ctx) return NULL; frame = gtk_frame_new(title?title:""); + gtk_widget_show(frame); gtk_container_border_width(GTK_CONTAINER(frame), FRAME_BORDER); box = gtk_vbox_new(FALSE, FRAME_SPACING); + gtk_widget_show(box); gtk_container_add(GTK_CONTAINER(frame), box); return (rcc_ui_frame)frame; @@ -257,7 +270,10 @@ int rccUiFrameAdd(rcc_ui_frame_context ctx, rcc_ui_box box) { } rcc_ui_page rccUiPageCreate(rcc_ui_context ctx, const char *title) { - return (rcc_ui_page)gtk_vbox_new(FALSE, PAGE_SPACING); + GtkWidget *vbox; + vbox = gtk_vbox_new(FALSE, PAGE_SPACING); + gtk_widget_show(vbox); + return (rcc_ui_page)vbox; } int rccUiPageAdd(rcc_ui_page page, rcc_ui_frame frame) { -- cgit v1.2.3