[gnome-builder] Modified ctrl+f esc handler and added auto insert selected text or previous search into search entry



commit 9af5268875284b58c211fe63457702e843aa0dde
Author: Wolf Vollprecht <w vollprecht gmail com>
Date:   Sat May 9 12:55:01 2015 +0200

    Modified ctrl+f esc handler and added auto insert selected text or previous search into search entry
    
    https://bugzilla.gnome.org/show_bug.cgi?id=749117

 src/editor/gb-editor-frame-actions.c |   23 +++++++++++++++++++++++
 src/editor/gb-editor-frame-private.h |    2 ++
 src/editor/gb-editor-frame.c         |    5 ++---
 3 files changed, 27 insertions(+), 3 deletions(-)
---
diff --git a/src/editor/gb-editor-frame-actions.c b/src/editor/gb-editor-frame-actions.c
index eb5844d..955c803 100644
--- a/src/editor/gb-editor-frame-actions.c
+++ b/src/editor/gb-editor-frame-actions.c
@@ -27,9 +27,32 @@ gb_editor_frame_actions_find (GSimpleAction *action,
                               gpointer       user_data)
 {
   GbEditorFrame *self = user_data;
+  GtkTextIter start_sel, end_sel;
+  GtkTextBuffer *buffer;
 
+  gchar *selected_text;
   g_assert (GB_IS_EDITOR_FRAME (self));
 
+  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->source_view));
+
+  if (gtk_text_buffer_get_has_selection (buffer))
+  {
+    gtk_text_buffer_get_selection_bounds (buffer, &start_sel, &end_sel);
+
+    if(gtk_text_iter_get_line (&start_sel) == gtk_text_iter_get_line (&end_sel))
+    {
+      selected_text = gtk_text_buffer_get_text(buffer, &start_sel, &end_sel, FALSE);
+      gtk_entry_set_text (GTK_ENTRY (self->search_entry), selected_text);
+    }
+  }
+  else
+  {
+    if(self->previous_search_string != NULL)
+    {
+      gtk_entry_set_text (GTK_ENTRY (self->search_entry), self->previous_search_string);
+    }
+  }
+
   gtk_revealer_set_reveal_child (self->search_revealer, TRUE);
   gtk_widget_grab_focus (GTK_WIDGET (self->search_entry));
 }
diff --git a/src/editor/gb-editor-frame-private.h b/src/editor/gb-editor-frame-private.h
index 6ce85e1..d0eaa23 100644
--- a/src/editor/gb-editor-frame-private.h
+++ b/src/editor/gb-editor-frame-private.h
@@ -50,6 +50,8 @@ struct _GbEditorFrame
   gulong               cursor_moved_handler;
 
   guint                auto_hide_map : 1;
+
+  gchar               *previous_search_string;
 };
 
 G_END_DECLS
diff --git a/src/editor/gb-editor-frame.c b/src/editor/gb-editor-frame.c
index 509a126..569f343 100644
--- a/src/editor/gb-editor-frame.c
+++ b/src/editor/gb-editor-frame.c
@@ -1,3 +1,4 @@
+
 /* gb-editor-frame.c
  *
  * Copyright (C) 2015 Christian Hergert <christian hergert me>
@@ -412,7 +413,7 @@ gb_editor_frame__search_key_press_event (GbEditorFrame *self,
   switch (event->keyval)
     {
     case GDK_KEY_Escape:
-      ide_source_view_rollback_search (self->source_view);
+      self->previous_search_string = g_strdup (gtk_entry_get_text (GTK_ENTRY (self->search_entry)));
       ide_source_view_clear_search (self->source_view);
       ide_source_view_set_rubberband_search (self->source_view, FALSE);
       gtk_widget_grab_focus (GTK_WIDGET (self->source_view));
@@ -424,8 +425,6 @@ gb_editor_frame__search_key_press_event (GbEditorFrame *self,
         gb_widget_activate_action (GTK_WIDGET (self), "frame", "next-search-result", NULL);
       else
         gb_widget_activate_action (GTK_WIDGET (self), "frame", "previous-search-result", NULL);
-      ide_source_view_set_rubberband_search (self->source_view, FALSE);
-      gtk_widget_grab_focus (GTK_WIDGET (self->source_view));
       return TRUE;
 
     case GDK_KEY_Down:


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