[gitg] Highlight subject and right margin
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gitg] Highlight subject and right margin
- Date: Sat, 6 Jul 2013 19:47:50 +0000 (UTC)
commit 69352ca4138ab42db675667a44186428c601e6a8
Author: Jesse van den Kieboom <jessevdk gmail com>
Date: Sat Jul 6 21:47:15 2013 +0200
Highlight subject and right margin
data/org.gnome.gitg.gschema.xml.in.in | 8 ++
gitg/commit/gitg-commit-dialog.vala | 120 +++++++++++++++++++++++++++++++++
2 files changed, 128 insertions(+), 0 deletions(-)
---
diff --git a/data/org.gnome.gitg.gschema.xml.in.in b/data/org.gnome.gitg.gschema.xml.in.in
index db26536..c9cdb5f 100644
--- a/data/org.gnome.gitg.gschema.xml.in.in
+++ b/data/org.gnome.gitg.gschema.xml.in.in
@@ -94,6 +94,14 @@
preference is set to TRUE.
</_description>
</key>
+ <key name="subject-right-margin-at" type="i">
+ <default>50</default>
+ <_summary>Column at Which Subject Right Margin is Shown</_summary>
+ <_description>
+ The column at which the right margin is shown for the subject
+ if the right-margin preference is set to TRUE.
+ </_description>
+ </key>
</schema>
<schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.gitg.preferences.diff"
path="/org/gnome/gitg/preferences/diff/">
<key name="external" type="b">
diff --git a/gitg/commit/gitg-commit-dialog.vala b/gitg/commit/gitg-commit-dialog.vala
index f20bbec..ae73a5e 100644
--- a/gitg/commit/gitg-commit-dialog.vala
+++ b/gitg/commit/gitg-commit-dialog.vala
@@ -104,6 +104,9 @@ class Dialog : Gtk.Dialog
}
}
+ [Notify]
+ public int subject_right_margin_position { get; set; }
+
private void load_author_info()
{
if (d_cancel_avatar != null)
@@ -189,6 +192,123 @@ class Dialog : Gtk.Dialog
"right-margin-position",
SettingsBindFlags.GET |
SettingsBindFlags.SET);
+
+ message_settings.bind("subject-right-margin-at",
+ this,
+ "subject-right-margin-position",
+ SettingsBindFlags.GET |
+ SettingsBindFlags.SET);
+
+ init_message_area();
+ }
+
+ private Gtk.TextTag d_subject_tag;
+ private Gtk.TextTag d_too_long_tag;
+
+ private void init_message_area()
+ {
+ var b = d_source_view_message.buffer;
+
+ var ctx = d_source_view_message.get_style_context();
+ ctx.save();
+ ctx.add_class("warning");
+ var fg = ctx.get_color(Gtk.StateFlags.NORMAL);
+ var bg = ctx.get_background_color(Gtk.StateFlags.NORMAL);
+ ctx.restore();
+
+ d_subject_tag = b.create_tag("subject",
+ "weight", Pango.Weight.BOLD);
+
+ d_too_long_tag = b.create_tag("too-long",
+ "background-rgba", bg,
+ "foreground-rgba", fg);
+
+ b.changed.connect(() => {
+ do_highlight();
+ });
+
+ d_source_view_message.notify["show-right-margin"].connect(() => {
+ do_highlight();
+ });
+ }
+
+ private void do_highlight()
+ {
+ var b = d_source_view_message.buffer;
+
+ Gtk.TextIter start;
+ Gtk.TextIter end;
+
+ b.get_bounds(out start, out end);
+ b.remove_tag(d_subject_tag, start, end);
+ b.remove_tag(d_too_long_tag, start, end);
+
+ if (!d_source_view_message.show_right_margin)
+ {
+ return;
+ }
+
+ Gtk.TextIter sstart;
+ Gtk.TextIter send;
+
+ if (!start.forward_search("\n\n",
+ Gtk.TextSearchFlags.TEXT_ONLY,
+ out sstart,
+ out send,
+ null))
+ {
+ sstart = end;
+ send = end;
+ }
+
+ b.apply_tag(d_subject_tag, start, sstart);
+
+ var toolong = sstart;
+ var smargin = subject_right_margin_position;
+
+ while (true)
+ {
+ var off = toolong.get_line_offset();
+
+ if (off > smargin)
+ {
+ var border = toolong;
+ border.set_line_offset(smargin);
+
+ b.apply_tag(d_too_long_tag, border, toolong);
+ }
+
+ if (toolong.get_line() == 0)
+ {
+ break;
+ }
+
+ toolong.backward_line();
+ toolong.forward_to_line_end();
+ }
+
+ var rmargin = (int)d_source_view_message.right_margin_position;
+
+ while (!send.equal(end))
+ {
+ if (!send.ends_line())
+ {
+ send.forward_to_line_end();
+ }
+
+ if (send.get_line_offset() > rmargin)
+ {
+ var lstart = send;
+ lstart.set_line_offset(rmargin);
+
+ b.apply_tag(d_too_long_tag, lstart, send);
+ }
+
+ if (!send.forward_line())
+ {
+ break;
+ }
+ }
}
public Dialog(Ggit.Signature author)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]