[polari] roomList: Only create context popovers when needed
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari] roomList: Only create context popovers when needed
- Date: Thu, 29 Oct 2015 17:45:54 +0000 (UTC)
commit 3c1bcc95d92a03162ad0c0d5252a18b1c190f1f6
Author: Florian Müllner <fmuellner gnome org>
Date: Sat Oct 24 01:59:17 2015 +0200
roomList: Only create context popovers when needed
Avoid some unnecessary work (on style changes etc.) by not creating
a bunch of unused popovers on room initialization, but only on-demand
when actually needed.
src/roomList.js | 41 +++++++++++++++++++++++++----------------
1 files changed, 25 insertions(+), 16 deletions(-)
---
diff --git a/src/roomList.js b/src/roomList.js
index d39034f..a7e2d1b 100644
--- a/src/roomList.js
+++ b/src/roomList.js
@@ -18,21 +18,8 @@ const RoomRow = new Lang.Class({
let app = Gio.Application.get_default();
this.widget.room = room;
- let menu = new Gio.Menu();
- menu.append(room.type == Tp.HandleType.ROOM ? _("Leave chatroom")
- : _("End conversation"),
- 'app.leave-room(("%s", ""))'.format(this.widget.room.id));
+ this._popover = null;
- this._popover = Gtk.Popover.new_from_model(this.widget, menu);
- this._popover.connect('notify::visible', Lang.bind(this,
- function() {
- let roomContext = this.widget.get_style_context();
- if (this._popover.visible)
- roomContext.add_class('has-open-popup');
- else
- roomContext.remove_class('has-open-popup');
- }));
- this._popover.position = Gtk.PositionType.BOTTOM;
this._eventBox.connect('button-release-event',
Lang.bind(this, this._onButtonRelease));
this.widget.connect('key-press-event',
@@ -92,7 +79,7 @@ const RoomRow = new Lang.Class({
if (button != Gdk.BUTTON_SECONDARY)
return Gdk.EVENT_PROPAGATE;
- this._popover.show();
+ this._showPopover();
return Gdk.EVENT_STOP;
},
@@ -105,11 +92,33 @@ const RoomRow = new Lang.Class({
mods & Gdk.ModifierType.SHIFT_MASK))
return Gdk.EVENT_PROPAGATE;
- this._popover.show();
+ this._showPopover();
return Gdk.EVENT_STOP;
},
+ _showPopover: function() {
+ if (!this._popover) {
+ let room = this.widget.room;
+ let menu = new Gio.Menu();
+ menu.append(room.type == Tp.HandleType.ROOM ? _("Leave chatroom")
+ : _("End conversation"),
+ 'app.leave-room(("%s", ""))'.format(room.id));
+
+ this._popover = Gtk.Popover.new_from_model(this.widget, menu);
+ this._popover.connect('notify::visible', Lang.bind(this,
+ function() {
+ let roomContext = this.widget.get_style_context();
+ if (this._popover.visible)
+ roomContext.add_class('has-open-popup');
+ else
+ roomContext.remove_class('has-open-popup');
+ }));
+ this._popover.position = Gtk.PositionType.BOTTOM;
+ }
+ this._popover.show();
+ },
+
_createWidget: function(gicon) {
this.widget = new Gtk.ListBoxRow({ margin_bottom: 4 });
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]