+ if (button->state & GDK_SHIFT_MASK)
+ {
+ /* Extend selection */
+ GtkTextIter start, end;
+
+ gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
+
+ if (gtk_text_iter_compare (&newplace, &start) <= 0)
+ {
+ gtk_text_buffer_move_mark_by_name (buffer, "insert",
+ &newplace);
+
+ gtk_text_buffer_move_mark_by_name (buffer, "selection_bound",
+ &end);
+ }
+ else if (gtk_text_iter_compare (&newplace, &end) >= 0)
+ {
+ gtk_text_buffer_move_mark_by_name (buffer, "insert",
+ &newplace);
+
+ gtk_text_buffer_move_mark_by_name (buffer, "selection_bound",
+ &start);
+ }
+ }
+ else
+ {
+ /* Replace selection */
+ gtk_text_buffer_place_cursor (buffer, &newplace);
+ }