[polari/wip/raresv/userTrackerAndPopoversRebase: 5/24] chatView: split _onNickTagClicked() method.
- From: Rares Visalom <raresvisalom src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari/wip/raresv/userTrackerAndPopoversRebase: 5/24] chatView: split _onNickTagClicked() method.
- Date: Fri, 5 Aug 2016 23:40:36 +0000 (UTC)
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]