/[classpath]/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
ViewVC logotype

Diff of /classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.29 by mark, Sat Jun 26 16:07:03 2004 UTC revision 1.30 by mark, Thu Jul 22 19:45:39 2004 UTC
# Line 54  static void window_get_frame_extents (Gt Line 54  static void window_get_frame_extents (Gt
54    
55  static void request_frame_extents (GtkWidget *window);  static void request_frame_extents (GtkWidget *window);
56    
57  static int property_notify_predicate (Display *xdisplay,  static Bool property_notify_predicate (Display *display,
58                                        XEvent  *event,                                         XEvent  *xevent,
59                                        XPointer window_id);                                         XPointer arg);
60    
61    static GtkLayout *find_layout (GtkWindow *window);
62    
63  static void window_delete_cb (GtkWidget *widget, GdkEvent *event,  static void window_delete_cb (GtkWidget *widget, GdkEvent *event,
64                                jobject peer);                                jobject peer);
65  static void window_destroy_cb (GtkWidget *widget, GdkEvent *event,  static void window_destroy_cb (GtkWidget *widget, GdkEvent *event,
66                                 jobject peer);                                 jobject peer);
67  static void window_show_cb (GtkWidget *widget, jobject peer);  static void window_show_cb (GtkWidget *widget, jobject peer);
68  static void window_focus_or_active_state_change_cb (GtkWidget *widget,  static void window_active_state_change_cb (GtkWidget *widget,
69                                               GParamSpec *pspec,
70                                               jobject peer);
71    static void window_focus_state_change_cb (GtkWidget *widget,
72                                                      GParamSpec *pspec,                                                      GParamSpec *pspec,
73                                                      jobject peer);                                                      jobject peer);
74    static gboolean window_focus_in_cb (GtkWidget * widget,
75                                        GdkEventFocus *event,
76                                        jobject peer);
77    static gboolean window_focus_out_cb (GtkWidget * widget,
78                                         GdkEventFocus *event,
79                                         jobject peer);
80  static gboolean window_window_state_cb (GtkWidget *widget,  static gboolean window_window_state_cb (GtkWidget *widget,
81                                          GdkEvent *event,                                          GdkEvent *event,
82                                          jobject peer);                                          jobject peer);
# Line 74  static gboolean window_property_changed_ Line 85  static gboolean window_property_changed_
85                                              GdkEventProperty *event,                                              GdkEventProperty *event,
86                                              jobject peer);                                              jobject peer);
87    
 /*  
  * Make a new window.  
  */  
   
88  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
89  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create
90    (JNIEnv *env, jobject obj, jint type, jboolean decorated,    (JNIEnv *env, jobject obj, jint type, jboolean decorated,
# Line 180  Java_gnu_java_awt_peer_gtk_GtkWindowPeer Line 187  Java_gnu_java_awt_peer_gtk_GtkWindowPeer
187    (JNIEnv *env, jobject obj)    (JNIEnv *env, jobject obj)
188  {  {
189    void *ptr;    void *ptr;
190    GtkWidget* vbox, *layout;    GtkLayout *layout;
   GList* children;  
191    
192    ptr = NSA_GET_PTR (env, obj);    ptr = NSA_GET_PTR (env, obj);
193    
194    gdk_threads_enter ();    gdk_threads_enter ();
195    
196    children = gtk_container_get_children(GTK_CONTAINER(ptr));    layout = find_layout (GTK_WINDOW (ptr));
   vbox = children->data;  
   g_assert (GTK_IS_VBOX(vbox));  
197    
198    children = gtk_container_get_children(GTK_CONTAINER(vbox));    gtk_widget_realize (GTK_WIDGET (layout));
   do  
   {  
     layout = children->data;  
     children = children->next;  
   }  
   while (!GTK_IS_LAYOUT (layout) && children != NULL);  
   g_assert (GTK_IS_LAYOUT(layout));  
199    
200    gtk_widget_realize (layout);    connect_awt_hook (env, obj, 1, layout->bin_window);
   
   connect_awt_hook (env, obj, 1, GTK_LAYOUT (layout)->bin_window);  
201    
202    gtk_widget_realize (ptr);    gtk_widget_realize (ptr);
203    
# Line 215  JNIEXPORT void JNICALL Line 210  JNIEXPORT void JNICALL
210  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
211    (JNIEnv *env, jobject obj)    (JNIEnv *env, jobject obj)
212  {  {
213    void *ptr = NSA_GET_PTR (env, obj);    void *ptr;
214    jobject *gref = NSA_GET_GLOBAL_REF (env, obj);    jobject *gref;
215    GtkWidget* vbox, *layout;    GtkLayout *layout;
216    GList* children;  
217    g_assert (gref);    ptr = NSA_GET_PTR (env, obj);
218    
219      gref = NSA_GET_GLOBAL_REF (env, obj);
220    
221    gdk_threads_enter ();    gdk_threads_enter ();
222    
223    gtk_widget_realize (ptr);    gtk_widget_realize (ptr);
224    
225    /* Receive events from the GtkLayout too */    /* Receive events from the GtkLayout too */
226    children = gtk_container_get_children(GTK_CONTAINER(ptr));    layout = find_layout (GTK_WINDOW (ptr));
   vbox = children->data;    
   g_assert (GTK_IS_VBOX (vbox));  
   
   children = gtk_container_get_children(GTK_CONTAINER(vbox));  
   do  
   {  
     layout = children->data;  
     children = children->next;  
   }  
   while (!GTK_IS_LAYOUT (layout) && children != NULL);  
   g_assert (GTK_IS_LAYOUT (layout));  
227    
228    g_signal_connect (GTK_OBJECT (layout), "event",    g_signal_connect (G_OBJECT (layout), "event",
229                      G_CALLBACK (pre_event_handler), *gref);                      G_CALLBACK (pre_event_handler), *gref);
230    
231    /* Connect signals for window event support. */    /* Connect signals for window event support. */
# Line 252  Java_gnu_java_awt_peer_gtk_GtkWindowPeer Line 238  Java_gnu_java_awt_peer_gtk_GtkWindowPeer
238    g_signal_connect (G_OBJECT (ptr), "show",    g_signal_connect (G_OBJECT (ptr), "show",
239                      G_CALLBACK (window_show_cb), *gref);                      G_CALLBACK (window_show_cb), *gref);
240    
241    g_signal_connect (G_OBJECT (ptr), "notify",    g_signal_connect (G_OBJECT (ptr), "notify::is-active",
242                      G_CALLBACK (window_focus_or_active_state_change_cb), *gref);                      G_CALLBACK (window_active_state_change_cb), *gref);
243    
244      g_signal_connect (G_OBJECT (ptr), "notify::has-toplevel-focus",
245                        G_CALLBACK (window_focus_state_change_cb), *gref);
246    
247      g_signal_connect (G_OBJECT (ptr), "focus-in-event",
248                        G_CALLBACK (window_focus_in_cb), *gref);
249    
250      g_signal_connect (G_OBJECT (ptr), "focus-out-event",
251                        G_CALLBACK (window_focus_out_cb), *gref);
252    
253    g_signal_connect (G_OBJECT (ptr), "window-state-event",    g_signal_connect (G_OBJECT (ptr), "window-state-event",
254                      G_CALLBACK (window_window_state_cb), *gref);                      G_CALLBACK (window_window_state_cb), *gref);
# Line 448  Java_gnu_java_awt_peer_gtk_GtkFramePeer_ Line 443  Java_gnu_java_awt_peer_gtk_GtkFramePeer_
443  {  {
444    void* ptr;    void* ptr;
445    GList* children;    GList* children;
   GtkBox* vbox;  
446    GtkLayout* layout;    GtkLayout* layout;
447    GtkWidget* widget;    GtkWidget* widget;
448    
# Line 456  Java_gnu_java_awt_peer_gtk_GtkFramePeer_ Line 450  Java_gnu_java_awt_peer_gtk_GtkFramePeer_
450    
451    gdk_threads_enter ();    gdk_threads_enter ();
452    
453    children = gtk_container_get_children (GTK_CONTAINER (ptr));    layout = find_layout (GTK_WINDOW (ptr));
   vbox = children->data;  
   g_assert (GTK_IS_VBOX (vbox));  
454    
   children = gtk_container_get_children (GTK_CONTAINER (vbox));  
   do  
   {  
     layout = children->data;  
     children = children->next;  
   }  
   while (!GTK_IS_LAYOUT (layout) && children != NULL);  
   g_assert (GTK_IS_LAYOUT (layout));    
455    children = gtk_container_get_children (GTK_CONTAINER (layout));    children = gtk_container_get_children (GTK_CONTAINER (layout));
456        
457    while (children != NULL)    while (children != NULL)
# Line 483  Java_gnu_java_awt_peer_gtk_GtkFramePeer_ Line 467  Java_gnu_java_awt_peer_gtk_GtkFramePeer_
467        
468  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
469  Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkLayoutSetVisible  Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkLayoutSetVisible
470    (JNIEnv *env, jobject obj, jboolean vis)    (JNIEnv *env, jobject obj, jboolean visible)
471  {  {
472    void* ptr;    void* ptr;
   GList* children;  
   GtkBox* vbox;  
473    GtkLayout* layout;    GtkLayout* layout;
474    
475    ptr = NSA_GET_PTR (env, obj);    ptr = NSA_GET_PTR (env, obj);
476    
477    gdk_threads_enter ();    gdk_threads_enter ();
478    
479    children = gtk_container_get_children (GTK_CONTAINER (ptr));    layout = find_layout (GTK_WINDOW (ptr));
   vbox = children->data;  
   g_assert (GTK_IS_VBOX (vbox));  
   
   children = gtk_container_get_children (GTK_CONTAINER (vbox));  
   do  
   {  
     layout = children->data;  
     children = children->next;  
   }  
   while (!GTK_IS_LAYOUT (layout) && children != NULL);  
   g_assert (GTK_IS_LAYOUT (layout));    
480        
481    if (vis)    if (visible)
482      gtk_widget_show (GTK_WIDGET (layout));      gtk_widget_show (GTK_WIDGET (layout));
483    else    else
484      gtk_widget_hide (GTK_WIDGET (layout));      gtk_widget_hide (GTK_WIDGET (layout));
485    
486    gdk_threads_leave ();    gdk_threads_leave ();
487  }  }
488    
489  static void  static void
490  window_get_frame_extents (GtkWidget *window,  window_get_frame_extents (GtkWidget *window,
491                            int *top, int *left, int *bottom, int *right)                            int *top, int *left, int *bottom, int *right)
# Line 604  request_frame_extents (GtkWidget *window Line 577  request_frame_extents (GtkWidget *window
577      }      }
578  }  }
579    
580  static int  static Bool
581  property_notify_predicate (Display *xdisplay __attribute__((unused)),  property_notify_predicate (Display *xdisplay __attribute__((unused)),
582                             XEvent  *event,                             XEvent  *event,
583                             XPointer window_id)                             XPointer window_id)
# Line 615  property_notify_predicate (Display *xdis Line 588  property_notify_predicate (Display *xdis
588        && event->xany.window == *window        && event->xany.window == *window
589        && event->xproperty.atom == extents_atom)        && event->xproperty.atom == extents_atom)
590          return True;          return True;
591      else
592    return False;    return False;
593  }  }
594    
# Line 652  window_show_cb (GtkWidget *widget __attr Line 625  window_show_cb (GtkWidget *widget __attr
625  }  }
626    
627  static void  static void
628  window_focus_or_active_state_change_cb (GtkWidget *widget,  window_active_state_change_cb (GtkWidget *widget,
629                                          GParamSpec *pspec,                                          GParamSpec *pspec,
630                                          jobject peer)                                          jobject peer)
631  {  {
632    if (!strcmp (g_param_spec_get_name (pspec), "is-active"))    /* FIXME: not sure if this is needed or not. */
633      {  #if 0
634        if (GTK_WINDOW (widget)->is_active)        if (GTK_WINDOW (widget)->is_active)
635          (*gdk_env)->CallVoidMethod (gdk_env, peer,          (*gdk_env)->CallVoidMethod (gdk_env, peer,
636                                      postWindowEventID,                                      postWindowEventID,
# Line 668  window_focus_or_active_state_change_cb ( Line 641  window_focus_or_active_state_change_cb (
641                                      postWindowEventID,                                      postWindowEventID,
642                                      (jint) AWT_WINDOW_DEACTIVATED,                                      (jint) AWT_WINDOW_DEACTIVATED,
643                                      (jobject) NULL, (jint) 0);                                      (jobject) NULL, (jint) 0);
644    #endif
645      }      }
646    else if (!strcmp (g_param_spec_get_name (pspec), "has-toplevel-focus"))  
647    static void
648    window_focus_state_change_cb (GtkWidget *widget,
649                                  GParamSpec *pspec,
650                                  jobject peer)
651      {      {
652        if (GTK_WINDOW (widget)->has_toplevel_focus)        if (GTK_WINDOW (widget)->has_toplevel_focus)
653          (*gdk_env)->CallVoidMethod (gdk_env, peer,          (*gdk_env)->CallVoidMethod (gdk_env, peer,
# Line 679  window_focus_or_active_state_change_cb ( Line 657  window_focus_or_active_state_change_cb (
657        else        else
658          (*gdk_env)->CallVoidMethod (gdk_env, peer,          (*gdk_env)->CallVoidMethod (gdk_env, peer,
659                                      postWindowEventID,                                      postWindowEventID,
660                                      (jint) AWT_WINDOW_LOST_FOCUS,                                  (jint) AWT_WINDOW_DEACTIVATED,
661                                      (jobject) NULL, (jint) 0);                                      (jobject) NULL, (jint) 0);
662      }      }
663    
664    static gboolean
665    window_focus_in_cb (GtkWidget * widget,
666                       GdkEventFocus *event,
667                       jobject peer)
668    {
669      (*gdk_env)->CallVoidMethod (gdk_env, peer,
670                                  postWindowEventID,
671                                  (jint) AWT_WINDOW_GAINED_FOCUS,
672                                  (jobject) NULL, (jint) 0);
673      return FALSE;
674    }
675    
676    static gboolean
677    window_focus_out_cb (GtkWidget * widget,
678                        GdkEventFocus *event,
679                        jobject peer)
680    {
681      (*gdk_env)->CallVoidMethod (gdk_env, peer,
682                                  postWindowEventID,
683                                  (jint) AWT_WINDOW_LOST_FOCUS,
684                                  (jobject) NULL, (jint) 0);
685      return FALSE;
686  }  }
687    
688  static gboolean  static gboolean
# Line 808  window_property_changed_cb (GtkWidget *w Line 809  window_property_changed_cb (GtkWidget *w
809    
810    return FALSE;    return FALSE;
811  }  }
812    
813    static GtkLayout *
814    find_layout (GtkWindow *window)
815    {
816      GList* children;
817      GtkBox* vbox;
818      GtkLayout* layout;
819    
820      children = gtk_container_get_children (GTK_CONTAINER (window));
821      vbox = children->data;
822      g_assert (GTK_IS_VBOX (vbox));
823    
824      children = gtk_container_get_children (GTK_CONTAINER (vbox));
825      do
826      {
827        layout = children->data;
828        children = children->next;
829      }
830      while (!GTK_IS_LAYOUT (layout) && children != NULL);
831      g_assert (GTK_IS_LAYOUT (layout));
832    
833      return layout;
834    }

Legend:
Removed from v.1.29  
changed lines
  Added in v.1.30

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26