About Social Code
aboutsummaryrefslogtreecommitdiff
path: root/src/chat.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/chat.py')
-rw-r--r--src/chat.py45
1 files changed, 39 insertions, 6 deletions
diff --git a/src/chat.py b/src/chat.py
index 3ee0438..4b11ed0 100644
--- a/src/chat.py
+++ b/src/chat.py
@@ -16,7 +16,9 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
# SPDX-License-Identifier: GPL-3.0-or-later
-from gi.repository import Adw, Gtk, Gio, GObject, GLib
+import gi
+gi.require_version("Spelling", "1")
+from gi.repository import Adw, Gtk, Gdk, Gio, GObject, GLib, Spelling, GtkSource
from .message import WeegtkMessage
from .color import Color
@@ -24,7 +26,9 @@ from weegtk import config
from weegtk import netfile
import json
+import os
+GObject.type_register(GtkSource.View)
@Gtk.Template(resource_path='/com/fryzekconcepts/weegtk/gtk/chat.ui')
class WeegtkChat(Adw.Bin):
__gtype_name__ = 'WeegtkChat'
@@ -65,6 +69,28 @@ class WeegtkChat(Adw.Bin):
adj.connect("value-changed", self.scroll_changes)
adj.connect("notify::upper", self.upper_notify)
+ # This is a bit of hack to have the raised color match in the gtk source editor
+ manager = GtkSource.StyleSchemeManager().get_default()
+ scheme = manager.get_scheme('CustomAdwaita')
+ buffer = self.text_entry.get_buffer()
+ buffer.set_style_scheme(scheme)
+
+ sc_controller = Gtk.ShortcutController(propagation_phase=Gtk.PropagationPhase.CAPTURE)
+ action = Gtk.CallbackAction.new(self.entry_callback, self)
+ trigger = Gtk.ShortcutTrigger.parse_string("Return")
+ shortcut = Gtk.Shortcut(action=action, trigger=trigger)
+ sc_controller.add_shortcut(shortcut)
+
+ self.add_controller(sc_controller)
+
+ # Enable spell checking
+ self.checker = Spelling.Checker.get_default()
+ self.adapter = Spelling.TextBufferAdapter.new(self.text_entry.get_buffer(), self.checker)
+ self.extra_menu = self.adapter.get_menu_model()
+ self.text_entry.set_extra_menu(self.extra_menu)
+ self.text_entry.insert_action_group("spelling", self.adapter)
+ self.adapter.set_enabled(True)
+
# TODO figure out why style is not being taken from ui file
self.add_css_class("view")
@@ -125,7 +151,6 @@ class WeegtkChat(Adw.Bin):
def setup_list_item(self, factory, list_item, *user_data):
message = WeegtkMessage()
list_item.set_child(message)
- pass
def bind_list_item(self, factory, list_item, *user_data):
text = list_item.get_item().get_string()
@@ -166,11 +191,14 @@ class WeegtkChat(Adw.Bin):
last = self.model.get_string(count - 1)
last_data = json.loads(last)
if last_data["username"] == user:
- msg_type = "message_append"
+ if msg_type == "system":
+ msg_type = "system_append"
+ else:
+ msg_type = "message_append"
data = {
"username": user,
- "text": [msg],
+ "text": msg,
"type": msg_type
}
self.model.append(json.dumps(data))
@@ -179,13 +207,18 @@ class WeegtkChat(Adw.Bin):
# TODO clear chat buffer
pass
+
@Gtk.Template.Callback()
def entry_activate(self, *args):
entry_buffer = self.text_entry.get_buffer()
- text = entry_buffer.get_text()
+ text = entry_buffer.get_text(entry_buffer.get_start_iter(), entry_buffer.get_end_iter(), False)
entry_buffer.set_text("", 0)
self.emit("buffer_input", self.data['full_name'], text)
+ def entry_callback(self, *args):
+ self.entry_activate()
+ return True
+
def open_file_dialog(self, dialog, result, caller):
try:
file = dialog.open_finish(result)
@@ -196,7 +229,7 @@ class WeegtkChat(Adw.Bin):
conf = config.read()
file_url = netfile.upload(file.get_path(), conf["upload"]["url"])
entry_buffer = self.text_entry.get_buffer()
- entry_buffer.insert_text(self.text_entry.get_position(), file_url, -1)
+ entry_buffer.insert_at_cursor(file_url, -1)
@Gtk.Template.Callback()
def attach_file(self, *args):