response to events



The following function attempts to turn on event trapping for all GDK
events, but I only get the mouse down events, 

GtkWidget *create_gl_window() {
  GtkWidget* glwindow;
  glwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(glwindow), "Graphite");
  gtk_container_border_width(GTK_CONTAINER(glwindow), 2);
  // create_popup_menu(glwindow); 
  gtk_signal_connect (GTK_OBJECT(glwindow), "delete_event",
                      GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
  /* ... Destroy this window when exiting from gtk_main() ... */
  gtk_quit_add_destroy(1, GTK_OBJECT(glwindow));

  /* ... Create new OpenGL widget with GTK's window mode; analogous to
         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
  */
  glarea = gtk_gl_area_new_vargs(NULL,        /* no sharing */
                                 GDK_GL_DOUBLEBUFFER,
                                 GDK_GL_RGBA,
                                 GDK_GL_DEPTH_SIZE,1,
                                 GDK_GL_NONE);/* last arg must be GDK_GL_NONE */
  if (!glarea) { 
    g_print("Can't create GtkGlArea widget\n");
    return FALSE;
  }


  /* ... Set up events and signals for OpenGL widget ... */
  gtk_widget_set_events(GTK_WIDGET(glarea),GDK_ALL_EVENTS_MASK);
#if 0
                        GDK_EXPOSURE_MASK|
                        GDK_BUTTON_PRESS_MASK|
                        GDK_BUTTON_RELEASE_MASK|
                        GDK_KEY_PRESS_MASK|
                        GDK_KEY_RELEASE_MASK|
                        GDK_POINTER_MOTION_MASK|
                        GDK_POINTER_MOTION_HINT_MASK);
#endif
  gtk_signal_connect (GTK_OBJECT(glarea), "expose_event",
                      GTK_SIGNAL_FUNC(glarea_expose), NULL);
  gtk_signal_connect (GTK_OBJECT(glarea), "motion_notify_event",
                      GTK_SIGNAL_FUNC(glarea_motion_notify), NULL);
  gtk_signal_connect (GTK_OBJECT(glarea), "button_press_event",
                      GTK_SIGNAL_FUNC(glarea_button_press), NULL);
  gtk_signal_connect (GTK_OBJECT(glarea), "configure_event",
                      GTK_SIGNAL_FUNC(glarea_configure), NULL);
  gtk_signal_connect (GTK_OBJECT(glarea), "key_press_event",
                      GTK_SIGNAL_FUNC(glarea_key_press_event), NULL);
  gtk_signal_connect (GTK_OBJECT(glarea), "delete_event",
                      GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
  gtk_widget_set_usize(glarea, 640, 480); /* minimum size */
  gtk_quit_add_destroy(1, GTK_OBJECT(glarea));

  /* ... Insert glarea into window and show it all ... */
  gtk_container_add(GTK_CONTAINER(glwindow),glarea);
  gtk_widget_show(glarea);
  gtk_widget_show(glwindow);

  /* ... Set focus to glarea widget and initialize OpenGL ... */
  GTK_WIDGET_SET_FLAGS(glarea,GTK_CAN_FOCUS);
  gtk_widget_grab_focus(GTK_WIDGET(glarea));
  initgl();

  return glwindow;
}


I inserted the #if region and asked to receive all events. However, I am
not receiving any mouse moves, only mouse presses. The following
motion_notify callback should be printing all the time, but I only get
an event when I press the mouse. What am I doing wrong?

thanks!
Dov



gint glarea_motion_notify(GtkWidget* widget, GdkEventMotion* event) {
  cout << event->x << "," << event->y << "\n";
  GLPP::Controller* controller = viewer->getController();
  controller->setLoc((int)event->x, (int)event->y);
  controller->dispatch((event->type << 24) + (event->state << 8));
  return TRUE;





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