]> Pileus Git - ~andy/gtk/commitdiff
Be more careful with the beeps
authorMatthias Clasen <matthiasc@src.gnome.org>
Sat, 31 Jan 2009 05:52:58 +0000 (05:52 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sat, 31 Jan 2009 05:52:58 +0000 (05:52 +0000)
svn path=/trunk/; revision=22262

ChangeLog
gtk/gtktextview.c

index dabf40ef140e59a0c8ca14a1ca3ed7f36509bce0..17fce4d906f96445b7ad4e18c9a526ef8a48cc0e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-01-30  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtktextview.c (preedit_changed_handler): Be more careful
+       with the beeps, since preedit-changed is occasionally emitted 
+       without actual input. Pointed out by Tor Lillqvist.
+
 2009-01-30  Matthias Clasen  <mclasen@redhat.com>
 
        Bug 569918 – 64bit portability issue in gtkrecentchooser.c
index fa494140d0f41142d70196d92b7d6a14a253ef09..bab4155bf789d66aca656c72d23d8373e3539838 100644 (file)
@@ -7320,21 +7320,24 @@ gtk_text_view_preedit_changed_handler (GtkIMContext *context,
 
   /* Keypress events are passed to input method even if cursor position is not editable;
    * so beep here if it's multi-key input sequence, input method will be reset in 
-   * key-press-event handler. */
-  if (!gtk_text_iter_can_insert (&iter, text_view->editable))
+   * key-press-event handler. 
+   */
+  gtk_im_context_get_preedit_string (context, &str, &attrs, &cursor_pos);
+
+  if (str && str[0] && !gtk_text_iter_can_insert (&iter, text_view->editable))
     {
       gtk_widget_error_bell (GTK_WIDGET (text_view));
-      return;
+      goto out;
     }
 
-  gtk_im_context_get_preedit_string (context, &str, &attrs, &cursor_pos);
   gtk_text_layout_set_preedit_string (text_view->layout, str, attrs, cursor_pos);
-  pango_attr_list_unref (attrs);
-  g_free (str);
-
   if (GTK_WIDGET_HAS_FOCUS (text_view))
     gtk_text_view_scroll_mark_onscreen (text_view,
                                        gtk_text_buffer_get_insert (get_buffer (text_view)));
+
+out:
+  pango_attr_list_unref (attrs);
+  g_free (str);
 }
 
 static gboolean