Re: Delayed events



Hi.

I've modified your example a bit to give you a kick start with this problem.

== test.c ==
#include <gtk/gtk.h>
#include <stdio.h>

void on_combobox1_changed (GtkComboBox *widget, GtkWidget *window)
{
        GtkTreeIter   iter;
        GtkTreeModel *model;
        gchar        *color;
        GdkColor      gcolor;

        gtk_combo_box_get_active_iter( widget, &iter );
        model = gtk_combo_box_get_model( widget );
        gtk_tree_model_get( model, &iter, 0, &color, -1 );
        gdk_color_parse( color, &gcolor );
        g_free( color );
        gtk_widget_modify_bg( window, GTK_STATE_NORMAL, &gcolor );
}

int
main (int argc, char *argv[])
{
  GtkBuilder      *builder;
  GtkWidget       *window;

  gtk_init (&argc, &argv);

  builder = gtk_builder_new ();
  gtk_builder_add_from_file (builder, "test.xml", NULL);
  window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
  gtk_builder_connect_signals (builder, window);

  g_object_unref (G_OBJECT (builder));
  gtk_widget_show (window);

  gtk_main ();

  return 0;
}
== end test.c ==

== test.xml ==
<?xml version="1.0"?>
<!--Generated with glade3 3.4.5 on Thu Nov 27 00:27:12 2008 -->
<interface>
  <object class="GtkListStore" id="model1">
    <columns>
      <column type="gchararray"/>
    </columns>
    <data>
      <row>
        <col id="0">red</col>
      </row>
      <row>
        <col id="0">blue</col>
      </row>
      <row>
        <col id="0">green</col>
      </row>
    </data>
  </object>
  <object class="GtkWindow" id="window1">
    <signal handler="gtk_main_quit" name="destroy"/>
    <child>
      <object class="GtkVBox" id="vbox1">
        <property name="visible">True</property>
        <child>
          <object class="GtkComboBox" id="combobox1">
            <property name="visible">True</property>
            <signal handler="on_combobox1_changed" name="changed"/>
            <property name="model">model1</property>
            <child>
              <object class="GtkCellRendererText" id="renderer1"/>
              <attributes>
                <attribute name="text">0</attribute>
              </attributes>
            </child>
          </object>
        </child>
        <child>
          <object class="GtkLabel" id="label1">
            <property name="visible">True</property>
            <property name="label" translatable="yes">label</property>
          </object>
          <packing>
            <property name="position">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="label2">
            <property name="visible">True</property>
            <property name="label" translatable="yes">label</property>
          </object>
          <packing>
            <property name="position">2</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>
== end test.xml ==


2008/11/26 Roy G. Biv <kroylar gmail com>:
On Wed, Nov 26, 2008 at 8:03 AM, Nicola Fontana <ntd entidi it> wrote:
On Tue, 25 Nov 2008 21:26:54 -0800
"Roy G. Biv" <kroylar gmail com> wrote:

Hello everybody!

I am just learning how to use GTK+ and have run into a problem.  After
having followed Micah Carrick's Glade3 tutorial, I have learned that
using GtkBuilder seems to be the best way to do things.  Therefore the
method that he used in his tutorial is the how I'm doing it too.  On
to my problem...

I have created a window that contains a single combobox widget named
combobox1.  In this combobox I have listed a few different colors.
And in glade I set the a handler named "on_combobox1_changed" for the
"changed" entry under GtkComboBox.

My C program contains this function:

void on_combobox1_changed (GtkComboBox *widget, gpointer user_data);

My guess is you have something weird in your event loop: you
should post the code.

Ciao
--
Nicola

Thank you all for your help.

I tried adding stderr to my printf function but it still seems to be
buffered. Here is the code that I am working with:

#include <gtk/gtk.h>
#include <stdio.h>

void on_combobox1_changed (GtkComboBox *widget, gpointer user_data) {
  printf("on_combobox1_changed event");
//    int hello = GPOINTER_TO_INT(user_data);
//    printf("%d", hello);
//    GtkWidget window = GTK_WIDGET( widget );
  GdkColor color;
//    gdk_color_parse(gtk_combo_box_get_active_text(widget), &color);
  gdk_color_parse("blue", &color);
  gtk_widget_modify_bg (GTK_WIDGET (widget), GTK_STATE_NORMAL, &color);
}

void
on_window_destroy (GtkObject *object, gpointer user_data)
{
  printf("on_window_destroy event");
  gtk_main_quit ();
}

int
main (int argc, char *argv[])
{
//    GtkWidget *combobox1;
  GtkBuilder      *builder;
  GtkWidget       *window;
  GdkColor red;

  gtk_init (&argc, &argv);

  builder = gtk_builder_new ();
  gtk_builder_add_from_file (builder, "testcolor1.xml", NULL);
  window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
  gdk_color_parse ("red", &red);
  gtk_widget_modify_bg (window, GTK_STATE_NORMAL, &red);
  gtk_builder_connect_signals (builder, NULL);
//    GtkComboBox *combobox1 = GTK_COMBO_BOX (builder);
//    g_signal_connect(G_OBJECT(combobox1), "clicked", G_CALLBACK
(on_combobox1_changed), NULL);

  g_object_unref (G_OBJECT (builder));
  gtk_widget_show (window);
//    gtk_widget_modify_bg (window, GTK_STATE_NORMAL, red);

  gtk_main ();

  return 0;
}

-Roy
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list




-- 
Tadej BorovÅak
00386 (0)40 613 131
tadeboro gmail com
tadej borovsak gmail com


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