You've already forked lazarus-ccr
richmemo: gtk2 numbering - erasing with backspace
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3853 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -150,7 +150,10 @@ var
|
||||
begin
|
||||
tag := gtk_text_tag_table_lookup( gtk_text_buffer_get_tag_table(TextBuffer)
|
||||
, TagNameNumeric);
|
||||
|
||||
// navigate "through" numbering characters
|
||||
if gtk_text_iter_has_tag( StartIter, tag) then begin
|
||||
// if tried to move at the "endo
|
||||
if gtk_text_iter_begins_tag(StartIter, tag) then begin
|
||||
gtk_text_iter_forward_to_tag_toggle(StartIter, nil);
|
||||
gtk_text_buffer_move_mark(TextBuffer, mark, StartIter);
|
||||
@ -207,14 +210,50 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Gtk2WS_Backspace(view: PGtkTextView; WidgetInfo: PWidgetInfo); cdecl;
|
||||
var
|
||||
buf : PGtkTextBuffer;
|
||||
mark : PGtkTextMark;
|
||||
iend : TGtkTextIter;
|
||||
istart : TGtkTextIter;
|
||||
tag : PGtkTextTag;
|
||||
begin
|
||||
// this handler checks, if the "numbering" should be erarsed
|
||||
buf:=gtk_text_view_get_buffer(view);
|
||||
if not Assigned(buf) then Exit;
|
||||
mark := gtk_text_buffer_get_mark(buf, 'insert');
|
||||
if not Assigned(mark) then Exit;
|
||||
tag := gtk_text_tag_table_lookup( gtk_text_buffer_get_tag_table(buf)
|
||||
, TagNameNumeric);
|
||||
if not Assigned(tag) then Exit;
|
||||
|
||||
// first, check if cursor is right "after" the "numbering characters"
|
||||
gtk_text_buffer_get_iter_at_mark(buf, @iend, mark);
|
||||
|
||||
if gtk_text_iter_ends_tag(@iend, tag) then begin
|
||||
// cursor position is at the beginning of the line - erase all
|
||||
// characters that belong to the numbering.
|
||||
istart:=iend;
|
||||
gtk_text_iter_backward_to_tag_toggle(@istart, tag);
|
||||
gtk_text_buffer_delete(buf, @istart, @iend);
|
||||
// prevent default backspace
|
||||
g_signal_stop_emission_by_name(view, 'backspace');
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
class procedure TGtk2WSCustomRichMemo.SetCallbacks(
|
||||
const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo);
|
||||
var
|
||||
TextBuf: PGtkTextBuffer;
|
||||
view : PGtkTextView;
|
||||
begin
|
||||
TGtk2WSCustomMemoInt.SetCallbacks(AGtkWidget, AWidgetInfo);
|
||||
|
||||
TextBuf := gtk_text_view_get_buffer(PGtkTextView(AWidgetInfo^.CoreWidget));
|
||||
view:=PGtkTextView(AWidgetInfo^.CoreWidget);
|
||||
TextBuf := gtk_text_view_get_buffer(view);
|
||||
SignalConnect(PGtkWidget(view), 'backspace', @Gtk2WS_Backspace, AWidgetInfo);
|
||||
SignalConnect(PGtkWidget(TextBuf), 'mark-set', @Gtk2WS_MemoSelChanged_Before, AWidgetInfo);
|
||||
SignalConnectAfter(PGtkWidget(TextBuf), 'mark-set', @Gtk2WS_MemoSelChanged, AWidgetInfo);
|
||||
SignalConnectAfter(PGtkWidget(TextBuf), 'insert-text', @Gtk2WS_RichMemoInsert, AWidgetInfo);
|
||||
|
Reference in New Issue
Block a user