[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

gtk 2.4.3 on win32: menu icon problem



I posted something on this back on May 21: the problem then "went away" when I ensured my gtk-win32 runtime was consistent. Now it seems to be back again after I updated to Tor's current runtime (glib-2.4.2 plus gtk-2.4.3).

The problem: accessing a menu that contains a stock icon (e.g. the file open icon) causes a crash on Windows when the GTK program is run in certain LANG environments. I have tested this under XP, running a trivial test program with one little menu item. It works fine in English, and also if I 'set LANG=it' or 'set LANG=de'.

But if I 'set LANG=es' or 'set LANG=fr' the test app crashes when I touch the menu.

I have double-checked that I'm using the exact intl and iconv dlls referenced on Tor's page

http://www.gimp.org/~tml/gimp/win32/downloads.html

and also that the program was linked against the corresponding .libs and using the corresponding headers. The crash happens both when I 'set LANG' in an XP console, and when I set the language (to Spanish or French) using the Windows Control Panel. It happens without any actual translations being present (no .po files for those languages).

I'm attaching a couple of small files: C source for my test program and a stack trace for a crash.

--
Allin Cottrell
Department of Economics
Wake Forest University, NC
/* In English, runs fine.  
   In Spanish, crashes when the menu is accessed.
*/

#include "libintl.h"
#include "locale.h"

#define _(String) gettext (String)
#define N_(String) String

#include <gtk/gtk.h>

#define PACKAGE   "test"
#define LOCALEDIR "."

void dummy_call (gpointer p, guint i, GtkWidget *w)
{
    g_print("Got menu item\n");
}

GtkItemFactoryEntry test_items[] = {
    { N_("/_File"), NULL, NULL, 0, "<Branch>" },
    { N_("/File/_Open data"), NULL, dummy_call, 0, 
      "<StockItem>", GTK_STOCK_OPEN },
};

void app_exit (GtkWidget *w, gpointer p)
{
    gtk_main_quit();
}

gchar *menu_translate (const gchar *path, gpointer p)
{
    return (_(path));
}

GtkItemFactory *create_menu (void)
{
    GtkItemFactory *ifac;
    int nitems = sizeof test_items / sizeof test_items[0];

    ifac = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", NULL);
    gtk_item_factory_set_translate_func(ifac, menu_translate, NULL, NULL);
    gtk_item_factory_create_items(ifac, nitems, test_items, NULL);

    return ifac;
}

void nls_init (void)
{
    setlocale (LC_ALL, "");
    bindtextdomain (PACKAGE, LOCALEDIR);
    textdomain (PACKAGE);
    bind_textdomain_codeset (PACKAGE, "UTF-8");
}

int main (int argc, char *argv[])
{
    GtkWidget *w, *mbar;
    GtkItemFactory *ifac;

    nls_init();

    gtk_init(&argc, &argv);

    w = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    g_signal_connect(G_OBJECT(w), "destroy",
		     G_CALLBACK(app_exit), NULL);
    
    ifac = create_menu();
    mbar = gtk_item_factory_get_widget(ifac, "<main>");
    gtk_widget_show(mbar);

    gtk_container_add(GTK_CONTAINER(w), mbar);
    gtk_widget_show(w);

    gtk_main();

    return 0;
}
menu_trans.exe caused an Access Violation at location 003d36bd in module intl.dll Reading from location 0000ad20.



Registers:

eax=0000ad20 ebx=00ff0000 ecx=00000020 edx=00000004 esi=010725c0 edi=000015ff

eip=003d36bd esp=0022e200 ebp=0022e220 iopl=0         nv up ei pl nz na pe nc

cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000202



Call stack:

003D36BD  intl.dll:003D36BD  libintl_textdomain

003D34C1  intl.dll:003D34C1  libintl_textdomain

003D12DF  intl.dll:003D12DF  libintl_dcgettext

1000C975  libglib-2.0-0.dll:1000C975  g_dir_open

0072526D  libgtk-win32-2.0-0.dll:0072526D  gtk_icon_info_get_display_name

00722BA9  libgtk-win32-2.0-0.dll:00722BA9  gtk_icon_theme_lookup_icon

00722F86  libgtk-win32-2.0-0.dll:00722F86  gtk_icon_theme_load_icon

007211DD  libgtk-win32-2.0-0.dll:007211DD  gtk_icon_source_get_size

00720C7D  libgtk-win32-2.0-0.dll:00720C7D  gtk_icon_source_get_size

0071E74A  libgtk-win32-2.0-0.dll:0071E74A  gtk_icon_set_render_icon

008CCA3E  libgtk-win32-2.0-0.dll:008CCA3E  gtk_widget_render_icon

0072A3A1  libgtk-win32-2.0-0.dll:0072A3A1  gtk_image_get

0072B109  libgtk-win32-2.0-0.dll:0072B109  gtk_image_new

005C9F23  libgobject-2.0-0.dll:005C9F23  g_cclosure_marshal_VOID__BOXED

005B4529  libgobject-2.0-0.dll:005B4529  g_cclosure_new_swap

005B3D7C  libgobject-2.0-0.dll:005B3D7C  g_closure_invoke

005C8951  libgobject-2.0-0.dll:005C8951  g_signal_emit_by_name

005C81BA  libgobject-2.0-0.dll:005C81BA  g_signal_emit_valist

005C8583  libgobject-2.0-0.dll:005C8583  g_signal_emit_by_name

007C9329  libgtk-win32-2.0-0.dll:007C9329  gtk_size_group_new

0072C4FF  libgtk-win32-2.0-0.dll:0072C4FF  gtk_image_menu_item_new_with_mnemonic

005C9F23  libgobject-2.0-0.dll:005C9F23  g_cclosure_marshal_VOID__BOXED

005B4529  libgobject-2.0-0.dll:005B4529  g_cclosure_new_swap

005B3D7C  libgobject-2.0-0.dll:005B3D7C  g_closure_invoke

005C8951  libgobject-2.0-0.dll:005C8951  g_signal_emit_by_name

005C81BA  libgobject-2.0-0.dll:005C81BA  g_signal_emit_valist

005C8583  libgobject-2.0-0.dll:005C8583  g_signal_emit_by_name

007C9329  libgtk-win32-2.0-0.dll:007C9329  gtk_size_group_new

00768465  libgtk-win32-2.0-0.dll:00768465  gtk_menu_reorder_child

005C9F23  libgobject-2.0-0.dll:005C9F23  g_cclosure_marshal_VOID__BOXED

005B4529  libgobject-2.0-0.dll:005B4529  g_cclosure_new_swap

005B3D7C  libgobject-2.0-0.dll:005B3D7C  g_closure_invoke

005C8951  libgobject-2.0-0.dll:005C8951  g_signal_emit_by_name

005C81BA  libgobject-2.0-0.dll:005C81BA  g_signal_emit_valist

005C8583  libgobject-2.0-0.dll:005C8583  g_signal_emit_by_name

007C9329  libgtk-win32-2.0-0.dll:007C9329  gtk_size_group_new

0076AF84  libgtk-win32-2.0-0.dll:0076AF84  gtk_menu_reorder_child

00765B8B  libgtk-win32-2.0-0.dll:00765B8B  gtk_menu_popup

0077334D  libgtk-win32-2.0-0.dll:0077334D  gtk_menu_item_toggle_size_allocate

00772A7E  libgtk-win32-2.0-0.dll:00772A7E  gtk_menu_item_toggle_size_allocate

005C9389  libgobject-2.0-0.dll:005C9389  g_cclosure_marshal_VOID__VOID

005B4529  libgobject-2.0-0.dll:005B4529  g_cclosure_new_swap

005B3D7C  libgobject-2.0-0.dll:005B3D7C  g_closure_invoke

005C8951  libgobject-2.0-0.dll:005C8951  g_signal_emit_by_name

005C81BA  libgobject-2.0-0.dll:005C81BA  g_signal_emit_valist

005C8456  libgobject-2.0-0.dll:005C8456  g_signal_emit

00736853  libgtk-win32-2.0-0.dll:00736853  gtk_item_select

00777E3B  libgtk-win32-2.0-0.dll:00777E3B  gtk_menu_shell_prepend

00776E88  libgtk-win32-2.0-0.dll:00776E88  gtk_menu_shell_select_item

00775F00  libgtk-win32-2.0-0.dll:00775F00  gtk_menu_shell_deactivate

0075F28A  libgtk-win32-2.0-0.dll:0075F28A  gtk_marshal_VOID__UINT_STRING

005B4529  libgobject-2.0-0.dll:005B4529  g_cclosure_new_swap

005B3D7C  libgobject-2.0-0.dll:005B3D7C  g_closure_invoke

005C8B5E  libgobject-2.0-0.dll:005C8B5E  g_signal_emit_by_name

005C7FAC  libgobject-2.0-0.dll:005C7FAC  g_signal_emit_valist

005C8456  libgobject-2.0-0.dll:005C8456  g_signal_emit

008C7FCB  libgtk-win32-2.0-0.dll:008C7FCB  gtk_widget_send_expose

0075B43C  libgtk-win32-2.0-0.dll:0075B43C  gtk_propagate_event

0075AA36  libgtk-win32-2.0-0.dll:0075AA36  gtk_main_do_event

009C1B7E  libgdk-win32-2.0-0.dll:009C1B7E  gdk_net_wm_supports

1001DCC3  libglib-2.0-0.dll:1001DCC3  g_idle_remove_by_data

1001E48B  libglib-2.0-0.dll:1001E48B  g_idle_remove_by_data

1001A5E1  libglib-2.0-0.dll:1001A5E1  g_main_loop_run

0075A660  libgtk-win32-2.0-0.dll:0075A660  gtk_main

004014DC  menu_trans.exe:004014DC  main  menu_trans.c:80

int main(

	int argc = 1,

	char * * argv = &0x00a62811

)

0040116A  menu_trans.exe:0040116A

00401038  menu_trans.exe:00401038

77E814C7  kernel32.dll:77E814C7  GetCurrentDirectoryW



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]