From c1459ab5e3b3ee4b36002ede74ce5a53225f8adc Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Fri, 16 Jun 2023 18:23:05 +0100 Subject: [PATCH 1/5] Always search for search entry text if present --- src/MainWindow.vala | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/MainWindow.vala b/src/MainWindow.vala index 57ded41e2..c618b8a2f 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -1006,6 +1006,7 @@ namespace Scratch { /** Not a toggle action - linked to keyboard short cut (Ctrl-f). **/ private string current_search_term = ""; private void action_fetch (SimpleAction action, Variant? param) { + current_search_term = param.get_string (); if (!search_revealer.child_revealed) { var show_find_action = Utils.action_from_group (ACTION_SHOW_FIND, actions); @@ -1073,6 +1074,10 @@ namespace Scratch { search_bar.search_entry.text = current_search_term; search_bar.search_entry.grab_focus (); search_bar.search_next (); + } else if (search_bar.search_entry.text != "") { + // Always search on what is showing in search entry + current_search_term = search_bar.search_entry.text; + search_bar.search_entry.grab_focus (); } else { var current_doc = get_current_document (); // This is also called when all documents are closed. @@ -1080,6 +1085,7 @@ namespace Scratch { var selected_text = current_doc.get_selected_text (false); if (selected_text != "" && selected_text.length < MAX_SEARCH_TEXT_LENGTH) { current_search_term = selected_text.split ("\n", 2)[0]; + warning ("current search term now %s", current_search_term); search_bar.search_entry.text = current_search_term; } From 06e3a5ce85752bd85188e252826202ef7b85ba17 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Fri, 16 Jun 2023 18:37:31 +0100 Subject: [PATCH 2/5] Add action to clear search entry --- src/MainWindow.vala | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/MainWindow.vala b/src/MainWindow.vala index c618b8a2f..736ffd77e 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -62,6 +62,7 @@ namespace Scratch { public const string ACTION_FIND_NEXT = "action_find_next"; public const string ACTION_FIND_PREVIOUS = "action_find_previous"; public const string ACTION_FIND_GLOBAL = "action_find_global"; + public const string ACTION_FIND_CLEAR = "action_find_clear"; public const string ACTION_OPEN = "action_open"; public const string ACTION_OPEN_FOLDER = "action_open_folder"; public const string ACTION_COLLAPSE_ALL_FOLDERS = "action_collapse_all_folders"; @@ -108,6 +109,7 @@ namespace Scratch { { ACTION_FIND_NEXT, action_find_next }, { ACTION_FIND_PREVIOUS, action_find_previous }, { ACTION_FIND_GLOBAL, action_find_global, "s" }, + { ACTION_FIND_CLEAR, action_find_clear }, { ACTION_OPEN, action_open }, { ACTION_OPEN_FOLDER, action_open_folder }, { ACTION_COLLAPSE_ALL_FOLDERS, action_collapse_all_folders }, @@ -160,6 +162,7 @@ namespace Scratch { action_accelerators.set (ACTION_FIND_NEXT, "g"); action_accelerators.set (ACTION_FIND_PREVIOUS, "g"); action_accelerators.set (ACTION_FIND_GLOBAL + "::", "f"); + action_accelerators.set (ACTION_FIND_CLEAR, "f"); action_accelerators.set (ACTION_OPEN, "o"); action_accelerators.set (ACTION_REVERT, "o"); action_accelerators.set (ACTION_SAVE, "s"); @@ -1054,6 +1057,11 @@ namespace Scratch { folder_manager_view.search_global (get_target_path_for_actions (param), term); } + private void action_find_clear () { + search_bar.search_entry.text = ""; + current_search_term = ""; + } + private void update_find_actions () { // Idle needed to ensure that existence of current_doc is up to date Idle.add (() => { From af8c6763317b9e97c206612e9a081b38d76c63c5 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Fri, 16 Jun 2023 18:48:49 +0100 Subject: [PATCH 3/5] Remove temporary comment --- src/MainWindow.vala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/MainWindow.vala b/src/MainWindow.vala index 736ffd77e..794b64a87 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -1093,7 +1093,6 @@ namespace Scratch { var selected_text = current_doc.get_selected_text (false); if (selected_text != "" && selected_text.length < MAX_SEARCH_TEXT_LENGTH) { current_search_term = selected_text.split ("\n", 2)[0]; - warning ("current search term now %s", current_search_term); search_bar.search_entry.text = current_search_term; } From 89c3e53aa0774b8631699c9f7509c7a658a4fd7d Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Wed, 21 Jun 2023 18:53:33 +0100 Subject: [PATCH 4/5] Searchbar listens directly for selection change and clears itself --- src/MainWindow.vala | 9 --------- src/Widgets/SearchBar.vala | 11 ++++++++++- src/Widgets/SourceView.vala | 10 ++++++++-- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/MainWindow.vala b/src/MainWindow.vala index 07bf336ea..cb131eb8a 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -62,7 +62,6 @@ namespace Scratch { public const string ACTION_FIND_NEXT = "action_find_next"; public const string ACTION_FIND_PREVIOUS = "action_find_previous"; public const string ACTION_FIND_GLOBAL = "action_find_global"; - public const string ACTION_FIND_CLEAR = "action_find_clear"; public const string ACTION_OPEN = "action_open"; public const string ACTION_OPEN_FOLDER = "action_open_folder"; public const string ACTION_COLLAPSE_ALL_FOLDERS = "action_collapse_all_folders"; @@ -109,7 +108,6 @@ namespace Scratch { { ACTION_FIND_NEXT, action_find_next }, { ACTION_FIND_PREVIOUS, action_find_previous }, { ACTION_FIND_GLOBAL, action_find_global, "s" }, - { ACTION_FIND_CLEAR, action_find_clear }, { ACTION_OPEN, action_open }, { ACTION_OPEN_FOLDER, action_open_folder }, { ACTION_COLLAPSE_ALL_FOLDERS, action_collapse_all_folders }, @@ -162,7 +160,6 @@ namespace Scratch { action_accelerators.set (ACTION_FIND_NEXT, "g"); action_accelerators.set (ACTION_FIND_PREVIOUS, "g"); action_accelerators.set (ACTION_FIND_GLOBAL + "::", "f"); - action_accelerators.set (ACTION_FIND_CLEAR, "f"); action_accelerators.set (ACTION_OPEN, "o"); action_accelerators.set (ACTION_REVERT, "o"); action_accelerators.set (ACTION_SAVE, "s"); @@ -1009,7 +1006,6 @@ namespace Scratch { /** Not a toggle action - linked to keyboard short cut (Ctrl-f). **/ private string current_search_term = ""; private void action_fetch (SimpleAction action, Variant? param) { - current_search_term = param.get_string (); if (!search_revealer.child_revealed) { var show_find_action = Utils.action_from_group (ACTION_SHOW_FIND, actions); @@ -1057,11 +1053,6 @@ namespace Scratch { folder_manager_view.search_global (get_target_path_for_actions (param), term); } - private void action_find_clear () { - search_bar.search_entry.text = ""; - current_search_term = ""; - } - private void update_find_actions () { // Idle needed to ensure that existence of current_doc is up to date Idle.add (() => { diff --git a/src/Widgets/SearchBar.vala b/src/Widgets/SearchBar.vala index 3072c167c..adb7f522c 100644 --- a/src/Widgets/SearchBar.vala +++ b/src/Widgets/SearchBar.vala @@ -26,7 +26,6 @@ namespace Scratch.Widgets { MIXED, ALWAYS } - public weak MainWindow window { get; construct; } private Gtk.Button tool_arrow_up; @@ -235,8 +234,11 @@ namespace Scratch.Widgets { return; } else if (this.text_buffer != null) { this.text_buffer.changed.disconnect (on_text_buffer_changed); + this.text_view.selection_changed.disconnect (on_selection_changed); } + this.text_view = text_view; + this.text_view.selection_changed.connect (on_selection_changed); this.text_buffer = text_view.get_buffer (); this.text_buffer.changed.connect (on_text_buffer_changed); this.search_context = new Gtk.SourceSearchContext (text_buffer as Gtk.SourceBuffer, null); @@ -250,6 +252,13 @@ namespace Scratch.Widgets { update_search_widgets (); } + private void on_selection_changed () { + var selected_text = text_view.get_selected_text (); + if (selected_text != search_entry.text) { + search_entry.text = ""; + } + } + private void on_replace_entry_activate () { if (text_buffer == null) { warning ("No valid buffer to replace"); diff --git a/src/Widgets/SourceView.vala b/src/Widgets/SourceView.vala index 349d3007c..708380d44 100644 --- a/src/Widgets/SourceView.vala +++ b/src/Widgets/SourceView.vala @@ -35,6 +35,7 @@ namespace Scratch.Widgets { private uint size_allocate_timer = 0; private Gtk.TextIter last_select_start_iter; private Gtk.TextIter last_select_end_iter; + private string selected_text = ""; private SourceGutterRenderer git_diff_gutter_renderer; private const uint THROTTLE_MS = 400; @@ -42,6 +43,7 @@ namespace Scratch.Widgets { private const double SCROLL_THRESHOLD = 1.0; public signal void style_changed (Gtk.SourceStyleScheme style); + // "selection_changed" signal now only emitted when the selected text changes (position ignored). Listened to by searchbar and highlight word selection plugin public signal void selection_changed (Gtk.TextIter start_iter, Gtk.TextIter end_iter); public signal void deselected (); @@ -563,12 +565,12 @@ namespace Scratch.Widgets { buffer.get_selection_bounds (out start, out end); if (start.equal (last_select_start_iter) && end.equal (last_select_end_iter)) { + // warning ("selection unchanged"); return; } last_select_start_iter.assign (start); last_select_end_iter.assign (end); - update_draw_spaces (); if (selection_changed_timer != 0) { @@ -590,7 +592,11 @@ namespace Scratch.Widgets { Gtk.TextIter start, end; bool selected = buffer.get_selection_bounds (out start, out end); if (selected) { - selection_changed (start, end); + var prev_selected_text = selected_text; + selected_text = buffer.get_text (start, end, true); + if (selected_text != prev_selected_text) { + selection_changed (start, end); + } } else { deselected (); } From 333b01ae4f9e22939f69067c663ed4c9dae46f56 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Mon, 10 Jul 2023 09:40:21 +0100 Subject: [PATCH 5/5] Remove commented out code --- src/Widgets/SourceView.vala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Widgets/SourceView.vala b/src/Widgets/SourceView.vala index 708380d44..ee079893c 100644 --- a/src/Widgets/SourceView.vala +++ b/src/Widgets/SourceView.vala @@ -565,7 +565,6 @@ namespace Scratch.Widgets { buffer.get_selection_bounds (out start, out end); if (start.equal (last_select_start_iter) && end.equal (last_select_end_iter)) { - // warning ("selection unchanged"); return; }