[polari] roomList: Implement 'leave-selected-rooms' action



commit 78e8d7e41c7f3dc168c75025b6b84d86a67752cc
Author: Florian Müllner <fmuellner gnome org>
Date:   Fri Aug 2 03:30:31 2013 +0200

    roomList: Implement 'leave-selected-rooms' action

 src/roomList.js |   35 +++++++++++++++++++++++++++++++----
 1 files changed, 31 insertions(+), 4 deletions(-)
---
diff --git a/src/roomList.js b/src/roomList.js
index 01e1fa5..b69e25e 100644
--- a/src/roomList.js
+++ b/src/roomList.js
@@ -3,6 +3,7 @@ const GLib = imports.gi.GLib;
 const GObject = imports.gi.GObject;
 const Gtk = imports.gi.Gtk;
 const Pango = imports.gi.Pango;
+const Tp = imports.gi.TelepathyGLib;
 
 const ChatroomManager = imports.chatroomManager;
 const Lang = imports.lang;
@@ -113,6 +114,7 @@ const RoomList = new Lang.Class({
         this.widget.set_sort_func(Lang.bind(this, this._sort));
 
         this._roomRows = {};
+        this._selectedRows = 0;
         this._selectionMode = false;
 
         this.widget.connect('row-selected',
@@ -129,8 +131,15 @@ const RoomList = new Lang.Class({
                                   Lang.bind(this, this._activeRoomChanged));
 
         let app = Gio.Application.get_default();
-        app.connect('action-state-changed::selection-mode',
-                    Lang.bind(this, this._onSelectionModeChanged));
+        this._selectionModeAction = app.lookup_action('selection-mode');
+        this._selectionModeAction.connect('notify::state', Lang.bind(this,
+                                          this._onSelectionModeChanged));
+
+        this._leaveSelectedAction = app.lookup_action('leave-selected-rooms');
+        this._leaveSelectedAction.connect('activate',
+                                          Lang.bind(this, this._onLeaveSelectedActivated));
+
+        this._leaveAction = app.lookup_action('leave-room');
 
         let action;
         action = app.lookup_action('next-room');
@@ -155,8 +164,9 @@ const RoomList = new Lang.Class({
             }));
     },
 
-    _onSelectionModeChanged: function(group, name, value) {
-        this._selectionMode = value.get_boolean();
+    _onSelectionModeChanged: function() {
+        this._selectionMode = this._selectionModeAction.state.get_boolean();
+        this._leaveSelectedAction.enabled = this._selectedRows > 0;
 
         if (this._selectionMode)
             this.widget.get_selected_row().grab_focus();
@@ -165,6 +175,15 @@ const RoomList = new Lang.Class({
                                     this._roomManager.getActiveRoom());
     },
 
+    _onLeaveSelectedActivated: function() {
+        for (let id in this._roomRows)
+            if (this._roomRows[id].selection_button.active) {
+                let room = this._roomRows[id].widget.room;
+                this._leaveAction.activate(GLib.Variant.new('s', room.id));
+            }
+        this._selectionModeAction.change_state(GLib.Variant.new('b', false));
+    },
+
     _moveSelection: function(movement, count) {
         let toplevel = this.widget.get_toplevel();
         let focus = toplevel.get_focus();
@@ -188,6 +207,14 @@ const RoomList = new Lang.Class({
             function(w) {
                 delete this._roomRows[w.room.id];
             }));
+        roomRow.selection_button.connect('toggled', Lang.bind(this,
+            function(button) {
+                if (button.active)
+                    this._selectedRows++;
+                else
+                    this._selectedRows--;
+                this._leaveSelectedAction.enabled = this._selectedRows > 0;
+            }));
     },
 
     _roomRemoved: function(roomManager, room) {


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