[polari] roomList: Implement 'leave-selected-rooms' action
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari] roomList: Implement 'leave-selected-rooms' action
- Date: Thu, 8 Aug 2013 13:15:34 +0000 (UTC)
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]