Problem to open a new window using libglade



Hi All,

I'd like to open a new window, when a button is clicked by using libglade.
But the window appears always at the end of the function, but it
should appear at the beginnig, so that I can show the progrwess to the
user.
I also tried to add "while (gtk_events_pending())
gtk_main_iteration();" but then only the outlines are visible, not the
labels, and progressbars.

So I put together a short example to explain the problem.
Now the window appears with the beginning of the break, but the labels
etc, at the end.
How can I open the window, so that the labels etc. are visible, to
show the progress to the user?
thanks a lot!

Patrick

/* sample.glade */

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd";>

<glade-interface>

<widget class="GtkWindow" id="window1">
 <property name="border_width">10</property>
 <property name="visible">True</property>
 <property name="title" translatable="yes">window1</property>
 <property name="type">GTK_WINDOW_TOPLEVEL</property>
 <property name="window_position">GTK_WIN_POS_NONE</property>
 <property name="modal">False</property>
 <property name="resizable">False</property>
 <property name="destroy_with_parent">False</property>
 <property name="decorated">True</property>
 <property name="skip_taskbar_hint">False</property>
 <property name="skip_pager_hint">False</property>
 <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
 <property name="focus_on_map">True</property>
 <property name="urgency_hint">False</property>

 <child>
   <widget class="GtkButton" id="button1">
     <property name="width_request">150</property>
     <property name="visible">True</property>
     <property name="can_focus">True</property>
     <property name="label" translatable="yes">Run</property>
     <property name="use_underline">True</property>
     <property name="relief">GTK_RELIEF_NORMAL</property>
     <property name="focus_on_click">True</property>
     <signal name="clicked" handler="on_button1_clicked"
last_modification_time="Mon, 19 Feb 2007 20:34:21 GMT"/>
   </widget>
 </child>
</widget>

<widget class="GtkWindow" id="window2">
 <property name="border_width">10</property>
 <property name="visible">True</property>
 <property name="title" translatable="yes">window2</property>
 <property name="type">GTK_WINDOW_TOPLEVEL</property>
 <property name="window_position">GTK_WIN_POS_NONE</property>
 <property name="modal">False</property>
 <property name="resizable">False</property>
 <property name="destroy_with_parent">False</property>
 <property name="decorated">True</property>
 <property name="skip_taskbar_hint">False</property>
 <property name="skip_pager_hint">False</property>
 <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
 <property name="focus_on_map">True</property>
 <property name="urgency_hint">False</property>

 <child>
   <widget class="GtkVBox" id="vbox1">
     <property name="visible">True</property>
     <property name="homogeneous">False</property>
     <property name="spacing">0</property>

     <child>
  <widget class="GtkLabel" id="label1">
    <property name="visible">True</property>
    <property name="label" translatable="yes">Progress window</property>
    <property name="use_underline">False</property>
    <property name="use_markup">False</property>
    <property name="justify">GTK_JUSTIFY_LEFT</property>
    <property name="wrap">False</property>
    <property name="selectable">False</property>
    <property name="xalign">0.5</property>
    <property name="yalign">0.5</property>
    <property name="xpad">0</property>
    <property name="ypad">0</property>
    <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
    <property name="width_chars">-1</property>
    <property name="single_line_mode">False</property>
    <property name="angle">0</property>
  </widget>
  <packing>
    <property name="padding">0</property>
    <property name="expand">False</property>
    <property name="fill">False</property>
  </packing>
     </child>

     <child>
  <widget class="GtkProgressBar" id="progressbar1">
    <property name="visible">True</property>
    <property name="orientation">GTK_PROGRESS_LEFT_TO_RIGHT</property>
    <property name="fraction">0</property>
    <property name="pulse_step">0.10000000149</property>
    <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
  </widget>
  <packing>
    <property name="padding">0</property>
    <property name="expand">False</property>
    <property name="fill">False</property>
  </packing>
     </child>

     <child>
  <widget class="GtkLabel" id="label2">
    <property name="visible">True</property>
    <property name="label" translatable="yes">progress_description</property>
    <property name="use_underline">False</property>
    <property name="use_markup">False</property>
    <property name="justify">GTK_JUSTIFY_LEFT</property>
    <property name="wrap">False</property>
    <property name="selectable">False</property>
    <property name="xalign">0.5</property>
    <property name="yalign">0.5</property>
    <property name="xpad">0</property>
    <property name="ypad">0</property>
    <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
    <property name="width_chars">-1</property>
    <property name="single_line_mode">False</property>
    <property name="angle">0</property>
  </widget>
  <packing>
    <property name="padding">2</property>
    <property name="expand">False</property>
    <property name="fill">False</property>
  </packing>
     </child>
   </widget>
 </child>
</widget>

</glade-interface>


/* sample.c */
#include <gtk/gtk.h>
#include <glade/glade.h>
#include <stdlib.h>

#define GLADE_FILE "sample.glade"

// functions
static gint delete_event_cb(GtkWidget* w, GdkEventAny* e, gpointer data);
static gint destroy_cb(GtkWidget* w, GdkEventAny* e, gpointer data);
static void on_button1_clicked(GtkButton *button, gpointer data);

int main (int argc, char *argv[])
{
        GladeXML *gxml;

       gtk_init (&argc, &argv);

        //Create interface
       gxml = glade_xml_new (GLADE_FILE, "window1", NULL);

        GtkWidget *window1 = glade_xml_get_widget(gxml, "window1");

        //connect signals
        glade_xml_signal_connect_data (gxml, "on_button1_clicked",
               G_CALLBACK (on_button1_clicked), NULL);

       g_signal_connect(G_OBJECT(window1), "delete_event",
               G_CALLBACK(delete_event_cb), NULL);

       g_signal_connect(G_OBJECT(window1), "destroy",
               G_CALLBACK(destroy_cb), NULL);

        //beginn loop
       gtk_main ();

       return 0;
}

static gint delete_event_cb(GtkWidget* w, GdkEventAny* e, gpointer data)
{
       return 0;
}

static gint destroy_cb(GtkWidget* w, GdkEventAny* e, gpointer data)
{
       gtk_main_quit();
       return 0;
}

void
on_button1_clicked(GtkButton *button, gpointer data)
{
        /* the button was clicked */
        //Print out to console
        g_print("Beginn break\n");

        //Create the new "progress" window
        GladeXML        *gxml_progress = NULL;
        gxml_progress = glade_xml_new (GLADE_FILE, "window2", NULL);

        //show the window
        GtkWidget *window2 = glade_xml_get_widget(gxml_progress, "window2");
        gtk_widget_show_all(window2);

        while (gtk_events_pending())
                gtk_main_iteration();

        //Make 5 sec. break
        g_usleep(5000000);
        g_print("End break\n");
}

I compile it with: "gcc -Wall -export-dynamic -g `pkg-config --cflags
--libs gtk+-2.0` `pkg-config --cflags --libs libglade-2.0` -o sample
sample.c" on my FC6 machine.



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