summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorSoeren Sandmann <sandmann@daimi.au.dk>2003-09-21 21:17:44 +0000
committerSøren Sandmann Pedersen <ssp@src.gnome.org>2003-09-21 21:17:44 +0000
commit8be8d7f61dd77ae9331c92ec692350e7947c6340 (patch)
tree9479ab378d6b111083d86c2e0cd469692062e256 /gtk
parent71e847d11c4a94291b8068eeae924a3978cc91c5 (diff)
downloadgdk-pixbuf-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')
-rw-r--r--gtk/gtktextview.c70
-rw-r--r--gtk/gtktextview.h10
2 files changed, 73 insertions, 7 deletions
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index c79c136a6..b82dec790 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 fb6559070..c82ea1de9 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);