[polari/wip/fmuellner/window-experiments: 353/356] roomList: Add "Open in Window" to context menu



commit 9750209b1bcf7ada6ebda64065204c8dc121a42d
Author: Florian Müllner <fmuellner gnome org>
Date:   Tue Jul 19 18:46:13 2016 +0200

    roomList: Add "Open in Window" to context menu

 src/application.js |   14 ++++++++++++++
 src/mainWindow.js  |    5 +++++
 src/roomList.js    |    2 ++
 3 files changed, 21 insertions(+), 0 deletions(-)
---
diff --git a/src/application.js b/src/application.js
index 85a69d8..612c9ec 100644
--- a/src/application.js
+++ b/src/application.js
@@ -160,6 +160,9 @@ const Application = new Lang.Class({
             activate: Lang.bind(this, this._onStartClient) },
           { name: 'new-window',
             activate: Lang.bind(this, this._onNewWindow) },
+          { name: 'open-in-window',
+            parameter_type: GLib.VariantType.new('s'),
+            activate: Lang.bind(this, this._onOpenInWindow) },
           { name: 'help',
             activate: Lang.bind(this, this._onShowHelp),
             accels: ['F1'] },
@@ -538,6 +541,17 @@ const Application = new Lang.Class({
         this._telepathyClient = new TelepathyClient.TelepathyClient(params);
     },
 
+    _onOpenInWindow: function(action, param) {
+        let [roomId] = param.get_string();
+        let room = this._chatroomManager.getRoomById(roomId);
+        if (!room)
+            return;
+        let window = new MainWindow.MainWindow({ application: this,
+                                                 active_room: room,
+                                                 single_room: true });
+        window.present();
+    },
+
     _onShowHelp: function() {
         Utils.openURL('help:org.gnome.Polari', Gtk.get_current_event_time());
     },
diff --git a/src/mainWindow.js b/src/mainWindow.js
index 2092d2a..f7be4aa 100644
--- a/src/mainWindow.js
+++ b/src/mainWindow.js
@@ -381,6 +381,11 @@ const MainWindow = new Lang.Class({
         this._membersChangedId = 0;
         this._channelChangedId = 0;
 
+        if (this._singleRoom) {
+            if (this._room && (!room || this._room.id != room.id))
+                this.destroy();
+        }
+
         if (room && room.type == Tp.HandleType.ROOM)
             this._lastActiveRoom = room;
         this._room = room;
diff --git a/src/roomList.js b/src/roomList.js
index 2bfa617..97d4b55 100644
--- a/src/roomList.js
+++ b/src/roomList.js
@@ -132,6 +132,8 @@ const RoomRow = new Lang.Class({
             let isRoom = this._room.type == Tp.HandleType.ROOM;
             menu.append(isRoom ? _("Leave chatroom") : _("End conversation"),
                         'app.leave-room(("%s", ""))'.format(this._room.id));
+            menu.append(_("Open in Window"),
+                        'app.open-in-window("%s")'.format(this._room.id));
 
             this._popover = Gtk.Popover.new_from_model(this, menu);
             this._popover.connect('notify::visible', _onPopoverVisibleChanged);


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