[gtksourceview/wip/smart-backspace: 3/3] view: add configuration to the smart-backspace



commit 64ea90ee4c9d121b28d3e373c25ff5c703960dce
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Sun Aug 16 14:26:47 2015 +0200

    view: add configuration to the smart-backspace

 docs/reference/gtksourceview-3.0-sections.txt |    1 +
 gtksourceview/gtksourceview.c                 |   50 ++++++++++++-------------
 gtksourceview/gtksourceview.h                 |   27 ++++++++++++-
 3 files changed, 49 insertions(+), 29 deletions(-)
---
diff --git a/docs/reference/gtksourceview-3.0-sections.txt b/docs/reference/gtksourceview-3.0-sections.txt
index 5d88b23..9bf5791 100644
--- a/docs/reference/gtksourceview-3.0-sections.txt
+++ b/docs/reference/gtksourceview-3.0-sections.txt
@@ -831,6 +831,7 @@ gtk_source_utils_escape_search_text
 GtkSourceView
 GtkSourceSmartHomeEndType
 GtkSourceDrawSpacesFlags
+GtkSourceSpaceLocation
 GtkSourceViewGutterPosition
 GtkSourceBackgroundPatternType
 gtk_source_view_new
diff --git a/gtksourceview/gtksourceview.c b/gtksourceview/gtksourceview.c
index 4bc24f0..536f00a 100644
--- a/gtksourceview/gtksourceview.c
+++ b/gtksourceview/gtksourceview.c
@@ -191,6 +191,7 @@ struct _GtkSourceViewPrivate
        GtkSourceSmartHomeEndType smart_home_end;
        GtkSourceBackgroundPatternType background_pattern;
        GdkRGBA background_pattern_color;
+       GtkSourceSpaceLocation smart_backspace;
 
        guint tabs_set : 1;
        guint show_line_numbers : 1;
@@ -203,7 +204,6 @@ struct _GtkSourceViewPrivate
        guint style_scheme_applied : 1;
        guint current_line_color_set : 1;
        guint background_pattern_color_set : 1;
-       guint smart_backspace : 1;
 };
 
 typedef struct _MarkCategory MarkCategory;
@@ -657,17 +657,20 @@ gtk_source_view_class_init (GtkSourceViewClass *klass)
        /**
         * GtkSourceView:smart-backspace:
         *
-        * Whether smart Backspace should be used.
+        * Where the smart Backspace is enabled.
         *
         * Since: 3.18
         */
        g_object_class_install_property (object_class,
                                         PROP_SMART_BACKSPACE,
-                                        g_param_spec_boolean ("smart-backspace",
-                                                              "Smart Backspace",
-                                                              "",
-                                                              FALSE,
-                                                              G_PARAM_READWRITE));
+                                        g_param_spec_flags ("smart-backspace",
+                                                            "Smart Backspace",
+                                                            "",
+                                                            GTK_SOURCE_TYPE_SPACE_LOCATION,
+                                                            GTK_SOURCE_SPACE_LOCATION_NOWHERE,
+                                                            G_PARAM_READWRITE |
+                                                            G_PARAM_CONSTRUCT |
+                                                            G_PARAM_STATIC_STRINGS));
 
        signals[UNDO] =
                g_signal_new ("undo",
@@ -1132,7 +1135,7 @@ gtk_source_view_set_property (GObject      *object,
                        break;
 
                case PROP_SMART_BACKSPACE:
-                       gtk_source_view_set_smart_backspace (view, g_value_get_boolean (value));
+                       gtk_source_view_set_smart_backspace (view, g_value_get_flags (value));
                        break;
 
                default:
@@ -1212,7 +1215,7 @@ gtk_source_view_get_property (GObject    *object,
                        break;
 
                case PROP_SMART_BACKSPACE:
-                       g_value_set_boolean (value, gtk_source_view_get_smart_backspace (view));
+                       g_value_set_flags (value, gtk_source_view_get_smart_backspace (view));
                        break;
 
                default:
@@ -4289,7 +4292,8 @@ gtk_source_view_key_press_event (GtkWidget   *widget,
                return GDK_EVENT_STOP;
        }
 
-       if ((key == GDK_KEY_BackSpace) && view->priv->smart_backspace)
+       if ((key == GDK_KEY_BackSpace) &&
+           view->priv->smart_backspace != GTK_SOURCE_SPACE_LOCATION_NOWHERE)
        {
                if (gtk_source_view_do_smart_backspace (view, (event->state & modifiers)))
                {
@@ -4625,24 +4629,22 @@ gtk_source_view_set_right_margin_position (GtkSourceView *view,
 /**
  * gtk_source_view_set_smart_backspace:
  * @view: a #GtkSourceView.
- * @smart_backspace: whether to enable smart Backspace handling.
+ * @locations: where to enable the smart Backspace.
  *
- * When set to %TRUE, pressing the Backspace key will try to delete spaces
- * up to the previous tab stop.
+ * Where the smart Backspace is enabled, pressing the Backspace key will try to
+ * delete spaces up to the previous tab stop.
  *
  * Since: 3.18
  */
 void
-gtk_source_view_set_smart_backspace (GtkSourceView *view,
-                                     gboolean       smart_backspace)
+gtk_source_view_set_smart_backspace (GtkSourceView          *view,
+                                    GtkSourceSpaceLocation  locations)
 {
        g_return_if_fail (GTK_SOURCE_IS_VIEW (view));
 
-       smart_backspace = smart_backspace != FALSE;
-
-       if (smart_backspace != view->priv->smart_backspace)
+       if (locations != view->priv->smart_backspace)
        {
-               view->priv->smart_backspace = smart_backspace;
+               view->priv->smart_backspace = locations;
                g_object_notify (G_OBJECT (view), "smart-backspace");
        }
 }
@@ -4651,17 +4653,13 @@ gtk_source_view_set_smart_backspace (GtkSourceView *view,
  * gtk_source_view_get_smart_backspace:
  * @view: a #GtkSourceView.
  *
- * Returns %TRUE if pressing the Backspace key will try to delete spaces
- * up to the previous tab stop.
- *
- * Returns: %TRUE if smart Backspace handling is enabled.
- *
+ * Returns: the locations where the smart Backspace is enabled.
  * Since: 3.18
  */
-gboolean
+GtkSourceSpaceLocation
 gtk_source_view_get_smart_backspace (GtkSourceView *view)
 {
-       g_return_val_if_fail (GTK_SOURCE_IS_VIEW (view), FALSE);
+       g_return_val_if_fail (GTK_SOURCE_IS_VIEW (view), GTK_SOURCE_SPACE_LOCATION_NOWHERE);
 
        return view->priv->smart_backspace;
 }
diff --git a/gtksourceview/gtksourceview.h b/gtksourceview/gtksourceview.h
index 2e2e9db..5e6e8dd 100644
--- a/gtksourceview/gtksourceview.h
+++ b/gtksourceview/gtksourceview.h
@@ -127,6 +127,26 @@ typedef enum
        GTK_SOURCE_DRAW_SPACES_ALL        = 0x7f
 } GtkSourceDrawSpacesFlags;
 
+/**
+ * GtkSourceSpaceLocation:
+ * @GTK_SOURCE_SPACE_LOCATION_NOWHERE: nowhere.
+ * @GTK_SOURCE_SPACE_LOCATION_LEADING: leading whitespaces.
+ * @GTK_SOURCE_SPACE_LOCATION_INTERNAL: whitespaces inside text.
+ * @GTK_SOURCE_SPACE_LOCATION_TRAILING: trailing whitespaces.
+ * @GTK_SOURCE_SPACE_LOCATION_EVERYWHERE: whitespaces everywhere.
+ *
+ * GtkSourceSpaceLocation describes the location of a whitespace on a line.
+ *
+ * Since: 3.18
+ */
+typedef enum
+{
+       GTK_SOURCE_SPACE_LOCATION_NOWHERE       = 0,
+       GTK_SOURCE_SPACE_LOCATION_LEADING       = 1 << 0,
+       GTK_SOURCE_SPACE_LOCATION_INTERNAL      = 1 << 1,
+       GTK_SOURCE_SPACE_LOCATION_TRAILING      = 1 << 2,
+       GTK_SOURCE_SPACE_LOCATION_EVERYWHERE    = 0xff
+} GtkSourceSpaceLocation;
 
 GType           gtk_source_view_get_type               (void) G_GNUC_CONST;
 
@@ -208,10 +228,11 @@ GtkSourceMarkAttributes *
                                                          const gchar             *category,
                                                          gint                    *priority);
 
-void            gtk_source_view_set_smart_backspace    (GtkSourceView   *view,
-                                                        gboolean        smart_backspace);
+void            gtk_source_view_set_smart_backspace    (GtkSourceView          *view,
+                                                        GtkSourceSpaceLocation  locations);
 
-gboolean        gtk_source_view_get_smart_backspace    (GtkSourceView   *view);
+GtkSourceSpaceLocation
+                gtk_source_view_get_smart_backspace    (GtkSourceView *view);
 
 void            gtk_source_view_set_smart_home_end     (GtkSourceView             *view,
                                                         GtkSourceSmartHomeEndType  smart_home_end);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]