From 39fc0c580cf4832af0aafa78e06cb64277a479b9 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Sun, 23 May 2021 09:48:57 +0100 Subject: [PATCH 1/8] Use selected or searchentry text for global search --- src/Dialogs/GlobalSearchDialog.vala | 11 ++++++++++- src/FolderManager/FileView.vala | 4 ++-- src/FolderManager/ProjectFolderItem.vala | 19 ++++++++++--------- src/MainWindow.vala | 13 ++++++++----- src/Widgets/SearchBar.vala | 4 ---- 5 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/Dialogs/GlobalSearchDialog.vala b/src/Dialogs/GlobalSearchDialog.vala index 7c048e6f6e..50d604d6f8 100644 --- a/src/Dialogs/GlobalSearchDialog.vala +++ b/src/Dialogs/GlobalSearchDialog.vala @@ -26,7 +26,16 @@ public class Scratch.Dialogs.GlobalSearchDialog : Granite.MessageDialog { private Gtk.Switch case_switch; private Gtk.Switch regex_switch; - public string search_term { get {return search_term_entry.text;} } + public string search_term { + get { + return search_term_entry.text; + } + + set { + search_term_entry.text = value; + } + } + public bool use_regex { get { return regex_switch.active; diff --git a/src/FolderManager/FileView.vala b/src/FolderManager/FileView.vala index e81011a212..020e26b0c2 100644 --- a/src/FolderManager/FileView.vala +++ b/src/FolderManager/FileView.vala @@ -145,12 +145,12 @@ namespace Scratch.FolderManager { } /* Do global search on project containing the file path supplied in parameter */ - public void search_global (string path) { + public void search_global (string path, string? term = null) { var item_for_path = (Item?)(expand_to_path (path)); if (item_for_path != null) { var search_root = item_for_path.get_root_folder (); if (search_root is ProjectFolderItem) { - search_root.global_search (search_root.file.file); + search_root.global_search (search_root.file.file, term); } } } diff --git a/src/FolderManager/ProjectFolderItem.vala b/src/FolderManager/ProjectFolderItem.vala index f287c43628..28f471dc27 100644 --- a/src/FolderManager/ProjectFolderItem.vala +++ b/src/FolderManager/ProjectFolderItem.vala @@ -241,10 +241,10 @@ namespace Scratch.FolderManager { return is_git_repo ? monitored_repo.is_valid_new_local_branch_name (new_name) : false; } - public void global_search (GLib.File start_folder = this.file.file) { + public void global_search (GLib.File start_folder = this.file.file, string? term = null) { /* For now set all options to the most inclusive (except case). * The ability to set these in the dialog (or by parameter) may be added later. */ - string? term = null; + string? search_term = null; bool use_regex = false; bool search_tracked_only = false; bool recurse_subfolders = true; @@ -258,13 +258,14 @@ namespace Scratch.FolderManager { null, start_folder.get_basename (), monitored_repo.git_repo != null ) { case_sensitive = case_sensitive, - use_regex = use_regex + use_regex = use_regex, + search_term = term }; dialog.response.connect ((response) => { switch (response) { case Gtk.ResponseType.ACCEPT: - term = dialog.search_term; + search_term = dialog.search_term; use_regex = dialog.use_regex; case_sensitive = dialog.case_sensitive; break; @@ -279,15 +280,15 @@ namespace Scratch.FolderManager { dialog.run (); - if (term != null) { + if (search_term != null) { /* Put search term in search bar to help user locate the position of the matches in each doc */ - var search_variant = new Variant.string (term); + var search_variant = new Variant.string (search_term); var app = (Gtk.Application)GLib.Application.get_default (); var win = (Scratch.MainWindow)(app.get_active_window ()); win.actions.lookup_action ("action_find").activate (search_variant); if (!use_regex) { - term = Regex.escape_string (term); + search_term = Regex.escape_string (search_term); } try { @@ -296,9 +297,9 @@ namespace Scratch.FolderManager { flags |= RegexCompileFlags.CASELESS; } - pattern = new Regex (term, flags); + pattern = new Regex (search_term, flags); } catch (Error e) { - critical ("Error creating regex from '%s': %s", term, e.message); + critical ("Error creating regex from '%s': %s", search_term, e.message); return; } } else { diff --git a/src/MainWindow.vala b/src/MainWindow.vala index a254adccda..6ef4a1f5c6 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -287,7 +287,7 @@ namespace Scratch { set_search_text (); }); search_bar.search_entry.unmap.connect_after (() => { /* signalled when reveal child */ - search_bar.set_search_string (""); + search_bar.search_entry.text = ""; search_bar.highlight_none (); }); search_bar.search_empty.connect (() => { @@ -881,19 +881,22 @@ namespace Scratch { path = param.get_string (); } + var current_doc = get_current_document (); + var selected_text = current_doc.get_selected_text (); + + string term = selected_text != "" ? selected_text : search_bar.search_entry.text; if (path == "") { - var current_doc = get_current_document (); if (current_doc != null) { path = current_doc.file.get_path (); } } - folder_manager_view.search_global (path); + folder_manager_view.search_global (path, term); } private void set_search_text () { if (current_search_term != "") { - search_bar.set_search_string (current_search_term); + search_bar.search_entry.text = current_search_term; search_bar.search_entry.grab_focus (); search_bar.search_next (); } else { @@ -903,7 +906,7 @@ namespace Scratch { var selected_text = current_doc.get_selected_text (); if (selected_text != "" && selected_text.length < MAX_SEARCH_TEXT_LENGTH) { current_search_term = selected_text; - search_bar.set_search_string (current_search_term); + search_bar.search_entry.text = current_search_term; } search_bar.search_entry.grab_focus (); /* causes loss of document selection */ diff --git a/src/Widgets/SearchBar.vala b/src/Widgets/SearchBar.vala index e06ef12e09..acadea6cfa 100644 --- a/src/Widgets/SearchBar.vala +++ b/src/Widgets/SearchBar.vala @@ -240,10 +240,6 @@ namespace Scratch.Widgets { this.window.get_current_document ().toggle_changed_handlers (true); } - public void set_search_string (string to_search) { - search_entry.text = to_search; - } - private void on_search_entry_text_changed () { var search_string = search_entry.text; search_context.settings.search_text = search_string; From fa81ddf425295f07a52ef99bebd42c8d6eeeb04f Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Sun, 23 May 2021 10:11:39 +0100 Subject: [PATCH 2/8] Add global search button to search bar --- src/Widgets/SearchBar.vala | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Widgets/SearchBar.vala b/src/Widgets/SearchBar.vala index acadea6cfa..5bcccb4066 100644 --- a/src/Widgets/SearchBar.vala +++ b/src/Widgets/SearchBar.vala @@ -40,6 +40,8 @@ namespace Scratch.Widgets { private Gtk.Button replace_tool_button; private Gtk.Button replace_all_tool_button; + private Gtk.Button global_search_button; + private Scratch.Widgets.SourceView? text_view = null; private Gtk.TextBuffer? text_buffer = null; private Gtk.SourceSearchContext search_context = null; @@ -104,6 +106,12 @@ namespace Scratch.Widgets { ); case_sensitive_button.clicked.connect (on_search_entry_text_changed); + global_search_button = new Gtk.Button.from_icon_name ("gnome-globe") { + tooltip_markup = Granite.markup_accel_tooltip ({"F"}, "Global Search"), + action_name = "win.action_find_global", + action_target = new Variant.string ("") // Search in current active project + }; + var search_grid = new Gtk.Grid (); search_grid.margin = 3; search_grid.get_style_context ().add_class (Gtk.STYLE_CLASS_LINKED); @@ -112,6 +120,7 @@ namespace Scratch.Widgets { search_grid.add (tool_arrow_up); search_grid.add (tool_cycle_search); search_grid.add (case_sensitive_button); + search_grid.add (global_search_button); var search_flow_box_child = new Gtk.FlowBoxChild (); search_flow_box_child.can_focus = false; From e9ab5c25e901900d95f177020db894b9907757bd Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Sun, 23 May 2021 10:27:07 +0100 Subject: [PATCH 3/8] Search term from focused widget --- src/MainWindow.vala | 5 ++++- src/Widgets/SearchBar.vala | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/MainWindow.vala b/src/MainWindow.vala index 6ef4a1f5c6..afb88c3a9d 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -884,7 +884,10 @@ namespace Scratch { var current_doc = get_current_document (); var selected_text = current_doc.get_selected_text (); - string term = selected_text != "" ? selected_text : search_bar.search_entry.text; + var term = search_bar.search_entry.has_focus ? + search_bar.search_entry.text : + selected_text; + if (path == "") { if (current_doc != null) { path = current_doc.file.get_path (); diff --git a/src/Widgets/SearchBar.vala b/src/Widgets/SearchBar.vala index 5bcccb4066..2ee8ddf8ba 100644 --- a/src/Widgets/SearchBar.vala +++ b/src/Widgets/SearchBar.vala @@ -107,11 +107,17 @@ namespace Scratch.Widgets { case_sensitive_button.clicked.connect (on_search_entry_text_changed); global_search_button = new Gtk.Button.from_icon_name ("gnome-globe") { + can_focus = false, tooltip_markup = Granite.markup_accel_tooltip ({"F"}, "Global Search"), action_name = "win.action_find_global", action_target = new Variant.string ("") // Search in current active project }; + global_search_button.button_press_event.connect (() => { + search_entry.grab_focus (); + return false; + }); + var search_grid = new Gtk.Grid (); search_grid.margin = 3; search_grid.get_style_context ().add_class (Gtk.STYLE_CLASS_LINKED); From 03174727c163e5ec665869df6a9aac166ffdcf25 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Sun, 23 May 2021 10:49:23 +0100 Subject: [PATCH 4/8] Fallback to searchentry when no focused selected text --- src/MainWindow.vala | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/MainWindow.vala b/src/MainWindow.vala index afb88c3a9d..60b98ba6ba 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -884,10 +884,19 @@ namespace Scratch { var current_doc = get_current_document (); var selected_text = current_doc.get_selected_text (); + // If search entry focused use its text for search term, else use selected text var term = search_bar.search_entry.has_focus ? search_bar.search_entry.text : selected_text; + // If no focused selected text fallback to search entry text if visible + if (term == "" && + !search_bar.search_entry.has_focus && + search_revealer.reveal_child) { + + term = search_bar.search_entry.text; + } + if (path == "") { if (current_doc != null) { path = current_doc.file.get_path (); From b5ed7695c00d83edae3dcf24d809943ade46d296 Mon Sep 17 00:00:00 2001 From: Jeremy Paul Wootten Date: Wed, 27 Oct 2021 10:59:02 +0100 Subject: [PATCH 5/8] Add release appdata --- data/io.elementary.code.appdata.xml.in | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/data/io.elementary.code.appdata.xml.in b/data/io.elementary.code.appdata.xml.in index 0e8e190cb7..b518e90b82 100644 --- a/data/io.elementary.code.appdata.xml.in +++ b/data/io.elementary.code.appdata.xml.in @@ -26,6 +26,19 @@ + + +

Improvements:

+
    +
  • Add global search button to search bar
  • +
  • Use selected text as default search term for global search action
  • +
+

Minor updates:

+
    +
  • Updated translations
  • +
+
+

Fixes:

From 06427aa7a7a9061fbd580f0154fbeda96845fef5 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Wed, 13 Jul 2022 15:07:04 +0100 Subject: [PATCH 6/8] Update src/Widgets/SearchBar.vala MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make tooltip translatable Co-authored-by: Corentin Noël --- src/Widgets/SearchBar.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Widgets/SearchBar.vala b/src/Widgets/SearchBar.vala index af9f04e863..09bca69bc3 100644 --- a/src/Widgets/SearchBar.vala +++ b/src/Widgets/SearchBar.vala @@ -118,7 +118,7 @@ namespace Scratch.Widgets { global_search_button = new Gtk.Button.from_icon_name ("gnome-globe") { can_focus = false, - tooltip_markup = Granite.markup_accel_tooltip ({"F"}, "Global Search"), + tooltip_markup = Granite.markup_accel_tooltip ({"F"}, _("Global Search")), action_name = "win.action_find_global", action_target = new Variant.string ("") // Search in current active project }; From c1d77458874452e6519891d928d4d2d4e7d6c87b Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Thu, 1 Sep 2022 18:54:12 +0100 Subject: [PATCH 7/8] Remove extra button --- src/Widgets/SearchBar.vala | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/Widgets/SearchBar.vala b/src/Widgets/SearchBar.vala index 09bca69bc3..52e5a2dd4a 100644 --- a/src/Widgets/SearchBar.vala +++ b/src/Widgets/SearchBar.vala @@ -42,8 +42,6 @@ namespace Scratch.Widgets { private Gtk.Button replace_tool_button; private Gtk.Button replace_all_tool_button; - private Gtk.Button global_search_button; - private Scratch.Widgets.SourceView? text_view = null; private Gtk.TextBuffer? text_buffer = null; private Gtk.SourceSearchContext search_context = null; @@ -116,18 +114,6 @@ namespace Scratch.Widgets { ); case_sensitive_button.clicked.connect (on_search_entry_text_changed); - global_search_button = new Gtk.Button.from_icon_name ("gnome-globe") { - can_focus = false, - tooltip_markup = Granite.markup_accel_tooltip ({"F"}, _("Global Search")), - action_name = "win.action_find_global", - action_target = new Variant.string ("") // Search in current active project - }; - - global_search_button.button_press_event.connect (() => { - search_entry.grab_focus (); - return false; - }); - tool_regex_button = new Gtk.ToggleButton () { image = new Gtk.Image.from_icon_name ("text-html-symbolic", Gtk.IconSize.SMALL_TOOLBAR), tooltip_text = _("Use regular expressions") @@ -143,7 +129,6 @@ namespace Scratch.Widgets { search_grid.add (tool_arrow_up); search_grid.add (tool_cycle_search); search_grid.add (case_sensitive_button); - search_grid.add (global_search_button); search_grid.add (tool_regex_button); var search_flow_box_child = new Gtk.FlowBoxChild (); From 2036e963146881218b125828f3c35ec297ef4a0a Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Thu, 1 Sep 2022 19:40:55 +0100 Subject: [PATCH 8/8] Handle multiline selections --- src/MainWindow.vala | 11 ++++++----- src/Services/Document.vala | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/MainWindow.vala b/src/MainWindow.vala index ee30963603..c79d8e0c28 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -866,7 +866,6 @@ namespace Scratch { 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 fetch_action = Utils.action_from_group (ACTION_SHOW_FIND, actions); if (fetch_action.enabled) { @@ -890,8 +889,10 @@ namespace Scratch { private void action_find_global (SimpleAction action, Variant? param) { var current_doc = get_current_document (); - var selected_text = current_doc.get_selected_text (); - + var selected_text = current_doc.get_selected_text (false); + if (selected_text != "") { + selected_text = selected_text.split ("\n", 2)[0]; + } // If search entry focused use its text for search term, else use selected text var term = search_bar.search_entry.has_focus ? search_bar.search_entry.text : selected_text; @@ -916,9 +917,9 @@ namespace Scratch { var current_doc = get_current_document (); // This is also called when all documents are closed. if (current_doc != null) { - var selected_text = current_doc.get_selected_text (); + var selected_text = current_doc.get_selected_text (false); if (selected_text != "" && selected_text.length < MAX_SEARCH_TEXT_LENGTH) { - current_search_term = selected_text; + current_search_term = selected_text.split ("\n", 2)[0]; search_bar.search_entry.text = current_search_term; } diff --git a/src/Services/Document.vala b/src/Services/Document.vala index 77ea096dfa..0fd47933be 100644 --- a/src/Services/Document.vala +++ b/src/Services/Document.vala @@ -663,8 +663,8 @@ namespace Scratch.Services { } // Get selected text - public string get_selected_text () { - return this.source_view.get_selected_text (); + public string get_selected_text (bool replace_newline = true) { + return this.source_view.get_selected_text (replace_newline); } // Get language name