[gitg] Implement hunk select/deselect
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gitg] Implement hunk select/deselect
- Date: Sun, 20 Dec 2015 18:11:44 +0000 (UTC)
commit 36d63f18891b1ad224ee1b5b615a8ba30b8fc440
Author: Jesse van den Kieboom <jessevdk gnome org>
Date: Sun Dec 20 19:10:32 2015 +0100
Implement hunk select/deselect
libgitg/gitg-diff-view-file-selectable.vala | 32 +++++++++++++++++++++++---
vapi/gtksourceview-3.0.vapi | 4 +-
2 files changed, 30 insertions(+), 6 deletions(-)
---
diff --git a/libgitg/gitg-diff-view-file-selectable.vala b/libgitg/gitg-diff-view-file-selectable.vala
index 14e5d6e..83653b4 100644
--- a/libgitg/gitg-diff-view-file-selectable.vala
+++ b/libgitg/gitg-diff-view-file-selectable.vala
@@ -361,6 +361,22 @@ class Gitg.DiffViewFileSelectable : Object
}
}
+ private void update_selection_hunk(Gtk.TextIter iter, bool select)
+ {
+ var end = iter;
+
+ end.forward_line();
+
+ var buffer = source_view.buffer as Gtk.SourceBuffer;
+
+ if (!buffer.forward_iter_to_source_mark(ref end, "header"))
+ {
+ end.forward_to_end();
+ }
+
+ update_selection_range(iter, end, select);
+ }
+
private bool button_press_event_on_view(Gdk.EventButton event)
{
if (event.button != 1)
@@ -375,14 +391,22 @@ class Gitg.DiffViewFileSelectable : Object
return false;
}
- if ((event.state & Gdk.ModifierType.MOD1_MASK) != 0)
+ var select = (event.state & Gdk.ModifierType.MOD1_MASK) == 0;
+
+ if (get_line_is_hunk(iter))
{
- d_selection_mode = DiffSelectionMode.DESELECTING;
+ update_selection_hunk(iter, select);
+ return true;
}
- else
+
+ if (select)
{
d_selection_mode = DiffSelectionMode.SELECTING;
}
+ else
+ {
+ d_selection_mode = DiffSelectionMode.DESELECTING;
+ }
var buffer = source_view.buffer;
@@ -456,7 +480,7 @@ class Gitg.DiffViewFileSelectable : Object
}
else
{
- something_selected = (buffer as Gtk.SourceBuffer).forward_iter_to_source_mark(iter,
d_selection_category);
+ something_selected = (buffer as Gtk.SourceBuffer).forward_iter_to_source_mark(ref
iter, d_selection_category);
}
if (something_selected != has_selection)
diff --git a/vapi/gtksourceview-3.0.vapi b/vapi/gtksourceview-3.0.vapi
index 8961b5e..ecbf84e 100644
--- a/vapi/gtksourceview-3.0.vapi
+++ b/vapi/gtksourceview-3.0.vapi
@@ -13,13 +13,13 @@ namespace Gtk {
public class SourceBuffer : Gtk.TextBuffer {
[CCode (has_construct_function = false)]
public SourceBuffer (Gtk.TextTagTable? table);
- public bool backward_iter_to_source_mark (Gtk.TextIter iter, string? category);
+ public bool backward_iter_to_source_mark (ref Gtk.TextIter iter, string? category);
public void begin_not_undoable_action ();
public void change_case (Gtk.SourceChangeCaseType case_type, Gtk.TextIter start, Gtk.TextIter
end);
public unowned Gtk.SourceMark create_source_mark (string? name, string category, Gtk.TextIter
where);
public void end_not_undoable_action ();
public void ensure_highlight (Gtk.TextIter start, Gtk.TextIter end);
- public bool forward_iter_to_source_mark (Gtk.TextIter iter, string? category);
+ public bool forward_iter_to_source_mark (ref Gtk.TextIter iter, string? category);
[CCode (array_length = false, array_null_terminated = true)]
public string[] get_context_classes_at_iter (Gtk.TextIter iter);
public bool get_highlight_matching_brackets ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]