diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtktextview.c | 70 | ||||
-rw-r--r-- | gtk/gtktextview.h | 10 |
2 files changed, 73 insertions, 7 deletions
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index c79c136a65..b82dec7906 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -140,6 +140,7 @@ enum PROP_CURSOR_VISIBLE, PROP_BUFFER, PROP_OVERWRITE, + PROP_TAB_MOVES_FOCUS, LAST_PROP }; @@ -666,7 +667,14 @@ gtk_text_view_class_init (GtkTextViewClass *klass) FALSE, G_PARAM_READWRITE)); - + g_object_class_install_property (gobject_class, + PROP_TAB_MOVES_FOCUS, + g_param_spec_boolean ("tab_moves_focus", + _("Tab moves focus"), + _("Whether tab moves focus"), + FALSE, + G_PARAM_READWRITE)); + /* * Signals */ @@ -2592,6 +2600,10 @@ gtk_text_view_set_property (GObject *object, gtk_text_view_set_buffer (text_view, GTK_TEXT_BUFFER (g_value_get_object (value))); break; + case PROP_TAB_MOVES_FOCUS: + gtk_text_view_set_tab_moves_focus (text_view, g_value_get_boolean (value)); + break; + default: g_assert_not_reached (); break; @@ -2661,6 +2673,10 @@ gtk_text_view_get_property (GObject *object, case PROP_OVERWRITE: g_value_set_boolean (value, text_view->overwrite_mode); break; + + case PROP_TAB_MOVES_FOCUS: + g_value_set_boolean (value, text_view->tab_moves_focus); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -3795,10 +3811,10 @@ gtk_text_view_key_press_event (GtkWidget *widget, GdkEventKey *event) event->keyval == GDK_KP_Tab) && !(event->state & GDK_CONTROL_MASK)) { - /* If the text widget isn't editable overall, move the focus - * instead + /* If the text widget isn't editable overall, or if the application + * has turned on "tab_moves_focus", move the focus instead */ - if (text_view->editable) + if (!text_view->tab_moves_focus && text_view->editable) { gtk_text_view_commit_text (text_view, "\t"); obscure = TRUE; @@ -5169,6 +5185,52 @@ gtk_text_view_set_overwrite (GtkTextView *text_view, } } +/** + * gtk_text_view_set_tab_moves_focus: + * @text_view: A #GtkTextView + * @tab_moves_focus: %TRUE if pressing the Tab should move the keyboard focus, %FALSE, if pressing the Tab key should insert a Tab character. + * + * Sets the behavior of the text widget when the Tab key is pressed. If @tab_moves_focus + * is %TRUE the keyboard focus is moved to the next widget in the focus chain. If + * @tab_moves_focus is %FALSE a tab character is inserted. + * + * Since: 2.4 + **/ +void +gtk_text_view_set_tab_moves_focus (GtkTextView *text_view, + gboolean tab_moves_focus) +{ + g_return_if_fail (GTK_IS_TEXT_VIEW (text_view)); + + tab_moves_focus = tab_moves_focus != FALSE; + + if (text_view->tab_moves_focus != tab_moves_focus) + { + text_view->tab_moves_focus = tab_moves_focus; + + g_object_notify (G_OBJECT (text_view), "tab_moves_focus"); + } +} + +/** + * gtk_text_view_get_tab_moves_focus: + * @text_view: A #GtkTextView + * + * Returns whether pressing the Tab key moves the keyboard focus. See + * gtk_text_view_set_tab_moves_focus(). + * + * Return value: %TRUE if pressing the Tab key moves the keyboard focus. + * + * Since: 2.4 + **/ +gboolean +gtk_text_view_get_tab_moves_focus (GtkTextView *text_view) +{ + g_return_val_if_fail (GTK_IS_TEXT_VIEW (text_view), FALSE); + + return text_view->tab_moves_focus; +} + static void gtk_text_view_move_focus (GtkTextView *text_view, GtkDirectionType direction_type) diff --git a/gtk/gtktextview.h b/gtk/gtktextview.h index fb65590706..c82ea1de98 100644 --- a/gtk/gtktextview.h +++ b/gtk/gtktextview.h @@ -93,9 +93,10 @@ struct _GtkTextView /* if we have reset the IM since the last character entered */ guint need_im_reset : 1; - /* these flags are no longer used */ - guint reserved1 : 1; - guint reserved2 : 1; + guint tab_moves_focus : 1; + + /* this flag is no longer used */ + guint reserved : 1; /* debug flag - means that we've validated onscreen since the * last "invalidate" signal from the layout @@ -326,6 +327,9 @@ gboolean gtk_text_view_get_editable (GtkTextView *text_vi void gtk_text_view_set_overwrite (GtkTextView *text_view, gboolean overwrite); gboolean gtk_text_view_get_overwrite (GtkTextView *text_view); +void gtk_text_view_set_tab_moves_focus (GtkTextView *text_view, + gboolean tab_moves_focus); +gboolean gtk_text_view_get_tab_moves_focus (GtkTextView *text_view); void gtk_text_view_set_pixels_above_lines (GtkTextView *text_view, gint pixels_above_lines); gint gtk_text_view_get_pixels_above_lines (GtkTextView *text_view); |