Better smart wrapping.
[claws.git] / src / gtkstext.c
index a46b3def0f7c2e049f752a6059a73f57c04c7562..6e75dce3aa924407e7f4f945c6840801f9477e8b 100644 (file)
@@ -999,6 +999,16 @@ gtk_stext_thaw (GtkSText *text)
   draw_cursor (text, FALSE);
 }
 
+void
+gtk_stext_compact_buffer (GtkSText    *text)
+{
+  GtkEditable *editable = GTK_EDITABLE (text);
+
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (GTK_IS_STEXT (text));
+  move_gap (text, gtk_stext_get_length(text));
+}
+
 void
 gtk_stext_insert (GtkSText    *text,
                 GdkFont    *font,
@@ -2189,8 +2199,17 @@ gtk_stext_key_press (GtkWidget   *widget,
       switch (event->keyval)
        {
        case GDK_Home:
-         if (event->state & GDK_CONTROL_MASK)
-           move_cursor_buffer_ver (text, -1);
+         if (event->state & GDK_CONTROL_MASK) {
+               if (text->wrap_rmargin == 0) {
+                       /* SYLPHEED: old behaviour */
+                       move_cursor_buffer_ver (text, -1);
+               }
+               else {
+                       /* SYLPHEED: contrived, but "trusty" */
+                       move_cursor_buffer_ver(text, -1);
+                       move_cursor_to_display_row_start(text);
+               }
+         }     
          else {
                if (text->wrap_rmargin > 0) {
                        /* SYLPHEED: line start */
@@ -2202,8 +2221,17 @@ gtk_stext_key_press (GtkWidget   *widget,
          }     
          break;
        case GDK_End:
-         if (event->state & GDK_CONTROL_MASK)
-           move_cursor_buffer_ver (text, +1);
+         if (event->state & GDK_CONTROL_MASK) {
+               /* SYLPHEED: a little bit contrived... */
+               if (text->wrap_rmargin == 0) {
+                       /* old behaviour */
+                       move_cursor_buffer_ver (text, +1);
+               }
+               else {
+                       move_cursor_buffer_ver(text, +1);
+                       move_cursor_to_display_row_end(text);
+               }
+         }             
          else {
                if (text->wrap_rmargin > 0) {
                        /* SYLPHEED: line end */
@@ -2231,7 +2259,7 @@ gtk_stext_key_press (GtkWidget   *widget,
                break;
        case GDK_Down:      
                move_cursor_to_display_row_down(text);
-//             move_cursor_ver (text, +1); 
+/*             move_cursor_ver (text, +1);  */
                break;
        case GDK_Left:
          if (event->state & GDK_CONTROL_MASK)