Re: gtk2 multithreaded programming win32 issue
- From: "Kuang-Chun Cheng" <kcc1967 gmail com>
- To: "Diego Jacobi" <jacobidiego gmail com>
- Cc: gtk-list gnome org
- Subject: Re: gtk2 multithreaded programming win32 issue
- Date: Sat, 30 Aug 2008 23:30:52 +0800
On Sat, Aug 30, 2008 at 10:55 PM, Diego Jacobi <jacobidiego gmail com> wrote:
> I cant see that link.
Try this one, it's the same one I quote in my last email
http://mail.gnome.org/archives/gtk-app-devel-list/2008-July/msg00077.html
>
> Your mails was very informative, can you please explain what your last
> problem is about?
>
> Also, why do you call gtk_widget_realize(win);
> Doesnt show_all realize all the widgets?
>
Well, I don't know neither :-) But it's not related to my question ...
With it or not, the sample still show the same problem. The the
link provides the solution.
KC
>
>
> 2008/8/30 Kuang-Chun Cheng <kcc1967 gmail com>:
>> This message explains my question and fix my problem :-)
>>
>> http://www.mail-archive.com/gtk-app-devel-list gnome org/msg11790.html
>>
>> Since I did not found this behavior on Linux, so I think the Win32 port of Gtk+
>> may still has this "bug".
>>
>>
>> KC
>>
>>
>> On Sat, Aug 30, 2008 at 2:08 PM, Kuang-Chun Cheng <kcc1967 gmail com> wrote:
>>>>> 2008/8/28 Tor Lillqvist <tml iki fi>:
>>>>>> Have the idle callback function return FALSE... Schedule it again with
>>>>>> g_idle_add() whenever you have something new that needs to be done in
>>>>>> the GUI thread.
>>>
>>> First, thanks for you guys here, I had successfully porting my Gtk2 app. from
>>> Linux to Win32 :-) However, I found a behavior of Linux and Win32 is
>>> quite different ...
>>> Let me explain what I'm doing:
>>>
>>> hello button ---> disable itself and create a thread to run non-gui job.
>>> ---> after non-gui job done, use g_add_idle() to enable hello
>>> button again.
>>>
>>> What's odd is when I click on the button, it works OK at the first time.
>>> But when I click on it again ... it stop receive my mouse event !!!!
>>>
>>> If I move my mouse away from the button then move it back and click on it again,
>>> it works again.
>>>
>>> I did not see this strange behavior under Linux. I can keep my mouse on top of
>>> the button, just click on it again and again ... all clicks work perfectly.
>>>
>>> The source code is here (hopefully, not too long), could someone tell me what's
>>> wrong in my code ??
>>> My Win32 platform is WinXP/SP3, and I'm using gtk+-bundle-2.12.11.zip which I
>>> downloaded from http://www.gtk.org/download-windows.html.
>>>
>>> Thanks a lot
>>> KC
>>>
>>> ------------------------------------------------------------------
>>> /* button2.c */
>>>
>>> #include <stdlib.h>
>>> #include <gtk/gtk.h>
>>>
>>> gpointer non_gui_worker(gpointer data);
>>> gboolean non_gui_idle(gpointer data);
>>> void gui_cb_clicked(GtkWidget *widget, gpointer data);
>>>
>>> gboolean non_gui_idle(gpointer data)
>>> {
>>> GtkWidget *widget = data;
>>> gtk_widget_set_sensitive(widget, TRUE);
>>> return FALSE;
>>> }
>>>
>>> gpointer non_gui_worker(gpointer data)
>>> {
>>> printf("DO SOMETHING IN NON-GUI THREAD ...\n");
>>> g_idle_add(non_gui_idle, data);
>>> return NULL;
>>> }
>>>
>>> void gui_cb_clicked(GtkWidget *widget, gpointer data)
>>> {
>>> gtk_widget_set_sensitive(widget, FALSE);
>>> g_thread_create(non_gui_worker, widget, FALSE, NULL);
>>> }
>>>
>>> int main (int argc, char *argv[])
>>> {
>>> GtkWidget *win = NULL;
>>> GtkWidget *button = NULL;
>>>
>>> g_thread_init(NULL);
>>> gdk_threads_init();
>>> gtk_init(&argc, &argv);
>>>
>>> gdk_threads_enter();
>>> win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
>>> gtk_container_set_border_width(GTK_CONTAINER(win), 10);
>>>
>>> g_signal_connect(G_OBJECT(win), "destroy",
>>> G_CALLBACK(gtk_main_quit), NULL);
>>>
>>> gtk_widget_realize(win);
>>> button = gtk_button_new_with_label("Hello Gtk+-2.0");
>>>
>>> g_signal_connect(G_OBJECT(button), "clicked",
>>> G_CALLBACK(gui_cb_clicked), (gpointer) "Data Passed");
>>>
>>> gtk_container_add(GTK_CONTAINER(win), button);
>>>
>>> gtk_widget_show_all(win);
>>> gtk_main();
>>> gdk_threads_leave();
>>> exit(0);
>>> }
>>>
>> _______________________________________________
>> gtk-list mailing list
>> gtk-list gnome org
>> http://mail.gnome.org/mailman/listinfo/gtk-list
>>
> _______________________________________________
> gtk-list mailing list
> gtk-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtk-list
>
[
Date Prev][Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]