Here's an example in C code that simulates the serial connection with two buttons. This works for me on Ubuntu Natty (classic no effects and Unico)
Attachment:
serial1.png [ 11.27 KiB | Viewed 738 times ]
Code:
/* Compile with:
gcc -Wall -o ser2 `pkg-config --cflags --libs gtk+-3.0` ser2.c
*/
#include <gtk/gtk.h>
typedef struct
{
GtkWidget *window;
GtkWidget *grid;
GtkWidget *entry;
GtkWidget *com_enable_btn;
GtkWidget *com_disable_btn;
}WIDGETS;
static void comm_enable (GtkButton *button, gpointer data)
{
WIDGETS *widget = (WIDGETS*) data;
GdkRGBA entry_bg_highlight_color = {0, 0, 0, 1.0};
GdkRGBA entry_bg_color = {0, 1.0, 0, 1.0};
GdkRGBA entry_cursor_color = {0, 1.0, 0, 1.0};
gtk_entry_set_text (GTK_ENTRY(widget->entry), "connected");
gtk_widget_override_color (GTK_WIDGET(widget->entry), GTK_STATE_FLAG_SELECTED, &entry_bg_highlight_color);
gtk_widget_override_background_color (GTK_WIDGET(widget->entry), GTK_STATE_FLAG_NORMAL, &entry_bg_color);
gtk_widget_override_cursor (GTK_WIDGET(widget->entry), &entry_cursor_color, &entry_cursor_color);
}
static void comm_disable (GtkToggleButton *togglebutton, gpointer data)
{
WIDGETS *widget = (WIDGETS*) data;
gtk_entry_set_text (GTK_ENTRY(widget->entry), "disconnected");
GdkRGBA entry_bg_highlight_color = {0, 0, 0, 1.0};
GdkRGBA entry_bg_color = {1.0, 0, 0, 1.0};
GdkRGBA entry_cursor_color = {1.0, 0, 0, 1.0};
gtk_widget_override_color (GTK_WIDGET(widget->entry), GTK_STATE_FLAG_SELECTED, &entry_bg_highlight_color);
gtk_widget_override_background_color (GTK_WIDGET(widget->entry), GTK_STATE_FLAG_NORMAL, &entry_bg_color);
gtk_widget_override_cursor (GTK_WIDGET(widget->entry), &entry_cursor_color, &entry_cursor_color);
}
int main(int argc, char *argv[] )
{
WIDGETS *widget = g_slice_new (WIDGETS);
gtk_init (&argc, &argv);
widget->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (GTK_WIDGET (widget->window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
widget->entry = gtk_entry_new ();
gtk_entry_set_text (GTK_ENTRY(widget->entry), "connected");
gtk_entry_set_alignment (GTK_ENTRY(widget->entry), 0.50);
gtk_editable_set_editable( GTK_EDITABLE(widget->entry), FALSE);
gtk_entry_set_width_chars (GTK_ENTRY(widget->entry), 13);
gtk_entry_set_max_length (GTK_ENTRY(widget->entry), 13);
GdkRGBA entry_bg_highlight_color = {0, 0, 0, 1.0};
GdkRGBA entry_bg_color = {0, 1.0, 0, 1.0};
GdkRGBA entry_cursor_color = {0, 1.0, 0, 1.0};
gtk_widget_override_background_color (GTK_WIDGET(widget->entry), GTK_STATE_FLAG_NORMAL, &entry_bg_color);
gtk_widget_override_color (GTK_WIDGET(widget->entry), GTK_STATE_FLAG_SELECTED, &entry_bg_highlight_color);
gtk_widget_override_cursor (GTK_WIDGET(widget->entry), &entry_cursor_color, &entry_cursor_color);
widget->com_enable_btn = gtk_button_new_with_label ("enable");
widget->com_disable_btn = gtk_button_new_with_label ("disable");
g_signal_connect (widget->com_enable_btn, "clicked", G_CALLBACK (comm_enable), widget);
g_signal_connect (widget->com_disable_btn, "clicked", G_CALLBACK (comm_disable), widget);
widget->grid = gtk_grid_new ();
gtk_grid_attach (GTK_GRID(widget->grid), GTK_WIDGET(widget->entry), 0, 0, 1, 1);
gtk_grid_attach (GTK_GRID(widget->grid), GTK_WIDGET(widget->com_enable_btn), 1, 0,1, 1);
gtk_grid_attach (GTK_GRID(widget->grid), GTK_WIDGET(widget->com_disable_btn), 2, 0, 1, 1);
gtk_widget_set_margin_top (widget->grid, 20);
gtk_widget_set_margin_bottom (widget->grid, 20);
gtk_widget_set_margin_left (widget->grid, 20);
gtk_widget_set_margin_right (widget->grid, 20);
gtk_container_add (GTK_CONTAINER(widget->window), GTK_WIDGET(widget->grid));
gtk_widget_show_all(widget->window);
gtk_main();
g_slice_free (WIDGETS, widget);
return(0);
}