Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
|
|
|
|
|
|
const Big = imports.gi.Big;
|
|
|
|
const Clutter = imports.gi.Clutter;
|
|
|
|
const Gtk = imports.gi.Gtk;
|
|
|
|
const Mainloop = imports.mainloop;
|
2009-08-09 19:48:54 -04:00
|
|
|
const Pango = imports.gi.Pango;
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
const Shell = imports.gi.Shell;
|
|
|
|
const Signals = imports.signals;
|
|
|
|
const Lang = imports.lang;
|
2009-08-14 09:30:48 -04:00
|
|
|
const Gettext = imports.gettext.domain('gnome-shell');
|
|
|
|
const _ = Gettext.gettext;
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
|
|
|
const AppDisplay = imports.ui.appDisplay;
|
|
|
|
const DocDisplay = imports.ui.docDisplay;
|
2009-08-06 09:06:33 -04:00
|
|
|
const Places = imports.ui.places;
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
const GenericDisplay = imports.ui.genericDisplay;
|
|
|
|
const Button = imports.ui.button;
|
|
|
|
const Main = imports.ui.main;
|
|
|
|
|
|
|
|
const DEFAULT_PADDING = 4;
|
2009-08-28 13:37:03 -04:00
|
|
|
const DEFAULT_SPACING = 4;
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
const DASH_SECTION_PADDING = 6;
|
2009-08-09 19:48:54 -04:00
|
|
|
const DASH_SECTION_SPACING = 40;
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
const DASH_CORNER_RADIUS = 5;
|
2009-08-15 16:32:58 -04:00
|
|
|
const DASH_PADDING_SIDE = 14;
|
2009-08-09 19:48:54 -04:00
|
|
|
|
|
|
|
const BACKGROUND_COLOR = new Clutter.Color();
|
|
|
|
BACKGROUND_COLOR.from_pixel(0x000000c0);
|
|
|
|
|
2009-08-26 18:46:58 -04:00
|
|
|
const PRELIGHT_COLOR = new Clutter.Color();
|
|
|
|
PRELIGHT_COLOR.from_pixel(0x4f6fadaa);
|
|
|
|
|
2009-08-15 16:32:58 -04:00
|
|
|
const TEXT_COLOR = new Clutter.Color();
|
|
|
|
TEXT_COLOR.from_pixel(0x5f5f5fff);
|
2009-08-28 13:37:03 -04:00
|
|
|
const BRIGHTER_TEXT_COLOR = new Clutter.Color();
|
|
|
|
BRIGHTER_TEXT_COLOR.from_pixel(0xbbbbbbff);
|
2009-08-15 16:32:58 -04:00
|
|
|
const BRIGHT_TEXT_COLOR = new Clutter.Color();
|
|
|
|
BRIGHT_TEXT_COLOR.from_pixel(0xffffffff);
|
|
|
|
const SEARCH_TEXT_COLOR = new Clutter.Color();
|
|
|
|
SEARCH_TEXT_COLOR.from_pixel(0x333333ff);
|
|
|
|
|
|
|
|
const SEARCH_CURSOR_COLOR = BRIGHT_TEXT_COLOR;
|
|
|
|
const HIGHLIGHTED_SEARCH_CURSOR_COLOR = SEARCH_TEXT_COLOR;
|
|
|
|
|
|
|
|
const HIGHLIGHTED_SEARCH_BACKGROUND_COLOR = new Clutter.Color();
|
|
|
|
HIGHLIGHTED_SEARCH_BACKGROUND_COLOR.from_pixel(0xc4c4c4ff);
|
2009-08-09 19:48:54 -04:00
|
|
|
|
|
|
|
const SEARCH_BORDER_BOTTOM_COLOR = new Clutter.Color();
|
|
|
|
SEARCH_BORDER_BOTTOM_COLOR.from_pixel(0x191919ff);
|
|
|
|
|
|
|
|
const SECTION_BORDER_COLOR = new Clutter.Color();
|
|
|
|
SECTION_BORDER_COLOR.from_pixel(0x262626ff);
|
|
|
|
const SECTION_BORDER = 1;
|
|
|
|
const SECTION_INNER_BORDER_COLOR = new Clutter.Color();
|
|
|
|
SECTION_INNER_BORDER_COLOR.from_pixel(0x000000ff);
|
|
|
|
const SECTION_BACKGROUND_TOP_COLOR = new Clutter.Color();
|
|
|
|
SECTION_BACKGROUND_TOP_COLOR.from_pixel(0x161616ff);
|
|
|
|
const SECTION_BACKGROUND_BOTTOM_COLOR = new Clutter.Color();
|
|
|
|
SECTION_BACKGROUND_BOTTOM_COLOR.from_pixel(0x000000ff);
|
|
|
|
const SECTION_INNER_SPACING = 8;
|
|
|
|
|
|
|
|
const BROWSE_ACTIVATED_BG = new Clutter.Color();
|
|
|
|
BROWSE_ACTIVATED_BG.from_pixel(0x303030f0);
|
|
|
|
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
const PANE_BORDER_COLOR = new Clutter.Color();
|
2009-08-09 09:57:39 -04:00
|
|
|
PANE_BORDER_COLOR.from_pixel(0x101d3cfa);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
const PANE_BORDER_WIDTH = 2;
|
|
|
|
|
|
|
|
const PANE_BACKGROUND_COLOR = new Clutter.Color();
|
2009-08-09 09:57:39 -04:00
|
|
|
PANE_BACKGROUND_COLOR.from_pixel(0x000000f4);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
2009-09-11 17:48:02 -04:00
|
|
|
const APPS = "apps";
|
|
|
|
const PREFS = "prefs";
|
|
|
|
const DOCS = "docs";
|
|
|
|
|
2009-09-11 16:42:54 -04:00
|
|
|
/*
|
|
|
|
* Returns the index in an array of a given length that is obtained
|
|
|
|
* if the provided index is incremented by an increment and the array
|
|
|
|
* is wrapped in if necessary.
|
|
|
|
*
|
|
|
|
* index: prior index, expects 0 <= index < length
|
|
|
|
* increment: the change in index, expects abs(increment) <= length
|
|
|
|
* length: the length of the array
|
|
|
|
*/
|
|
|
|
function _getIndexWrapped(index, increment, length) {
|
|
|
|
return (index + increment + length) % length;
|
|
|
|
}
|
|
|
|
|
2009-09-11 17:48:02 -04:00
|
|
|
function _createDisplay(displayType) {
|
|
|
|
if (displayType == APPS)
|
|
|
|
return new AppDisplay.AppDisplay();
|
|
|
|
else if (displayType == PREFS)
|
|
|
|
return new AppDisplay.AppDisplay(true);
|
|
|
|
else if (displayType == DOCS)
|
|
|
|
return new DocDisplay.DocDisplay();
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
function Pane() {
|
|
|
|
this._init();
|
|
|
|
}
|
|
|
|
|
|
|
|
Pane.prototype = {
|
|
|
|
_init: function () {
|
|
|
|
this._open = false;
|
|
|
|
|
|
|
|
this.actor = new Big.Box({ orientation: Big.BoxOrientation.VERTICAL,
|
|
|
|
background_color: PANE_BACKGROUND_COLOR,
|
|
|
|
border: PANE_BORDER_WIDTH,
|
|
|
|
border_color: PANE_BORDER_COLOR,
|
|
|
|
padding: DEFAULT_PADDING,
|
|
|
|
reactive: true });
|
|
|
|
this.actor.connect('button-press-event', Lang.bind(this, function (a, e) {
|
|
|
|
// Eat button press events so they don't go through and close the pane
|
|
|
|
return true;
|
|
|
|
}));
|
|
|
|
|
|
|
|
let chromeTop = new Big.Box({ orientation: Big.BoxOrientation.HORIZONTAL,
|
|
|
|
spacing: 6 });
|
|
|
|
|
|
|
|
let closeIconUri = "file://" + global.imagedir + "close.svg";
|
|
|
|
let closeIcon = Shell.TextureCache.get_default().load_uri_sync(Shell.TextureCachePolicy.FOREVER,
|
|
|
|
closeIconUri,
|
|
|
|
16,
|
|
|
|
16);
|
|
|
|
closeIcon.reactive = true;
|
|
|
|
closeIcon.connect('button-press-event', Lang.bind(this, function (b, e) {
|
|
|
|
this.close();
|
|
|
|
return true;
|
|
|
|
}));
|
|
|
|
chromeTop.append(closeIcon, Big.BoxPackFlags.END);
|
|
|
|
this.actor.append(chromeTop, Big.BoxPackFlags.NONE);
|
|
|
|
|
|
|
|
this.content = new Big.Box({ orientation: Big.BoxOrientation.VERTICAL,
|
|
|
|
spacing: DEFAULT_PADDING });
|
|
|
|
this.actor.append(this.content, Big.BoxPackFlags.EXPAND);
|
|
|
|
|
|
|
|
// Hidden by default
|
|
|
|
this.actor.hide();
|
|
|
|
},
|
|
|
|
|
|
|
|
open: function () {
|
|
|
|
if (this._open)
|
|
|
|
return;
|
|
|
|
this._open = true;
|
|
|
|
this.actor.show();
|
|
|
|
this.emit('open-state-changed', this._open);
|
|
|
|
},
|
|
|
|
|
|
|
|
close: function () {
|
|
|
|
if (!this._open)
|
|
|
|
return;
|
|
|
|
this._open = false;
|
|
|
|
this.actor.hide();
|
|
|
|
this.emit('open-state-changed', this._open);
|
|
|
|
},
|
|
|
|
|
|
|
|
destroyContent: function() {
|
|
|
|
let children = this.content.get_children();
|
|
|
|
for (let i = 0; i < children.length; i++) {
|
|
|
|
children[i].destroy();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
toggle: function () {
|
|
|
|
if (this._open)
|
|
|
|
this.close();
|
|
|
|
else
|
|
|
|
this.open();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Signals.addSignalMethods(Pane.prototype);
|
|
|
|
|
2009-09-11 17:48:02 -04:00
|
|
|
function ResultArea(displayType, enableNavigation) {
|
|
|
|
this._init(displayType, enableNavigation);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
ResultArea.prototype = {
|
2009-09-11 17:48:02 -04:00
|
|
|
_init : function(displayType, enableNavigation) {
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
this.actor = new Big.Box({ orientation: Big.BoxOrientation.VERTICAL });
|
|
|
|
this.resultsContainer = new Big.Box({ orientation: Big.BoxOrientation.HORIZONTAL,
|
|
|
|
spacing: DEFAULT_PADDING
|
|
|
|
});
|
|
|
|
this.actor.append(this.resultsContainer, Big.BoxPackFlags.EXPAND);
|
|
|
|
this.navContainer = new Big.Box({ orientation: Big.BoxOrientation.VERTICAL });
|
|
|
|
this.resultsContainer.append(this.navContainer, Big.BoxPackFlags.NONE);
|
|
|
|
|
2009-09-11 17:48:02 -04:00
|
|
|
this.display = _createDisplay(displayType);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
|
|
|
this.navArea = this.display.getNavigationArea();
|
|
|
|
if (enableNavigation && this.navArea)
|
|
|
|
this.navContainer.append(this.navArea, Big.BoxPackFlags.EXPAND);
|
|
|
|
|
|
|
|
this.resultsContainer.append(this.display.actor, Big.BoxPackFlags.EXPAND);
|
|
|
|
|
|
|
|
this.controlBox = new Big.Box({ x_align: Big.BoxAlignment.CENTER });
|
|
|
|
this.controlBox.append(this.display.displayControl, Big.BoxPackFlags.NONE);
|
2009-08-12 19:32:50 -04:00
|
|
|
this.actor.append(this.controlBox, Big.BoxPackFlags.NONE);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
|
|
|
this.display.load();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Utility function shared between ResultPane and the DocDisplay in the main dash.
|
|
|
|
// Connects to the detail signal of the display, and on-demand creates a new
|
|
|
|
// pane.
|
2009-08-09 19:48:54 -04:00
|
|
|
function createPaneForDetails(dash, display) {
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
let detailPane = null;
|
|
|
|
display.connect('show-details', Lang.bind(this, function(display, index) {
|
|
|
|
if (detailPane == null) {
|
|
|
|
detailPane = new Pane();
|
|
|
|
detailPane.connect('open-state-changed', Lang.bind(this, function (pane, isOpen) {
|
|
|
|
if (!isOpen) {
|
|
|
|
/* Ensure we don't keep around large preview textures */
|
|
|
|
detailPane.destroyContent();
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
dash._addPane(detailPane);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (index >= 0) {
|
|
|
|
detailPane.destroyContent();
|
2009-08-12 16:33:39 -04:00
|
|
|
let details = display.createDetailsForIndex(index);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
detailPane.content.append(details, Big.BoxPackFlags.EXPAND);
|
|
|
|
detailPane.open();
|
|
|
|
} else {
|
|
|
|
detailPane.close();
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
function ResultPane(dash) {
|
|
|
|
this._init(dash);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
ResultPane.prototype = {
|
|
|
|
__proto__: Pane.prototype,
|
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
_init: function(dash) {
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
Pane.prototype._init.call(this);
|
|
|
|
this._dash = dash;
|
|
|
|
},
|
|
|
|
|
2009-09-11 17:48:02 -04:00
|
|
|
// Create a display of displayType and pack it into this pane's
|
|
|
|
// content area. Return the display.
|
|
|
|
packResults: function(displayType, enableNavigation) {
|
|
|
|
let resultArea = new ResultArea(displayType, enableNavigation);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
createPaneForDetails(this._dash, resultArea.display);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
|
|
|
this.content.append(resultArea.actor, Big.BoxPackFlags.EXPAND);
|
|
|
|
this.connect('open-state-changed', Lang.bind(this, function(pane, isOpen) {
|
|
|
|
resultArea.display.resetState();
|
|
|
|
}));
|
|
|
|
return resultArea.display;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function SearchEntry() {
|
|
|
|
this._init();
|
|
|
|
}
|
|
|
|
|
|
|
|
SearchEntry.prototype = {
|
|
|
|
_init : function() {
|
2009-08-16 10:09:34 -04:00
|
|
|
this.actor = new Big.Box({ padding: DEFAULT_PADDING,
|
2009-08-09 19:48:54 -04:00
|
|
|
border_bottom: SECTION_BORDER,
|
2009-08-15 16:32:58 -04:00
|
|
|
border_color: SEARCH_BORDER_BOTTOM_COLOR,
|
2009-08-16 10:09:34 -04:00
|
|
|
corner_radius: DASH_CORNER_RADIUS,
|
|
|
|
reactive: true });
|
|
|
|
let box = new Big.Box({ orientation: Big.BoxOrientation.HORIZONTAL,
|
|
|
|
y_align: Big.BoxAlignment.CENTER });
|
|
|
|
this.actor.append(box, Big.BoxPackFlags.EXPAND);
|
2009-08-15 16:32:58 -04:00
|
|
|
this.actor.connect('button-press-event', Lang.bind(this, function () {
|
|
|
|
this._resetTextState(true);
|
|
|
|
return false;
|
|
|
|
}));
|
|
|
|
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
this.pane = null;
|
|
|
|
|
2009-08-28 11:56:40 -04:00
|
|
|
this._defaultText = _("Find...");
|
2009-08-09 19:48:54 -04:00
|
|
|
|
2009-08-28 16:21:21 -04:00
|
|
|
let textProperties = { font_name: "Sans 16px" };
|
2009-08-09 19:48:54 -04:00
|
|
|
let entryProperties = { editable: true,
|
|
|
|
activatable: true,
|
|
|
|
single_line_mode: true,
|
2009-08-15 16:32:58 -04:00
|
|
|
color: SEARCH_TEXT_COLOR,
|
|
|
|
cursor_color: SEARCH_CURSOR_COLOR };
|
2009-08-09 19:48:54 -04:00
|
|
|
Lang.copyProperties(textProperties, entryProperties);
|
|
|
|
this.entry = new Clutter.Text(entryProperties);
|
2009-08-15 16:32:58 -04:00
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
this.entry.connect('notify::text', Lang.bind(this, function () {
|
2009-08-15 16:32:58 -04:00
|
|
|
this._resetTextState(false);
|
2009-08-09 19:48:54 -04:00
|
|
|
}));
|
2009-08-16 10:09:34 -04:00
|
|
|
box.append(this.entry, Big.BoxPackFlags.EXPAND);
|
2009-08-09 19:48:54 -04:00
|
|
|
|
|
|
|
// Mark as editable just to get a cursor
|
|
|
|
let defaultTextProperties = { ellipsize: Pango.EllipsizeMode.END,
|
2009-08-14 18:13:55 -04:00
|
|
|
text: this._defaultText,
|
2009-08-09 19:48:54 -04:00
|
|
|
editable: true,
|
|
|
|
color: TEXT_COLOR,
|
|
|
|
cursor_visible: false,
|
|
|
|
single_line_mode: true };
|
|
|
|
Lang.copyProperties(textProperties, defaultTextProperties);
|
|
|
|
this._defaultText = new Clutter.Text(defaultTextProperties);
|
2009-08-16 10:09:34 -04:00
|
|
|
box.add_actor(this._defaultText);
|
2009-08-09 19:48:54 -04:00
|
|
|
this.entry.connect('notify::allocation', Lang.bind(this, function () {
|
|
|
|
this._repositionDefaultText();
|
|
|
|
}));
|
|
|
|
|
|
|
|
this._iconBox = new Big.Box({ x_align: Big.BoxAlignment.CENTER,
|
2009-08-16 10:09:34 -04:00
|
|
|
y_align: Big.BoxAlignment.CENTER,
|
|
|
|
padding_right: 4 });
|
|
|
|
box.append(this._iconBox, Big.BoxPackFlags.END);
|
2009-08-09 19:48:54 -04:00
|
|
|
|
|
|
|
let magnifierUri = "file://" + global.imagedir + "magnifier.svg";
|
|
|
|
this._magnifierIcon = Shell.TextureCache.get_default().load_uri_sync(Shell.TextureCachePolicy.FOREVER,
|
2009-08-16 10:09:34 -04:00
|
|
|
magnifierUri, 18, 18);
|
|
|
|
let closeUri = "file://" + global.imagedir + "close-black.svg";
|
2009-08-09 19:48:54 -04:00
|
|
|
this._closeIcon = Shell.TextureCache.get_default().load_uri_sync(Shell.TextureCachePolicy.FOREVER,
|
|
|
|
closeUri, 18, 18);
|
|
|
|
this._closeIcon.reactive = true;
|
|
|
|
this._closeIcon.connect('button-press-event', Lang.bind(this, function () {
|
2009-08-15 16:32:58 -04:00
|
|
|
// Resetting this.entry.text will trigger notify::text signal which will
|
|
|
|
// result in this._resetTextState() being called, but we should not rely
|
|
|
|
// on that not short-circuiting if the text was already empty, so we call
|
|
|
|
// this._resetTextState() explicitly in that case.
|
|
|
|
if (this.entry.text == '')
|
|
|
|
this._resetTextState(false);
|
|
|
|
else
|
|
|
|
this.entry.text = '';
|
|
|
|
|
|
|
|
// Return true to stop the signal emission, so that this.actor doesn't get
|
|
|
|
// the button-press-event and re-highlight itself.
|
|
|
|
return true;
|
2009-08-09 19:48:54 -04:00
|
|
|
}));
|
|
|
|
this._repositionDefaultText();
|
|
|
|
this._resetTextState();
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
setPane: function (pane) {
|
|
|
|
this._pane = pane;
|
2009-08-09 19:48:54 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
reset: function () {
|
|
|
|
this.entry.text = '';
|
|
|
|
},
|
|
|
|
|
|
|
|
getText: function () {
|
|
|
|
return this.entry.text;
|
|
|
|
},
|
|
|
|
|
2009-08-15 16:32:58 -04:00
|
|
|
_resetTextState: function (searchEntryClicked) {
|
2009-08-09 19:48:54 -04:00
|
|
|
let text = this.getText();
|
|
|
|
this._iconBox.remove_all();
|
2009-08-15 16:32:58 -04:00
|
|
|
// We highlight the search box if the user starts typing in it
|
|
|
|
// or just clicks in it to indicate that the search is active.
|
|
|
|
if (text != '' || searchEntryClicked) {
|
|
|
|
if (!searchEntryClicked)
|
|
|
|
this._defaultText.hide();
|
2009-08-09 19:48:54 -04:00
|
|
|
this._iconBox.append(this._closeIcon, Big.BoxPackFlags.NONE);
|
2009-08-15 16:32:58 -04:00
|
|
|
this.actor.background_color = HIGHLIGHTED_SEARCH_BACKGROUND_COLOR;
|
|
|
|
this.entry.cursor_color = HIGHLIGHTED_SEARCH_CURSOR_COLOR;
|
2009-08-09 19:48:54 -04:00
|
|
|
} else {
|
|
|
|
this._defaultText.show();
|
|
|
|
this._iconBox.append(this._magnifierIcon, Big.BoxPackFlags.NONE);
|
2009-08-15 16:32:58 -04:00
|
|
|
this.actor.background_color = BACKGROUND_COLOR;
|
|
|
|
this.entry.cursor_color = SEARCH_CURSOR_COLOR;
|
2009-08-09 19:48:54 -04:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
_repositionDefaultText: function () {
|
|
|
|
// Offset a little to show the cursor
|
|
|
|
this._defaultText.set_position(this.entry.x + 4, this.entry.y);
|
|
|
|
this._defaultText.set_size(this.entry.width, this.entry.height);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
}
|
|
|
|
};
|
|
|
|
Signals.addSignalMethods(SearchEntry.prototype);
|
|
|
|
|
|
|
|
function MoreLink() {
|
|
|
|
this._init();
|
|
|
|
}
|
|
|
|
|
|
|
|
MoreLink.prototype = {
|
|
|
|
_init : function () {
|
|
|
|
this.actor = new Big.Box({ orientation: Big.BoxOrientation.HORIZONTAL,
|
2009-08-09 19:48:54 -04:00
|
|
|
padding_right: DEFAULT_PADDING,
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
padding_left: DEFAULT_PADDING,
|
2009-08-09 19:48:54 -04:00
|
|
|
reactive: true,
|
|
|
|
x_align: Big.BoxAlignment.CENTER,
|
|
|
|
y_align: Big.BoxAlignment.CENTER,
|
|
|
|
border_left: SECTION_BORDER,
|
|
|
|
border_color: SECTION_BORDER_COLOR });
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
this.pane = null;
|
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
let text = new Clutter.Text({ font_name: "Sans 12px",
|
|
|
|
color: BRIGHT_TEXT_COLOR,
|
2009-09-27 07:14:26 -04:00
|
|
|
text: _("More") });
|
2009-08-09 19:48:54 -04:00
|
|
|
this.actor.append(text, Big.BoxPackFlags.NONE);
|
|
|
|
|
|
|
|
this.actor.connect('button-press-event', Lang.bind(this, function (b, e) {
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
if (this.pane == null) {
|
|
|
|
// Ensure the pane is created; the activated handler will call setPane
|
|
|
|
this.emit('activated');
|
|
|
|
}
|
|
|
|
this._pane.toggle();
|
|
|
|
return true;
|
|
|
|
}));
|
|
|
|
},
|
|
|
|
|
|
|
|
setPane: function (pane) {
|
|
|
|
this._pane = pane;
|
|
|
|
this._pane.connect('open-state-changed', Lang.bind(this, function(pane, isOpen) {
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Signals.addSignalMethods(MoreLink.prototype);
|
|
|
|
|
2009-09-01 19:06:20 -04:00
|
|
|
function BackLink() {
|
|
|
|
this._init();
|
|
|
|
}
|
|
|
|
|
|
|
|
BackLink.prototype = {
|
|
|
|
_init : function () {
|
|
|
|
this.actor = new Shell.ButtonBox({ orientation: Big.BoxOrientation.HORIZONTAL,
|
|
|
|
padding_right: DEFAULT_PADDING,
|
|
|
|
padding_left: DEFAULT_PADDING,
|
|
|
|
reactive: true,
|
|
|
|
x_align: Big.BoxAlignment.CENTER,
|
|
|
|
y_align: Big.BoxAlignment.CENTER,
|
|
|
|
border_right: SECTION_BORDER,
|
|
|
|
border_color: SECTION_BORDER_COLOR });
|
|
|
|
|
|
|
|
let backIconUri = "file://" + global.imagedir + "back.svg";
|
|
|
|
let backIcon = Shell.TextureCache.get_default().load_uri_sync(Shell.TextureCachePolicy.FOREVER,
|
|
|
|
backIconUri,
|
|
|
|
12,
|
|
|
|
16);
|
|
|
|
this.actor.append(backIcon, Big.BoxPackFlags.NONE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
function SectionHeader(title, suppressBrowse) {
|
|
|
|
this._init(title, suppressBrowse);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
SectionHeader.prototype = {
|
2009-08-09 19:48:54 -04:00
|
|
|
_init : function (title, suppressBrowse) {
|
|
|
|
this.actor = new Big.Box({ border: SECTION_BORDER,
|
|
|
|
border_color: SECTION_BORDER_COLOR });
|
|
|
|
this._innerBox = new Big.Box({ border: SECTION_BORDER,
|
|
|
|
border_color: SECTION_INNER_BORDER_COLOR,
|
|
|
|
padding_left: DEFAULT_PADDING,
|
2009-08-28 13:37:03 -04:00
|
|
|
padding_right: DEFAULT_PADDING,
|
|
|
|
orientation: Big.BoxOrientation.HORIZONTAL,
|
|
|
|
spacing: DEFAULT_SPACING });
|
2009-08-09 19:48:54 -04:00
|
|
|
this.actor.append(this._innerBox, Big.BoxPackFlags.EXPAND);
|
|
|
|
let backgroundGradient = Shell.create_vertical_gradient(SECTION_BACKGROUND_TOP_COLOR,
|
|
|
|
SECTION_BACKGROUND_BOTTOM_COLOR);
|
|
|
|
this._innerBox.add_actor(backgroundGradient);
|
|
|
|
this._innerBox.connect('notify::allocation', Lang.bind(this, function (actor) {
|
|
|
|
let [width, height] = actor.get_size();
|
|
|
|
backgroundGradient.set_size(width, height);
|
|
|
|
}));
|
2009-08-28 13:37:03 -04:00
|
|
|
|
2009-09-01 19:06:20 -04:00
|
|
|
this.backLink = new BackLink();
|
|
|
|
this._innerBox.append(this.backLink.actor, Big.BoxPackFlags.NONE);
|
|
|
|
this.backLink.actor.hide();
|
|
|
|
|
|
|
|
this.backLink.actor.connect('activate', Lang.bind(this, function (actor) {
|
|
|
|
this.emit('back-link-activated');
|
|
|
|
}));
|
|
|
|
|
2009-08-28 13:37:03 -04:00
|
|
|
let textBox = new Big.Box({ orientation: Big.BoxOrientation.HORIZONTAL,
|
|
|
|
padding_top: DEFAULT_PADDING,
|
2009-08-09 19:48:54 -04:00
|
|
|
padding_bottom: DEFAULT_PADDING });
|
2009-08-28 13:37:03 -04:00
|
|
|
this.text = new Clutter.Text({ color: TEXT_COLOR,
|
|
|
|
font_name: "Sans Bold 12px",
|
|
|
|
text: title });
|
|
|
|
textBox.append(this.text, Big.BoxPackFlags.NONE);
|
|
|
|
|
2009-09-01 19:06:20 -04:00
|
|
|
this.countText = new Clutter.Text({ color: TEXT_COLOR,
|
|
|
|
font_name: 'Sans Bold 14px' });
|
|
|
|
textBox.append(this.countText, Big.BoxPackFlags.END);
|
|
|
|
this.countText.hide();
|
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
this._innerBox.append(textBox, Big.BoxPackFlags.EXPAND);
|
2009-08-28 13:37:03 -04:00
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
if (!suppressBrowse) {
|
|
|
|
this.moreLink = new MoreLink();
|
|
|
|
this._innerBox.append(this.moreLink.actor, Big.BoxPackFlags.END);
|
|
|
|
}
|
2009-09-01 19:06:20 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
setTitle : function(title) {
|
|
|
|
this.text.text = title;
|
|
|
|
},
|
|
|
|
|
|
|
|
setBackLinkVisible : function(visible) {
|
|
|
|
if (visible)
|
|
|
|
this.backLink.actor.show();
|
|
|
|
else
|
|
|
|
this.backLink.actor.hide();
|
|
|
|
},
|
|
|
|
|
2009-09-25 14:54:40 -04:00
|
|
|
setMoreLinkVisible : function(visible) {
|
|
|
|
if (visible)
|
|
|
|
this.moreLink.actor.show();
|
|
|
|
else
|
|
|
|
this.moreLink.actor.hide();
|
|
|
|
},
|
|
|
|
|
2009-09-01 19:06:20 -04:00
|
|
|
setCountText : function(countText) {
|
|
|
|
if (countText == "") {
|
|
|
|
this.countText.hide();
|
|
|
|
} else {
|
|
|
|
this.countText.show();
|
|
|
|
this.countText.text = countText;
|
|
|
|
}
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-09-01 19:06:20 -04:00
|
|
|
Signals.addSignalMethods(SectionHeader.prototype);
|
|
|
|
|
2009-08-26 18:46:58 -04:00
|
|
|
function SearchSectionHeader(title, onClick) {
|
|
|
|
this._init(title, onClick);
|
|
|
|
}
|
|
|
|
|
|
|
|
SearchSectionHeader.prototype = {
|
|
|
|
_init : function(title, onClick) {
|
|
|
|
let box = new Big.Box({ orientation: Big.BoxOrientation.HORIZONTAL,
|
|
|
|
padding_top: DASH_SECTION_PADDING,
|
2009-08-28 13:37:03 -04:00
|
|
|
padding_bottom: DASH_SECTION_PADDING,
|
|
|
|
spacing: DEFAULT_SPACING });
|
|
|
|
let titleText = new Clutter.Text({ color: BRIGHTER_TEXT_COLOR,
|
|
|
|
font_name: 'Sans Bold 12px',
|
2009-08-26 18:46:58 -04:00
|
|
|
text: title });
|
2009-08-28 13:37:03 -04:00
|
|
|
this.tooltip = new Clutter.Text({ color: BRIGHTER_TEXT_COLOR,
|
|
|
|
font_name: 'Sans 12px',
|
|
|
|
text: _("(see all)") });
|
|
|
|
this.countText = new Clutter.Text({ color: BRIGHTER_TEXT_COLOR,
|
|
|
|
font_name: 'Sans Bold 14px' });
|
2009-08-26 18:46:58 -04:00
|
|
|
|
|
|
|
box.append(titleText, Big.BoxPackFlags.NONE);
|
2009-08-28 13:37:03 -04:00
|
|
|
box.append(this.tooltip, Big.BoxPackFlags.NONE);
|
2009-08-26 18:46:58 -04:00
|
|
|
box.append(this.countText, Big.BoxPackFlags.END);
|
|
|
|
|
2009-08-28 13:37:03 -04:00
|
|
|
this.tooltip.hide();
|
|
|
|
|
2009-08-26 18:46:58 -04:00
|
|
|
let button = new Button.Button(box, PRELIGHT_COLOR, BACKGROUND_COLOR,
|
2009-08-29 07:23:28 -04:00
|
|
|
TEXT_COLOR);
|
|
|
|
button.actor.height = box.height;
|
|
|
|
button.actor.padding_left = DEFAULT_PADDING;
|
|
|
|
button.actor.padding_right = DEFAULT_PADDING;
|
|
|
|
|
|
|
|
button.actor.connect('activate', onClick);
|
|
|
|
button.actor.connect('notify::hover', Lang.bind(this, this._updateTooltip));
|
|
|
|
this.actor = button.actor;
|
2009-08-28 13:37:03 -04:00
|
|
|
},
|
|
|
|
|
2009-08-29 07:23:28 -04:00
|
|
|
_updateTooltip : function(actor) {
|
2009-09-01 19:06:20 -04:00
|
|
|
if (actor.hover)
|
|
|
|
this.tooltip.show();
|
|
|
|
else
|
2009-08-28 13:37:03 -04:00
|
|
|
this.tooltip.hide();
|
2009-08-26 18:46:58 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
function Section(titleString, suppressBrowse) {
|
|
|
|
this._init(titleString, suppressBrowse);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
}
|
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
Section.prototype = {
|
|
|
|
_init: function(titleString, suppressBrowse) {
|
|
|
|
this.actor = new Big.Box({ spacing: SECTION_INNER_SPACING });
|
|
|
|
this.header = new SectionHeader(titleString, suppressBrowse);
|
|
|
|
this.actor.append(this.header.actor, Big.BoxPackFlags.NONE);
|
2009-08-28 13:37:03 -04:00
|
|
|
this.content = new Big.Box({spacing: SECTION_INNER_SPACING });
|
2009-08-09 19:48:54 -04:00
|
|
|
this.actor.append(this.content, Big.BoxPackFlags.EXPAND);
|
|
|
|
}
|
|
|
|
}
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
function Dash() {
|
|
|
|
this._init();
|
|
|
|
}
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
Dash.prototype = {
|
|
|
|
_init : function() {
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
// dash and the popup panes need to be reactive so that the clicks in unoccupied places on them
|
|
|
|
// are not passed to the transparent background underneath them. This background is used for the workspaces area when
|
|
|
|
// the additional dash panes are being shown and it handles clicks by closing the additional panes, so that the user
|
|
|
|
// can interact with the workspaces. However, this behavior is not desirable when the click is actually over a pane.
|
|
|
|
//
|
|
|
|
// We have to make the individual panes reactive instead of making the whole dash actor reactive because the width
|
|
|
|
// of the Group actor ends up including the width of its hidden children, so we were getting a reactive object as
|
|
|
|
// wide as the details pane that was blocking the clicks to the workspaces underneath it even when the details pane
|
|
|
|
// was actually hidden.
|
2009-08-09 19:48:54 -04:00
|
|
|
this.actor = new Big.Box({ orientation: Big.BoxOrientation.VERTICAL,
|
|
|
|
background_color: BACKGROUND_COLOR,
|
|
|
|
corner_radius: DASH_CORNER_RADIUS,
|
|
|
|
padding_left: DASH_PADDING_SIDE,
|
|
|
|
padding_right: DASH_PADDING_SIDE,
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
reactive: true });
|
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
// Size for this one explicitly set from overlay.js
|
|
|
|
this.searchArea = new Big.Box({ y_align: Big.BoxAlignment.CENTER });
|
|
|
|
|
|
|
|
this.sectionArea = new Big.Box({ orientation: Big.BoxOrientation.VERTICAL,
|
|
|
|
spacing: DASH_SECTION_SPACING });
|
|
|
|
|
|
|
|
this.actor.append(this.searchArea, Big.BoxPackFlags.NONE);
|
|
|
|
this.actor.append(this.sectionArea, Big.BoxPackFlags.NONE);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
|
|
|
// The currently active popup display
|
|
|
|
this._activePane = null;
|
|
|
|
|
|
|
|
/***** Search *****/
|
|
|
|
|
|
|
|
this._searchActive = false;
|
2009-09-24 18:34:43 -04:00
|
|
|
this._searchPending = false;
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
this._searchEntry = new SearchEntry();
|
2009-08-09 19:48:54 -04:00
|
|
|
this.searchArea.append(this._searchEntry.actor, Big.BoxPackFlags.EXPAND);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
2009-08-12 19:37:47 -04:00
|
|
|
this._searchTimeoutId = 0;
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
this._searchEntry.entry.connect('text-changed', Lang.bind(this, function (se, prop) {
|
2009-08-09 19:48:54 -04:00
|
|
|
let text = this._searchEntry.getText();
|
2009-08-12 17:07:00 -04:00
|
|
|
text = text.replace(/^\s+/g, "").replace(/\s+$/g, "")
|
2009-09-24 18:34:43 -04:00
|
|
|
let searchPreviouslyActive = this._searchActive;
|
2009-08-09 19:48:54 -04:00
|
|
|
this._searchActive = text != '';
|
2009-09-24 18:34:43 -04:00
|
|
|
this._searchPending = this._searchActive && !searchPreviouslyActive;
|
2009-08-21 18:21:35 -04:00
|
|
|
this._updateDashActors();
|
2009-08-12 17:07:00 -04:00
|
|
|
if (!this._searchActive) {
|
2009-08-13 13:11:21 -04:00
|
|
|
if (this._searchTimeoutId > 0) {
|
2009-08-12 19:37:47 -04:00
|
|
|
Mainloop.source_remove(this._searchTimeoutId);
|
2009-08-13 13:11:21 -04:00
|
|
|
this._searchTimeoutId = 0;
|
|
|
|
}
|
2009-08-12 17:07:00 -04:00
|
|
|
return;
|
|
|
|
}
|
2009-08-12 19:37:47 -04:00
|
|
|
if (this._searchTimeoutId > 0)
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
return;
|
2009-08-12 19:37:47 -04:00
|
|
|
this._searchTimeoutId = Mainloop.timeout_add(150, Lang.bind(this, function() {
|
|
|
|
this._searchTimeoutId = 0;
|
2009-08-09 19:48:54 -04:00
|
|
|
let text = this._searchEntry.getText();
|
|
|
|
text = text.replace(/^\s+/g, "").replace(/\s+$/g, "");
|
2009-09-11 16:42:54 -04:00
|
|
|
|
|
|
|
let selectionSet = false;
|
|
|
|
|
|
|
|
for (var i = 0; i < this._searchSections.length; i++) {
|
|
|
|
let section = this._searchSections[i];
|
|
|
|
section.resultArea.display.setSearch(text);
|
2009-09-11 18:59:31 -04:00
|
|
|
let itemCount = section.resultArea.display.getMatchedItemsCount();
|
|
|
|
let itemCountText = itemCount + "";
|
|
|
|
section.header.countText.text = itemCountText;
|
|
|
|
|
|
|
|
if (this._searchResultsSingleShownSection == section.type) {
|
|
|
|
this._searchResultsSection.header.setCountText(itemCountText);
|
|
|
|
if (itemCount == 0) {
|
|
|
|
section.resultArea.actor.hide();
|
|
|
|
} else {
|
|
|
|
section.resultArea.actor.show();
|
|
|
|
}
|
|
|
|
} else if (this._searchResultsSingleShownSection == null) {
|
|
|
|
// Don't show the section if it has no results
|
|
|
|
if (itemCount == 0) {
|
|
|
|
section.header.actor.hide();
|
|
|
|
section.resultArea.actor.hide();
|
|
|
|
} else {
|
|
|
|
section.header.actor.show();
|
|
|
|
section.resultArea.actor.show();
|
|
|
|
}
|
|
|
|
}
|
2009-09-11 16:42:54 -04:00
|
|
|
|
|
|
|
// Refresh the selection when a new search is applied.
|
|
|
|
section.resultArea.display.unsetSelected();
|
|
|
|
if (!selectionSet && section.resultArea.display.hasItems() &&
|
|
|
|
(this._searchResultsSingleShownSection == null || this._searchResultsSingleShownSection == section.type)) {
|
|
|
|
section.resultArea.display.selectFirstItem();
|
|
|
|
selectionSet = true;
|
|
|
|
}
|
2009-09-01 16:24:47 -04:00
|
|
|
}
|
|
|
|
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
return false;
|
|
|
|
}));
|
|
|
|
}));
|
|
|
|
this._searchEntry.entry.connect('activate', Lang.bind(this, function (se) {
|
2009-09-11 16:42:54 -04:00
|
|
|
// Only one of the displays will have an item selected, so it's ok to
|
|
|
|
// call activateSelected() on all of them.
|
|
|
|
for (var i = 0; i < this._searchSections.length; i++) {
|
|
|
|
let section = this._searchSections[i];
|
|
|
|
section.resultArea.display.activateSelected();
|
|
|
|
}
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
return true;
|
|
|
|
}));
|
|
|
|
this._searchEntry.entry.connect('key-press-event', Lang.bind(this, function (se, e) {
|
2009-08-09 19:48:54 -04:00
|
|
|
let text = this._searchEntry.getText();
|
2009-09-08 16:58:57 -04:00
|
|
|
let symbol = e.get_key_symbol();
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
if (symbol == Clutter.Escape) {
|
2009-08-26 18:46:58 -04:00
|
|
|
// Escape will keep clearing things back to the desktop.
|
|
|
|
// If we are showing a particular section of search, go back to all sections.
|
2009-09-11 16:42:54 -04:00
|
|
|
if (this._searchResultsSingleShownSection != null)
|
2009-08-26 18:46:58 -04:00
|
|
|
this._showAllSearchSections();
|
|
|
|
// If we have an active search, we remove it.
|
|
|
|
else if (this._searchActive)
|
2009-08-09 19:48:54 -04:00
|
|
|
this._searchEntry.reset();
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
// Next, if we're in one of the "more" modes or showing the details pane, close them
|
|
|
|
else if (this._activePane != null)
|
|
|
|
this._activePane.close();
|
2009-08-11 07:46:10 -04:00
|
|
|
// Finally, just close the Overview entirely
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
else
|
2009-08-11 07:46:10 -04:00
|
|
|
Main.overview.hide();
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
return true;
|
|
|
|
} else if (symbol == Clutter.Up) {
|
|
|
|
if (!this._searchActive)
|
|
|
|
return true;
|
|
|
|
// selectUp and selectDown wrap around in their respective displays
|
|
|
|
// too, but there doesn't seem to be any flickering if we first select
|
|
|
|
// something in one display, but then unset the selection, and move
|
|
|
|
// it to the other display, so it's ok to do that.
|
2009-09-11 16:42:54 -04:00
|
|
|
for (var i = 0; i < this._searchSections.length; i++) {
|
|
|
|
let section = this._searchSections[i];
|
|
|
|
if (section.resultArea.display.hasSelected() && !section.resultArea.display.selectUp()) {
|
|
|
|
if (this._searchResultsSingleShownSection != section.type) {
|
|
|
|
// We need to move the selection to the next section above this section that has items,
|
|
|
|
// wrapping around at the bottom, if necessary.
|
|
|
|
let newSectionIndex = this._findAnotherSectionWithItems(i, -1);
|
|
|
|
if (newSectionIndex >= 0) {
|
|
|
|
this._searchSections[newSectionIndex].resultArea.display.selectLastItem();
|
|
|
|
section.resultArea.display.unsetSelected();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
2009-09-01 16:24:47 -04:00
|
|
|
}
|
|
|
|
}
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
return true;
|
|
|
|
} else if (symbol == Clutter.Down) {
|
|
|
|
if (!this._searchActive)
|
|
|
|
return true;
|
2009-09-11 16:42:54 -04:00
|
|
|
for (var i = 0; i < this._searchSections.length; i++) {
|
|
|
|
let section = this._searchSections[i];
|
|
|
|
if (section.resultArea.display.hasSelected() && !section.resultArea.display.selectDown()) {
|
|
|
|
if (this._searchResultsSingleShownSection != section.type) {
|
|
|
|
// We need to move the selection to the next section below this section that has items,
|
|
|
|
// wrapping around at the top, if necessary.
|
|
|
|
let newSectionIndex = this._findAnotherSectionWithItems(i, 1);
|
|
|
|
if (newSectionIndex >= 0) {
|
|
|
|
this._searchSections[newSectionIndex].resultArea.display.selectFirstItem();
|
|
|
|
section.resultArea.display.unsetSelected();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
2009-09-01 16:24:47 -04:00
|
|
|
}
|
|
|
|
}
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}));
|
|
|
|
|
|
|
|
/***** Applications *****/
|
|
|
|
|
2009-08-21 18:21:35 -04:00
|
|
|
this._appsSection = new Section(_("APPLICATIONS"));
|
2009-08-09 19:48:54 -04:00
|
|
|
let appWell = new AppDisplay.AppWell();
|
2009-08-21 18:21:35 -04:00
|
|
|
this._appsSection.content.append(appWell.actor, Big.BoxPackFlags.EXPAND);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
|
|
|
this._moreAppsPane = null;
|
2009-08-21 18:21:35 -04:00
|
|
|
this._appsSection.header.moreLink.connect('activated', Lang.bind(this, function (link) {
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
if (this._moreAppsPane == null) {
|
2009-08-09 19:48:54 -04:00
|
|
|
this._moreAppsPane = new ResultPane(this);
|
2009-09-11 17:48:02 -04:00
|
|
|
this._moreAppsPane.packResults(APPS, true);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
this._addPane(this._moreAppsPane);
|
|
|
|
link.setPane(this._moreAppsPane);
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
2009-08-21 18:21:35 -04:00
|
|
|
this.sectionArea.append(this._appsSection.actor, Big.BoxPackFlags.NONE);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
2009-08-06 09:06:33 -04:00
|
|
|
/***** Places *****/
|
|
|
|
|
2009-08-17 08:53:59 -04:00
|
|
|
/* Translators: This is in the sense of locations for documents,
|
|
|
|
network locations, etc. */
|
2009-08-21 18:21:35 -04:00
|
|
|
this._placesSection = new Section(_("PLACES"), true);
|
2009-08-06 09:06:33 -04:00
|
|
|
let placesDisplay = new Places.Places();
|
2009-08-21 18:21:35 -04:00
|
|
|
this._placesSection.content.append(placesDisplay.actor, Big.BoxPackFlags.EXPAND);
|
|
|
|
this.sectionArea.append(this._placesSection.actor, Big.BoxPackFlags.NONE);
|
2009-08-06 09:06:33 -04:00
|
|
|
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
/***** Documents *****/
|
|
|
|
|
2009-08-21 18:21:35 -04:00
|
|
|
this._docsSection = new Section(_("RECENT DOCUMENTS"));
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
2009-09-25 14:54:40 -04:00
|
|
|
this._docDisplay = new DocDisplay.DashDocDisplay();
|
|
|
|
this._docsSection.content.append(this._docDisplay.actor, Big.BoxPackFlags.EXPAND);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
|
2009-08-09 19:48:54 -04:00
|
|
|
this._moreDocsPane = null;
|
2009-08-21 18:21:35 -04:00
|
|
|
this._docsSection.header.moreLink.connect('activated', Lang.bind(this, function (link) {
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
if (this._moreDocsPane == null) {
|
2009-08-09 19:48:54 -04:00
|
|
|
this._moreDocsPane = new ResultPane(this);
|
2009-09-11 17:48:02 -04:00
|
|
|
this._moreDocsPane.packResults(DOCS, true);
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
this._addPane(this._moreDocsPane);
|
|
|
|
link.setPane(this._moreDocsPane);
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
2009-09-25 14:54:40 -04:00
|
|
|
this._docDisplay.connect('changed', Lang.bind(this, function () {
|
|
|
|
this._docsSection.header.setMoreLinkVisible(
|
|
|
|
this._docDisplay.actor.get_children().length > 0);
|
|
|
|
}));
|
|
|
|
this._docDisplay.emit('changed');
|
|
|
|
|
2009-08-21 18:21:35 -04:00
|
|
|
this.sectionArea.append(this._docsSection.actor, Big.BoxPackFlags.EXPAND);
|
|
|
|
|
|
|
|
/***** Search Results *****/
|
|
|
|
|
|
|
|
this._searchResultsSection = new Section(_("SEARCH RESULTS"), true);
|
|
|
|
|
2009-09-11 16:42:54 -04:00
|
|
|
this._searchResultsSingleShownSection = null;
|
|
|
|
|
2009-09-01 19:06:20 -04:00
|
|
|
this._searchResultsSection.header.connect('back-link-activated', Lang.bind(this, function () {
|
2009-09-11 16:42:54 -04:00
|
|
|
this._showAllSearchSections();
|
2009-09-01 19:06:20 -04:00
|
|
|
}));
|
|
|
|
|
2009-09-11 16:42:54 -04:00
|
|
|
this._searchSections = [
|
2009-09-11 17:48:02 -04:00
|
|
|
{ type: APPS,
|
2009-09-11 16:42:54 -04:00
|
|
|
title: _("APPLICATIONS"),
|
|
|
|
header: null,
|
2009-09-11 17:48:02 -04:00
|
|
|
resultArea: null
|
|
|
|
},
|
|
|
|
{ type: PREFS,
|
|
|
|
title: _("PREFERENCES"),
|
|
|
|
header: null,
|
|
|
|
resultArea: null
|
2009-09-11 16:42:54 -04:00
|
|
|
},
|
2009-09-11 17:48:02 -04:00
|
|
|
{ type: DOCS,
|
2009-09-11 16:42:54 -04:00
|
|
|
title: _("RECENT DOCUMENTS"),
|
|
|
|
header: null,
|
2009-09-11 17:48:02 -04:00
|
|
|
resultArea: null
|
2009-09-11 16:42:54 -04:00
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
for (var i = 0; i < this._searchSections.length; i++) {
|
|
|
|
let section = this._searchSections[i];
|
|
|
|
section.header = new SearchSectionHeader(section.title,
|
|
|
|
Lang.bind(this,
|
|
|
|
function () {
|
|
|
|
this._showSingleSearchSection(section.type);
|
|
|
|
}));
|
|
|
|
this._searchResultsSection.content.append(section.header.actor, Big.BoxPackFlags.NONE);
|
2009-09-11 17:48:02 -04:00
|
|
|
section.resultArea = new ResultArea(section.type, false);
|
2009-09-11 16:42:54 -04:00
|
|
|
section.resultArea.controlBox.hide();
|
|
|
|
this._searchResultsSection.content.append(section.resultArea.actor, Big.BoxPackFlags.EXPAND);
|
|
|
|
createPaneForDetails(this, section.resultArea.display);
|
|
|
|
}
|
2009-08-21 18:21:35 -04:00
|
|
|
|
|
|
|
this.sectionArea.append(this._searchResultsSection.actor, Big.BoxPackFlags.EXPAND);
|
|
|
|
this._searchResultsSection.actor.hide();
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
show: function() {
|
|
|
|
global.stage.set_key_focus(this._searchEntry.entry);
|
|
|
|
},
|
|
|
|
|
|
|
|
hide: function() {
|
2009-08-09 19:48:54 -04:00
|
|
|
this._firstSelectAfterOverlayShow = true;
|
|
|
|
this._searchEntry.reset();
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
if (this._activePane != null)
|
|
|
|
this._activePane.close();
|
|
|
|
},
|
|
|
|
|
|
|
|
closePanes: function () {
|
|
|
|
if (this._activePane != null)
|
|
|
|
this._activePane.close();
|
|
|
|
},
|
|
|
|
|
|
|
|
_addPane: function(pane) {
|
|
|
|
pane.connect('open-state-changed', Lang.bind(this, function (pane, isOpen) {
|
|
|
|
if (isOpen) {
|
|
|
|
if (pane != this._activePane && this._activePane != null) {
|
|
|
|
this._activePane.close();
|
|
|
|
}
|
|
|
|
this._activePane = pane;
|
|
|
|
} else if (pane == this._activePane) {
|
|
|
|
this._activePane = null;
|
|
|
|
}
|
|
|
|
}));
|
2009-08-11 07:46:10 -04:00
|
|
|
Main.overview.addPane(pane);
|
2009-08-21 18:21:35 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
_updateDashActors: function() {
|
2009-09-24 18:34:43 -04:00
|
|
|
if (this._searchPending) {
|
|
|
|
this._searchResultsSection.actor.show();
|
2009-10-01 18:21:27 -04:00
|
|
|
// We initially hide all sections when we start a search. When the search timeout
|
|
|
|
// first runs, the sections that have matching results are shown. As the search
|
|
|
|
// is refined, only the sections that have matching results will be shown.
|
2009-09-24 18:34:43 -04:00
|
|
|
for (let i = 0; i < this._searchSections.length; i++) {
|
|
|
|
let section = this._searchSections[i];
|
|
|
|
section.header.actor.hide();
|
|
|
|
section.resultArea.actor.hide();
|
|
|
|
}
|
|
|
|
this._appsSection.actor.hide();
|
|
|
|
this._placesSection.actor.hide();
|
|
|
|
this._docsSection.actor.hide();
|
2009-10-01 18:21:27 -04:00
|
|
|
} else if (!this._searchActive) {
|
2009-08-26 18:46:58 -04:00
|
|
|
this._showAllSearchSections();
|
2009-08-21 18:21:35 -04:00
|
|
|
this._searchResultsSection.actor.hide();
|
|
|
|
this._appsSection.actor.show();
|
|
|
|
this._placesSection.actor.show();
|
|
|
|
this._docsSection.actor.show();
|
|
|
|
}
|
2009-08-26 18:46:58 -04:00
|
|
|
},
|
|
|
|
|
2009-09-11 16:42:54 -04:00
|
|
|
_showSingleSearchSection: function(type) {
|
|
|
|
// We currently don't allow going from showing one section to showing another section.
|
|
|
|
if (this._searchResultsSingleShownSection != null) {
|
|
|
|
throw new Error("We were already showing a single search section: '" + this._searchResultsSingleShownSection
|
|
|
|
+ "' when _showSingleSearchSection() was called for '" + type + "'");
|
2009-08-26 18:46:58 -04:00
|
|
|
}
|
2009-09-11 16:42:54 -04:00
|
|
|
for (var i = 0; i < this._searchSections.length; i++) {
|
|
|
|
let section = this._searchSections[i];
|
|
|
|
if (section.type == type) {
|
|
|
|
// This will be the only section shown.
|
|
|
|
section.resultArea.display.selectFirstItem();
|
|
|
|
section.resultArea.controlBox.show();
|
2009-09-11 18:59:31 -04:00
|
|
|
let itemCount = section.resultArea.display.getMatchedItemsCount();
|
|
|
|
let itemCountText = itemCount + "";
|
2009-09-11 16:42:54 -04:00
|
|
|
section.header.actor.hide();
|
|
|
|
this._searchResultsSection.header.setTitle(section.title);
|
|
|
|
this._searchResultsSection.header.setBackLinkVisible(true);
|
2009-09-11 18:59:31 -04:00
|
|
|
this._searchResultsSection.header.setCountText(itemCountText);
|
2009-09-11 16:42:54 -04:00
|
|
|
} else {
|
|
|
|
// We need to hide this section.
|
|
|
|
section.header.actor.hide();
|
|
|
|
section.resultArea.actor.hide();
|
|
|
|
section.resultArea.display.unsetSelected();
|
|
|
|
}
|
2009-08-26 18:46:58 -04:00
|
|
|
}
|
2009-09-11 16:42:54 -04:00
|
|
|
this._searchResultsSingleShownSection = type;
|
2009-08-26 18:46:58 -04:00
|
|
|
},
|
|
|
|
|
2009-09-11 16:42:54 -04:00
|
|
|
_showAllSearchSections: function() {
|
|
|
|
if (this._searchResultsSingleShownSection != null) {
|
2009-09-11 18:59:31 -04:00
|
|
|
let selectionSet = false;
|
2009-09-11 16:42:54 -04:00
|
|
|
for (var i = 0; i < this._searchSections.length; i++) {
|
|
|
|
let section = this._searchSections[i];
|
|
|
|
if (section.type == this._searchResultsSingleShownSection) {
|
|
|
|
// This will no longer be the only section shown.
|
|
|
|
section.resultArea.display.displayPage(0);
|
|
|
|
section.resultArea.controlBox.hide();
|
2009-09-11 18:59:31 -04:00
|
|
|
let itemCount = section.resultArea.display.getMatchedItemsCount();
|
|
|
|
if (itemCount != 0) {
|
|
|
|
section.header.actor.show();
|
|
|
|
section.resultArea.display.selectFirstItem();
|
|
|
|
selectionSet = true;
|
|
|
|
}
|
2009-09-11 16:42:54 -04:00
|
|
|
this._searchResultsSection.header.setTitle(_("SEARCH RESULTS"));
|
|
|
|
this._searchResultsSection.header.setBackLinkVisible(false);
|
|
|
|
this._searchResultsSection.header.setCountText("");
|
|
|
|
} else {
|
|
|
|
// We need to restore this section.
|
2009-09-11 18:59:31 -04:00
|
|
|
let itemCount = section.resultArea.display.getMatchedItemsCount();
|
|
|
|
if (itemCount != 0) {
|
|
|
|
section.header.actor.show();
|
|
|
|
section.resultArea.actor.show();
|
|
|
|
// This ensures that some other section will have the selection if the
|
|
|
|
// single section that was being displayed did not have any items.
|
|
|
|
if (!selectionSet) {
|
|
|
|
section.resultArea.display.selectFirstItem();
|
|
|
|
selectionSet = true;
|
|
|
|
}
|
|
|
|
}
|
2009-09-11 16:42:54 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
this._searchResultsSingleShownSection = null;
|
2009-08-26 18:46:58 -04:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2009-09-11 16:42:54 -04:00
|
|
|
_findAnotherSectionWithItems: function(index, increment) {
|
|
|
|
let pos = _getIndexWrapped(index, increment, this._searchSections.length);
|
|
|
|
while (pos != index) {
|
|
|
|
if (this._searchSections[pos].resultArea.display.hasItems())
|
|
|
|
return pos;
|
|
|
|
pos = _getIndexWrapped(pos, increment, this._searchSections.length);
|
2009-09-01 19:06:20 -04:00
|
|
|
}
|
2009-09-11 16:42:54 -04:00
|
|
|
return -1;
|
Rewrite Dash, remove hardcoded width/height from GenericDisplay
This patch is a near-total rewrite of the Dash. First, the dash
code moves into a separate file, dash.js.
Inside dash.js, the components are more broken up into separate
classes; in particular there's now a Pane class and a MoreLink
class. Instead of each section of the dash, when activated,
attempting to close all N-1 other sections, instead there
is the concept of a single "active pane", and when e.g. activating
the More link for documents, if we know there's an active pane
which happens to be the apps, close it.
Many redundant containers were removed from the dash, and all
manual width, height and x/y offsets are entirely gone. We move
the visual apperance closer to the design by using the view-more.svg,
etc.
To complete the removal of height/width calculations from the dash,
we also had to do the same for GenericDisplay. Also clean up
the positioning inside overlay.js so calculation of children's
positioning is inside a single function that flows from screen.width
and screen.height, so in the future we can stop passing the width
into the Dash constructor and call this once and work on screen
resizing.
2009-07-31 22:12:01 -04:00
|
|
|
}
|
|
|
|
};
|
|
|
|
Signals.addSignalMethods(Dash.prototype);
|