/[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.31.2.9 by gnu_andrew, Tue Aug 2 20:12:40 2005 UTC revision 1.31.2.10 by gnu_andrew, Sat Sep 10 15:32:02 2005 UTC
# Line 260  static jmethodID postConfigureEventID; Line 260  static jmethodID postConfigureEventID;
260  static jmethodID postInsetsChangedEventID;  static jmethodID postInsetsChangedEventID;
261  static jmethodID windowGetWidthID;  static jmethodID windowGetWidthID;
262  static jmethodID windowGetHeightID;  static jmethodID windowGetHeightID;
 static jmethodID setBoundsCallbackID;  
263    
264  void  void
265  cp_gtk_window_init_jni (void)  cp_gtk_window_init_jni (void)
266  {  {
   jclass window;  
267    jclass gtkwindowpeer;    jclass gtkwindowpeer;
268    
   window = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(), "java/awt/Window");  
   
   setBoundsCallbackID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), window,  
                                                    "setBoundsCallback",  
                                                    "(IIII)V");  
   
269    gtkwindowpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),    gtkwindowpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
270                                             "gnu/java/awt/peer/gtk/GtkWindowPeer");                                             "gnu/java/awt/peer/gtk/GtkWindowPeer");
271    
# Line 302  cp_gtk_window_init_jni (void) Line 294  cp_gtk_window_init_jni (void)
294  }  }
295    
296  /* Get the first keyval in the keymap for this event's keycode.  The  /* Get the first keyval in the keymap for this event's keycode.  The
297     first keyval corresponds roughly to Java's notion of a virtual     first keyval corresponds roughly to Java's notion of a virtual key.
298     key.  Returns the uppercase version of the first keyval. */     Returns the uppercase version of the first keyval or -1 if no
299  static guint     keyval was found for the given hardware keycode. */
300    static gint
301  get_first_keyval_from_keymap (GdkEventKey *event)  get_first_keyval_from_keymap (GdkEventKey *event)
302  {  {
303    guint keyval;    guint keyval;
# Line 317  get_first_keyval_from_keymap (GdkEventKe Line 310  get_first_keyval_from_keymap (GdkEventKe
310                                             &keyvals,                                             &keyvals,
311                                             &n_entries))                                             &n_entries))
312      {      {
313        g_warning ("No keyval found for hardware keycode %d\n",        /* No keyval found for hardware keycode */
314                   event->hardware_keycode);        return -1;
       /* Try to recover by using the keyval in the event structure. */  
       keyvals = &(event->keyval);  
315      }      }
316    keyval = keyvals[0];    keyval = keyvals[0];
317    g_free (keyvals);    g_free (keyvals);
# Line 328  get_first_keyval_from_keymap (GdkEventKe Line 319  get_first_keyval_from_keymap (GdkEventKe
319    return gdk_keyval_to_upper (keyval);    return gdk_keyval_to_upper (keyval);
320  }  }
321    
322    /* Return the AWT key code for the given keysym or -1 if no keyval was
323       found for the given hardware keycode. */
324  #ifdef __GNUC__  #ifdef __GNUC__
325  __inline  __inline
326  #endif  #endif
327  static jint  static jint
328  keysym_to_awt_keycode (GdkEventKey *event)  keysym_to_awt_keycode (GdkEventKey *event)
329  {  {
330    guint ukeyval;    gint ukeyval;
331    guint state;    guint state;
332    
333    ukeyval = get_first_keyval_from_keymap (event);    ukeyval = get_first_keyval_from_keymap (event);
334    
335      if (ukeyval < 0)
336        return -1;
337    
338    state = event->state;    state = event->state;
339    
340    /* VK_A through VK_Z */    /* VK_A through VK_Z */
# Line 736  keysym_to_awt_keycode (GdkEventKey *even Line 733  keysym_to_awt_keycode (GdkEventKey *even
733      }      }
734  }  }
735    
736    /* Return the AWT key location code for the given keysym or -1 if no
737       keyval was found for the given hardware keycode. */
738  static jint  static jint
739  keysym_to_awt_keylocation (GdkEventKey *event)  keysym_to_awt_keylocation (GdkEventKey *event)
740  {  {
741    guint ukeyval;    gint ukeyval;
742    
743    ukeyval = get_first_keyval_from_keymap (event);    ukeyval = get_first_keyval_from_keymap (event);
744    
745      if (ukeyval < 0)
746        return -1;
747    
748    /* VK_A through VK_Z */    /* VK_A through VK_Z */
749    if (ukeyval >= GDK_A && ukeyval <= GDK_Z)    if (ukeyval >= GDK_A && ukeyval <= GDK_Z)
750      return AWT_KEY_LOCATION_STANDARD;      return AWT_KEY_LOCATION_STANDARD;
# Line 1052  window_configure_cb (GtkWidget *widget _ Line 1054  window_configure_cb (GtkWidget *widget _
1054                       GdkEventConfigure *event,                       GdkEventConfigure *event,
1055                       jobject peer)                       jobject peer)
1056  {  {
   gdk_threads_leave ();  
   
1057    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1058                                  postConfigureEventID,                                  postConfigureEventID,
1059                                  (jint) event->x,                                  (jint) event->x,
# Line 1061  window_configure_cb (GtkWidget *widget _ Line 1061  window_configure_cb (GtkWidget *widget _
1061                                  (jint) event->width,                                  (jint) event->width,
1062                                  (jint) event->height);                                  (jint) event->height);
1063    
   gdk_threads_enter ();  
   
1064    return FALSE;    return FALSE;
1065  }  }
1066    
# Line 1071  key_press_cb (GtkWidget *widget __attrib Line 1069  key_press_cb (GtkWidget *widget __attrib
1069                GdkEventKey *event,                GdkEventKey *event,
1070                jobject peer)                jobject peer)
1071  {  {
1072    gdk_threads_leave ();    jint keycode;
1073      jint keylocation;
1074    
1075      keycode = keysym_to_awt_keycode (event);
1076      keylocation = keysym_to_awt_keylocation (event);
1077    
1078      /* Return immediately if an error occurs translating a hardware
1079         keycode to a keyval. */
1080      if (keycode < 0 || keylocation < 0)
1081        return TRUE;
1082    
1083    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1084                                  postKeyEventID,                                  postKeyEventID,
1085                                  (jint) AWT_KEY_PRESSED,                                  (jint) AWT_KEY_PRESSED,
1086                                  (jlong) event->time,                                  (jlong) event->time,
1087                                  keyevent_state_to_awt_mods (event),                                  keyevent_state_to_awt_mods (event),
1088                                  keysym_to_awt_keycode (event),                                  keycode,
1089                                  keyevent_to_awt_keychar (event),                                  keyevent_to_awt_keychar (event),
1090                                  keysym_to_awt_keylocation (event));                                  keylocation);
   
   gdk_threads_enter ();  
1091    
1092    /* FIXME: generation of key typed events needs to be moved    /* FIXME: generation of key typed events needs to be moved
1093       to GtkComponentPeer.postKeyEvent.  If the key in a key       to GtkComponentPeer.postKeyEvent.  If the key in a key
# Line 1098  key_release_cb (GtkWidget *widget __attr Line 1103  key_release_cb (GtkWidget *widget __attr
1103                  GdkEventKey *event,                  GdkEventKey *event,
1104                  jobject peer)                  jobject peer)
1105  {  {
1106    gdk_threads_leave ();    jint keycode;
1107      jint keylocation;
1108    
1109      keycode = keysym_to_awt_keycode (event);
1110      keylocation = keysym_to_awt_keylocation (event);
1111    
1112      /* Return immediately if an error occurs translating a hardware
1113         keycode to a keyval. */
1114      if (keycode < 0 || keylocation < 0)
1115        return TRUE;
1116    
1117    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1118                                  postKeyEventID,                                  postKeyEventID,
1119                                  (jint) AWT_KEY_RELEASED,                                  (jint) AWT_KEY_RELEASED,
1120                                  (jlong) event->time,                                  (jlong) event->time,
1121                                  keyevent_state_to_awt_mods (event),                                  keyevent_state_to_awt_mods (event),
1122                                  keysym_to_awt_keycode (event),                                  keycode,
1123                                  keyevent_to_awt_keychar (event),                                  keyevent_to_awt_keychar (event),
1124                                  keysym_to_awt_keylocation (event));                                  keylocation);
   
   gdk_threads_enter ();  
1125    
1126    return TRUE;    return TRUE;
1127  }  }
# Line 1218  Java_gnu_java_awt_peer_gtk_GtkWindowPeer Line 1230  Java_gnu_java_awt_peer_gtk_GtkWindowPeer
1230  }  }
1231    
1232  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
1233  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNative
1234    (JNIEnv *env, jobject obj, jboolean visible)    (JNIEnv *env, jobject obj, jboolean visible)
1235  {  {
   void *ptr;  
   
1236    gdk_threads_enter ();    gdk_threads_enter ();
1237    
1238      Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNativeUnlocked
1239        (env, obj, visible);
1240    
1241      gdk_flush ();
1242    
1243      gdk_threads_leave ();
1244    }
1245    
1246    JNIEXPORT void JNICALL
1247    Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNativeUnlocked
1248      (JNIEnv *env, jobject obj, jboolean visible)
1249    {
1250      void *ptr;
1251    
1252    ptr = NSA_GET_PTR (env, obj);    ptr = NSA_GET_PTR (env, obj);
1253    
1254    if (visible)    if (visible)
1255      gtk_widget_show (GTK_WIDGET (ptr));      gtk_widget_show (GTK_WIDGET (ptr));
1256    else    else
1257      gtk_widget_hide (GTK_WIDGET (ptr));      gtk_widget_hide (GTK_WIDGET (ptr));
   
   XFlush (GDK_DISPLAY ());  
   
   gdk_threads_leave ();  
1258  }  }
1259    
1260  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
# Line 1349  Java_gnu_java_awt_peer_gtk_GtkWindowPeer Line 1369  Java_gnu_java_awt_peer_gtk_GtkWindowPeer
1369  }  }
1370    
1371  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBoundsCallback  
   (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),  
    jobject window, jint x, jint y, jint width, jint height)  
 {  
   /* Circumvent package-private access to call Window's  
      setBoundsCallback method. */  
   (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), window, setBoundsCallbackID,  
                               x, y, width, height);  
 }  
   
 JNIEXPORT void JNICALL  
1372  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize
1373    (JNIEnv *env, jobject obj, jint width, jint height)    (JNIEnv *env, jobject obj, jint width, jint height)
1374  {  {
# Line 1382  JNIEXPORT void JNICALL Line 1391  JNIEXPORT void JNICALL
1391  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds
1392    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)    (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
1393  {  {
   void *ptr;  
   
1394    gdk_threads_enter ();    gdk_threads_enter ();
1395    
1396      Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked
1397        (env, obj, x, y, width, height);
1398    
1399      gdk_threads_leave ();
1400    }
1401    
1402    JNIEXPORT void JNICALL
1403    Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked
1404      (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
1405    {
1406      void *ptr;
1407    
1408    ptr = NSA_GET_PTR (env, obj);    ptr = NSA_GET_PTR (env, obj);
1409    
1410    /* Avoid GTK runtime assertion failures. */    /* Avoid GTK runtime assertion failures. */
# Line 1414  Java_gnu_java_awt_peer_gtk_GtkWindowPeer Line 1433  Java_gnu_java_awt_peer_gtk_GtkWindowPeer
1433       by the program and the window's "resizable" property is true then       by the program and the window's "resizable" property is true then
1434       the size request will not be honoured. */       the size request will not be honoured. */
1435    gtk_window_resize (GTK_WINDOW (ptr), width, height);    gtk_window_resize (GTK_WINDOW (ptr), width, height);
   
   gdk_threads_leave ();  
1436  }  }
1437    
1438  static void  static void
# Line 1427  window_get_frame_extents (GtkWidget *win Line 1444  window_get_frame_extents (GtkWidget *win
1444    
1445    /* Guess frame extents in case _NET_FRAME_EXTENTS is not    /* Guess frame extents in case _NET_FRAME_EXTENTS is not
1446       supported. */       supported. */
1447    *top = 23;    if (gtk_window_get_decorated (GTK_WINDOW (window)))
1448    *left = 6;      {
1449    *bottom = 6;        *top = 23;
1450    *right = 6;        *left = 6;
1451          *bottom = 6;
1452          *right = 6;
1453        }
1454      else
1455        {
1456          *top = 0;
1457          *left = 0;
1458          *bottom = 0;
1459          *right = 0;
1460        }
1461    
1462    /* Request that the window manager set window's    /* Request that the window manager set window's
1463       _NET_FRAME_EXTENTS property. */       _NET_FRAME_EXTENTS property. */
# Line 1531  window_delete_cb (GtkWidget *widget __at Line 1558  window_delete_cb (GtkWidget *widget __at
1558                    GdkEvent *event __attribute__((unused)),                    GdkEvent *event __attribute__((unused)),
1559                    jobject peer)                    jobject peer)
1560  {  {
   gdk_threads_leave ();  
   
1561    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1562                                postWindowEventID,                                postWindowEventID,
1563                                (jint) AWT_WINDOW_CLOSING,                                (jint) AWT_WINDOW_CLOSING,
1564                                (jobject) NULL, (jint) 0);                                (jobject) NULL, (jint) 0);
1565    
   gdk_threads_enter ();  
   
1566    /* Prevents that the Window dissappears ("destroy"    /* Prevents that the Window dissappears ("destroy"
1567       not being signalled). This is necessary because it       not being signalled). This is necessary because it
1568       should be up to a WindowListener implementation       should be up to a WindowListener implementation
# Line 1552  window_destroy_cb (GtkWidget *widget __a Line 1575  window_destroy_cb (GtkWidget *widget __a
1575                     GdkEvent *event __attribute__((unused)),                     GdkEvent *event __attribute__((unused)),
1576                     jobject peer)                     jobject peer)
1577  {  {
   gdk_threads_leave ();  
   
1578    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1579                                postWindowEventID,                                postWindowEventID,
1580                                (jint) AWT_WINDOW_CLOSED,                                (jint) AWT_WINDOW_CLOSED,
1581                                (jobject) NULL, (jint) 0);                                (jobject) NULL, (jint) 0);
   
   gdk_threads_enter ();  
1582  }  }
1583    
1584  static void  static void
1585  window_show_cb (GtkWidget *widget __attribute__((unused)),  window_show_cb (GtkWidget *widget __attribute__((unused)),
1586                  jobject peer)                  jobject peer)
1587  {  {
   gdk_threads_leave ();  
   
1588    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1589                                postWindowEventID,                                postWindowEventID,
1590                                (jint) AWT_WINDOW_OPENED,                                (jint) AWT_WINDOW_OPENED,
1591                                (jobject) NULL, (jint) 0);                                (jobject) NULL, (jint) 0);
   
   gdk_threads_enter ();  
1592  }  }
1593    
1594  static void  static void
# Line 1606  window_focus_state_change_cb (GtkWidget Line 1621  window_focus_state_change_cb (GtkWidget
1621                                GParamSpec *pspec __attribute__((unused)),                                GParamSpec *pspec __attribute__((unused)),
1622                                jobject peer)                                jobject peer)
1623  {  {
   gdk_threads_leave ();  
   
1624    if (GTK_WINDOW (widget)->has_toplevel_focus)    if (GTK_WINDOW (widget)->has_toplevel_focus)
1625      (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,      (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1626                                  postWindowEventID,                                  postWindowEventID,
# Line 1618  window_focus_state_change_cb (GtkWidget Line 1631  window_focus_state_change_cb (GtkWidget
1631                                  postWindowEventID,                                  postWindowEventID,
1632                                  (jint) AWT_WINDOW_DEACTIVATED,                                  (jint) AWT_WINDOW_DEACTIVATED,
1633                                  (jobject) NULL, (jint) 0);                                  (jobject) NULL, (jint) 0);
   
   gdk_threads_enter ();  
1634  }  }
1635    
1636  static gboolean  static gboolean
# Line 1627  window_focus_in_cb (GtkWidget * widget Line 1638  window_focus_in_cb (GtkWidget * widget
1638                      GdkEventFocus *event  __attribute__((unused)),                      GdkEventFocus *event  __attribute__((unused)),
1639                      jobject peer)                      jobject peer)
1640  {  {
   gdk_threads_leave ();  
   
1641    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1642                                postWindowEventID,                                postWindowEventID,
1643                                (jint) AWT_WINDOW_GAINED_FOCUS,                                (jint) AWT_WINDOW_GAINED_FOCUS,
1644                                (jobject) NULL, (jint) 0);                                (jobject) NULL, (jint) 0);
1645    
   gdk_threads_enter ();  
   
1646    return FALSE;    return FALSE;
1647  }  }
1648    
# Line 1644  window_focus_out_cb (GtkWidget * widget Line 1651  window_focus_out_cb (GtkWidget * widget
1651                       GdkEventFocus *event __attribute__((unused)),                       GdkEventFocus *event __attribute__((unused)),
1652                       jobject peer)                       jobject peer)
1653  {  {
   gdk_threads_leave ();  
   
1654    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1655                                postWindowEventID,                                postWindowEventID,
1656                                (jint) AWT_WINDOW_LOST_FOCUS,                                (jint) AWT_WINDOW_LOST_FOCUS,
1657                                (jobject) NULL, (jint) 0);                                (jobject) NULL, (jint) 0);
1658    
   gdk_threads_enter ();  
   
1659    return FALSE;    return FALSE;
1660  }  }
1661    
# Line 1670  window_window_state_cb (GtkWidget *widge Line 1673  window_window_state_cb (GtkWidget *widge
1673        if (event->window_state.new_window_state & GDK_WINDOW_STATE_ICONIFIED)        if (event->window_state.new_window_state & GDK_WINDOW_STATE_ICONIFIED)
1674          {          {
1675            /* We've been iconified. */            /* We've been iconified. */
           gdk_threads_leave ();  
   
1676            (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,            (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1677                                        postWindowEventID,                                        postWindowEventID,
1678                                        (jint) AWT_WINDOW_ICONIFIED,                                        (jint) AWT_WINDOW_ICONIFIED,
1679                                        (jobject) NULL, (jint) 0);                                        (jobject) NULL, (jint) 0);
   
           gdk_threads_enter ();  
1680          }          }
1681        else        else
1682          {          {
1683            /* We've been deiconified. */            /* We've been deiconified. */
           gdk_threads_leave ();  
   
1684            (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,            (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1685                                        postWindowEventID,                                        postWindowEventID,
1686                                        (jint) AWT_WINDOW_DEICONIFIED,                                        (jint) AWT_WINDOW_DEICONIFIED,
1687                                        (jobject) NULL, (jint) 0);                                        (jobject) NULL, (jint) 0);
   
           gdk_threads_enter ();  
1688          }          }
1689      }      }
1690    
# Line 1702  window_window_state_cb (GtkWidget *widge Line 1697  window_window_state_cb (GtkWidget *widge
1697    
1698    new_state |= window_get_new_state (widget);    new_state |= window_get_new_state (widget);
1699    
   gdk_threads_leave ();  
   
1700    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1701                                postWindowEventID,                                postWindowEventID,
1702                                (jint) AWT_WINDOW_STATE_CHANGED,                                (jint) AWT_WINDOW_STATE_CHANGED,
1703                                (jobject) NULL, new_state);                                (jobject) NULL, new_state);
1704    
   gdk_threads_enter ();  
   
1705    return TRUE;    return TRUE;
1706  }  }
1707    
# Line 1776  window_property_changed_cb (GtkWidget *w Line 1767  window_property_changed_cb (GtkWidget *w
1767                             NULL,                             NULL,
1768                             gu_ex.gu_extents))                             gu_ex.gu_extents))
1769      {      {
       gdk_threads_leave ();  
   
1770        (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,        (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
1771                                      postInsetsChangedEventID,                                      postInsetsChangedEventID,
1772                                      (jint) extents[2],  /* top */                                      (jint) extents[2],  /* top */
1773                                      (jint) extents[0],  /* left */                                      (jint) extents[0],  /* left */
1774                                      (jint) extents[3],  /* bottom */                                      (jint) extents[3],  /* bottom */
1775                                      (jint) extents[1]); /* right */                                      (jint) extents[1]); /* right */
   
       gdk_threads_enter ();  
1776      }      }
1777        
1778    

Legend:
Removed from v.1.31.2.9  
changed lines
  Added in v.1.31.2.10

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