Skip to content

Commit c51aff0

Browse files
committed
Use real cursor in gtk and don't use our own.
1 parent 9841e1a commit c51aff0

File tree

1 file changed

+16
-32
lines changed

1 file changed

+16
-32
lines changed

bpython/gtk_.py

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -244,12 +244,6 @@ def __init__(self, interpreter):
244244
self.text_buffer.connect('insert-text', self.on_buf_insert_text)
245245
self.text_buffer.connect('mark-set', self.on_buf_mark_set)
246246

247-
# Provide our own cursor
248-
buffer = self.text_buffer
249-
cursor = buffer.create_mark('cursor', buffer.get_start_iter(), True)
250-
cursor.set_visible(True)
251-
buffer.get_insert().set_visible(False)
252-
253247
def change_line(self, line):
254248
"""
255249
Replace the current input line with `line`.
@@ -315,7 +309,7 @@ def get_cursor_iter(self):
315309
"""
316310
Return an iter where the cursor currently is.
317311
"""
318-
cursor_marker = self.text_buffer.get_mark('cursor')
312+
cursor_marker = self.text_buffer.get_insert()
319313
return self.text_buffer.get_iter_at_mark(cursor_marker)
320314

321315
def get_line_start_iter(self):
@@ -349,13 +343,11 @@ def do_button_press_event(self, event):
349343
return gtk.TextView.do_button_press_event(self, event)
350344

351345
def do_focus_in_event(self, event):
352-
self.text_buffer.get_mark('cursor').set_visible(True)
353346
if self.list_win_visible:
354347
self.list_win.show()
355348
return gtk.TextView.do_focus_in_event(self, event)
356349

357350
def do_focus_out_event(self, event):
358-
self.text_buffer.get_mark('cursor').set_visible(False)
359351
if self.list_win_visible:
360352
self.list_win.hide()
361353
return gtk.TextView.do_focus_out_event(self, event)
@@ -394,7 +386,7 @@ def do_key_press_event(self, event):
394386
if not self.rl_history.is_at_end():
395387
self.rl_history.enter(self.current_line())
396388
self.change_line(self.rl_history.back())
397-
self.place_cursor(self.get_line_end_iter())
389+
self.text_buffer.place_cursor(self.get_line_end_iter())
398390
return True
399391
elif event.keyval == gtk.keysyms.Down:
400392
if self.list_win_visible:
@@ -403,7 +395,7 @@ def do_key_press_event(self, event):
403395
if not self.rl_history.is_at_start():
404396
self.rl_history.enter(self.current_line())
405397
self.change_line(self.rl_history.forward())
406-
self.place_cursor(self.get_line_end_iter())
398+
self.text_buffer.place_cursor(self.get_line_end_iter())
407399
return True
408400
elif state & gtk.gdk.SHIFT_MASK:
409401
if (event.keyval == gtk.keysyms.ISO_Left_Tab and
@@ -470,7 +462,7 @@ def move_cursor(self, offset):
470462
"""
471463
iter_ = self.get_cursor_iter()
472464
iter_.forward_chars(offset)
473-
self.place_cursor(iter_)
465+
self.text_buffer.place_cursor(iter_)
474466
return iter_
475467

476468
def on_buf_delete_range(self, buffer, start, end):
@@ -491,38 +483,24 @@ def on_buf_delete_range(self, buffer, start, end):
491483
def on_buf_insert_text(self, buffer, iter_, text, length):
492484
if self.editing:
493485
return
486+
self.set_cursor_to_valid_insert_position()
494487
buffer.emit_stop_by_name('insert-text')
495-
iter_ = self.get_cursor_iter()
496488
for (i, line) in enumerate(text.splitlines()):
497489
if i:
498490
self.prompt(self.push_line())
499-
iter_ = self.get_cursor_iter()
500491
with self.editing:
501-
buffer.insert(iter_, line)
502-
iter_ = self.move_cursor(len(line))
492+
buffer.insert_at_cursor(line)
503493
self.highlight_current_line()
504494
self.complete()
505495

506496
def on_buf_mark_set(self, buffer, iter_, textmark):
507-
name = textmark.get_name()
508-
if name == 'insert':
509-
line_start = self.get_line_start_iter()
510-
if line_start.compare(iter_) > 0:
511-
# Don't set cursor before the start of line
512-
self.text_buffer.move_mark_by_name('cursor', line_start)
513-
else:
514-
self.text_buffer.move_mark_by_name('cursor', iter_)
497+
pass
515498

516499
def on_suggestion_selection_changed(self, selection, word):
517500
with self.editing:
518501
self.text_buffer.delete(self.get_word_start_iter(),
519502
self.get_cursor_iter())
520-
self.text_buffer.insert(self.get_cursor_iter(), word)
521-
self.move_cursor(len(word))
522-
523-
def place_cursor(self, iter_):
524-
self.text_buffer.place_cursor(iter_)
525-
self.text_buffer.move_mark_by_name('cursor', iter_)
503+
self.text_buffer.insert_at_cursor(word)
526504

527505
def prompt(self, more):
528506
"""
@@ -537,7 +515,7 @@ def prompt(self, more):
537515
text, 'prompt')
538516
iter_ = self.move_cursor(len(text))
539517
mark = self.text_buffer.create_mark('line_start', iter_, True)
540-
self.place_cursor(iter_)
518+
self.text_buffer.place_cursor(iter_)
541519
self.scroll_to_mark(mark, 0.2)
542520

543521
def push_line(self):
@@ -547,7 +525,7 @@ def push_line(self):
547525
self.get_line_start_iter(), True)
548526
self.rl_history.append(line)
549527
iter_ = self.get_line_end_iter()
550-
self.place_cursor(iter_)
528+
self.text_buffer.place_cursor(iter_)
551529
with self.editing:
552530
self.text_buffer.insert(iter_, '\n')
553531
self.move_cursor(1)
@@ -569,6 +547,12 @@ def reprint_line(self, lineno, tokens):
569547
self.text_buffer.remove_all_tags(start, end)
570548
self.highlight(start, tokens)
571549

550+
def set_cursor_to_valid_insert_position(self):
551+
cursor_iter = self.get_cursor_iter()
552+
line_start_iter = self.get_line_start_iter()
553+
if line_start_iter.compare(cursor_iter) > 0:
554+
self.text_buffer.place_cursor(line_start_iter)
555+
572556
def writetb(self, lines):
573557
string = ''.join(lines)
574558
with self.editing:

0 commit comments

Comments
 (0)