|
|
@ -429,30 +429,30 @@ class CodeEditor:
|
|
|
|
# TODO there are some similarities with python, but overall it's quite useless.
|
|
|
|
# TODO there are some similarities with python, but overall it's quite useless.
|
|
|
|
# commented out until there is proper highlighting for input-remappers syntax.
|
|
|
|
# commented out until there is proper highlighting for input-remappers syntax.
|
|
|
|
|
|
|
|
|
|
|
|
self._show_placeholder()
|
|
|
|
self._update_placeholder()
|
|
|
|
|
|
|
|
|
|
|
|
self.gui.get_buffer().connect("changed", self._on_gtk_changed)
|
|
|
|
self.gui.get_buffer().connect("changed", self._on_gtk_changed)
|
|
|
|
self.gui.connect("focus-in-event", self._clear_placeholder)
|
|
|
|
self.gui.connect("focus-in-event", self._update_placeholder)
|
|
|
|
self.gui.connect("focus-out-event", self._show_placeholder)
|
|
|
|
self.gui.connect("focus-out-event", self._update_placeholder)
|
|
|
|
self._connect_message_listener()
|
|
|
|
self._connect_message_listener()
|
|
|
|
|
|
|
|
|
|
|
|
def _show_placeholder(self, *_):
|
|
|
|
def _update_placeholder(self, *_):
|
|
|
|
if self._shows_placeholder():
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if self.code.strip().lower() == "":
|
|
|
|
|
|
|
|
self.code = self.placeholder
|
|
|
|
|
|
|
|
self.gui.get_style_context().add_class("opaque-text")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _clear_placeholder(self, *_):
|
|
|
|
|
|
|
|
if not self._shows_placeholder():
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
buffer = self.gui.get_buffer()
|
|
|
|
buffer = self.gui.get_buffer()
|
|
|
|
with HandlerDisabled(buffer, self._on_gtk_changed):
|
|
|
|
code = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), True)
|
|
|
|
buffer.set_text("")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.gui.get_style_context().remove_class("opaque-text")
|
|
|
|
# test for incorrect states and fix them, without causing side effects
|
|
|
|
|
|
|
|
with HandlerDisabled(buffer, self._on_gtk_changed):
|
|
|
|
|
|
|
|
if self.gui.has_focus() and code == self.placeholder:
|
|
|
|
|
|
|
|
# hide the placeholder
|
|
|
|
|
|
|
|
buffer.set_text("")
|
|
|
|
|
|
|
|
self.gui.get_style_context().remove_class("opaque-text")
|
|
|
|
|
|
|
|
elif code == "":
|
|
|
|
|
|
|
|
# show the placeholder instead
|
|
|
|
|
|
|
|
buffer.set_text(self.placeholder)
|
|
|
|
|
|
|
|
self.gui.get_style_context().add_class("opaque-text")
|
|
|
|
|
|
|
|
elif code != "":
|
|
|
|
|
|
|
|
# something is written, ensure the opacity is correct
|
|
|
|
|
|
|
|
self.gui.get_style_context().remove_class("opaque-text")
|
|
|
|
|
|
|
|
|
|
|
|
def _shows_placeholder(self):
|
|
|
|
def _shows_placeholder(self):
|
|
|
|
buffer = self.gui.get_buffer()
|
|
|
|
buffer = self.gui.get_buffer()
|
|
|
@ -474,7 +474,7 @@ class CodeEditor:
|
|
|
|
buffer = self.gui.get_buffer()
|
|
|
|
buffer = self.gui.get_buffer()
|
|
|
|
with HandlerDisabled(buffer, self._on_gtk_changed):
|
|
|
|
with HandlerDisabled(buffer, self._on_gtk_changed):
|
|
|
|
buffer.set_text(code)
|
|
|
|
buffer.set_text(code)
|
|
|
|
self._show_placeholder()
|
|
|
|
self._update_placeholder()
|
|
|
|
self.gui.do_move_cursor(self.gui, Gtk.MovementStep.BUFFER_ENDS, -1, False)
|
|
|
|
self.gui.do_move_cursor(self.gui, Gtk.MovementStep.BUFFER_ENDS, -1, False)
|
|
|
|
|
|
|
|
|
|
|
|
def _connect_message_listener(self):
|
|
|
|
def _connect_message_listener(self):
|
|
|
|