[polari/wip/raresv/userTrackerAndPopoversRebase: 5/24] chatView: split _onNickTagClicked() method.



commit eed898b337a808fc6a73ffb0a1a51d01c4aa7470
Author: raresv <rares visalom gmail com>
Date:   Wed Aug 3 14:29:52 2016 +0300

    chatView: split _onNickTagClicked() method.

 src/chatView.js |   85 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 49 insertions(+), 36 deletions(-)
---
diff --git a/src/chatView.js b/src/chatView.js
index 27bfcff..a00d40c 100644
--- a/src/chatView.js
+++ b/src/chatView.js
@@ -15,7 +15,7 @@ const PasteManager = imports.pasteManager;
 const Signals = imports.signals;
 const Utils = imports.utils;
 const UserTracker = imports.userTracker;
-const userList = imports.userList;
+const UserList = imports.userList;
 
 const MAX_NICK_CHARS = 8;
 const IGNORE_STATUS_TIME = 5;
@@ -1220,51 +1220,64 @@ const ChatView = new Lang.Class({
 
     _createNickTag: function(name) {
         let tag = new ButtonTag({ name: name });
-        tag._popover = new userList.UserPopover({ relative_to: this._view });
-        tag.connect('clicked', Lang.bind(this,
-            function() {
-                let view = this._view;
-                let event = Gtk.get_current_event();
-                let [, eventX, eventY] = event.get_coords();
-                let [x, y] = view.window_to_buffer_coords(Gtk.TextWindowType.WIDGET,
+        tag._popover = new UserList.UserPopover({ relative_to: this._view, margin: 0 });
+        tag.connect('clicked', Lang.bind(this, this._onNickTagClicked));
+        return tag;
+    },
+
+    _onNickTagClicked: function(tag) {
+        let view = this._view;
+        let event = Gtk.get_current_event();
+        let [, eventX, eventY] = event.get_coords();
+        let [x, y] = view.window_to_buffer_coords(Gtk.TextWindowType.WIDGET,
                                                           eventX, eventY);
-                let [inside, start] = view.get_iter_at_location(x, y);
-                let end = start.copy();
+        let [inside, start] = view.get_iter_at_location(x, y);
+        let end = start.copy();
 
-                start.backward_to_tag_toggle(tag);
-                end.forward_to_tag_toggle(tag);
+        if (!start.starts_tag(tag))
+            start.backward_to_tag_toggle(tag);
 
-                //log(view.get_buffer().get_slice(start, end, false));
+        if (!end.ends_tag(tag))
+            end.forward_to_tag_toggle(tag);
 
-                let rect1 = view.get_iter_location(start);
-                let rect2 = view.get_iter_location(end);
+        let rect1 = view.get_iter_location(start);
+        let rect2 = view.get_iter_location(end);
 
-                [rect1.x, rect1.y] = view.buffer_to_window_coords(Gtk.TextWindowType.WIDGET, rect1.x, 
rect1.y);
-                [rect2.x, rect2.y] = view.buffer_to_window_coords(Gtk.TextWindowType.WIDGET, rect2.x, 
rect2.y);
-                rect1.width = rect2.x - rect1.x;
-                rect1.height = rect2.y - rect1.y;
+        [rect1.x, rect1.y] = view.buffer_to_window_coords(Gtk.TextWindowType.WIDGET, rect1.x, rect1.y);
+        [rect2.x, rect2.y] = view.buffer_to_window_coords(Gtk.TextWindowType.WIDGET, rect2.x, rect2.y);
+        rect1.width = rect2.x - rect1.x;
+        rect1.height = rect2.y - rect1.y;
 
-                //TODO: special chars?
-                let actualNickName = view.get_buffer().get_slice(start, end, false);
+        //TODO: special chars?
+        let actualNickName = view.get_buffer().get_slice(start, end, false);
 
-                tag._popover.fallbackNick = actualNickName;
+        tag._popover.fallbackNick = actualNickName;
 
-                for (let i = 0; i < tag._contacts.length; i++) {
-                    //log(tag._contacts[i].alias);
-                    if (actualNickName == tag._contacts[i].alias) {
-                        if (!tag._popover.user) {
-                            tag._popover.user = tag._contacts[i];
-                        }
-                        else if (tag._popover.user != tag._contacts[i]) {
-                            tag._popover.user = tag._contacts[i];
-                        }
-                    }
+        let contactFound = false;
+        for (let i = 0; i < tag._contacts.length; i++) {
+            if (actualNickName == tag._contacts[i].alias) {
+                if (!tag._popover.user) {
+                    tag._popover.user = tag._contacts[i];
+                    contactFound = true;
+                    break;
+                }
+                else if (tag._popover.user != tag._contacts[i]) {
+                    tag._popover.user = tag._contacts[i];
+                    contactFound = true;
+                    break;
                 }
+            }
+        }
 
-                tag._popover.pointing_to = rect1;
-                tag._popover.show_all();
-            }));
-        return tag;
+        if (!contactFound) {
+            //tag._popover.user = null;
+            if (tag._contacts[0]) {
+                tag._popover.user = tag._contacts[0];
+            }
+        }
+
+        tag._popover.pointing_to = rect1;
+        tag._popover.show();
     },
 
     _createUrlTag: function(url) {


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