A problem with the button_press.



/* 
  Hi everybody, I'm new in GTK. 
 
  My problem is how can I know I'm clicking in any line of my rectangle 
  'cause when I used the function button_press_event there's nothing 
  new, and I want to know when I'm clicking in the rectangle, any idea? 
  See the code bellow. 
 
  thnanks in advance, 
 
  ana*/ 
 
#include <gtk/gtk.h> 
 
typedef struct { 
    GtkWidget *window; 
    GtkWidget *drawing_area; 
    GdkGC *drawing_area_gc; 
} MyApp; 
 
void pinta_rectangle(GdkWindow *window, 
               GdkGC *gc, 
	       double line_width, 
	       gint x, 
	       gint y, 
	       gint width, 
	       gint height) 
{ 
    gdk_gc_set_line_attributes(gc, 
                               line_width, 
                               GDK_LINE_SOLID, 
                               GDK_CAP_ROUND, 
                               GDK_JOIN_ROUND); 
 
    gdk_draw_rectangle(window, gc, FALSE, x, y, width, height); 
} 
 
void rectangle1(MyApp *app) 
{ 
	pinta_rectangle(app->drawing_area->window, 
			app->drawing_area_gc, 
			5,/*grosor linea*/ 
			20, 20, 
			50, 50); 
} 
 
 
gboolean event_handler (GtkWidget *drawing_area, 
                        GdkEvent *event, 
                        gpointer client_data) 
{ 
 if (event->type == GDK_EXPOSE) 
     rectangle1((MyApp*)client_data); 
 
  return 1; 
} 
 
gboolean button_press_event (GtkWidget *drawing_area, 
                        GdkEvent *event, 
                        gpointer client_data) 
{ 
 g_print("hi\n"); 
 return 1; 
} 
 
 
gint main (gint argc,gchar *argv[]) 
{ 
    MyApp app; 
 
    GtkWidget *vbox; 
    GtkWidget *button; 
 
    gtk_init (&argc, &argv); 
 
    app.window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    gtk_widget_set_name (app.window, "Disseny"); 
 
    vbox = gtk_vbox_new (FALSE, 0); 
    gtk_container_add (GTK_CONTAINER (app.window), vbox); 
    gtk_widget_show (vbox); 
 
    gtk_signal_connect (GTK_OBJECT (app.window), "destroy", 
                        GTK_SIGNAL_FUNC (gtk_main_quit), NULL); 
 
    app.drawing_area = gtk_drawing_area_new (); 
    gtk_drawing_area_size (GTK_DRAWING_AREA(app.drawing_area), 
                           300, 200); 
 
    gtk_box_pack_start (GTK_BOX (vbox), app.drawing_area, TRUE, TRUE, 0); 
 
    gtk_widget_show (app.drawing_area); 
 
 
    gtk_signal_connect (GTK_OBJECT(app.drawing_area), 
                        "event", 
                        GTK_SIGNAL_FUNC(event_handler), 
                        &app); 
 
    gtk_signal_connect (GTK_OBJECT (app.drawing_area), "button_press_event", 
                       GTK_SIGNAL_FUNC(button_press_event), NULL); 
 
    gtk_widget_set_events (app.drawing_area, GDK_EXPOSURE_MASK 
                         | GDK_LEAVE_NOTIFY_MASK 
                         | GDK_BUTTON_PRESS_MASK); 
 
    gtk_widget_realize (app.window); 
    app.drawing_area_gc = gdk_gc_new (app.window->window); 
 
    /*botón Salir*/ 
    button = gtk_button_new_with_label ("Salir"); 
    gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); 
    gtk_signal_connect_object (GTK_OBJECT (button), "clicked", 
                             GTK_SIGNAL_FUNC (gtk_widget_destroy), 
                             GTK_OBJECT (app.window)); 
    gtk_widget_show (button); 
 
    gtk_widget_show (app.window); 
 
    gtk_main (); 
 
    return 0; 
} 




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