Re: Refreshing gtk window without any mouse/keyboard intervention
- From: Gus Koppel <gtk spamkiller bytechase cx>
- To: gtk-app-devel-list gnome org
- Subject: Re: Refreshing gtk window without any mouse/keyboard intervention
- Date: Mon, 13 Feb 2006 21:47:10 +0100
Nisha P Kurur wrote:
We are trying to create a gtk application which should run without much of
manual intervention. Few buttons are placed in a row and each button has
an image at the top which changes to red on selection. This image changes
to green when the button goes out of selection. So the whole process has
to be done in a scan mode without any manual intervention.
The problem with our code (attached with this mail) is that the events are
generated and the callback functions are called. But the window is not
refreshed properly. The window gets updated only when there is any
mouse/keyboard movement.
1. using the sleep() function in a GUI application is very bad
programming style by all means, even if taking place in a custom
thread. It's a relict of shell programming. You should rather use
gtk_timeout_add() or g_timeout_add(). Probably you can even do without
multiple threads then, which may avoid some hard to find bugs in the
future and makes debugging much easier. See:
http://developer.gnome.org/doc/API/2.0/gtk/gtk-General.html#gtk-timeout-add
http://developer.gnome.org/doc/API/2.0/glib/glib-The-Main-Event-Loop.html#g-timeout-add
2. you have to make sure that GTK+ can pass through its main loop for
changes to be drawn. In a single-threaded application this would
have to happen after your g_signal_emit_by_name() calls. See:
http://developer.gnome.org/doc/API/2.0/gtk/gtk-General.html#gtk-main-iteration-do
3. you probably know that the switch-case tree of your example is
bloated, i.e. contains much redundancy which could (and probably
should) be avoided. Of 7 statements, 3 are completely identical
and the other ones could be unified by simply using your "index"
variable instead of distinct constants to pass to the respective
functions. Add a little list of const strings for the xpm_label_box()
call and you can do completely without a switch-case, that is, with
only 1 instead of 9 blocks of that code.
Golden rule of programming: _never_ use the copy & paste feature of your
text editor for more than three or four lines of code, especially not
multiple times! Write sub functions (or in this case: just restructure a
code block) instead.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]