diff options
author | Soeren Sandmann <sandmann@daimi.au.dk> | 2003-09-21 21:17:44 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2003-09-21 21:17:44 +0000 |
commit | 8be8d7f61dd77ae9331c92ec692350e7947c6340 (patch) | |
tree | 9479ab378d6b111083d86c2e0cd469692062e256 /gtk/gtktextview.c | |
parent | 71e847d11c4a94291b8068eeae924a3978cc91c5 (diff) | |
download | gtk+-8be8d7f61dd77ae9331c92ec692350e7947c6340.tar.gz |
Add new "tab moves focus" property (#122709)
Sun Sep 21 23:13:37 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709)
Diffstat (limited to 'gtk/gtktextview.c')
-rw-r--r-- | gtk/gtktextview.c | 70 |
1 files changed, 66 insertions, 4 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) |