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

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

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

revision 1.21 by mark, Sat Jul 2 20:32:54 2005 UTC revision 1.22 by fitzsim, Mon Jul 4 23:56:36 2005 UTC
# Line 39  exception statement from your version. * Line 39  exception statement from your version. *
39  #include "gtkpeer.h"  #include "gtkpeer.h"
40  #include "gnu_java_awt_peer_gtk_GtkTextAreaPeer.h"  #include "gnu_java_awt_peer_gtk_GtkTextAreaPeer.h"
41    
 #define TEXT_FROM_SW(obj) (GTK_TEXT_VIEW(GTK_SCROLLED_WINDOW (obj)->container.child))  
42  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
43  Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create  Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
44    (JNIEnv *env, jobject obj,    (JNIEnv *env, jobject obj,
# Line 47  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 46  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
46  {  {
47    GtkWidget *text, *sw;    GtkWidget *text, *sw;
48    
49      gdk_threads_enter ();
50    
51    /* Create global reference and save it for future use */    /* Create global reference and save it for future use */
52    NSA_SET_GLOBAL_REF (env, obj);    NSA_SET_GLOBAL_REF (env, obj);
53    
   gdk_threads_enter ();  
   
54    text = gtk_text_view_new ();    text = gtk_text_view_new ();
55    gtk_widget_set_size_request (text, textview_width, textview_height);    gtk_widget_set_size_request (text, textview_width, textview_height);
56    gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW (text), TRUE);    gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW (text), TRUE);
# Line 76  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 75  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
75                                  || scroll == AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY)                                  || scroll == AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY)
76                                 ? GTK_WRAP_NONE : GTK_WRAP_WORD);                                 ? GTK_WRAP_NONE : GTK_WRAP_WORD);
77    
78      NSA_SET_PTR (env, obj, sw);
79    
80    gdk_threads_leave ();    gdk_threads_leave ();
81    }
82    
83    NSA_SET_PTR (env, obj, sw);  JNIEXPORT void JNICALL
84    Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_connectSignals
85      (JNIEnv *env, jobject obj)
86    {
87      GtkWidget *text = NULL;
88      GtkTextBuffer *buf;
89      void *ptr;
90      jobject *gref;
91    
92      gdk_threads_enter ();
93    
94      ptr = NSA_GET_PTR (env, obj);
95      gref = NSA_GET_GLOBAL_REF (env, obj);
96    
97      /* Unwrap the text view from the scrolled window */
98      text = gtk_bin_get_child (GTK_BIN (ptr));
99    
100      buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
101    
102      /* TextComponent signals */
103      classpath_gtk_textcomponent_connect_signals (G_OBJECT (buf), gref);
104    
105      /* Component signals */
106      classpath_gtk_component_connect_signals (G_OBJECT (text), gref);
107    
108      gdk_threads_leave ();
109  }  }
110    
111  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
# Line 90  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 117  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
117    GtkWidget *text;    GtkWidget *text;
118    void *ptr;    void *ptr;
119    const char *str;    const char *str;
120    int pos=position;  
121      gdk_threads_enter ();
122    
123    ptr = NSA_GET_PTR (env, obj);    ptr = NSA_GET_PTR (env, obj);
124    str = (*env)->GetStringUTFChars (env, contents, NULL);    str = (*env)->GetStringUTFChars (env, contents, NULL);
125        
126    gdk_threads_enter ();    text = gtk_bin_get_child (GTK_BIN (ptr));
   
   text = GTK_WIDGET (TEXT_FROM_SW (ptr));  
127    
128    buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));    buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
129    gtk_text_buffer_get_iter_at_offset (buf, &iter, pos);    gtk_text_buffer_get_iter_at_offset (buf, &iter, position);
130    gtk_text_buffer_insert (buf, &iter, str, strlen (str));    gtk_text_buffer_insert (buf, &iter, str, strlen (str));
131    
   gdk_threads_leave ();  
   
132    (*env)->ReleaseStringUTFChars (env, contents, str);    (*env)->ReleaseStringUTFChars (env, contents, str);
133    
134      gdk_threads_leave ();
135  }  }
136    
137  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
# Line 120  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 146  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
146    int mystart = start;    int mystart = start;
147    int myend = end;    int myend = end;
148    
149      gdk_threads_enter ();
150      
151    ptr = NSA_GET_PTR (env, obj);    ptr = NSA_GET_PTR (env, obj);
152    str = (*env)->GetStringUTFChars (env, contents, NULL);    str = (*env)->GetStringUTFChars (env, contents, NULL);
153        
154    gdk_threads_enter ();    text = gtk_bin_get_child (GTK_BIN (ptr));
     
   text = GTK_WIDGET (TEXT_FROM_SW (ptr));  
155    
156    buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));    buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
157    
# Line 136  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 162  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
162    gtk_text_buffer_get_iter_at_offset (buf, &iter, mystart);    gtk_text_buffer_get_iter_at_offset (buf, &iter, mystart);
163    gtk_text_buffer_insert(buf, &iter, str, strlen (str));    gtk_text_buffer_insert(buf, &iter, str, strlen (str));
164    
   gdk_threads_leave ();  
165    (*env)->ReleaseStringUTFChars (env, contents, str);    (*env)->ReleaseStringUTFChars (env, contents, str);
166    
167      gdk_threads_leave ();
168  }  }
169    
170  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
# Line 149  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 176  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
176    GtkWidget *text;    GtkWidget *text;
177    PangoFontDescription *font_desc;    PangoFontDescription *font_desc;
178    
179      gdk_threads_enter();
180    
181    ptr = NSA_GET_PTR (env, obj);    ptr = NSA_GET_PTR (env, obj);
182    
183    text = GTK_WIDGET (TEXT_FROM_SW (ptr));    text = gtk_bin_get_child (GTK_BIN (ptr));
184    
185    font_name = (*env)->GetStringUTFChars (env, name, NULL);    font_name = (*env)->GetStringUTFChars (env, name, NULL);
186    
   gdk_threads_enter();  
   
187    font_desc = pango_font_description_from_string (font_name);    font_desc = pango_font_description_from_string (font_name);
188    pango_font_description_set_size (font_desc, size * dpi_conversion_factor);    pango_font_description_set_size (font_desc,
189                                       size * dpi_conversion_factor);
190    
191    if (style & AWT_STYLE_BOLD)    if (style & AWT_STYLE_BOLD)
192      pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);      pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
# Line 170  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 198  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
198    
199    pango_font_description_free (font_desc);    pango_font_description_free (font_desc);
200    
   gdk_threads_leave();  
   
201    (*env)->ReleaseStringUTFChars (env, name, font_name);    (*env)->ReleaseStringUTFChars (env, name, font_name);
202    
203      gdk_threads_leave();
204  }  }
205    
206  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
# Line 182  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 210  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
210    void *ptr;    void *ptr;
211    GtkWidget *text;    GtkWidget *text;
212    
   ptr = NSA_GET_PTR (env, obj);  
     
213    gdk_threads_enter ();    gdk_threads_enter ();
214    
215    text = GTK_WIDGET (TEXT_FROM_SW (ptr));    ptr = NSA_GET_PTR (env, obj);
216      
217      text = gtk_bin_get_child (GTK_BIN (ptr));
218    
219    gtk_widget_grab_focus (text);    gtk_widget_grab_focus (text);
220    
# Line 203  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 231  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
231    jint height = 0;    jint height = 0;
232    jint spacing = 0;    jint spacing = 0;
233    
234      gdk_threads_enter ();
235    
236    ptr = NSA_GET_PTR (env, obj);    ptr = NSA_GET_PTR (env, obj);
237    
   gdk_threads_enter ();  
238    sw = GTK_SCROLLED_WINDOW (ptr);    sw = GTK_SCROLLED_WINDOW (ptr);
239    
240    if (sw)    if (sw)
# Line 230  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 259  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
259    jint width = 0;    jint width = 0;
260    jint spacing = 0;    jint spacing = 0;
261    
262      gdk_threads_enter ();
263    
264    ptr = NSA_GET_PTR (env, obj);    ptr = NSA_GET_PTR (env, obj);
265    
   gdk_threads_enter ();  
266    sw = GTK_SCROLLED_WINDOW (ptr);    sw = GTK_SCROLLED_WINDOW (ptr);
267    
268    if (sw)    if (sw)
# Line 246  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe Line 276  Java_gnu_java_awt_peer_gtk_GtkTextAreaPe
276    
277    return width;    return width;
278  }  }
279    
280    JNIEXPORT jint JNICALL
281    Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getCaretPosition
282      (JNIEnv *env, jobject obj)
283    {
284      void *ptr;
285      int pos = 0;
286      GtkWidget *text = NULL;
287      GtkTextBuffer *buf;
288      GtkTextMark *mark;
289      GtkTextIter iter;
290    
291      gdk_threads_enter ();
292    
293      ptr = NSA_GET_PTR (env, obj);
294    
295      text = gtk_bin_get_child (GTK_BIN (ptr));
296    
297      buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
298      mark = gtk_text_buffer_get_insert (buf);
299      gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
300      pos = gtk_text_iter_get_offset (&iter);
301    
302      gdk_threads_leave ();
303      
304      return pos;
305    }
306    
307    JNIEXPORT void JNICALL
308    Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setCaretPosition
309      (JNIEnv *env, jobject obj, jint pos)
310    {
311      void *ptr;
312      GtkWidget *text = NULL;
313      GtkTextBuffer *buf;
314      GtkTextIter iter;
315      GtkTextMark *oldmark;
316      GtkTextIter olditer;
317      int oldpos;
318    
319      gdk_threads_enter ();
320    
321      ptr = NSA_GET_PTR (env, obj);
322    
323      text = gtk_bin_get_child (GTK_BIN (ptr));
324    
325      buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
326    
327      /* Save old position. */
328      oldmark = gtk_text_buffer_get_insert (buf);
329      gtk_text_buffer_get_iter_at_mark (buf, &olditer, oldmark);
330      oldpos = gtk_text_iter_get_offset (&olditer);
331    
332      /* Move to new position. */
333      gtk_text_buffer_get_iter_at_offset (buf, &iter, pos);
334      gtk_text_buffer_place_cursor (buf, &iter);
335    
336      /* Scroll to new position. Alignment is determined
337         comparing the new position to the old position. */
338      if (oldpos > pos)
339        gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (text),
340                                      &iter, 0, TRUE, 0, 0);
341      else if (oldpos < pos)
342        gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (text),
343                                      &iter, 0, TRUE, 1, 1);
344    
345      gdk_threads_leave ();
346    }
347    
348    JNIEXPORT jint JNICALL
349    Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getSelectionStart
350      (JNIEnv *env, jobject obj)
351    {
352      void *ptr;
353      int pos = 0;
354      GtkWidget *text = NULL;
355      GtkTextBuffer *buf;
356      GtkTextIter start;
357      GtkTextIter end;
358      GtkTextMark *mark;
359      GtkTextIter iter;
360    
361      gdk_threads_enter ();
362    
363      ptr = NSA_GET_PTR (env, obj);
364    
365      text = gtk_bin_get_child (GTK_BIN (ptr));
366    
367      buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
368    
369      if (gtk_text_buffer_get_selection_bounds (buf, &start, &end))
370        {
371          pos = gtk_text_iter_get_offset (&start);
372        }
373      else
374        {
375          mark = gtk_text_buffer_get_insert (buf);
376          gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
377          pos = gtk_text_iter_get_offset (&iter);
378        }
379    
380      gdk_threads_leave ();
381    
382      return pos;
383    }
384    
385    JNIEXPORT jint JNICALL
386    Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getSelectionEnd
387      (JNIEnv *env, jobject obj)
388    {
389      void *ptr;
390      int pos = 0;
391      GtkWidget *text = NULL;
392      GtkTextBuffer *buf;
393      GtkTextIter start;
394      GtkTextIter end;
395      GtkTextMark *mark;
396      GtkTextIter iter;
397    
398      gdk_threads_enter ();
399    
400      ptr = NSA_GET_PTR (env, obj);
401    
402      text = gtk_bin_get_child (GTK_BIN (ptr));
403    
404      buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
405    
406      if (gtk_text_buffer_get_selection_bounds (buf, &start, &end))
407        {
408          pos = gtk_text_iter_get_offset (&end);
409        }
410      else
411        {
412          mark = gtk_text_buffer_get_insert (buf);
413          gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
414          pos = gtk_text_iter_get_offset (&iter);
415        }
416    
417      gdk_threads_leave ();
418    
419      return pos;
420    }
421    
422    JNIEXPORT void JNICALL
423    Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_select
424      (JNIEnv *env, jobject obj, jint start, jint end)
425    {
426      void *ptr;
427      GtkWidget *text = NULL;
428      GtkTextBuffer *buf;
429      GtkTextIter iter;
430    
431      gdk_threads_enter ();
432    
433      ptr = NSA_GET_PTR (env, obj);
434    
435      text = gtk_bin_get_child (GTK_BIN (ptr));
436    
437      buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
438      gtk_text_buffer_get_iter_at_offset (buf, &iter, start);
439      /* quickly move both 'insert' and 'selection_bound' to the
440         same position */
441      gtk_text_buffer_place_cursor (buf, &iter);  
442      gtk_text_buffer_get_iter_at_offset (buf, &iter, end);
443      gtk_text_buffer_move_mark_by_name (buf, "selection_bound", &iter);
444    
445      gdk_threads_leave ();
446    }
447    
448    JNIEXPORT void JNICALL
449    Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setEditable
450      (JNIEnv *env, jobject obj, jboolean state)
451    {
452      void *ptr;
453      GtkWidget *text = NULL;
454    
455      gdk_threads_enter ();
456    
457      ptr = NSA_GET_PTR (env, obj);
458    
459      text = gtk_bin_get_child (GTK_BIN (ptr));
460    
461      gtk_text_view_set_editable (GTK_TEXT_VIEW (text), state);
462    
463      gdk_threads_leave ();
464    }
465    
466    JNIEXPORT jstring JNICALL
467    Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getText
468      (JNIEnv *env, jobject obj)
469    {
470      void *ptr;
471      char *contents = NULL;
472      jstring jcontents;
473      GtkWidget *text = NULL;
474      GtkTextBuffer *buf;
475      GtkTextIter start, end;
476    
477      gdk_threads_enter ();
478    
479      ptr = NSA_GET_PTR (env, obj);
480      
481      text = gtk_bin_get_child (GTK_BIN (ptr));
482    
483      buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
484      gtk_text_buffer_get_start_iter (buf, &start);
485      gtk_text_buffer_get_end_iter (buf, &end);
486      contents = gtk_text_buffer_get_text (buf, &start, &end, FALSE);
487    
488      jcontents = (*env)->NewStringUTF (env, contents);
489      g_free (contents);
490    
491      gdk_threads_leave ();
492    
493      return jcontents;
494    }
495    
496    JNIEXPORT void JNICALL
497    Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setText
498      (JNIEnv *env, jobject obj, jstring contents)
499    {
500      void *ptr;
501      const char *str;
502      GtkWidget *text = NULL;
503      GtkTextBuffer *buf;
504    
505      gdk_threads_enter ();
506    
507      ptr = NSA_GET_PTR (env, obj);
508      str = (*env)->GetStringUTFChars (env, contents, NULL);
509    
510      text = gtk_bin_get_child (GTK_BIN (ptr));
511    
512      buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
513      gtk_text_buffer_set_text (buf, str, strlen (str));
514    
515      (*env)->ReleaseStringUTFChars (env, contents, str);
516    
517      gdk_threads_leave ();
518    }

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22

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