From dcf6367148b8135c70633eaa53252d88b8302e5e Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Fri, 18 Dec 2015 15:27:19 +0100 Subject: [PATCH] diff-view-hunk: add property to know if there is a selection --- libgitg/gitg-diff-view-hunk.vala | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/libgitg/gitg-diff-view-hunk.vala b/libgitg/gitg-diff-view-hunk.vala index 3060be50..ea3d5508 100644 --- a/libgitg/gitg-diff-view-hunk.vala +++ b/libgitg/gitg-diff-view-hunk.vala @@ -97,6 +97,13 @@ class Gitg.DiffViewHunk : Gtk.Grid } } + private bool d_has_selection; + + public bool has_selection + { + get { return d_has_selection; } + } + private DiffViewLinesRenderer d_old_lines; private DiffViewLinesRenderer d_new_lines; private DiffViewLinesRenderer d_sym_lines; @@ -369,6 +376,32 @@ class Gitg.DiffViewHunk : Gtk.Grid return false; } + private void update_has_selection() + { + var text_view = d_sourceview_hunk as Gtk.TextView; + var buffer = text_view.get_buffer(); + + Gtk.TextIter iter; + buffer.get_start_iter(out iter); + + bool something_selected = false; + + if (get_line_selected(iter)) + { + something_selected = true; + } + else + { + something_selected = (buffer as Gtk.SourceBuffer).forward_iter_to_source_mark(iter, d_selection_category); + } + + if (something_selected != d_has_selection) + { + d_has_selection = something_selected; + notify_property("has-selection"); + } + } + private bool button_release_event_on_view(Gdk.EventButton event) { if (event.button != 1) @@ -388,6 +421,8 @@ class Gitg.DiffViewHunk : Gtk.Grid buffer.delete_mark(d_end_selection_mark); d_end_selection_mark = null; + update_has_selection(); + return false; }