ibusCandidatePopup: Make candidates reactive to pointer clicks

Allow for candidates to be selected by clicking on them.

https://bugzilla.gnome.org/show_bug.cgi?id=691902
This commit is contained in:
Rui Matos 2013-01-17 00:21:14 +01:00
parent 235ec7cb2e
commit c3ed936776
2 changed files with 15 additions and 1 deletions

View File

@ -2126,6 +2126,10 @@ StScrollBar StButton#vhandle:active {
background-color: rgba(255,255,255,0.2); background-color: rgba(255,255,255,0.2);
} }
.candidate-box:hover {
border-radius: 4px;
background-color: rgba(255,255,255,0.1);
}
.candidate-page-button-box { .candidate-page-button-box {
height: 2em; height: 2em;
width: 80px; width: 80px;

View File

@ -19,13 +19,20 @@ const CandidateArea = new Lang.Class({
visible: false }); visible: false });
this._candidateBoxes = []; this._candidateBoxes = [];
for (let i = 0; i < MAX_CANDIDATES_PER_PAGE; ++i) { for (let i = 0; i < MAX_CANDIDATES_PER_PAGE; ++i) {
let box = new St.BoxLayout({ style_class: 'candidate-box' }); let box = new St.BoxLayout({ style_class: 'candidate-box',
reactive: true,
track_hover: true });
box._indexLabel = new St.Label({ style_class: 'candidate-index' }); box._indexLabel = new St.Label({ style_class: 'candidate-index' });
box._candidateLabel = new St.Label({ style_class: 'candidate-label' }); box._candidateLabel = new St.Label({ style_class: 'candidate-label' });
box.add(box._indexLabel, { y_fill: false }); box.add(box._indexLabel, { y_fill: false });
box.add(box._candidateLabel, { y_fill: false }); box.add(box._candidateLabel, { y_fill: false });
this._candidateBoxes.push(box); this._candidateBoxes.push(box);
this.actor.add(box); this.actor.add(box);
let j = i;
box.connect('button-release-event', Lang.bind(this, function(actor, event) {
this.emit('candidate-clicked', j, event.get_button(), event.get_state());
}));
} }
this._buttonBox = new St.BoxLayout({ style_class: 'candidate-page-button-box' }); this._buttonBox = new St.BoxLayout({ style_class: 'candidate-page-button-box' });
@ -136,6 +143,9 @@ const CandidatePopup = new Lang.Class({
this._candidateArea.connect('next-page', Lang.bind(this, function() { this._candidateArea.connect('next-page', Lang.bind(this, function() {
this._panelService.page_down(); this._panelService.page_down();
})); }));
this._candidateArea.connect('candidate-clicked', Lang.bind(this, function(ca, index, button, state) {
this._panelService.candidate_clicked(index, button, state);
}));
this._panelService = null; this._panelService = null;
}, },