[gnome-shell] telepathyClient: Use GObjects based message objects



commit 766288eec1bd3bd50dfc4ddf410c2b507187e603
Author: Marco Trevisan (Treviño) <mail 3v1n0 net>
Date:   Fri Mar 20 20:06:55 2020 +0100

    telepathyClient: Use GObjects based message objects
    
    As per commit b5676a2a5 ChatNotification is a GObject, but I was wrongly
    considering that it was using Tp.Message's as children, instead it just
    uses custom-built objects to pass information around through signals.
    
    Given gjs can only use GObjects as signal parameters, create a small wrapper
    class to hold the ChatNotification messages and use it as signal parameter.
    
    Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2449
    
    https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1112

 js/ui/components/telepathyClient.js | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)
---
diff --git a/js/ui/components/telepathyClient.js b/js/ui/components/telepathyClient.js
index e6ae340424..cdb7f57f5a 100644
--- a/js/ui/components/telepathyClient.js
+++ b/js/ui/components/telepathyClient.js
@@ -2,7 +2,6 @@
 /* exported Component */
 
 const { Clutter, Gio, GLib, GObject, St } = imports.gi;
-const Lang = imports.lang;
 
 var Tpl = null;
 var Tp = null;
@@ -630,11 +629,19 @@ class ChatSource extends MessageTray.Source {
     }
 }) : null;
 
+const ChatNotificationMessage = HAVE_TP ? GObject.registerClass(
+class ChatNotificationMessage extends GObject.Object {
+    _init(props = {}) {
+        super._init();
+        this.set(props);
+    }
+}) : null;
+
 var ChatNotification = HAVE_TP ? GObject.registerClass({
     Signals: {
-        'message-removed': { param_types: [Tp.Message.$gtype] },
-        'message-added': { param_types: [Tp.Message.$gtype] },
-        'timestamp-changed': { param_types: [Tp.Message.$gtype] },
+        'message-removed': { param_types: [ChatNotificationMessage.$gtype] },
+        'message-added': { param_types: [ChatNotificationMessage.$gtype] },
+        'timestamp-changed': { param_types: [ChatNotificationMessage.$gtype] },
     },
 }, class ChatNotification extends MessageTray.Notification {
     _init(source) {
@@ -735,21 +742,24 @@ var ChatNotification = HAVE_TP ? GObject.registerClass({
                                       styles: [],
                                       timestamp: currentTime,
                                       noTimestamp: false });
+        const { noTimestamp } = props;
+        delete props.noTimestamp;
 
         // Reset the old message timeout
         if (this._timestampTimeoutId)
             GLib.source_remove(this._timestampTimeoutId);
         this._timestampTimeoutId = 0;
 
-        let message = { realMessage: props.group != 'meta',
-                        showTimestamp: false };
-        Lang.copyProperties(props, message);
-        delete message.noTimestamp;
+        let message = new ChatNotificationMessage({
+            realMessage: props.group !== 'meta',
+            showTimestamp: false,
+            ...props,
+        });
 
         this.messages.unshift(message);
         this.emit('message-added', message);
 
-        if (!props.noTimestamp) {
+        if (!noTimestamp) {
             let timestamp = props.timestamp;
             if (timestamp < currentTime - SCROLLBACK_IMMEDIATE_TIME) {
                 this.appendTimestamp();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]