Compare commits

..

50 Commits

Author SHA1 Message Date
2be92900b6 Merge branch 'master' into datetime 2011-01-28 14:47:34 -05:00
e82cbf3cc8 Simplify code for 'This week' / 'Next week' logic
Also make the calendar work when there are many all-day events shown. See

 http://people.freedesktop.org/~david/many-all-day-events.png

for details.

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-28 14:30:52 -05:00
0b05280e03 Merge branch 'master' into datetime 2011-01-28 13:32:19 -05:00
cd468021e2 Merge branch 'master' into datetime 2011-01-28 13:26:05 -05:00
57ebfb596b Add Evolution Data Server to required packages
Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-28 13:21:27 -05:00
8a1313be71 Update for comments from code review
See https://bugzilla.gnome.org/show_bug.cgi?id=632109#c41 for the review.

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-28 12:05:17 -05:00
803e74101c Merge branch 'master' into datetime 2011-01-28 11:06:58 -05:00
858e1b7f5b Hard-code width of calendar popup to 600px and fix ellipsis for events
We might want the width to be expressed in em or in % of the available
monitor width. Or perhaps a combination of all three. I don't know.

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-26 14:34:13 -05:00
a922db0398 Align day name to "This week"
Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-26 14:26:05 -05:00
bbd2b89df3 Collapse two-pixel borders inside the table
It's a hack, but it works

 http://people.freedesktop.org/~david/calendar-table-collapse-hack.png

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-26 14:10:34 -05:00
505b9047d7 Adjust alignment in event list
As per this comment

 https://bugzilla.gnome.org/show_bug.cgi?id=632109#c38

See

 http://people.freedesktop.org/~david/calendar-today-align-fixes.png

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-26 13:39:04 -05:00
dd8716e5d9 Don't show "[All Day] Nothing Scheduled" for "This week" or "Next week"
Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-26 13:22:46 -05:00
18f2f6f938 Forgot to add file
Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-25 15:53:07 -05:00
41b0e0832e Get events from Evolution
This commit copies existing and deployed (thus, working!) GPLv2 code
from gnome-panel into src/calendar-client. Please keep in sync.

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-25 15:42:10 -05:00
374a88366b Set up glue for native Evolution Data Server event source
Right now it's just native code returning a fake event.

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-25 12:17:32 -05:00
a71c82863e Merge branch 'master' into datetime 2011-01-25 10:10:22 -05:00
a1440bdec7 Calendar updates
- Reshuffle items to make it look more like the mockup
 - Increase vertical spacing between event section ("Today") headings
   and the event items (see mockup)
 - Don't show the year in month-switcher and event list unless it's
   a different year
 - Include the day in the date heading
 - Sort events in event list according to start time
 - Respect 12h/24h setting in event list
 - Support "All Day" events in CalendarTask abstraction
 - Show "Nothing Scheduled" if there are no events
 - Add a "Open Calendar" button
 - Refactor some of the code

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-25 10:07:54 -05:00
b10458e57a Use stippled line instead of gradient in calendar
See

 http://people.freedesktop.org/~david/shell-calendar-with-dash.png

We still have to move around some stuff to make it look like the mock-up, see

 https://live.gnome.org/GnomeShell/Design/Whiteboards/DateNTime

Thanks to Colin for binding Cairo's, set_dash() method.

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-24 16:01:08 -05:00
50c5591ec2 Merge branch 'master' into datetime 2011-01-24 15:27:13 -05:00
bce2cf9164 Switch to empty event source
We are leaving in the fake event source so it's easy to debug the
UI. This is helpful because the fake event source has a transient
event that is being added/removed every five seconds.

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-20 13:17:57 -05:00
2f52b87451 Merge branch 'master' into datetime 2011-01-20 13:11:13 -05:00
ba5a28023e Update comment about work days
Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-20 13:08:58 -05:00
0a87e28d1a Rework interaction between Calendar, EventList and EventSource abstractions
As proposed by Florian in the review.

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-19 13:55:04 -05:00
d7ad949ecb Remove separator comment lines
Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-19 13:33:19 -05:00
fd49fe6915 Use camelCase for naming
Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-19 13:31:29 -05:00
c3c34890ce Merge branch 'master' into datetime 2011-01-19 12:46:00 -05:00
af68881a94 Partial update for code review
This addresses some of the comments in

 https://bugzilla.gnome.org/show_bug.cgi?id=632109#c22

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-19 12:44:40 -05:00
0d9095d2d4 Catch up with master 2011-01-19 11:09:57 -05:00
8bc396a7e0 Adjust for merging commit 24f1e87
Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-01-19 11:08:36 -05:00
71851a58e5 Minor updates
Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-12-20 15:29:14 -05:00
70f50d61e0 Merge branch 'master' into datetime 2010-12-20 15:07:50 -05:00
f3ad82442d Remove remaining references to EDS/ical
We can add this back using the Calendar.EventSource abstraction once
we are ready for it.

Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-12-20 14:49:20 -05:00
6c80a35f8f Minor changes to event source code
Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-12-20 14:36:29 -05:00
a2932250a7 Refactor calendar code
Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-12-20 13:51:44 -05:00
1d5cce679a Neuter debug output 2010-12-20 11:58:56 -05:00
137ea12109 Fix merge conflicts 2010-12-20 11:55:36 -05:00
0b866a620f Rework some of the visual layout
Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-12-15 17:32:35 -05:00
397386c761 Use SVGs from Jimmac for arrows instead of '<' and '>' glyphs
Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-12-15 15:37:28 -05:00
f51984b20c Merge branch 'master' into datetime 2010-12-15 13:12:54 -05:00
8e9bc6019c Rework how fake events work
Also draw days with events with bold in the calendar view.

Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-11-30 14:31:37 -05:00
51481bed82 Fix merge conflicts
Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-11-30 11:11:10 -05:00
8dd05f9e7b Use fake events
Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-11-30 10:50:20 -05:00
b7fe72e74a Merge branch 'master' into datetime 2010-11-19 07:22:28 -05:00
7aa3aba0c2 Merge branch 'master' into datetime 2010-11-16 09:16:38 -05:00
eb66993447 Merge branch 'master' into datetime 2010-10-28 13:34:27 -04:00
7d5b4511cd Update datetime branch for latest changes
Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-10-28 13:33:12 -04:00
3d1063dacb Merge branch 'master' into datetime
Conflicts:
	configure.ac
2010-10-26 11:48:34 -04:00
b4c038c036 calendar: implement Events List
Signed-off-by: David Zeuthen <davidz@redhat.com>
2010-10-20 14:30:35 -04:00
1ca1a2712d Merge branch 'master' into datetime 2010-10-20 13:55:41 -04:00
85ec4d86f3 Start implementing the Date and Time mockups 2010-10-13 17:53:26 -04:00
48 changed files with 1304 additions and 1930 deletions

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[2.91.6],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[2.91.5],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -68,8 +68,7 @@ GTK_MIN_VERSION=2.91.7
GIO_MIN_VERSION=2.25.9
LIBECAL_REQUIRED=1.6.0
LIBEDATASERVER_REQUIRED=1.2.0
LIBEDATASERVERUI2_REQUIRED=1.2.0
LIBEDATASERVERUI3_REQUIRED=2.91.6
LIBEDATASERVERUI_REQUIRED=1.2.0
# Collect more than 20 libraries for a prize!
@ -118,13 +117,7 @@ PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 2.90.0],
AC_SUBST([HAVE_BLUETOOTH],[0])
AC_MSG_RESULT([no])])
# Default to libedataserverui-3.0, but allow falling back to 1.2
PKG_CHECK_EXISTS(libedataserverui-3.0,
[EDS_API=3.0
LIBEDATASERVERUI_REQUIRED=$LIBEDATASERVERUI3_REQUIRED],
[EDS_API=1.2
LIBEDATASERVERUI_REQUIRED=$LIBEDATASERVERUI2_REQUIRED])
PKG_CHECK_MODULES(LIBECAL, libecal-1.2 >= $LIBECAL_REQUIRED libedataserver-1.2 >= $LIBEDATASERVER_REQUIRED libedataserverui-$EDS_API >= $LIBEDATASERVERUI_REQUIRED)
PKG_CHECK_MODULES(LIBECAL, libecal-1.2 >= $LIBECAL_REQUIRED libedataserver-1.2 >= $LIBEDATASERVER_REQUIRED libedataserverui-1.2 >= $LIBEDATASERVERUI_REQUIRED)
AC_SUBST(LIBECAL_CFLAGS)
AC_SUBST(LIBECAL_LIBS)

View File

@ -24,6 +24,7 @@ dist_images_DATA = \
themedir = $(pkgdatadir)/theme
dist_theme_DATA = \
theme/add-workspace.svg \
theme/calendar-arrow-left.svg \
theme/calendar-arrow-right.svg \
theme/close-window.svg \
@ -36,6 +37,7 @@ dist_theme_DATA = \
theme/mosaic-view.svg \
theme/move-window-on-new.svg \
theme/process-working.png \
theme/remove-workspace.svg \
theme/running-indicator.svg \
theme/scroll-button-down-hover.png \
theme/scroll-button-down.png \

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="23"
height="15"
id="svg6375"
version="1.1"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="New document 13">
<defs
id="defs6377">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="32 : 16 : 1"
inkscape:persp3d-origin="16 : 10.666667 : 1"
id="perspective6383" />
<inkscape:perspective
id="perspective6366"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.197802"
inkscape:cx="16"
inkscape:cy="16"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1680"
inkscape:window-height="997"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1" />
<metadata
id="metadata6380">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-17)">
<g
style="display:inline"
id="g6243"
transform="translate(-986.28859,-658.2796)">
<rect
style="fill:#000000;fill-opacity:0.98770495;stroke:#666666;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
id="rect5318"
width="22"
height="14"
x="986.89801"
y="675.86743"
rx="0.49999979"
ry="0.5" />
<g
id="g5320"
transform="translate(402.77304,-12.882544)">
<path
id="path5322"
d="m 595.125,692.53048 0,6.43903"
style="fill:none;stroke:#666666;stroke-width:1.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
id="path5324"
d="m 598.34451,695.75 -6.43902,0"
style="fill:none;stroke:#666666;stroke-width:1.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -260,23 +260,44 @@ StTooltip StLabel {
spacing: 25px;
}
.workspace-indicator-panel {
spacing: 8px;
}
.workspace-indicator {
width: 24px;
height: 16px;
background: rgba(255,255,255,0.2);
}
.workspace-indicator.active {
background: rgba(255,255,255,0.8);
}
.workspace-controls {
width: 48px;
font-size: 32px;
font-weight: bold;
color: #ffffff;
border: 1px solid #424242;
border: 2px solid rgba(128, 128, 128, 0.4);
border-right: 0px;
border-radius: 9px 0px 0px 9px;
background: #071524;
}
.workspace-thumbnails {
spacing: 7px;
padding: 8px;
.add-workspace {
background-color: rgba(128, 128, 128, 0.4);
}
.workspace-thumbnail-indicator {
outline: 2px solid white;
.add-workspace:hover {
background-color: rgba(128, 128, 128, 0.6);
}
.remove-workspace {
height: 48px;
}
.remove-workspace:hover {
background-color: rgba(128, 128, 128, 0.2);
}
.window-caption {
@ -900,10 +921,6 @@ StTooltip StLabel {
border: 1px solid #a1a1a1;
}
.notification-button:focus {
background-color: #666666;
}
.notification-button:active {
border: 1px solid #a1a1a1;
background-color: #2b2b2b;
@ -916,10 +933,6 @@ StTooltip StLabel {
}
.notification-icon-button:hover {
border: 2px rgba(161,161,161,0.7);
}
.notification-icon-button:focus {
background: rgba(192,192,192,0.7);
}

View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="23"
height="15"
id="svg5501"
version="1.1"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="add-workspace.svg">
<defs
id="defs5503">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="32 : 16 : 1"
inkscape:persp3d-origin="16 : 10.666667 : 1"
id="perspective5509" />
<inkscape:perspective
id="perspective5314"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.197802"
inkscape:cx="-0.074583208"
inkscape:cy="16"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1680"
inkscape:window-height="997"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1"
inkscape:snap-grids="true"
inkscape:snap-bbox="true" />
<metadata
id="metadata5506">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-17)">
<g
style="display:inline"
id="g6239"
transform="translate(-953.97989,-657.32287)">
<rect
style="fill:#000000;fill-opacity:0.98770495;stroke:#666666;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
id="rect5318-6"
width="22"
height="14"
x="954.5"
y="675"
rx="0.49999979"
ry="0.5" />
<path
style="fill:none;stroke:#666666;stroke-width:1.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 968.71951,682 -6.43902,0"
id="path5324-5" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -58,7 +58,6 @@ nobase_dist_js_DATA = \
ui/windowAttentionHandler.js \
ui/windowManager.js \
ui/workspace.js \
ui/workspaceThumbnail.js \
ui/workspacesView.js \
ui/workspaceSwitcherPopup.js \
ui/xdndHandler.js

View File

@ -29,8 +29,8 @@ DocInfo.prototype = {
return St.TextureCache.get_default().load_recent_thumbnail(size, this.recentInfo);
},
launch : function(workspaceIndex) {
Shell.DocSystem.get_default().open(this.recentInfo, workspaceIndex);
launch : function() {
Shell.DocSystem.get_default().open(this.recentInfo);
},
matchTerms: function(terms) {

View File

@ -15,7 +15,7 @@ const POPUP_APPICON_SIZE = 96;
const POPUP_SCROLL_TIME = 0.10; // seconds
const POPUP_FADE_TIME = 0.1; // seconds
const APP_ICON_HOVER_TIMEOUT = 200; // milliseconds
const APP_ICON_HOVER_TIMEOUT = 750; // milliseconds
const DISABLE_HOVER_TIMEOUT = 500; // milliseconds

View File

@ -223,20 +223,14 @@ BaseAppSearchProvider.prototype = {
'icon': app.create_icon_texture(Search.RESULT_ICON_SIZE)};
},
activateResult: function(id, params) {
params = Params.parse(params, { workspace: null,
timestamp: null });
activateResult: function(id) {
let app = this._appSys.get_app(id);
app.activate(params.workspace ? params.workspace.index() : -1);
app.activate();
},
dragActivateResult: function(id, params) {
params = Params.parse(params, { workspace: null,
timestamp: null });
dragActivateResult: function(id) {
let app = this._appSys.get_app(id);
app.open_new_window(params.workspace ? params.workspace.get_index() : -1);
app.open_new_window();
}
};
@ -403,7 +397,7 @@ AppWellIcon.prototype = {
if (newWorkspace != null) {
newWorkspace.activate(global.get_current_time());
this.emit('launching');
this.app.open_new_window(-1);
this.app.open_new_window();
Main.overview.hide();
}
} else if (button == 3) {
@ -491,9 +485,9 @@ AppWellIcon.prototype = {
if (modifiers & Clutter.ModifierType.CONTROL_MASK
&& this.app.state == Shell.AppState.RUNNING) {
this.app.open_new_window(-1);
this.app.open_new_window();
} else {
this.app.activate(-1);
this.app.activate();
}
Main.overview.hide();
},
@ -503,11 +497,8 @@ AppWellIcon.prototype = {
return this._menu.menuEventFilter(event);
},
shellWorkspaceLaunch : function(params) {
params = Params.parse(params, { workspace: null,
timestamp: null });
this.app.open_new_window(params.workspace ? params.workspace.index() : -1);
shellWorkspaceLaunch : function() {
this.app.open_new_window();
},
getDragActor: function() {
@ -639,7 +630,7 @@ AppIconMenu.prototype = {
},
_findMetaWindowForActor: function (actor) {
if (actor._delegate.metaWindow)
if (actor._delegate instanceof Workspace.WindowClone)
return actor._delegate.metaWindow;
else if (actor.get_meta_window)
return actor.get_meta_window();
@ -676,7 +667,7 @@ AppIconMenu.prototype = {
let metaWindow = child._window;
this.emit('activate-window', metaWindow);
} else if (child == this._newWindowMenuItem) {
this._source.app.open_new_window(-1);
this._source.app.open_new_window();
this.emit('activate-window', null);
} else if (child == this._toggleFavoriteMenuItem) {
let favs = AppFavorites.getAppFavorites();

View File

@ -27,7 +27,6 @@ BoxPointer.prototype = {
_init: function(arrowSide, binProperties) {
this._arrowSide = arrowSide;
this._arrowOrigin = 0;
this._arrowCorner = null;
this.actor = new St.Bin({ x_fill: true,
y_fill: true });
this._container = new Shell.GenericContainer();
@ -213,140 +212,47 @@ BoxPointer.prototype = {
cr.translate(rise, 0);
}
let [x1, y1] = [halfBorder, halfBorder];
let [x2, y2] = [boxWidth - halfBorder, boxHeight - halfBorder];
cr.moveTo(borderRadius, halfBorder);
cr.moveTo(x1 + borderRadius, y1);
if (this._arrowSide == St.Side.TOP) {
if (this._arrowCorner == St.Corner.TOPLEFT) {
cr.moveTo(x1, y1);
cr.lineTo(x1, y1 - rise);
cr.lineTo(x1 + halfBase, y1);
cr.lineTo(x2 - borderRadius, y1);
} else if (this._arrowCorner == St.Corner.TOPRIGHT) {
cr.lineTo(x2 - halfBase, y1);
cr.lineTo(x2, y1 - rise);
} else if (this._arrowOrigin < (x1 + (borderRadius + halfBase))) {
cr.lineTo(this._arrowOrigin, y1);
cr.lineTo(this._arrowOrigin, y1 - rise);
cr.lineTo(this._arrowOrigin + halfBase, y1);
cr.lineTo(x2 - borderRadius, y1);
} else if (this._arrowOrigin > (x2 - (borderRadius + halfBase))) {
cr.lineTo(this._arrowOrigin - halfBase, y1);
cr.lineTo(this._arrowOrigin, y1 - rise);
cr.lineTo(this._arrowOrigin, y1);
cr.lineTo(x2 - borderRadius, y1);
} else {
cr.lineTo(this._arrowOrigin - halfBase, y1);
cr.lineTo(this._arrowOrigin, y1 - rise);
cr.lineTo(this._arrowOrigin + halfBase, y1);
cr.lineTo(x2 - borderRadius, y1);
}
} else
cr.lineTo(x2 - borderRadius, y1);
cr.lineTo(this._arrowOrigin - halfBase, halfBorder);
cr.lineTo(this._arrowOrigin, halfBorder - rise);
cr.lineTo(this._arrowOrigin + halfBase, halfBorder);
}
cr.lineTo(boxWidth - borderRadius, halfBorder);
// top-right corner
if (this._arrowCorner != St.Corner.TOPRIGHT)
cr.arc(x2 - borderRadius, y1 + borderRadius, borderRadius,
3*Math.PI/2, Math.PI*2);
cr.arc(boxWidth - borderRadius - halfBorder, borderRadius + halfBorder, borderRadius,
3*Math.PI/2, Math.PI*2);
if (this._arrowSide == St.Side.RIGHT) {
if (this._arrowCorner == St.Corner.TOPRIGHT) {
cr.lineTo(x2, y1);
cr.lineTo(x2 + rise, y1);
cr.lineTo(x2, y1 + halfBase);
cr.lineTo(x2, y2 - borderRadius);
} else if (this._arrowCorner == St.Corner.BOTTOMRIGHT) {
cr.moveTo(x2, y2 - halfBase);
cr.lineTo(x2 + rise, y2);
} else if (this._arrowOrigin < (y1 + (borderRadius + halfBase))) {
cr.lineTo(x2, this._arrowOrigin);
cr.lineTo(x2 + rise, this._arrowOrigin);
cr.lineTo(x2, this._arrowOrigin + halfBase);
cr.lineTo(x2, y2 - borderRadius);
} else if (this._arrowOrigin > (y2 - (borderRadius + halfBase))) {
cr.lineTo(x2, this._arrowOrigin - halfBase);
cr.lineTo(x2 + rise, this._arrowOrigin);
cr.lineTo(x2, this._arrowOrigin);
cr.lineTo(x2, y2 - borderRadius);
} else {
cr.lineTo(x2, this._arrowOrigin - halfBase);
cr.lineTo(x2 + rise, this._arrowOrigin);
cr.lineTo(x2, this._arrowOrigin + halfBase);
cr.lineTo(x2, y2 - borderRadius);
}
} else
cr.lineTo(x2, y2 - borderRadius);
cr.lineTo(boxWidth - halfBorder, this._arrowOrigin - halfBase);
cr.lineTo(boxWidth - halfBorder + rise, this._arrowOrigin);
cr.lineTo(boxWidth - halfBorder, this._arrowOrigin + halfBase);
}
cr.lineTo(boxWidth - halfBorder, boxHeight - borderRadius);
// bottom-right corner
if (this._arrowCorner != St.Corner.BOTTOMRIGHT)
cr.arc(x2 - borderRadius, y2 - borderRadius, borderRadius,
0, Math.PI/2);
cr.arc(boxWidth - borderRadius - halfBorder, boxHeight - borderRadius - halfBorder, borderRadius,
0, Math.PI/2);
if (this._arrowSide == St.Side.BOTTOM) {
if (this._arrowCorner == St.Corner.BOTTOMLEFT) {
cr.lineTo(x1 + halfBase, y2);
cr.lineTo(x1, y2 + rise);
} else if (this._arrowCorner == St.Corner.BOTTOMRIGHT) {
cr.lineTo(x2, y2 + rise);
cr.lineTo(x2 - halfBase, y2);
cr.lineTo(x1 + borderRadius, y2);
} else if (this._arrowOrigin < (x1 + (borderRadius + halfBase))) {
cr.lineTo(this._arrowOrigin + halfBase, y2);
cr.lineTo(this._arrowOrigin, y2 + rise);
cr.lineTo(this._arrowOrigin, y2);
cr.lineTo(x1 + borderRadius, y2);
} else if (this._arrowOrigin > (x2 - (borderRadius + halfBase))) {
cr.lineTo(this._arrowOrigin, y2);
cr.lineTo(this._arrowOrigin, y2 + rise);
cr.lineTo(this._arrowOrigin - halfBase, y2);
cr.lineTo(x1 + borderRadius, y2);
} else {
cr.lineTo(this._arrowOrigin + halfBase, y2);
cr.lineTo(this._arrowOrigin, y2 + rise);
cr.lineTo(this._arrowOrigin - halfBase, y2);
cr.lineTo(x1 + borderRadius, y2);
}
} else
cr.lineTo(x1 + borderRadius, y2);
cr.lineTo(this._arrowOrigin + halfBase, boxHeight - halfBorder);
cr.lineTo(this._arrowOrigin, boxHeight - halfBorder + rise);
cr.lineTo(this._arrowOrigin - halfBase, boxHeight - halfBorder);
}
cr.lineTo(borderRadius, boxHeight - halfBorder);
// bottom-left corner
if (this._arrowCorner != St.Corner.BOTTOMLEFT)
cr.arc(x1 + borderRadius, y2 - borderRadius, borderRadius,
Math.PI/2, Math.PI);
cr.arc(borderRadius + halfBorder, boxHeight - borderRadius - halfBorder, borderRadius,
Math.PI/2, Math.PI);
if (this._arrowSide == St.Side.LEFT) {
if (this._arrowCorner == St.Corner.TOPLEFT) {
cr.lineTo(x2, y1 + halfBase);
cr.lineTo(x1 - rise, y1);
} else if (this._arrowCorner == St.Corner.BOTTOMLEFT) {
cr.lineTo(x1 + rise, y2);
cr.moveTo(x1, y2 - halfBase);
} else if (this._arrowOrigin < (y1 + (borderRadius + halfBase))) {
cr.lineTo(x1, this._arrowOrigin + halfBase);
cr.lineTo(x1 - rise, this._arrowOrigin);
cr.lineTo(x1, this._arrowOrigin);
cr.lineTo(x1, y1 + borderRadius);
} else if (this._arrowOrigin > (y2 - (borderRadius + halfBase))) {
cr.lineTo(x1, this._arrowOrigin);
cr.lineTo(x1 - rise, this._arrowOrigin);
cr.lineTo(x1, this._arrowOrigin - halfBase);
cr.lineTo(x1, y1 + borderRadius);
} else {
cr.lineTo(x1, this._arrowOrigin + halfBase);
cr.lineTo(x1 - rise, this._arrowOrigin);
cr.lineTo(x1, this._arrowOrigin - halfBase);
cr.lineTo(x1, y1 + borderRadius);
}
} else
cr.lineTo(x1, y1 + borderRadius);
cr.lineTo(halfBorder, this._arrowOrigin + halfBase);
cr.lineTo(halfBorder - rise, this._arrowOrigin);
cr.lineTo(halfBorder, this._arrowOrigin - halfBase);
}
cr.lineTo(halfBorder, borderRadius);
// top-left corner
if (this._arrowCorner != St.Corner.TOPLEFT)
cr.arc(x1 + borderRadius, y1 + borderRadius, borderRadius,
Math.PI, 3*Math.PI/2);
else
cr.lineTo(x1, y1);
cr.arc(borderRadius + halfBorder, borderRadius + halfBorder, borderRadius,
Math.PI, 3*Math.PI/2);
Clutter.cairo_set_source_color(cr, backgroundColor);
cr.fillPreserve();
@ -363,7 +269,7 @@ BoxPointer.prototype = {
// Position correctly relative to the sourceActor
let [sourceX, sourceY] = sourceActor.get_transformed_position();
let [sourceWidth, sourceHeight] = sourceActor.get_transformed_size();
let [sourceCenterX, sourceCenterY] = [sourceX + (sourceWidth / 2), sourceY + (sourceHeight / 2)];
let [minWidth, minHeight, natWidth, natHeight] = this.actor.get_preferred_size();
// We also want to keep it onscreen, and separated from the
@ -371,14 +277,10 @@ BoxPointer.prototype = {
// separated from its sourceActor
let primary = global.get_primary_monitor();
let themeNode = this.actor.get_theme_node();
let halfBorder = themeNode.get_length('-arrow-border-width') / 2;
let halfBase = themeNode.get_length('-arrow-base') / 2;
let arrowRise = themeNode.get_length('-arrow-rise');
let borderRadius = themeNode.get_length('-arrow-border-radius');
let margin = 2 * borderRadius + halfBorder;
let resX, resY;
this._arrowCorner = null;
switch (this._arrowSide) {
case St.Side.TOP:
@ -402,58 +304,40 @@ BoxPointer.prototype = {
case St.Side.BOTTOM:
switch (alignment) {
case St.Align.START:
resX = sourceCenterX - (halfBase + borderRadius + halfBorder);
resX = sourceX - 2 * borderRadius;
break;
case St.Align.MIDDLE:
resX = sourceCenterX - (natWidth / 2);
resX = sourceX - Math.floor((natWidth - sourceWidth) / 2);
break;
case St.Align.END:
resX = sourceCenterX - natWidth + (halfBase + borderRadius + halfBorder);
resX = sourceX - (natWidth - sourceWidth) + 2 * borderRadius;
break;
}
if (sourceCenterX < margin) {
// Not enough space to the top
this._arrowCorner = (this._arrowSide == St.Side.TOP) ? St.Corner.TOPLEFT : St.Corner.BOTTOMLEFT;
resX = primary.x + 10;
} else if (sourceCenterX > (primary.x + primary.width - margin)) {
// Not enough space to the botom
this._arrowCorner = (this._arrowSide == St.Side.TOP) ? St.Corner.TOPRIGHT : St.Corner.BOTTOMRIGHT;
resX = primary.x + primary.width - (10 + natWidth);
}
resX = Math.max(resX, primary.x + 10);
resX = Math.min(resX, primary.x + primary.width - (10 + natWidth));
this.setArrowOrigin(sourceCenterX - resX);
resX = Math.min(resX, primary.x + primary.width - natWidth - arrowRise - gap);
resX = Math.max(resX, primary.x);
this.setArrowOrigin((sourceX - resX) + Math.floor(sourceWidth / 2));
break;
case St.Side.LEFT:
case St.Side.RIGHT:
switch (alignment) {
case St.Align.START:
resY = sourceCenterY - (halfBase + borderRadius + halfBorder);
resY = sourceY - 2 * borderRadius;
break;
case St.Align.MIDDLE:
resY = sourceCenterY - (natHeight / 2);
resY = sourceY - Math.floor((natHeight - sourceHeight) / 2);
break;
case St.Align.END:
resY = sourceCenterY - natHeight + (halfBase + borderRadius + halfBorder);
resY = sourceY - (natHeight - sourceHeight) + 2 * borderRadius;
break;
}
if (sourceCenterY < margin) {
// Not enough space to the left
this._arrowCorner = (this._arrowSide == St.Side.LEFT) ? St.Corner.TOPLEFT : St.Corner.TORIGHT;
resY = 10;
}
else if (sourceCenterY > (primary.y + primary.height - margin)) {
// Not enough space to the right
this._arrowCorner = (this._arrowSide == St.Side.LEFT) ? St.Corner.BOTTOMLEFT : St.Corner.BOTTOMRIGHT;
resY = primary.y + primary.height - (10 + natHeight);
}
resY = Math.max(resY, primary.y + 10);
resY = Math.min(resY, primary.y + primary.height - (10 + natHeight));
resY = Math.min(resY, primary.y + primary.height - natHeight - arrowRise - gap);
resY = Math.max(resY, primary.y);
this.setArrowOrigin(sourceCenterY - resY);
this.setArrowOrigin((sourceY - resY) + Math.floor(sourceHeight / 2));
break;
}

View File

@ -488,45 +488,23 @@ Calendar.prototype = {
_onPrevMonthButtonClicked: function() {
let newDate = new Date(this._selectedDate);
let oldMonth = newDate.getMonth();
if (oldMonth == 0) {
if (newDate.getMonth() == 0) {
newDate.setMonth(11);
newDate.setFullYear(newDate.getFullYear() - 1);
if (newDate.getMonth() != 11) {
let day = 32 - new Date(newDate.getFullYear() - 1, 11, 32).getDate();
newDate = new Date(newDate.getFullYear() - 1, 11, day);
}
} else {
newDate.setMonth(newDate.getMonth() - 1);
}
else {
newDate.setMonth(oldMonth - 1);
if (newDate.getMonth() != oldMonth - 1) {
let day = 32 - new Date(newDate.getFullYear(), oldMonth - 1, 32).getDate();
newDate = new Date(newDate.getFullYear(), oldMonth - 1, day);
}
}
this.setDate(newDate);
},
_onNextMonthButtonClicked: function() {
_onNextMonthButtonClicked: function() {
let newDate = new Date(this._selectedDate);
let oldMonth = newDate.getMonth();
if (oldMonth == 11) {
if (newDate.getMonth() == 11) {
newDate.setMonth(0);
newDate.setFullYear(newDate.getFullYear() + 1);
if (newDate.getMonth() != 0) {
let day = 32 - new Date(newDate.getFullYear() + 1, 0, 32).getDate();
newDate = new Date(newDate.getFullYear() + 1, 0, day);
}
} else {
newDate.setMonth(newDate.getMonth() + 1);
}
else {
newDate.setMonth(oldMonth + 1);
if (newDate.getMonth() != oldMonth + 1) {
let day = 32 - new Date(newDate.getFullYear(), oldMonth + 1, 32).getDate();
newDate = new Date(newDate.getFullYear(), oldMonth + 1, day);
}
}
this.setDate(newDate);
},
@ -578,7 +556,7 @@ Calendar.prototype = {
// Hack used in lieu of border-collapse - see gnome-shell.css
if (row == 2)
styleClass = 'calendar-day-top ' + styleClass;
if (iter.getDay() == this._weekStart)
if (iter.getDay() == 0)
styleClass = 'calendar-day-left ' + styleClass;
if (_sameDay(now, iter))
@ -633,18 +611,6 @@ EventsList.prototype = {
this._eventSource.connect('changed', Lang.bind(this, this._update));
this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
this._desktopSettings.connect('changed', Lang.bind(this, this._update));
let weekStartString = Gettext_gtk30.gettext('calendar:week_start:0');
if (weekStartString.indexOf('calendar:week_start:') == 0) {
this._weekStart = parseInt(weekStartString.substring(20));
}
if (isNaN(this._weekStart) ||
this._weekStart < 0 ||
this._weekStart > 6) {
log('Translation of "calendar:week_start:0" in GTK+ is not correct');
this._weekStart = 0;
}
this._update();
},
@ -726,21 +692,19 @@ EventsList.prototype = {
let tomorrowEnd = new Date(dayEnd.getTime() + 86400 * 1000);
this._addPeriod(_("Tomorrow"), tomorrowBegin, tomorrowEnd, false, true);
if (dayEnd.getDay() <= 4 + this._weekStart) {
/* If now is within the first 5 days we show "This week" and
* include events up until and including Saturday/Sunday
* (depending on whether a week starts on Sunday/Monday).
if (dayEnd.getDay() <= 4) {
/* if now is Sunday through Thursday show "This week" and include events up until
* and including Saturday
*/
let thisWeekBegin = new Date(dayBegin.getTime() + 2 * 86400 * 1000);
let thisWeekEnd = new Date(dayEnd.getTime() + (6 + this._weekStart - dayEnd.getDay()) * 86400 * 1000);
let thisWeekEnd = new Date(dayEnd.getTime() + (6 - dayEnd.getDay()) * 86400 * 1000);
this._addPeriod(_("This week"), thisWeekBegin, thisWeekEnd, true, false);
} else {
/* otherwise it's one of the two last days of the week ... show
* "Next week" and include events up until and including *next*
* Saturday/Sunday
/* otherwise it's a Friday or Saturday... show "Next week" and include events up
* until and including *next* Saturday
*/
let nextWeekBegin = new Date(dayBegin.getTime() + 2 * 86400 * 1000);
let nextWeekEnd = new Date(dayEnd.getTime() + (13 + this._weekStart - dayEnd.getDay()) * 86400 * 1000);
let nextWeekEnd = new Date(dayEnd.getTime() + (13 - dayEnd.getDay()) * 86400 * 1000);
this._addPeriod(_("Next week"), nextWeekBegin, nextWeekEnd, true, false);
}
},

View File

@ -54,7 +54,7 @@ RemoveFavoriteIcon.prototype = {
if (source instanceof AppDisplay.AppWellIcon) {
let appSystem = Shell.AppSystem.get_default();
app = appSystem.get_app(source.getId());
} else if (source.metaWindow) {
} else if (source instanceof Workspace.WindowClone) {
let tracker = Shell.WindowTracker.get_default();
app = tracker.get_window_app(source.metaWindow);
}
@ -148,7 +148,7 @@ Dash.prototype = {
let app = null;
if (dragEvent.source instanceof AppDisplay.AppWellIcon)
app = this._appSystem.get_app(dragEvent.source.getId());
else if (dragEvent.source.metaWindow)
else if (dragEvent.source instanceof Workspace.WindowClone)
app = this._tracker.get_window_app(dragEvent.source.metaWindow);
else
return DND.DragMotionResult.CONTINUE;
@ -206,7 +206,7 @@ Dash.prototype = {
_redisplay: function () {
this._box.hide();
this._box.destroy_children();
this._box.remove_all();
let favorites = AppFavorites.getAppFavorites().getFavoriteMap();
@ -265,7 +265,7 @@ Dash.prototype = {
let app = null;
if (source instanceof AppDisplay.AppWellIcon)
app = this._appSystem.get_app(source.getId());
else if (source.metaWindow)
else if (source instanceof Workspace.WindowClone)
app = this._tracker.get_window_app(source.metaWindow);
// Don't allow favoriting of transient apps
@ -316,7 +316,7 @@ Dash.prototype = {
let app = null;
if (source instanceof AppDisplay.AppWellIcon) {
app = this._appSystem.get_app(source.getId());
} else if (source.metaWindow) {
} else if (source instanceof Workspace.WindowClone) {
app = this._tracker.get_window_app(source.metaWindow);
}

View File

@ -100,7 +100,7 @@ DateMenuButton.prototype = {
hbox.add(item);
// Fill up the second column
//
vbox = new St.BoxLayout({vertical: true});
hbox.add(vbox);

View File

@ -101,12 +101,6 @@ _Draggable.prototype = {
this._dragInProgress = false; // The drag has been started, and has not been dropped or cancelled yet.
this._animationInProgress = false; // The drag is over and the item is in the process of animating to its original position (snapping back or reverting).
// During the drag, we eat enter/leave events so that actors don't prelight or show
// tooltips. But we remember the relevant events (first leave, last enter) so we can
// fix up the hover state after the drag ends.
this._firstLeaveEvent = null;
this._lastEnterEvent = null;
this._eventsGrabbed = false;
},
@ -204,11 +198,6 @@ _Draggable.prototype = {
this._cancelDrag(event.get_time());
return true;
}
} else if (event.type() == Clutter.EventType.LEAVE) {
if (this._firstLeaveEvent == null)
this._firstLeaveEvent = event;
} else if (event.type() == Clutter.EventType.ENTER) {
this._lastEnterEvent = event;
}
return false;
@ -496,7 +485,7 @@ _Draggable.prototype = {
if (this._actorDestroyed) {
global.unset_cursor();
if (!this._buttonDown)
this._dragComplete();
this._ungrabEvents();
this.emit('drag-end', eventTime, false);
return;
}
@ -553,41 +542,12 @@ _Draggable.prototype = {
this._dragComplete();
},
// Actor is an actor we might have entered or left during the drag; call
// st_widget_sync_hover on all StWidget ancestors
_syncHover: function(actor) {
// If the actor was reparented from its original location and
// destroyed, then start syncing hover at the original parent
if (actor == this._dragActor && this._actorDestroyed)
actor = this._dragOrigParent;
while (actor) {
let parent = actor.get_parent();
if (actor instanceof St.Widget)
actor.sync_hover();
actor = parent;
}
},
_dragComplete: function() {
if (!this._actorDestroyed)
Shell.util_set_hidden_from_pick(this._dragActor, false);
this._ungrabEvents();
if (this._firstLeaveEvent) {
this._syncHover(this._firstLeaveEvent.get_source());
this._firstLeaveEvent = null;
}
if (this._lastEnterEvent) {
this._syncHover(this._lastEnterEvent.get_source());
this._lastEnterEvent = null;
}
Shell.util_set_hidden_from_pick(this._dragActor, false);
this._dragActor = undefined;
currentDraggable = null;
this._ungrabEvents();
}
};

View File

@ -4,7 +4,6 @@ const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const DocInfo = imports.misc.docInfo;
const Params = imports.misc.params;
const Search = imports.ui.search;
@ -29,12 +28,9 @@ DocSearchProvider.prototype = {
'icon': docInfo.createIcon(Search.RESULT_ICON_SIZE)};
},
activateResult: function(id, params) {
params = Params.parse(params, { workspace: null,
timestamp: null });
activateResult: function(id) {
let docInfo = this._docManager.lookupByUri(id);
docInfo.launch(params.workspace ? params.workspace.index() : -1);
docInfo.launch();
},
getInitialResultSet: function(terms) {

View File

@ -171,7 +171,7 @@ ListItem.prototype = {
_onClicked: function() {
this.emit('activate');
this._app.activate(-1);
this._app.activate();
}
};
Signals.addSignalMethods(ListItem.prototype);
@ -470,7 +470,7 @@ EndSessionDialog.prototype = {
OpenAsync: function(type, timestamp, totalSecondsToStayOpen, inhibitorObjectPaths, callback) {
this._totalSecondsToStayOpen = totalSecondsToStayOpen;
this._inhibitors = [];
this._applicationList.destroy_children();
this._applicationList.remove_all();
this._type = type;
if (!(this._type in DialogContent))

View File

@ -67,8 +67,6 @@ let xdndHandler = null;
let statusIconDispatcher = null;
let _errorLogStack = [];
let _startDate;
let _defaultCssStylesheet = null;
let _cssStylesheet = null;
let background = null;
@ -113,7 +111,6 @@ function start() {
global.stage.color = DEFAULT_BACKGROUND_COLOR;
global.stage.no_clear_hint = true;
_defaultCssStylesheet = global.datadir + '/theme/gnome-shell.css';
loadTheme();
let shellwm = global.window_manager;
@ -175,8 +172,6 @@ function start() {
}
});
global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT, false, -1, 1);
// Provide the bus object for gnome-session to
// initiate logouts.
EndSessionDialog.init();
@ -199,143 +194,25 @@ function start() {
_log('info', 'loaded at ' + _startDate);
log('GNOME Shell started at ' + _startDate);
Mainloop.idle_add(_removeUnusedWorkspaces);
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
if (perfModuleName) {
let perfOutput = GLib.getenv("SHELL_PERF_OUTPUT");
let module = eval('imports.perf.' + perfModuleName + ';');
Scripting.runPerfScript(module, perfOutput);
}
global.screen.connect('notify::n-workspaces', _nWorkspacesChanged);
Mainloop.idle_add(_nWorkspacesChanged);
}
let _workspaces = [];
let _checkWorkspacesId = 0;
function _checkWorkspaces() {
let i;
let emptyWorkspaces = [];
for (i = 0; i < _workspaces.length; i++)
emptyWorkspaces[i] = true;
let windows = global.get_window_actors();
for (i = 0; i < windows.length; i++) {
let win = windows[i];
if (win.get_meta_window().is_on_all_workspaces())
continue;
let workspaceIndex = win.get_workspace();
emptyWorkspaces[workspaceIndex] = false;
}
// If we don't have an empty workspace at the end, add one
if (!emptyWorkspaces[emptyWorkspaces.length -1]) {
global.screen.append_new_workspace(false, global.get_current_time());
emptyWorkspaces.push(false);
}
// Delete other empty workspaces; do it from the end to avoid index changes
for (i = emptyWorkspaces.length - 2; i >= 0; i--) {
if (emptyWorkspaces[i])
global.screen.remove_workspace(_workspaces[i], global.get_current_time());
}
_checkWorkspacesId = 0;
return false;
}
function _queueCheckWorkspaces() {
if (_checkWorkspacesId == 0)
_checkWorkspacesId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, _checkWorkspaces);
}
function _nWorkspacesChanged() {
let oldNumWorkspaces = _workspaces.length;
let newNumWorkspaces = global.screen.n_workspaces;
if (oldNumWorkspaces == newNumWorkspaces)
return false;
let lostWorkspaces = [];
if (newNumWorkspaces > oldNumWorkspaces) {
let w;
// Assume workspaces are only added at the end
for (w = oldNumWorkspaces; w < newNumWorkspaces; w++)
_workspaces[w] = global.screen.get_workspace_by_index(w);
for (w = oldNumWorkspaces; w < newNumWorkspaces; w++) {
let workspace = _workspaces[w];
workspace._windowAddedId = workspace.connect('window-added', _queueCheckWorkspaces);
workspace._windowRemovedId = workspace.connect('window-removed', _queueCheckWorkspaces);
}
} else {
// Assume workspaces are only removed sequentially
// (e.g. 2,3,4 - not 2,4,7)
let removedIndex;
let removedNum = oldNumWorkspaces - newNumWorkspaces;
for (let w = 0; w < oldNumWorkspaces; w++) {
let workspace = global.screen.get_workspace_by_index(w);
if (_workspaces[w] != workspace) {
removedIndex = w;
break;
}
}
let lostWorkspaces = _workspaces.splice(removedIndex, removedNum);
lostWorkspaces.forEach(function(workspace) {
workspace.disconnect(workspace._windowAddedId);
workspace.disconnect(workspace._windowRemovedId);
});
}
_queueCheckWorkspaces();
return false;
}
/**
* getThemeStylesheet:
*
* Get the theme CSS file that the shell will load
*
* Returns: A file path that contains the theme CSS,
* null if using the default
*/
function getThemeStylesheet()
{
return _cssStylesheet;
}
/**
* setThemeStylesheet:
* @cssStylesheet: A file path that contains the theme CSS,
* set it to null to use the default
*
* Set the theme CSS file that the shell will load
*/
function setThemeStylesheet(cssStylesheet)
{
_cssStylesheet = cssStylesheet;
}
/**
* loadTheme:
*
* Reloads the theme CSS file
* Reloads the theme CSS file from the default theme.
*/
function loadTheme() {
let themeContext = St.ThemeContext.get_for_stage (global.stage);
let cssStylesheet = _defaultCssStylesheet;
if (_cssStylesheet != null)
cssStylesheet = _cssStylesheet;
let theme = new St.Theme ({ application_stylesheet: cssStylesheet });
let stylesheetPath = global.datadir + '/theme/gnome-shell.css';
let theme = new St.Theme ({ application_stylesheet: stylesheetPath });
themeContext.set_theme (theme);
}
@ -392,6 +269,34 @@ function _relayout() {
overview.hide();
}
// metacity-clutter currently uses the same prefs as plain metacity,
// which probably means we'll be starting out with multiple workspaces;
// remove any unused ones. (We do this from an idle handler, because
// global.get_window_actors() still returns NULL at the point when start()
// is called.)
function _removeUnusedWorkspaces() {
let windows = global.get_window_actors();
let maxWorkspace = 0;
for (let i = 0; i < windows.length; i++) {
let win = windows[i];
if (!win.get_meta_window().is_on_all_workspaces() &&
win.get_workspace() > maxWorkspace) {
maxWorkspace = win.get_workspace();
}
}
let screen = global.screen;
if (screen.n_workspaces > maxWorkspace) {
for (let w = screen.n_workspaces - 1; w > maxWorkspace; w--) {
let workspace = screen.get_workspace_by_index(w);
screen.remove_workspace(workspace, 0);
}
}
return false;
}
// This function encapsulates hacks to make certain global keybindings
// work even when we are in one of our modes where global keybindings
// are disabled with a global grab. (When there is a global grab, then
@ -439,12 +344,6 @@ function _globalKeyPressHandler(actor, event) {
case Meta.KeyBindingAction.WORKSPACE_RIGHT:
wm.actionMoveWorkspaceRight();
return true;
case Meta.KeyBindingAction.WORKSPACE_UP:
wm.actionMoveWorkspaceUp();
return true;
case Meta.KeyBindingAction.WORKSPACE_DOWN:
wm.actionMoveWorkspaceDown();
return true;
case Meta.KeyBindingAction.PANEL_RUN_DIALOG:
case Meta.KeyBindingAction.COMMAND_2:
getRunDialog().open();

View File

@ -254,7 +254,6 @@ Notification.prototype = {
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
this.isTransient = false;
this.expanded = false;
this._destroyed = false;
this._useActionIcons = false;
this._customContent = false;
this._bannerBodyText = null;
@ -262,7 +261,6 @@ Notification.prototype = {
this._titleFitsInBannerMode = true;
this._spacing = 0;
this._buttonFocusManager = null;
this._hasFocus = false;
this._lockTrayOnFocusGrab = false;
// We use this._prevFocusedWindow and this._prevKeyFocusActor to return the
@ -276,11 +274,7 @@ Notification.prototype = {
this._capturedEventId = 0;
this._keyPressId = 0;
source.connect('destroy', Lang.bind(this,
// Avoid passing 'source' as an argument to this.destroy()
function () {
this.destroy();
}));
source.connect('destroy', Lang.bind(this, this.destroy));
this.actor = new St.Table({ name: 'notification',
reactive: true });
@ -505,7 +499,7 @@ Notification.prototype = {
this._buttonBox = box;
}
let button = new St.Button({ can_focus: true });
let button = new St.Button();
if (this._useActionIcons && Gtk.IconTheme.get_default().has_icon(id)) {
button.add_style_class_name('notification-icon-button');
@ -515,15 +509,8 @@ Notification.prototype = {
button.label = label;
}
if (!this._buttonFocusManager)
this._buttonFocusManager = St.FocusManager.get_for_stage(global.stage);
if (this._buttonBox.get_children().length > 0)
this._buttonFocusManager.remove_group(this._buttonBox);
this._buttonBox.add(button);
this._buttonFocusManager.add_group(this._buttonBox);
button.connect('clicked', Lang.bind(this, this._onActionInvoked, id));
this._updated();
},
@ -673,10 +660,6 @@ Notification.prototype = {
this._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
this._hasFocus = true;
if (this._buttonFocusManager)
this._buttonBox.get_children()[0].grab_key_focus();
if (lockTray)
Main.messageTray.lock();
},
@ -784,9 +767,6 @@ Notification.prototype = {
},
destroy: function(reason) {
if (this._destroyed)
return;
this._destroyed = true;
if (!reason)
reason = NotificationDestroyedReason.DISMISSED;
this.emit('destroy', reason);
@ -806,7 +786,6 @@ Source.prototype = {
this._iconBin = new St.Bin({ width: this.ICON_SIZE,
height: this.ICON_SIZE });
this.isTransient = false;
this.isChat = false;
},
setTransient: function(isTransient) {
@ -1026,7 +1005,6 @@ MessageTray.prototype = {
// added to the summary without a notification being shown.
this._newSummaryItems = [];
this._longestSummaryItem = null;
this._chatSummaryItemsCount = 0;
},
_setSizePosition: function() {
@ -1060,12 +1038,7 @@ MessageTray.prototype = {
let summaryItem = new SummaryItem(source);
if (source.isChat) {
this._summary.insert_actor(summaryItem.actor, 0);
this._chatSummaryItemsCount++;
} else {
this._summary.insert_actor(summaryItem.actor, this._chatSummaryItemsCount);
}
this._summary.insert_actor(summaryItem.actor, 0);
let titleWidth = summaryItem.getTitleNaturalWidth();
if (titleWidth > this._summaryItemTitleWidth) {
@ -1130,10 +1103,6 @@ MessageTray.prototype = {
this._newSummaryItems.splice(newSummaryItemsIndex, 1);
this._summaryItems.splice(index, 1);
if (source.isChat)
this._chatSummaryItemsCount--;
if (this._longestSummaryItem.source == source) {
let newTitleWidth = 0;
this._longestSummaryItem = null;

View File

@ -83,9 +83,7 @@ ModalDialog.prototype = {
},
setButtons: function(buttons) {
this._buttonLayout.destroy_children();
this._actionKeys = {};
this._buttonLayout.remove_all();
let i = 0;
for (let index in buttons) {
let buttonInfo = buttons[index];

View File

@ -44,6 +44,10 @@ const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
if (Config.HAVE_BLUETOOTH)
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
const STANDARD_TRAY_INDICATOR_FACTORIES = [
imports.ui.status.keyboard.ModifierIndicatorFactory
];
// in org.gnome.desktop.interface
const CLOCK_FORMAT_KEY = 'clock-format';
@ -695,13 +699,16 @@ Panel.prototype = {
/* right */
// System status applets live in statusBox, while legacy tray icons
// On-off indicators (for keyboard leds and accessx) are in indicatorBox
// System status applets live in statusBox, and legacy tray icons
// live in trayBox
// The trayBox is hidden when there are no tray icons.
this._indicatorBox = new St.BoxLayout({ name: 'indicatorBox' });
this._trayBox = new St.BoxLayout({ name: 'legacyTray' });
this._statusBox = new St.BoxLayout({ name: 'statusTray' });
this._trayBox.hide();
this._rightBox.add(this._indicatorBox);
this._rightBox.add(this._trayBox);
this._rightBox.add(this._statusBox);
@ -753,6 +760,13 @@ Panel.prototype = {
},
startStatusArea: function() {
for (let i = 0; i < STANDARD_TRAY_INDICATOR_FACTORIES.length; i++) {
let factory = new STANDARD_TRAY_INDICATOR_FACTORIES[i];
let indicators = factory.getIndicators();
for (let j = 0; j < indicators.length; j++)
this._indicatorBox.add(indicators[j]);
}
for (let i = 0; i < STANDARD_TRAY_ICON_ORDER.length; i++) {
let role = STANDARD_TRAY_ICON_ORDER[i];
let constructor = STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION[role];

View File

@ -12,7 +12,6 @@ const _ = Gettext.gettext;
const DND = imports.ui.dnd;
const Main = imports.ui.main;
const Params = imports.misc.params;
const Search = imports.ui.search;
const Util = imports.misc.util;
@ -59,21 +58,6 @@ PlaceInfo.prototype = {
}
};
// Helper function to translate launch parameters into a GAppLaunchContext
function _makeLaunchContext(params)
{
params = Params.parse(params, { workspace: null,
timestamp: null });
let launchContext = global.create_app_launch_context();
if (params.workspace != null)
launchContext.set_desktop(params.workspace.index());
if (params.timestamp != null)
launchContext.set_timestamp(params.timestamp);
return launchContext;
}
function PlaceDeviceInfo(mount) {
this._init(mount);
}
@ -93,9 +77,9 @@ PlaceDeviceInfo.prototype = {
return St.TextureCache.get_default().load_gicon(null, icon, size);
},
launch: function(param) {
launch: function() {
Gio.app_info_launch_default_for_uri(this._mount.get_root().get_uri(),
_makeLaunchContex(params));
global.create_app_launch_context());
},
isRemovable: function() {
@ -127,6 +111,7 @@ PlaceDeviceInfo.prototype = {
}
};
function PlacesManager() {
this._init();
}
@ -145,8 +130,8 @@ PlacesManager.prototype = {
function(size) {
return St.TextureCache.get_default().load_gicon(null, homeIcon, size);
},
function(params) {
Gio.app_info_launch_default_for_uri(homeUri, _makeLaunchContext(params));
function() {
Gio.app_info_launch_default_for_uri(homeUri, global.create_app_launch_context());
});
let desktopPath = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP);
@ -158,8 +143,8 @@ PlacesManager.prototype = {
function(size) {
return St.TextureCache.get_default().load_gicon(null, desktopIcon, size);
},
function(params) {
Gio.app_info_launch_default_for_uri(desktopUri, _makeLaunchContext(params));
function() {
Gio.app_info_launch_default_for_uri(desktopUri, global.create_app_launch_context());
});
this._connect = new PlaceInfo('special:connect', _("Connect to..."),
@ -168,11 +153,7 @@ PlacesManager.prototype = {
icon_type: St.IconType.FULLCOLOR,
icon_size: size });
},
function (params) {
// BUG: nautilus-connect-server doesn't have a desktop file, so we can'
// launch it with the workspace from params. It's probably pretty rare
// and odd to drag this place onto a workspace in any case
function () {
Util.spawn(['nautilus-connect-server']);
});
@ -192,12 +173,8 @@ PlacesManager.prototype = {
function(size) {
return networkApp.create_icon_texture(size);
},
function (params) {
params = Params.parse(params, { workspace: null,
timestamp: 0 });
networkApp.launch_full(params.timestamp, [],
params.workspace ? params.workspace.index() : -1);
function () {
networkApp.launch();
});
}
@ -337,8 +314,8 @@ PlacesManager.prototype = {
function(size) {
return St.TextureCache.get_default().load_gicon(null, icon, size);
},
function(params) {
Gio.app_info_launch_default_for_uri(bookmark, _makeLaunchContext(params));
function() {
Gio.app_info_launch_default_for_uri(bookmark, global.create_app_launch_context());
});
this._bookmarks.push(item);
}
@ -418,9 +395,9 @@ PlaceSearchProvider.prototype = {
'icon': placeInfo.iconFactory(Search.RESULT_ICON_SIZE) };
},
activateResult: function(id, params) {
activateResult: function(id) {
let placeInfo = Main.placesManager.lookupPlaceById(id);
placeInfo.launch(params);
placeInfo.launch();
},
_compareResultMeta: function (idA, idB) {

View File

@ -267,7 +267,7 @@ OpenSearchSystem.prototype = {
return lang != null;
},
activateResult: function(id, params) {
activateResult: function(id) {
let searchTerms = this._terms.join(' ');
let url = this._providers[id].url.replace('{searchTerms}', encodeURIComponent(searchTerms));

View File

@ -81,11 +81,11 @@ SearchResult.prototype = {
return new Clutter.Clone({ source: this.metaInfo['icon'] });
},
shellWorkspaceLaunch: function(params) {
shellWorkspaceLaunch: function() {
if (this.provider.dragActivateResult)
this.provider.dragActivateResult(this.metaInfo.id, params);
this.provider.dragActivateResult(this.metaInfo.id);
else
this.provider.activateResult(this.metaInfo.id, params);
this.provider.activateResult(this.metaInfo.id);
}
};

View File

@ -204,3 +204,52 @@ XKBIndicator.prototype = {
this._labelActors[i].allocate_align_fill(box, 0.5, 0, false, false, flags);
}
};
function ModifierIndicatorFactory() {
this._init.call(this);
}
ModifierIndicatorFactory.prototype = {
_init: function() {
this._settings = new Gio.Settings({ schema: INDICATOR_SCHEMA });
this._settings.connect('changed::show-keyboard-leds-indicator', Lang.bind(this, this._changed));
this._config = Gkbd.Configuration.get();
this._config.connect('indicators-changed', Lang.bind(this, this._changed));
this._scrollLock = new St.Icon({ icon_name: 'kbdled-scroll-lock', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
this._numLock = new St.Icon({ icon_name: 'kbdled-num-lock', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
this._capsLock = new St.Icon({ icon_name: 'kbdled-caps-lock', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
this._changed();
},
getIndicators: function() {
return [this._scrollLock, this._numLock, this._capsLock];
},
_changed: function() {
let enable = this._settings.get_boolean('show-keyboard-leds-indicator');
if (enable) {
if (this._config.get_scroll_lock_state())
this._scrollLock.show();
else
this._scrollLock.hide();
if (this._config.get_num_lock_state())
this._numLock.show();
else
this._numLock.hide();
if (this._config.get_caps_lock_state())
this._capsLock.show();
else
this._capsLock.hide();
} else {
this._scrollLock.hide();
this._numLock.hide();
this._capsLock.hide();
}
}
};

View File

@ -455,8 +455,6 @@ Source.prototype = {
_init: function(accountPath, connPath, channelPath, targetHandle, targetHandleType, targetId) {
MessageTray.Source.prototype._init.call(this, targetId);
this.isChat = true;
this._accountPath = accountPath;
let connName = Telepathy.pathToName(connPath);

View File

@ -525,20 +525,23 @@ WindowManager.prototype = {
},
_showWorkspaceSwitcher : function(shellwm, binding, window, backwards) {
/* We don't support this kind of layout */
if (binding == 'switch_to_workspace_up' || binding == 'switch_to_workspace_down')
return;
if (global.screen.n_workspaces == 1)
return;
if (this._workspaceSwitcherPopup == null)
this._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup();
if (binding == 'switch_to_workspace_left')
if (binding == 'switch_to_workspace_left') {
this.actionMoveWorkspaceLeft();
else if (binding == 'switch_to_workspace_right')
}
if (binding == 'switch_to_workspace_right') {
this.actionMoveWorkspaceRight();
else if (binding == 'switch_to_workspace_up')
this.actionMoveWorkspaceUp();
else if (binding == 'switch_to_workspace_down')
this.actionMoveWorkspaceDown();
}
},
actionMoveWorkspaceLeft: function() {
@ -569,32 +572,6 @@ WindowManager.prototype = {
if (indexToActivate != activeWorkspaceIndex)
global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time());
if (!Main.overview.visible)
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, indexToActivate);
},
actionMoveWorkspaceUp: function() {
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
let indexToActivate = activeWorkspaceIndex;
if (activeWorkspaceIndex > 0)
indexToActivate--;
if (indexToActivate != activeWorkspaceIndex)
global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time());
if (!Main.overview.visible)
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, indexToActivate);
},
actionMoveWorkspaceDown: function() {
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
let indexToActivate = activeWorkspaceIndex;
if (activeWorkspaceIndex < global.screen.n_workspaces - 1)
indexToActivate++;
if (indexToActivate != activeWorkspaceIndex)
global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time());
if (!Main.overview.visible)
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, indexToActivate);
}

View File

@ -104,10 +104,6 @@ WindowClone.prototype = {
this._stackAbove = null;
this._sizeChangedId = this.realWindow.connect('size-changed', Lang.bind(this, function() {
this.emit('size-changed');
}));
this.actor.connect('button-release-event',
Lang.bind(this, this._onButtonRelease));
@ -161,9 +157,6 @@ WindowClone.prototype = {
},
_onDestroy: function() {
this.realWindow.disconnect(this._sizeChangedId);
this._sizeChangedId = 0;
this.metaWindow._delegate = null;
this.actor._delegate = null;
if (this._zoomLightbox)
@ -1332,10 +1325,10 @@ Workspace.prototype = {
Lang.bind(this, function() {
this._windowIsZooming = false;
}));
clone.connect('size-changed',
Lang.bind(this, function() {
this.positionWindows(0);
}));
win.connect('size-changed',
Lang.bind(this, function() {
this.positionWindows(0);
}));
this.actor.add_actor(clone.actor);
@ -1402,7 +1395,7 @@ Workspace.prototype = {
},
acceptDrop : function(source, actor, x, y, time) {
if (source.realWindow) {
if (source instanceof WindowClone) {
let win = source.realWindow;
if (this._isMyWindow(win))
return false;
@ -1421,8 +1414,8 @@ Workspace.prototype = {
time);
return true;
} else if (source.shellWorkspaceLaunch) {
source.shellWorkspaceLaunch({ workspace: this.metaWorkspace,
timestamp: time });
this.metaWorkspace.activate(time);
source.shellWorkspaceLaunch();
return true;
}

View File

@ -1,310 +0,0 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const St = imports.gi.St;
const DND = imports.ui.dnd;
const Main = imports.ui.main;
const Workspace = imports.ui.workspace;
// Fraction of original screen size for thumbnails
let THUMBNAIL_SCALE = 1/8.;
function WindowClone(realWindow) {
this._init(realWindow);
}
WindowClone.prototype = {
_init : function(realWindow) {
this.actor = new Clutter.Clone({ source: realWindow.get_texture(),
clip_to_allocation: true,
reactive: true });
this.actor._delegate = this;
this.realWindow = realWindow;
this.metaWindow = realWindow.meta_window;
this.metaWindow._delegate = this;
this._positionChangedId = this.realWindow.connect('position-changed',
Lang.bind(this, this._onPositionChanged));
this._onPositionChanged();
this.actor.connect('button-release-event',
Lang.bind(this, this._onButtonRelease));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._draggable = DND.makeDraggable(this.actor,
{ restoreOnSuccess: true,
dragActorMaxSize: Workspace.WINDOW_DND_SIZE,
dragActorOpacity: Workspace.DRAGGING_WINDOW_OPACITY });
this._draggable.connect('drag-begin', Lang.bind(this, this._onDragBegin));
this._draggable.connect('drag-end', Lang.bind(this, this._onDragEnd));
this.inDrag = false;
this._selected = false;
},
setStackAbove: function (actor) {
this._stackAbove = actor;
if (this._stackAbove == null)
this.actor.lower_bottom();
else
this.actor.raise(this._stackAbove);
},
destroy: function () {
this.actor.destroy();
},
_onPositionChanged: function() {
let rect = this.metaWindow.get_outer_rect();
this.actor.set_position(this.realWindow.x, this.realWindow.y);
},
_onDestroy: function() {
this.metaWindow._delegate = null;
this.actor._delegate = null;
if (this._positionChangedId != 0) {
this.realWindow.disconnect(this._positionChangedId);
this._positionChangedId = 0;
}
if (this.inDrag) {
this.emit('drag-end');
this.inDrag = false;
}
this.disconnectAll();
},
_onButtonRelease : function (actor, event) {
this._selected = true;
this.emit('selected', event.get_time());
},
_onDragBegin : function (draggable, time) {
this.inDrag = true;
this.emit('drag-begin');
},
_onDragEnd : function (draggable, time, snapback) {
this.inDrag = false;
// We may not have a parent if DnD completed successfully, in
// which case our clone will shortly be destroyed and replaced
// with a new one on the target workspace.
if (this.actor.get_parent() != null) {
if (this._stackAbove == null)
this.actor.lower_bottom();
else
this.actor.raise(this._stackAbove);
}
this.emit('drag-end');
}
};
Signals.addSignalMethods(WindowClone.prototype);
/**
* @metaWorkspace: a #Meta.Workspace
*/
function WorkspaceThumbnail(metaWorkspace) {
this._init(metaWorkspace);
}
WorkspaceThumbnail.prototype = {
_init : function(metaWorkspace) {
// When dragging a window, we use this slot for reserve space.
this.metaWorkspace = metaWorkspace;
this.actor = new St.Bin({ reactive: true,
style_class: 'workspace-thumbnail' });
this.actor._delegate = this;
this._group = new Clutter.Group();
this.actor.add_actor(this._group);
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this.actor.connect('button-press-event', Lang.bind(this,
function(actor, event) {
return true;
}));
this.actor.connect('button-release-event', Lang.bind(this,
function(actor, event) {
this.metaWorkspace.activate(event.get_time());
return true;
}));
this._background = new Clutter.Clone({ source: global.background_actor });
this._group.add_actor(this._background);
this._group.set_size(THUMBNAIL_SCALE * global.screen_width, THUMBNAIL_SCALE * global.screen_height);
this._group.set_scale(THUMBNAIL_SCALE, THUMBNAIL_SCALE);
let windows = global.get_window_actors().filter(this._isMyWindow, this);
// Create clones for windows that should be visible in the Overview
this._windows = [];
for (let i = 0; i < windows.length; i++) {
if (this._isOverviewWindow(windows[i])) {
this._addWindowClone(windows[i]);
}
}
// Track window changes
this._windowAddedId = this.metaWorkspace.connect('window-added',
Lang.bind(this, this._windowAdded));
this._windowRemovedId = this.metaWorkspace.connect('window-removed',
Lang.bind(this, this._windowRemoved));
},
_lookupIndex: function (metaWindow) {
for (let i = 0; i < this._windows.length; i++) {
if (this._windows[i].metaWindow == metaWindow) {
return i;
}
}
return -1;
},
syncStacking: function(stackIndices) {
this._windows.sort(function (a, b) { return stackIndices[a.metaWindow.get_stable_sequence()] - stackIndices[b.metaWindow.get_stable_sequence()]; });
for (let i = 0; i < this._windows.length; i++) {
let clone = this._windows[i];
let metaWindow = clone.metaWindow;
if (i == 0) {
clone.setStackAbove(this._background);
} else {
let previousClone = this._windows[i - 1];
clone.setStackAbove(previousClone.actor);
}
}
},
_windowRemoved : function(metaWorkspace, metaWin) {
let win = metaWin.get_compositor_private();
// find the position of the window in our list
let index = this._lookupIndex (metaWin);
if (index == -1)
return;
let clone = this._windows[index];
this._windows.splice(index, 1);
clone.destroy();
},
_windowAdded : function(metaWorkspace, metaWin) {
if (this.leavingOverview)
return;
let win = metaWin.get_compositor_private();
if (!win) {
// Newly-created windows are added to a workspace before
// the compositor finds out about them...
Mainloop.idle_add(Lang.bind(this,
function () {
if (this.actor && metaWin.get_compositor_private())
this._windowAdded(metaWorkspace, metaWin);
return false;
}));
return;
}
if (!this._isOverviewWindow(win))
return;
let clone = this._addWindowClone(win);
},
destroy : function() {
this.actor.destroy();
},
_onDestroy: function(actor) {
this.metaWorkspace.disconnect(this._windowAddedId);
this.metaWorkspace.disconnect(this._windowRemovedId);
this._windows = [];
this.actor = null;
},
// Tests if @win belongs to this workspaces
_isMyWindow : function (win) {
return win.get_workspace() == this.metaWorkspace.index() ||
(win.get_meta_window() && win.get_meta_window().is_on_all_workspaces());
},
// Tests if @win should be shown in the Overview
_isOverviewWindow : function (win) {
let tracker = Shell.WindowTracker.get_default();
return tracker.is_window_interesting(win.get_meta_window());
},
// Create a clone of a (non-desktop) window and add it to the window list
_addWindowClone : function(win) {
let clone = new WindowClone(win);
clone.connect('selected',
Lang.bind(this, this._onCloneSelected));
clone.connect('drag-begin',
Lang.bind(this, function(clone) {
Main.overview.beginWindowDrag();
}));
clone.connect('drag-end',
Lang.bind(this, function(clone) {
Main.overview.endWindowDrag();
}));
this._group.add_actor(clone.actor);
this._windows.push(clone);
return clone;
},
_onCloneSelected : function (clone, time) {
this.metaWorkspace.activate(time);
},
// Draggable target interface
handleDragOver : function(source, actor, x, y, time) {
if (source.realWindow)
return DND.DragMotionResult.MOVE_DROP;
if (source.shellWorkspaceLaunch)
return DND.DragMotionResult.COPY_DROP;
return DND.DragMotionResult.CONTINUE;
},
acceptDrop : function(source, actor, x, y, time) {
if (source.realWindow) {
let win = source.realWindow;
if (this._isMyWindow(win))
return false;
let metaWindow = win.get_meta_window();
metaWindow.change_workspace_by_index(this.metaWorkspace.index(),
false, // don't create workspace
time);
return true;
} else if (source.shellWorkspaceLaunch) {
source.shellWorkspaceLaunch({ workspace: this.metaWorkspace,
timestamp: time });
return true;
}
return false;
}
};
Signals.addSignalMethods(WorkspaceThumbnail.prototype);

File diff suppressed because it is too large Load Diff

View File

@ -4,9 +4,7 @@ data/org.gnome.accessibility.magnifier.gschema.xml.in
js/misc/util.js
js/ui/appDisplay.js
js/ui/appFavorites.js
js/ui/calendar.js
js/ui/dash.js
js/ui/dateMenu.js
js/ui/docDisplay.js
js/ui/endSessionDialog.js
js/ui/lookingGlass.js

View File

@ -13,14 +13,14 @@ msgstr ""
"Project-Id-Version: gnome-shell MASTER\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&component=general\n"
"POT-Creation-Date: 2011-01-29 18:34+0000\n"
"PO-Revision-Date: 2011-02-01 13:51+0300\n"
"Last-Translator: Mattias Põldaru <mahfiaz gmail com>\n"
"POT-Creation-Date: 2011-01-21 18:46+0000\n"
"PO-Revision-Date: 2011-01-24 08:04+0200\n"
"Last-Translator: Ivar Smolin <okul@linux.ee>\n"
"Language-Team: Estonian <gnome-et@linux.ee>\n"
"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: et\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: Estonian\n"
"X-Poedit-Country: Estonia\n"
@ -242,9 +242,6 @@ msgstr ""
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr "Niitristi moodustavate püst- ja rõhtjoone laius"
msgid "Command not found"
msgstr ""
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
msgid "Could not parse command:"
@ -312,17 +309,17 @@ msgid "Logging out of the system."
msgstr "Süsteemist väljalogimine"
msgid "Shut Down"
msgstr "Lülita välja"
msgstr "Seiska"
msgid "Click Shut Down to quit these applications and shut down the system."
msgstr ""
#, c-format
msgid "The system will shut down automatically in %d seconds."
msgstr "%d sekundi pärast lülitub süsteem automaatselt välja."
msgstr "Süsteem seisatakse automaatselt %d sekundi pärast."
msgid "Shutting down the system."
msgstr "Süsteemi väljalülitamine."
msgstr "Süsteemi seiskamine."
msgid "Restart"
msgstr "Taaskäivita"

170
po/gl.po
View File

@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-02-01 02:40+0100\n"
"PO-Revision-Date: 2011-02-01 02:44+0100\n"
"POT-Creation-Date: 2011-01-27 03:33+0100\n"
"PO-Revision-Date: 2011-01-26 21:02+0100\n"
"Last-Translator: Fran Diéguez <frandieguez@ubuntu.com>\n"
"Language-Team: Galician <gnome-gl-list@gnome.org>\n"
"Language: gl\n"
@ -79,8 +79,8 @@ msgstr "Se é verdadeiro, móstrase a data da semana ISO no calendario."
msgid "List of desktop file IDs for favorite applications"
msgstr "Mostra os ID de ficheiros desktop para os aplicativos preferidos"
#: ../data/org.gnome.shell.gschema.xml.in.h:12
#, no-c-format
#: ../data/org.gnome.shell.gschema.xml.in.h:11
#, fuzzy
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@ -89,35 +89,31 @@ msgid ""
"pipeline can also take care of its own output - this might be used to send "
"the output to an icecast server via shout2send or similar. When unset or set "
"to an empty value, the default pipeline will be used. This is currently "
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
"at the optimal thread count on the system."
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr ""
"Estabelece a tubería GStreamer usada para codificar gravacións. Segue a "
"sintaxe usada para gst-launch. A tubería debería ter un sumideiro («sink») "
"de ensamblaxe/desensamblaxe onde o vídeo gravado se grava. Xeralmente terá "
"unha orixe de ensamblado/desensamblado; a saída dese punto escribirase no "
"ficheiro de saída. Porén, a tubería tamén pode tomar parte na súa propia "
"saída; isto pódese usar para enviar a saída a un servidor «icecast» a través "
"de shout2send ou similar. Cando non está estabelecido ou está a un valor "
"baleiro, usarase a tubería predeterminada. Actualmente é «! vp8enc "
"quality=10 speed=2 threads=%T ! queue ! webmmux'» e grava en WEBM usando o "
"códec VP8. Úsase %T como suposición para o número de fillos óptimos no "
"sistema."
"de ensamblaxe/desensamblaxe onde o vídeo que se está gravando grávase. "
"Xeralmente terá unha orixe de ensamblado/desensamblado; a saída dese punto "
"escribirase no ficheiro de saída. Porén, a tubería tamén pode tomar parte na "
"súa propia saída; isto pódese usar para enviar a saída a un servidor "
"«icecast» a través de shout2send ou similar. Cando non está estabelecido ou "
"está a un valor baleiro, usarase a tubería predeterminada. Actualmente é "
"«videorate ! theoraenc ! oggmux» e grava en Ogg Theora."
#: ../data/org.gnome.shell.gschema.xml.in.h:13
#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "Mostrar a data no reloxo"
#: ../data/org.gnome.shell.gschema.xml.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "Mostrar a data da semana no calendario"
#: ../data/org.gnome.shell.gschema.xml.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "Mostrar a hora con segundos"
#: ../data/org.gnome.shell.gschema.xml.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@ -125,7 +121,7 @@ msgstr ""
"Os aplicativos que corresponden a estes identificadores mostraranse na área "
"de preferidos."
#: ../data/org.gnome.shell.gschema.xml.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@ -135,7 +131,7 @@ msgstr ""
"baseado na data actual e usa esta extensión. Debería cambiar ao grabar nun "
"formato de contedor diferente."
#: ../data/org.gnome.shell.gschema.xml.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -143,11 +139,11 @@ msgstr ""
"A taxa de marcos do screencast resultante grabado polo grabador de "
"screencasts de GNOME Shell en marcos-por-segundo."
#: ../data/org.gnome.shell.gschema.xml.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "A tubería de gstreamer usada para codificar o screencast"
#: ../data/org.gnome.shell.gschema.xml.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@ -159,15 +155,15 @@ msgstr ""
"privados, vostede pode desactivar isto por motivos de privacidade. Teña en "
"conta que facendo isto non eliminará os datos gardados."
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "Os Uuid das extensións a desactivar"
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr "Indica se recoller estatísticas sobre o uso dos aplicativos"
#: ../data/org.gnome.shell.gschema.xml.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "disabled OpenSearch providers"
msgstr "fornecedores de OpenSearch desactivados"
@ -325,47 +321,43 @@ msgstr ""
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr "Anchura das liñas verticais e horizontais que contén o punto de mira."
#: ../js/misc/util.js:86
msgid "Command not found"
msgstr "Orde non atopada"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:113
#: ../js/misc/util.js:108
msgid "Could not parse command:"
msgstr "Non foi posíbel analizar a orde:"
#: ../js/misc/util.js:135
#: ../js/misc/util.js:130
msgid "No such application"
msgstr "Non existe o aplicativo"
#: ../js/misc/util.js:148
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:351
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Produciuse un fallo na execución de «%s»:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:164
#: ../js/ui/appDisplay.js:155
msgid "All"
msgstr "Todos"
#: ../js/ui/appDisplay.js:245
#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "APLICATIVOS"
#: ../js/ui/appDisplay.js:275
#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "PREFERENCIAS"
#: ../js/ui/appDisplay.js:572
#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "Xanela nova"
#: ../js/ui/appDisplay.js:576
#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "Eliminar dos favoritos"
#: ../js/ui/appDisplay.js:577
#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "Engadir aos favoritos"
@ -490,31 +482,71 @@ msgstr "Ver fonte"
msgid "Web Page"
msgstr "Páxina web"
#: ../js/ui/messageTray.js:1786
#: ../js/ui/messageTray.js:1765
msgid "System Information"
msgstr "Información do sistema"
#: ../js/ui/overview.js:88
#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "Desfacer"
#: ../js/ui/overview.js:159
#: ../js/ui/overview.js:140
msgid "Windows"
msgstr "Xanelas"
#: ../js/ui/overview.js:162
#: ../js/ui/overview.js:143
msgid "Applications"
msgstr "Aplicativos"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:480
#: ../js/ui/panel.js:479
#, c-format
msgid "Quit %s"
msgstr "Saír de %s"
#. Translators: This is the time format with date used
#. in 24-hour mode.
#: ../js/ui/panel.js:564
msgid "%a %b %e, %R:%S"
msgstr "%a %e de %b, %R:%S"
#: ../js/ui/panel.js:565
msgid "%a %b %e, %R"
msgstr "%a %e de %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
#: ../js/ui/panel.js:569
msgid "%a %R:%S"
msgstr "%a %R:%S"
#: ../js/ui/panel.js:570
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e de %b, %H:%M:%S"
#: ../js/ui/panel.js:578
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e de %b, %H:%M"
#. Translators: This is a time format without date used
#. for AM/PM.
#: ../js/ui/panel.js:582
msgid "%a %l:%M:%S %p"
msgstr "%a %H:%M:%S"
#: ../js/ui/panel.js:583
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:614
#: ../js/ui/panel.js:728
msgid "Activities"
msgstr "Actividades"
@ -669,7 +701,7 @@ msgstr "Produciuse un erro ao explorar o dispositivo"
msgid "The requested device cannot be browsed, error is '%s'"
msgstr "O dispositivo solicitado non pode explorarse, o erro foi «%s»"
#: ../js/ui/status/bluetooth.js:251
#: ../js/ui/status/bluetooth.js:251 ../js/ui/status/keyboard.js:78
msgid "Keyboard Settings"
msgstr "Configuracións do teclado"
@ -744,10 +776,6 @@ msgstr "Introduza o PIN mencionado no dispositivo."
msgid "OK"
msgstr "Aceptar"
#: ../js/ui/status/keyboard.js:78
msgid "Localization Settings"
msgstr "Configuracións do son"
#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "Configuracións de enerxía"
@ -882,14 +910,14 @@ msgstr "%s rematou de iniarse"
msgid "'%s' is ready"
msgstr "«%s» está preparado"
#: ../js/ui/workspacesView.js:243
#: ../js/ui/workspacesView.js:244
msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached."
msgstr ""
"Non é posíbel engadir unha área de traballo nova porque chegouse ao límite "
"de áreas de traballo."
#: ../js/ui/workspacesView.js:259
#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "Non é posíbel quitar a primeira área de traballo."
@ -915,32 +943,32 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sons do sistema"
#: ../src/shell-global.c:1365
#: ../src/shell-global.c:1366
msgid "Less than a minute ago"
msgstr "Hai menos dun minuto"
#: ../src/shell-global.c:1369
#: ../src/shell-global.c:1370
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "hai %d minuto"
msgstr[1] "hai %d minutos"
#: ../src/shell-global.c:1374
#: ../src/shell-global.c:1375
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "hai %d hora"
msgstr[1] "hai %d horas"
#: ../src/shell-global.c:1379
#: ../src/shell-global.c:1380
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "hai %d día"
msgstr[1] "hai %d días"
#: ../src/shell-global.c:1384
#: ../src/shell-global.c:1385
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@ -971,29 +999,9 @@ msgstr "Buscar"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "%a %b %e, %R:%S"
#~ msgstr "%a %e de %b, %R:%S"
#~ msgid "%a %b %e, %R"
#~ msgstr "%a %e de %b, %R"
#~ msgid "%a %R:%S"
#~ msgstr "%a %R:%S"
#~ msgid "%a %R"
#~ msgstr "%a %R"
#~ msgid "%a %b %e, %l:%M:%S %p"
#~ msgstr "%a %e de %b, %H:%M:%S"
#~ msgid "%a %b %e, %l:%M %p"
#~ msgstr "%a %e de %b, %H:%M"
#~ msgid "%a %l:%M:%S %p"
#~ msgstr "%a %H:%M:%S"
#~ msgid "%a %l:%M %p"
#~ msgstr "%a %l:%M %p"
#~| msgid "Sound Settings"
#~ msgid "Localization Settings"
#~ msgstr "Configuracións do son"
#~ msgid "Clock"
#~ msgstr "Reloxo"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-01-30 23:03+0200\n"
"PO-Revision-Date: 2011-01-30 23:03+0200\n"
"POT-Creation-Date: 2011-01-23 02:42+0200\n"
"PO-Revision-Date: 2011-01-23 02:43+0200\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <he@li.org>\n"
"MIME-Version: 1.0\n"
@ -319,47 +319,43 @@ msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr ""
"Width of the vertical and horizontal lines that make up the crosshairs."
#: ../js/misc/util.js:86
msgid "Command not found"
msgstr "הפקודה לא נמצאה"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:113
#: ../js/misc/util.js:108
msgid "Could not parse command:"
msgstr "לא ניתן לפענח את הפקודה:"
#: ../js/misc/util.js:135
#: ../js/misc/util.js:130
msgid "No such application"
msgstr "אין כזה יישום"
#: ../js/misc/util.js:148
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:351
#, c-format
msgid "Execution of '%s' failed:"
msgstr "ההרצה של '%s' נכשלה:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:164
#: ../js/ui/appDisplay.js:155
msgid "All"
msgstr "הכול"
#: ../js/ui/appDisplay.js:245
#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "יישומים"
#: ../js/ui/appDisplay.js:275
#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "העדפות"
#: ../js/ui/appDisplay.js:572
#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "חלון חדש"
#: ../js/ui/appDisplay.js:576
#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "הסרה מהמועדפים"
#: ../js/ui/appDisplay.js:577
#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "הוספה למועדפים"
@ -480,71 +476,71 @@ msgstr "צפייה במקור"
msgid "Web Page"
msgstr "דף אינטרנט"
#: ../js/ui/messageTray.js:1778
#: ../js/ui/messageTray.js:1765
msgid "System Information"
msgstr "פרטי המערכת"
#: ../js/ui/overview.js:88
#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "ביטול"
#: ../js/ui/overview.js:159
#: ../js/ui/overview.js:140
msgid "Windows"
msgstr "חלונות"
#: ../js/ui/overview.js:162
#: ../js/ui/overview.js:143
msgid "Applications"
msgstr "יישומים"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:479
#: ../js/ui/panel.js:483
#, c-format
msgid "Quit %s"
msgstr "יציאה מ־%s"
#. Translators: This is the time format with date used
#. in 24-hour mode.
#: ../js/ui/panel.js:564
#: ../js/ui/panel.js:568
msgid "%a %b %e, %R:%S"
msgstr "%a %b %e, %R:%S"
#: ../js/ui/panel.js:565
#: ../js/ui/panel.js:569
msgid "%a %b %e, %R"
msgstr "%a %b %e, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
#: ../js/ui/panel.js:569
#: ../js/ui/panel.js:573
msgid "%a %R:%S"
msgstr "%a %R:%S"
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:574
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
#: ../js/ui/panel.js:577
#: ../js/ui/panel.js:581
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %b %e, %l:%M:%S %p"
#: ../js/ui/panel.js:578
#: ../js/ui/panel.js:582
msgid "%a %b %e, %l:%M %p"
msgstr "%a %b %e, %l:%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
#: ../js/ui/panel.js:582
#: ../js/ui/panel.js:586
msgid "%a %l:%M:%S %p"
msgstr "%a %l:%M:%S %p"
#: ../js/ui/panel.js:583
#: ../js/ui/panel.js:587
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:728
#: ../js/ui/panel.js:732
msgid "Activities"
msgstr "פעילויות"
@ -916,12 +912,12 @@ msgstr "%s סיים את תהליך ההתחלה"
msgid "'%s' is ready"
msgstr "'%s' מוכן"
#: ../js/ui/workspacesView.js:243
#: ../js/ui/workspacesView.js:244
msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached."
msgstr "לא ניתן להוסיף מרחבי עבודה כיוון שהם ממלאים את המכסה המרבית."
#: ../js/ui/workspacesView.js:259
#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "לא ניתן להסיר את מרחב העבודה הראשון."
@ -949,11 +945,11 @@ msgstr[2] "2 קלטים"
msgid "System Sounds"
msgstr "צלילי מערכת"
#: ../src/shell-global.c:1365
#: ../src/shell-global.c:1366
msgid "Less than a minute ago"
msgstr "לפני פחות מדקה"
#: ../src/shell-global.c:1369
#: ../src/shell-global.c:1370
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
@ -961,7 +957,7 @@ msgstr[0] "לפני דקה"
msgstr[1] "לפני %d דקות"
msgstr[2] "לפני 2 דקות"
#: ../src/shell-global.c:1374
#: ../src/shell-global.c:1375
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
@ -969,7 +965,7 @@ msgstr[0] "לפני שעה"
msgstr[1] "לפני %d שעות"
msgstr[2] "לפני שעתיים"
#: ../src/shell-global.c:1379
#: ../src/shell-global.c:1380
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
@ -977,7 +973,7 @@ msgstr[0] "לפני יום"
msgstr[1] "לפני %d ימים"
msgstr[2] "לפני יומיים"
#: ../src/shell-global.c:1384
#: ../src/shell-global.c:1385
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"

105
po/it.po
View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-01-29 16:06+0100\n"
"PO-Revision-Date: 2011-01-29 16:06+0100\n"
"POT-Creation-Date: 2011-01-21 01:16+0100\n"
"PO-Revision-Date: 2011-01-15 01:19+0100\n"
"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\n"
@ -76,8 +76,7 @@ msgstr "Se VERO, mostra il giorno della settimana ISO nel calendario."
msgid "List of desktop file IDs for favorite applications"
msgstr "Elenco di ID di file desktop per le applicazioni preferite"
#: ../data/org.gnome.shell.gschema.xml.in.h:12
#, fuzzy, no-c-format
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@ -86,9 +85,7 @@ msgid ""
"pipeline can also take care of its own output - this might be used to send "
"the output to an icecast server via shout2send or similar. When unset or set "
"to an empty value, the default pipeline will be used. This is currently "
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
"at the optimal thread count on the system."
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr ""
"Imposta la pipeline di GStreamer utilizzata per codificare le registrazioni, "
"seguendo la sintassi di gst-launch. La pipeline dovrebbe disporre di un sink "
@ -100,19 +97,19 @@ msgstr ""
"alcun valore, viene usata la pipeline predefinita il cui valore è "
"\"videorate ! theoraenc ! oggmux\" e che registra nel formato Ogg Theora."
#: ../data/org.gnome.shell.gschema.xml.in.h:13
#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "Mostra la data nell'orologio"
#: ../data/org.gnome.shell.gschema.xml.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "Mostra il giorno della settimana nel calendario"
#: ../data/org.gnome.shell.gschema.xml.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "Mostra l'ora con i secondi"
#: ../data/org.gnome.shell.gschema.xml.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@ -120,7 +117,7 @@ msgstr ""
"Le applicazioni che corrispondono a questi identificatori vengono "
"visualizzate nell'area dei preferiti."
#: ../data/org.gnome.shell.gschema.xml.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@ -130,7 +127,7 @@ msgstr ""
"data corrente e utilizza questa estensione. Dovrebbe essere modificato "
"quando si registra utilizzando un diverso formato contenitore."
#: ../data/org.gnome.shell.gschema.xml.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -138,12 +135,12 @@ msgstr ""
"Il framerate in fotogrammi al secondo dello screencast registrato attraverso "
"il registratore della GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "La pipeline di gstreamer utilizzata per codificare lo screencast"
# (ndt) quel "in launchers" non mi convince...
#: ../data/org.gnome.shell.gschema.xml.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@ -155,16 +152,16 @@ msgstr ""
"disabilitare questa funzionalità per motivi di privacy. I dati già salvati "
"non verranno comunque rimossi."
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "UUID delle estensioni da disabilitare"
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr ""
"Indica se raccogliere statistiche riguardo l'utilizzo delle applicazioni"
#: ../data/org.gnome.shell.gschema.xml.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "disabled OpenSearch providers"
msgstr ""
@ -293,47 +290,43 @@ msgstr ""
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr ""
#: ../js/misc/util.js:86
msgid "Command not found"
msgstr ""
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:113
#: ../js/misc/util.js:108
msgid "Could not parse command:"
msgstr "Impossibile analizzare il comando:"
#: ../js/misc/util.js:135
#: ../js/misc/util.js:130
msgid "No such application"
msgstr "Applicazione inesistente"
#: ../js/misc/util.js:148
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:351
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Esecuzione di «%s» non riuscita:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:164
#: ../js/ui/appDisplay.js:155
msgid "All"
msgstr "Tutte"
#: ../js/ui/appDisplay.js:245
#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "APPLICAZIONI"
#: ../js/ui/appDisplay.js:275
#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "PREFERENZE"
#: ../js/ui/appDisplay.js:572
#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "Nuova finestra"
#: ../js/ui/appDisplay.js:576
#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "Rimuovi dai preferiti"
#: ../js/ui/appDisplay.js:577
#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "Aggiungi ai preferiti"
@ -466,72 +459,72 @@ msgstr "Visualizza sorgente"
msgid "Web Page"
msgstr "Pagina web"
#: ../js/ui/messageTray.js:1778
#: ../js/ui/messageTray.js:1765
msgid "System Information"
msgstr "Informazione di sistema"
#: ../js/ui/overview.js:88
#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "Annulla"
#: ../js/ui/overview.js:159
#: ../js/ui/overview.js:140
msgid "Windows"
msgstr "Finestre"
#: ../js/ui/overview.js:162
#: ../js/ui/overview.js:143
msgid "Applications"
msgstr "Applicazioni"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:483
#: ../js/ui/panel.js:479
#, c-format
msgid "Quit %s"
msgstr "Chiudi %s"
#. Translators: This is the time format with date used
#. in 24-hour mode.
#: ../js/ui/panel.js:568
#: ../js/ui/panel.js:564
msgid "%a %b %e, %R:%S"
msgstr "%a %e %b, %k.%M.%S"
# (ndt) proviamo col k, se non funge, sappiamo il perché...
#: ../js/ui/panel.js:569
#: ../js/ui/panel.js:565
msgid "%a %b %e, %R"
msgstr "%a %e %b, %k.%M"
#. Translators: This is the time format without date used
#. in 24-hour mode.
#: ../js/ui/panel.js:573
#: ../js/ui/panel.js:569
msgid "%a %R:%S"
msgstr "%a %k.%M.%S"
#: ../js/ui/panel.js:574
#: ../js/ui/panel.js:570
msgid "%a %R"
msgstr "%a %k.%M"
#. Translators: This is a time format with date used
#. for AM/PM.
#: ../js/ui/panel.js:581
#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e %b, %l.%M.%S %P"
#: ../js/ui/panel.js:582
#: ../js/ui/panel.js:578
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e %b, %l.%M %P"
#. Translators: This is a time format without date used
#. for AM/PM.
#: ../js/ui/panel.js:586
#: ../js/ui/panel.js:582
msgid "%a %l:%M:%S %p"
msgstr "%a %l.%M.%S %P"
#: ../js/ui/panel.js:587
#: ../js/ui/panel.js:583
msgid "%a %l:%M %p"
msgstr "%a %l.%M %P"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:732
#: ../js/ui/panel.js:728
msgid "Activities"
msgstr "Attività"
@ -560,7 +553,7 @@ msgstr "RISORSE E DISPOSITIVI"
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:33
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:209
msgid "Please enter a command:"
@ -690,7 +683,7 @@ msgstr "Errore nell'esplorare il dispositivo"
msgid "The requested device cannot be browsed, error is '%s'"
msgstr "Non è possibile esplorare il dispositivo richiesto, l'errore è «%s»"
#: ../js/ui/status/bluetooth.js:251
#: ../js/ui/status/bluetooth.js:251 ../js/ui/status/keyboard.js:78
msgid "Keyboard Settings"
msgstr "Impostazioni tastiera"
@ -765,10 +758,6 @@ msgstr "Inserire il PIN indicato sul dispositivo."
msgid "OK"
msgstr "OK"
#: ../js/ui/status/keyboard.js:78
msgid "Localization Settings"
msgstr "Impostazioni localizzazione"
#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "Impostazioni alimentazione"
@ -907,14 +896,14 @@ msgid "'%s' is ready"
msgstr "«%s» è pronto"
# (ndt) un po' liberetta...
#: ../js/ui/workspacesView.js:243
#: ../js/ui/workspacesView.js:244
msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached."
msgstr ""
"Impossibile aggiungere un nuovo spazio di lavoro: raggiunto il limite "
"massimo consentito."
#: ../js/ui/workspacesView.js:259
#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "Impossibile rimuovere il primo spazio di lavoro."
@ -940,32 +929,32 @@ msgstr[1] "%u ingressi"
msgid "System Sounds"
msgstr "Audio di sistema"
#: ../src/shell-global.c:1365
#: ../src/shell-global.c:1366
msgid "Less than a minute ago"
msgstr "Meno di un minuto fa"
#: ../src/shell-global.c:1369
#: ../src/shell-global.c:1370
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d minuto fa"
msgstr[1] "%d minuti fa"
#: ../src/shell-global.c:1374
#: ../src/shell-global.c:1375
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d ora fa"
msgstr[1] "%d ore fa"
#: ../src/shell-global.c:1379
#: ../src/shell-global.c:1380
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d giorno fa"
msgstr[1] "%d giorni fa"
#: ../src/shell-global.c:1384
#: ../src/shell-global.c:1385
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"

209
po/nb.po
View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 2.91.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-02-02 20:31+0100\n"
"PO-Revision-Date: 2011-02-02 20:34+0100\n"
"POT-Creation-Date: 2011-01-25 20:46+0100\n"
"PO-Revision-Date: 2011-01-25 20:47+0100\n"
"Last-Translator: Torstein Adolf Winterseth <kvikende@fsfe.org>\n"
"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: \n"
@ -268,21 +268,17 @@ msgstr ""
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr ""
#: ../js/misc/util.js:86
msgid "Command not found"
msgstr "Kommando ikke funnet"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:113
#: ../js/misc/util.js:108
msgid "Could not parse command:"
msgstr "Klarte ikke å lese kommando:"
#: ../js/misc/util.js:135
#: ../js/misc/util.js:130
msgid "No such application"
msgstr "Programmet finnes ikke"
#: ../js/misc/util.js:148
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:351
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Kjøring av «%s» feilet:"
@ -322,142 +318,10 @@ msgstr "%s ble lagt til i dine favoritter."
msgid "%s has been removed from your favorites."
msgstr "%s ble fjernet fra dine favoritter."
#. Translators: Shown in calendar event list for all day events
#: ../js/ui/calendar.js:62
msgid "All Day"
msgstr "Hele dagen"
#. Translators: Calendar grid abbreviation for Sunday.
#. *
#. * NOTE: These abbreviations are always shown together and in
#. * order, e.g. "S M T W T F S".
#.
#. Translators: Calendar grid abbreviation for Saturday
#. Translators: Event list abbreviation for Saturday
#: ../js/ui/calendar.js:112 ../js/ui/calendar.js:124 ../js/ui/calendar.js:149
msgid "S"
msgstr "S"
#. Translators: Calendar grid abbreviation for Monday
#. Translators: Event list abbreviation for Monday
#: ../js/ui/calendar.js:114 ../js/ui/calendar.js:139
msgid "M"
msgstr "M"
#. Translators: Calendar grid abbreviation for Tuesday
#. Translators: Calendar grid abbreviation for Thursday
#. Translators: Event list abbreviation for Tuesday
#: ../js/ui/calendar.js:116 ../js/ui/calendar.js:120 ../js/ui/calendar.js:141
msgid "T"
msgstr "T"
#. Translators: Calendar grid abbreviation for Wednesday
#. Translators: Event list abbreviation for Wednesday
#: ../js/ui/calendar.js:118 ../js/ui/calendar.js:143
msgid "W"
msgstr "O"
#. Translators: Calendar grid abbreviation for Friday
#. Translators: Event list abbreviation for Friday
#: ../js/ui/calendar.js:122 ../js/ui/calendar.js:147
msgid "F"
msgstr "F"
#. Translators: Event list abbreviation for Sunday.
#. *
#. * NOTE: These abbreviations are normally not shown together
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T').
#.
#: ../js/ui/calendar.js:137
msgid "Su"
msgstr "Sø"
#. Translators: Event list abbreviation for Thursday
#: ../js/ui/calendar.js:145
msgid "Th"
msgstr "To"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:696
msgid "Nothing Scheduled"
msgstr "Ingenting planlagt"
#: ../js/ui/calendar.js:723
msgid "Today"
msgstr "I dag"
#: ../js/ui/calendar.js:727
msgid "Tomorrow"
msgstr "I morgen"
#: ../js/ui/calendar.js:736
msgid "This week"
msgstr "Denne uken"
#: ../js/ui/calendar.js:744
msgid "Next week"
msgstr "Neste uke"
#: ../js/ui/dash.js:27
msgid "Remove"
msgstr "Fjern"
#: ../js/ui/dateMenu.js:91
msgid "Date and Time Settings"
msgstr "Innstillinger for dato og klokkeslett"
#: ../js/ui/dateMenu.js:110
msgid "Open Calendar"
msgstr "Åpne kalender"
#. Translators: This is the time format with date used
#. in 24-hour mode.
#: ../js/ui/dateMenu.js:149
msgid "%a %b %e, %R:%S"
msgstr "%a %e %b, %R.%S"
#: ../js/ui/dateMenu.js:150
msgid "%a %b %e, %R"
msgstr "%a %e %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
#: ../js/ui/dateMenu.js:154
msgid "%a %R:%S"
msgstr "%a %R.%S"
#: ../js/ui/dateMenu.js:155
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
#: ../js/ui/dateMenu.js:162
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e %b, %l.%M.%S %p"
#: ../js/ui/dateMenu.js:163
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e %b, %l.%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
#: ../js/ui/dateMenu.js:167
msgid "%a %l:%M:%S %p"
msgstr "%a %l.%M.%S %p"
#: ../js/ui/dateMenu.js:168
msgid "%a %l:%M %p"
msgstr "%a %l.%M %p"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:194
msgid "%A %B %e, %Y"
msgstr "%a %e %B, %Y"
#: ../js/ui/docDisplay.js:18
msgid "RECENT ITEMS"
msgstr "SISTE OPPFØRINGER"
@ -473,8 +337,7 @@ msgstr "Logg ut …"
#: ../js/ui/endSessionDialog.js:65
msgid "Click Log Out to quit these applications and log out of the system."
msgstr ""
"Klikk Logg ut for å avslutte disse programmene og logge ut av systemet."
msgstr "Klikk Logg ut for å avslutte disse programmene og logge ut av systemet."
#: ../js/ui/endSessionDialog.js:66
#, c-format
@ -513,9 +376,7 @@ msgstr "Start på nytt"
#: ../js/ui/endSessionDialog.js:85
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
"Klikk Start på nytt for å avslutte disse programmene og starte systemet på "
"nytt."
msgstr "Klikk Start på nytt for å avslutte disse programmene og starte systemet på nytt."
#: ../js/ui/endSessionDialog.js:86
#, c-format
@ -564,7 +425,7 @@ msgstr "Vis kildekode"
msgid "Web Page"
msgstr "Nettside"
#: ../js/ui/messageTray.js:1809
#: ../js/ui/messageTray.js:1765
msgid "System Information"
msgstr "Systeminformasjon"
@ -581,14 +442,54 @@ msgid "Applications"
msgstr "Programmer"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:480
#: ../js/ui/panel.js:483
#, c-format
msgid "Quit %s"
msgstr "Avslutt %s"
#. Translators: This is the time format with date used
#. in 24-hour mode.
#: ../js/ui/panel.js:568
msgid "%a %b %e, %R:%S"
msgstr "%a %e %b, %R.%S"
#: ../js/ui/panel.js:569
msgid "%a %b %e, %R"
msgstr "%a %e %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
#: ../js/ui/panel.js:573
msgid "%a %R:%S"
msgstr "%a %R.%S"
#: ../js/ui/panel.js:574
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
#: ../js/ui/panel.js:581
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e %b, %l.%M.%S %p"
#: ../js/ui/panel.js:582
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e %b, %l.%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
#: ../js/ui/panel.js:586
msgid "%a %l:%M:%S %p"
msgstr "%a %l.%M.%S %p"
#: ../js/ui/panel.js:587
msgid "%a %l:%M %p"
msgstr "%a %l.%M %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:614
#: ../js/ui/panel.js:732
msgid "Activities"
msgstr "Aktiviteter"
@ -914,22 +815,22 @@ msgstr "Volum"
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/telepathyClient.js:563
#: ../js/ui/telepathyClient.js:561
#, c-format
msgid "%s is online."
msgstr "%s er tilkoblet."
#: ../js/ui/telepathyClient.js:568
#: ../js/ui/telepathyClient.js:566
#, c-format
msgid "%s is offline."
msgstr "%s er frakoblet."
#: ../js/ui/telepathyClient.js:571
#: ../js/ui/telepathyClient.js:569
#, c-format
msgid "%s is away."
msgstr "«%s» er borte."
#: ../js/ui/telepathyClient.js:574
#: ../js/ui/telepathyClient.js:572
#, c-format
msgid "%s is busy."
msgstr "%s er opptatt."
@ -937,7 +838,7 @@ msgstr "%s er opptatt."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:668
#: ../js/ui/telepathyClient.js:666
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Sendt %X på %A"

341
po/pa.po
View File

@ -7,8 +7,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
"cgi?product=gnome-shell&component=general\n"
"POT-Creation-Date: 2011-02-02 12:03+0000\n"
"PO-Revision-Date: 2011-02-03 08:24+0530\n"
"POT-Creation-Date: 2011-01-15 00:23+0000\n"
"PO-Revision-Date: 2011-01-16 11:07+0530\n"
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
"MIME-Version: 1.0\n"
@ -74,8 +74,7 @@ msgstr "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਕੈਲੰਡਰ ਵਿੱਚ
msgid "List of desktop file IDs for favorite applications"
msgstr "ਪਸੰਦੀਦਾ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਡੈਸਕਟਾਪ ਫਾਇਲ ID ਦੀ ਲਿਸਟ ਹੈ"
#: ../data/org.gnome.shell.gschema.xml.in.h:12
#, no-c-format
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@ -84,31 +83,29 @@ msgid ""
"pipeline can also take care of its own output - this might be used to send "
"the output to an icecast server via shout2send or similar. When unset or set "
"to an empty value, the default pipeline will be used. This is currently "
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
"at the optimal thread count on the system."
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:13
#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "ਘੜੀ ਵਿੱਚ ਮਿਤੀ ਵੇਖੋ"
#: ../data/org.gnome.shell.gschema.xml.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "ਕੈਲੰਡਰ ਵਿੱਚ ਹਫ਼ਤਾ ਮਿਤੀ ਵੇਖੋ"
#: ../data/org.gnome.shell.gschema.xml.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "ਸਮਾਂ ਵਿੱਚ ਸਕਿੰਟ ਵੇਖੋ"
#: ../data/org.gnome.shell.gschema.xml.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr ""
"ਇਹਨਾਂ ਐਂਡਟਟੀਫਾਇਰ ਨਾਲ ਸਬੰਧਿਤ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਪਸੰਦੀਦਾ ਖੇਤਰ 'ਚ ਵੇਖਾਇਆ ਜਾਵੇਗਾ।"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@ -120,7 +117,7 @@ msgstr ""
"ਰਿਕਾਰਡ ਕੀਤਾ "
"ਜਾਵੇਗਾ।"
#: ../data/org.gnome.shell.gschema.xml.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -129,11 +126,11 @@ msgstr ""
"ਫਰੇਮ ਪ੍ਰਤੀ "
"ਸਕਿੰਟ 'ਚ ਹੈ।"
#: ../data/org.gnome.shell.gschema.xml.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "ਸਕਰੀਨਕਾਸਟ ਇੰਕੋਡ ਕਰਨ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਜੀਸਟਰੀਮਰ ਪਾਇਪਲਾਇਨ"
#: ../data/org.gnome.shell.gschema.xml.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@ -148,18 +145,14 @@ msgstr ""
"ਕਰਨ ਨਾਲ ਪਹਿਲਾਂ "
"ਸੰਭਾਲਿਆ ਗਿਆ ਡਾਟਾ ਹਟਾਇਆ ਨਹੀਂ ਜਾਵੇਗਾ।"
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "ਇਕਟੈਨਸ਼ਨ ਦੀ Uuids ਬੰਦ ਹੈ"
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵਰਤੋਂ ਬਾਰੇ ਅੰਕੜੇ ਇੱਕਠੇ ਕਰਨੇ ਹਨ"
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "disabled OpenSearch providers"
msgstr "ਓਪਨਸਰਚ ਉਪਲੱਬਧ ਕਰਵਾਉਣ ਵਾਲੇ ਬੰਦ ਹਨ"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
msgid "Clip the crosshairs at the center"
msgstr "ਸੈਂਟਰ ਉੱਤੇ ਕਰਾਂਸਹੇਅਰ ਕਲਿੱਪ ਕਰੋ"
@ -297,47 +290,45 @@ msgstr ""
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr "ਵਰਟੀਕਲ ਤੇ ਹਰੀਜੱਟਲ ਲਾਈਨਾਂ ਦੀ ਚੌੜਾਈ, ਜੋ ਕਿ ਕਰਾਂਸਹੇਅਰ ਬਣਾਉਂਦੀਆਂ ਹਨ"
#: ../js/misc/util.js:86
msgid "Command not found"
msgstr "ਕਮਾਂਡ ਨਹੀਂ ਲੱਭੀ"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:113
#: ../js/misc/util.js:108
#| msgid "Please enter a command:"
msgid "Could not parse command:"
msgstr "ਕਮਾਂਡ ਪਾਰਸ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ:"
#: ../js/misc/util.js:135
#: ../js/misc/util.js:130
#| msgid "Applications"
msgid "No such application"
msgstr "ਇੰਞ ਦੀ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਹੈ"
#: ../js/misc/util.js:148
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:364
#, c-format
msgid "Execution of '%s' failed:"
msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:164
#: ../js/ui/appDisplay.js:155
msgid "All"
msgstr "ਸਭ"
#: ../js/ui/appDisplay.js:245
#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
#: ../js/ui/appDisplay.js:275
#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "ਪਸੰਦ"
#: ../js/ui/appDisplay.js:572
#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "ਨਵੀਂ ਵਿੰਡੋ"
#: ../js/ui/appDisplay.js:576
#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
#: ../js/ui/appDisplay.js:577
#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "ਪਸੰਦ 'ਚ ਸ਼ਾਮਲ ਕਰੋ"
@ -351,155 +342,22 @@ msgstr "%s ਨੂੰ ਤੁਹਾਡੀ ਪਸੰਦ ਵਿੱਚ ਸ਼ਾਮ
msgid "%s has been removed from your favorites."
msgstr "%s ਨੂੰ ਤੁਹਾਡੀ ਪਸੰਦ ਤੋਂ ਹਟਾਇਆ ਜਾ ਚੁੱਕਿਆ ਹੈ।"
#. Translators: Shown in calendar event list for all day events
#: ../js/ui/calendar.js:62
#| msgid "All"
msgid "All Day"
msgstr "ਸਭ ਦਿਨ"
#. Translators: Calendar grid abbreviation for Sunday.
#. *
#. * NOTE: These abbreviations are always shown together and in
#. * order, e.g. "S M T W T F S".
#.
#. Translators: Calendar grid abbreviation for Saturday
#. Translators: Event list abbreviation for Saturday
#: ../js/ui/calendar.js:112 ../js/ui/calendar.js:124 ../js/ui/calendar.js:149
msgid "S"
msgstr "ਐ"
#. Translators: Calendar grid abbreviation for Monday
#. Translators: Event list abbreviation for Monday
#: ../js/ui/calendar.js:114 ../js/ui/calendar.js:139
msgid "M"
msgstr "ਸੋ"
#. Translators: Calendar grid abbreviation for Tuesday
#. Translators: Calendar grid abbreviation for Thursday
#. Translators: Event list abbreviation for Tuesday
#: ../js/ui/calendar.js:116 ../js/ui/calendar.js:120 ../js/ui/calendar.js:141
msgid "T"
msgstr "ਮੰ"
#. Translators: Calendar grid abbreviation for Wednesday
#. Translators: Event list abbreviation for Wednesday
#: ../js/ui/calendar.js:118 ../js/ui/calendar.js:143
msgid "W"
msgstr "ਬੁੱ"
#. Translators: Calendar grid abbreviation for Friday
#. Translators: Event list abbreviation for Friday
#: ../js/ui/calendar.js:122 ../js/ui/calendar.js:147
msgid "F"
msgstr "ਸ਼ੁੱ"
#. Translators: Event list abbreviation for Sunday.
#. *
#. * NOTE: These abbreviations are normally not shown together
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T').
#.
#: ../js/ui/calendar.js:137
msgid "Su"
msgstr "ਐ"
#. Translators: Event list abbreviation for Thursday
#: ../js/ui/calendar.js:145
msgid "Th"
msgstr "ਵੀ"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:696
msgid "Nothing Scheduled"
msgstr "ਕੋਈ ਵੀ ਸੈਡਿਊਲ ਨਹੀਂ ਹੈ"
#: ../js/ui/calendar.js:723
msgid "Today"
msgstr "ਅੱਜ"
#: ../js/ui/calendar.js:727
msgid "Tomorrow"
msgstr "ਭਲਕ"
#: ../js/ui/calendar.js:736
msgid "This week"
msgstr "ਇਹ ਹਫ਼ਤਾ"
#: ../js/ui/calendar.js:744
msgid "Next week"
msgstr "ਹਫ਼ਤਾ ਅੱਗੇ"
#: ../js/ui/dash.js:27
msgid "Remove"
msgstr "ਹਟਾਓ"
#: ../js/ui/dateMenu.js:91
#| msgid "System Settings"
msgid "Date and Time Settings"
msgstr "ਮਿਤੀ ਤੇ ਸਮਾਂ ਸੈਟਿੰਗ"
#: ../js/ui/dateMenu.js:110
msgid "Open Calendar"
msgstr "ਕੈਲੰਡਰ ਖੋਲ੍ਹੋ"
#. Translators: This is the time format with date used
#. in 24-hour mode.
#: ../js/ui/dateMenu.js:149
msgid "%a %b %e, %R:%S"
msgstr "%a, %e %b %R:%S"
#: ../js/ui/dateMenu.js:150
msgid "%a %b %e, %R"
msgstr "%a %e %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
#: ../js/ui/dateMenu.js:154
msgid "%a %R:%S"
msgstr "%a %R:%S"
#: ../js/ui/dateMenu.js:155
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
#: ../js/ui/dateMenu.js:162
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e %b, %l:%M:%S %p"
#: ../js/ui/dateMenu.js:163
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e %b, %l:%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
#: ../js/ui/dateMenu.js:167
msgid "%a %l:%M:%S %p"
msgstr "%a %l:%M:%S %p"
#: ../js/ui/dateMenu.js:168
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:194
#| msgid "%a %b %e, %R"
msgid "%A %B %e, %Y"
msgstr "%A, %e %B %Y"
#: ../js/ui/docDisplay.js:18
msgid "RECENT ITEMS"
msgstr "ਤਾਜ਼ਾ ਆਈਟਮਾਂ"
#: ../js/ui/endSessionDialog.js:63
#, c-format
#| msgid "Log Out..."
msgid "Log Out %s"
msgstr "%s ਲਾਗਆਉਟ"
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
#| msgid "Log Out..."
msgid "Log Out"
msgstr "ਲਾਗਆਉਟ"
@ -523,6 +381,7 @@ msgid "Logging out of the system."
msgstr "ਸਿਸਟਮ ਲਾਗ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
#| msgid "Shut Down..."
msgid "Shut Down"
msgstr "ਬੰਦ ਕਰੋ"
@ -540,6 +399,7 @@ msgid "Shutting down the system."
msgstr "ਸਿਸਟਮ ਬੰਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
#| msgid "Restart..."
msgid "Restart"
msgstr "ਮੁੜ-ਚਾਲੂ ਕਰੋ"
@ -561,7 +421,7 @@ msgstr "ਸਿਸਟਮ ਮੁੜ-ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ
msgid "Confirm"
msgstr "ਪੁਸ਼ਟੀ"
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:469
msgid "Cancel"
msgstr "ਰੱਦ ਕਰੋ"
@ -595,48 +455,89 @@ msgstr "ਸਰੋਤ ਵੇਖੋ"
msgid "Web Page"
msgstr "ਵੈੱਬ ਪੇਜ਼"
#: ../js/ui/messageTray.js:1809
#: ../js/ui/messageTray.js:1748
#| msgid "Account Information..."
msgid "System Information"
msgstr "ਸਿਸਟਮ ਜਾਣਕਾਰੀ"
#: ../js/ui/overview.js:88
#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "ਵਾਪਸ"
#: ../js/ui/overview.js:159
#: ../js/ui/overview.js:140
msgid "Windows"
msgstr "ਵਿੰਡੋ"
#: ../js/ui/overview.js:162
#: ../js/ui/overview.js:143
msgid "Applications"
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:480
#: ../js/ui/panel.js:479
#, c-format
msgid "Quit %s"
msgstr "%s ਬੰਦ ਕਰੋ"
#. Translators: This is the time format with date used
#. in 24-hour mode.
#: ../js/ui/panel.js:564
msgid "%a %b %e, %R:%S"
msgstr "%a, %e %b %R:%S"
#: ../js/ui/panel.js:565
msgid "%a %b %e, %R"
msgstr "%a %e %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
#: ../js/ui/panel.js:569
msgid "%a %R:%S"
msgstr "%a %R:%S"
#: ../js/ui/panel.js:570
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e %b, %l:%M:%S %p"
#: ../js/ui/panel.js:578
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e %b, %l:%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
#: ../js/ui/panel.js:582
msgid "%a %l:%M:%S %p"
msgstr "%a %l:%M:%S %p"
#: ../js/ui/panel.js:583
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:614
#: ../js/ui/panel.js:728
msgid "Activities"
msgstr "ਸਰਗਰਮੀਆਂ"
#: ../js/ui/placeDisplay.js:106
#: ../js/ui/placeDisplay.js:112
#, c-format
msgid "Failed to unmount '%s'"
msgstr "'%s' ਅਣ-ਮਾਊਂਟ ਕਰਨ ਲਈ ਫੇਲ੍ਹ"
#: ../js/ui/placeDisplay.js:109
#: ../js/ui/placeDisplay.js:115
msgid "Retry"
msgstr "ਮੁੜ-ਕੋਸ਼ਿਸ਼"
#: ../js/ui/placeDisplay.js:150
#: ../js/ui/placeDisplay.js:160
msgid "Connect to..."
msgstr "...ਨਾਲ ਕੁਨੈਕਟ ਕਰੋ"
#: ../js/ui/placeDisplay.js:386
#: ../js/ui/placeDisplay.js:559
msgid "PLACES & DEVICES"
msgstr "ਥਾਵਾਂ ਤੇ ਜੰਤਰ"
@ -649,7 +550,7 @@ msgstr "ਥਾਵਾਂ ਤੇ ਜੰਤਰ"
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
#: ../js/ui/runDialog.js:209
#: ../js/ui/runDialog.js:222
msgid "Please enter a command:"
msgstr "ਕਮਾਂਡ ਦਿਓ ਜੀ:"
@ -733,7 +634,7 @@ msgstr "ਵੱਧ ਕਨਟਰਾਸਟ"
msgid "Large Text"
msgstr "ਵੱਡੇ ਅੱਖਰ"
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
msgid "Bluetooth"
msgstr "ਬਲਿਊਟੁੱਥ"
@ -749,110 +650,106 @@ msgstr "...ਜੰਤਰ ਨੂੰ ਫਾਇਲਾਂ ਭੇਜੋ"
msgid "Setup a New Device..."
msgstr "...ਨਵਾਂ ਜੰਤਰ ਸੈਟਅੱਪ"
#: ../js/ui/status/bluetooth.js:95
#: ../js/ui/status/bluetooth.js:94
msgid "Bluetooth Settings"
msgstr "ਬਲਿਊਟੁੱਥ ਸੈਟਿੰਗ"
#: ../js/ui/status/bluetooth.js:192
#: ../js/ui/status/bluetooth.js:191
msgid "Connection"
msgstr "ਕੁਨੈਕਸ਼ਨ"
#: ../js/ui/status/bluetooth.js:228
#: ../js/ui/status/bluetooth.js:227
msgid "Send Files..."
msgstr "...ਫਾਇਲਾਂ ਭੇਜੋ"
#: ../js/ui/status/bluetooth.js:233
#: ../js/ui/status/bluetooth.js:232
msgid "Browse Files..."
msgstr "...ਫਾਇਲਾਂ ਦੀ ਝਲਕ"
#: ../js/ui/status/bluetooth.js:242
#: ../js/ui/status/bluetooth.js:241
msgid "Error browsing device"
msgstr "ਜੰਤਰ ਬਰਾਊਜ਼ ਕਰਨ ਲਈ ਗਲਤੀ"
#: ../js/ui/status/bluetooth.js:243
#: ../js/ui/status/bluetooth.js:242
#, c-format
msgid "The requested device cannot be browsed, error is '%s'"
msgstr "ਮੰਗ ਕੀਤੇ ਗਏ ਜੰਤਰ ਨੂੰ ਬਰਾਊਜ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ, ਗਲਤੀ ਸੀ '%s'"
#: ../js/ui/status/bluetooth.js:251
#: ../js/ui/status/bluetooth.js:250 ../js/ui/status/keyboard.js:78
msgid "Keyboard Settings"
msgstr "ਕੀਬੋਰਡ ਸੈਟਿੰਗ"
#: ../js/ui/status/bluetooth.js:256
#: ../js/ui/status/bluetooth.js:255
msgid "Mouse Settings"
msgstr "ਮਾਊਸ ਸੈਟਿੰਗ"
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:63
#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:63
msgid "Sound Settings"
msgstr "ਸਾਊਂਡ ਸੈਟਿੰਗ"
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
msgid "Bluetooth Agent"
msgstr "ਬਲਿਊਟੁੱਥ ਏਜੰਟ"
#: ../js/ui/status/bluetooth.js:372
#: ../js/ui/status/bluetooth.js:371
#, c-format
msgid "Authorization request from %s"
msgstr "'%s' ਤੋਂ ਪਰਮਾਣਕਿਤਾ ਮੰਗ"
#: ../js/ui/status/bluetooth.js:378
#: ../js/ui/status/bluetooth.js:377
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "ਜੰਤਰ %s ਸਰਵਿਸ '%s' ਨੂੰ ਵਰਤਣੀ ਚਾਹੁੰਦਾ ਹੈ।"
#: ../js/ui/status/bluetooth.js:380
#: ../js/ui/status/bluetooth.js:379
msgid "Always grant access"
msgstr "ਹਮੇਸ਼ਾ ਪਹੁੰਚ ਮਨਜ਼ੂਰ"
#: ../js/ui/status/bluetooth.js:381
#: ../js/ui/status/bluetooth.js:380
msgid "Grant this time only"
msgstr "ਕੇਵਲ ਇਸ ਸਮੇਂ ਹੀ ਮਨਜ਼ੂਰ"
#: ../js/ui/status/bluetooth.js:382
#: ../js/ui/status/bluetooth.js:381
msgid "Reject"
msgstr "ਨਾ-ਮਨਜ਼ੂਰ"
#: ../js/ui/status/bluetooth.js:412
#: ../js/ui/status/bluetooth.js:411
#, c-format
msgid "Pairing confirmation for %s"
msgstr "%s ਲਈ ਪੇਅਰ ਕਰਨ ਦੀ ਪੁਸ਼ਟੀ"
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "ਜੰਤਰ %s ਇਸ ਕੰਪਿਊਟਰ ਨਾਲ ਪੇਅਰ ਹੋਣਾ ਚਾਹੁੰਦਾ ਹੈ"
#: ../js/ui/status/bluetooth.js:419
#: ../js/ui/status/bluetooth.js:418
#, c-format
msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgstr "ਪੁਸ਼ਟੀ ਕਰੋ ਜੀ ਕਿ ਪਿੰਨ '%s' ਜੰਤਰ ਉੱਤੇ ਮੌਜੂਦ ਪਿੰਨ ਨਾਲ ਮਿਲਦਾ ਹੈ।"
#: ../js/ui/status/bluetooth.js:421
#: ../js/ui/status/bluetooth.js:420
msgid "Matches"
msgstr "ਮਿਲਦਾ ਹੈ"
#: ../js/ui/status/bluetooth.js:422
#: ../js/ui/status/bluetooth.js:421
msgid "Does not match"
msgstr "ਮਿਲਦਾ ਨਹੀਂ ਹੈ"
#: ../js/ui/status/bluetooth.js:445
#: ../js/ui/status/bluetooth.js:444
#, c-format
msgid "Pairing request for %s"
msgstr "%s ਲਈ ਪੇਅਰ ਕਰਨ ਦੀ ਮੰਗ"
#: ../js/ui/status/bluetooth.js:453
#: ../js/ui/status/bluetooth.js:452
msgid "Please enter the PIN mentioned on the device."
msgstr "ਜੰਤਰ ਉੱਤੇ ਦਿੱਤਾ ਗਿਆ ਪਿੰਨ ਦਿਉ ਜੀ।"
#: ../js/ui/status/bluetooth.js:469
#: ../js/ui/status/bluetooth.js:468
msgid "OK"
msgstr "ਠੀਕ ਹੈ"
#: ../js/ui/status/keyboard.js:78
msgid "Localization Settings"
msgstr "ਲੋਕਲਾਈਜ਼ੇਸ਼ਨ ਸੈਟਿੰਗ"
#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "ਪਾਵਰ ਸੈਟਿੰਗ"
@ -945,22 +842,22 @@ msgstr "ਆਵਾਜ਼"
msgid "Microphone"
msgstr "ਮਾਈਕਰੋਫੋਨ"
#: ../js/ui/telepathyClient.js:563
#: ../js/ui/telepathyClient.js:561
#, c-format
msgid "%s is online."
msgstr "%s ਆਨਲਾਈਨ ਹੈ।"
#: ../js/ui/telepathyClient.js:568
#: ../js/ui/telepathyClient.js:566
#, c-format
msgid "%s is offline."
msgstr "%s ਆਫਲਾਈਨ ਹੈ।"
#: ../js/ui/telepathyClient.js:571
#: ../js/ui/telepathyClient.js:569
#, c-format
msgid "%s is away."
msgstr "%s ਦੂਰ ਹੈ।"
#: ../js/ui/telepathyClient.js:574
#: ../js/ui/telepathyClient.js:572
#, c-format
msgid "%s is busy."
msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।"
@ -968,7 +865,7 @@ msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:668
#: ../js/ui/telepathyClient.js:666
#, no-c-format
msgid "Sent at %X on %A"
msgstr "%2$A ਨੂੰ %1$X ਵਜੇ ਭੇਜਿਆ"
@ -987,14 +884,14 @@ msgstr "%s ਸ਼ੁਰੂ ਹੋਣਾ ਖਤਮ ਹੋਇਆ"
msgid "'%s' is ready"
msgstr "'%s' ਤਿਆਰ ਹੈ"
#: ../js/ui/workspacesView.js:243
#: ../js/ui/workspacesView.js:244
msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached."
msgstr ""
"ਨਵਾਂ ਵਰਕਸਪੇਸ ਜੋੜਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ, ਕਿਉਂਕਿ ਵਰਕਸਪੇਸਾਂ ਦੀ ਵੱਧੋ-ਵੱਧ ਗਿਣਤੀ ਪੂਰੀ ਹੋ "
"ਚੁੱਕੀ ਹੈ।"
#: ../js/ui/workspacesView.js:259
#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "ਪਹਿਲਾਂ ਵਰਕਸਪੇਸ ਨਹੀਂ ਹਟਾਇਆ ਜਾ ਸਕਦਾ।"
@ -1020,32 +917,32 @@ msgstr[1] "%u ਇੰਪੁੱਟ"
msgid "System Sounds"
msgstr "ਸਿਸਟਮ ਸਾਊਂਡ"
#: ../src/shell-global.c:1365
#: ../src/shell-global.c:1233
msgid "Less than a minute ago"
msgstr "ਇੱਕ ਮਿੰਟ ਤੋਂ ਘੱਟ ਚਿਰ ਪਹਿਲਾਂ"
#: ../src/shell-global.c:1369
#: ../src/shell-global.c:1237
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
msgstr[1] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
#: ../src/shell-global.c:1374
#: ../src/shell-global.c:1242
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d ਘੰਟਾ ਪਹਿਲਾਂ"
msgstr[1] "%d ਘੰਟੇ ਪਹਿਲਾਂ"
#: ../src/shell-global.c:1379
#: ../src/shell-global.c:1247
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d ਦਿਨ ਪਹਿਲਾਂ"
msgstr[1] "%d ਦਿਨ ਪਹਿਲਾਂ"
#: ../src/shell-global.c:1384
#: ../src/shell-global.c:1252
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"

View File

@ -411,8 +411,6 @@ shell_app_activate_window (ShellApp *app,
/**
* shell_app_activate:
* @app: a #ShellApp
* @workspace: launch on this workspace, or -1 for default. Ignored if
* activating an existing window
*
* Perform an appropriate default action for operating on this application,
* dependent on its current state. For example, if the application is not
@ -421,19 +419,13 @@ shell_app_activate_window (ShellApp *app,
* recently used transient for that window).
*/
void
shell_app_activate (ShellApp *app,
int workspace)
shell_app_activate (ShellApp *app)
{
switch (app->state)
{
case SHELL_APP_STATE_STOPPED:
/* TODO sensibly handle this error */
shell_app_info_launch_full (app->info,
0,
NULL,
workspace,
NULL,
NULL);
shell_app_info_launch (app->info, NULL);
break;
case SHELL_APP_STATE_STARTING:
break;
@ -446,13 +438,11 @@ shell_app_activate (ShellApp *app,
/**
* shell_app_open_new_window:
* @app: a #ShellApp
* @workspace: open on this workspace, or -1 for default
*
* Request that the application create a new window.
*/
void
shell_app_open_new_window (ShellApp *app,
int workspace)
shell_app_open_new_window (ShellApp *app)
{
/* Here we just always launch the application again, even if we know
* it was already running. For most applications this
@ -462,12 +452,7 @@ shell_app_open_new_window (ShellApp *app,
* as say Pidgin. Ideally, we have the application express to us
* that it supports an explicit new-window action.
*/
shell_app_info_launch_full (app->info,
0,
NULL,
workspace,
NULL,
NULL);
shell_app_info_launch (app->info, NULL);
}
/**

View File

@ -44,11 +44,9 @@ gboolean shell_app_is_transient (ShellApp *app);
void shell_app_activate_window (ShellApp *app, MetaWindow *window, guint32 timestamp);
void shell_app_activate (ShellApp *app,
int workspace);
void shell_app_activate (ShellApp *app);
void shell_app_open_new_window (ShellApp *app,
int workspace);
void shell_app_open_new_window (ShellApp *app);
ShellAppState shell_app_get_state (ShellApp *app);

View File

@ -227,24 +227,17 @@ shell_doc_system_on_recent_changed (GtkRecentManager *manager,
* shell_doc_system_open:
* @system: A #ShellDocSystem
* @info: A #GtkRecentInfo
* @workspace: Open on this workspace, or -1 for default
*
* Launch the default application associated with the mime type of
* @info, using its uri.
*/
void
shell_doc_system_open (ShellDocSystem *system,
GtkRecentInfo *info,
int workspace)
GtkRecentInfo *info)
{
GFile *file;
GAppInfo *app_info;
gboolean needs_uri;
GAppLaunchContext *context;
context = shell_global_create_app_launch_context (shell_global_get ());
if (workspace != -1)
gdk_app_launch_context_set_desktop ((GdkAppLaunchContext *)context, workspace);
file = g_file_new_for_uri (gtk_recent_info_get_uri (info));
needs_uri = g_file_get_path (file) == NULL;
@ -255,7 +248,7 @@ shell_doc_system_open (ShellDocSystem *system,
{
GList *uris;
uris = g_list_prepend (NULL, (gpointer)gtk_recent_info_get_uri (info));
g_app_info_launch_uris (app_info, uris, context, NULL);
g_app_info_launch_uris (app_info, uris, shell_global_create_app_launch_context (shell_global_get ()), NULL);
g_list_free (uris);
}
else
@ -274,6 +267,7 @@ shell_doc_system_open (ShellDocSystem *system,
if (gtk_recent_info_get_application_info (info, app_name, &app_exec, &count, &time))
{
GRegex *regex;
GAppLaunchContext *context;
/* TODO: Change this once better support for creating
GAppInfo is added to GtkRecentInfo, as right now
@ -304,13 +298,13 @@ shell_doc_system_open (ShellDocSystem *system,
despite passing the app launch context, no startup
notification occurs.
*/
context = shell_global_create_app_launch_context (shell_global_get ());
g_app_info_launch (app_info, NULL, context, NULL);
g_object_unref (context);
}
g_free (app_name);
}
g_object_unref (context);
}
static void

View File

@ -41,7 +41,6 @@ void shell_doc_system_queue_existence_check (ShellDocSystem *system,
guint n_items);
void shell_doc_system_open (ShellDocSystem *system,
GtkRecentInfo *info,
int workspace);
GtkRecentInfo *info);
#endif /* __SHELL_DOC_SYSTEM_H__ */

View File

@ -99,7 +99,7 @@ shell_evolution_event_source_request_range (ShellEvolutionEventSource *source,
gint64 msec_begin,
gint64 msec_end)
{
GDateTime *middle_utc, *middle;
GDateTime *middle;
/* The CalendarClient type is a convenience wrapper on top of
* Evolution Data Server. It is based on the assumption that only
@ -112,10 +112,7 @@ shell_evolution_event_source_request_range (ShellEvolutionEventSource *source,
* days before and after) it works out just fine.
*/
middle_utc = g_date_time_new_from_unix_utc ((msec_begin + msec_end) / 2 / 1000);
/* CalendarClient uses localtime rather than UTC */
middle = g_date_time_to_local (middle_utc);
g_date_time_unref (middle_utc);
middle = g_date_time_new_from_unix_utc ((msec_begin + msec_end) / 2 / 1000);
g_date_time_get_ymd (middle, &source->req_year, &source->req_mon, NULL);
g_date_time_unref (middle);
calendar_client_select_month (source->client, source->req_mon - 1, source->req_year);
@ -155,22 +152,15 @@ shell_evolution_event_source_get_events (ShellEvolutionEventSource *source,
{
GList *result;
GDateTime *cur_date;
GDateTime *begin_date_utc, *begin_date;
GDateTime *end_date_utc, *end_date;
GDateTime *begin_date;
GDateTime *end_date;
g_return_val_if_fail (msec_begin <= msec_end, NULL);
result = NULL;
begin_date_utc = g_date_time_new_from_unix_utc (msec_begin / 1000);
end_date_utc = g_date_time_new_from_unix_utc (msec_end / 1000);
/* CalendarClient uses localtime rather than UTC */
begin_date = g_date_time_to_local (begin_date_utc);
end_date = g_date_time_to_local (end_date_utc);
g_date_time_unref (begin_date_utc);
g_date_time_unref (end_date_utc);
begin_date = g_date_time_new_from_unix_utc (msec_begin / 1000);
end_date = g_date_time_new_from_unix_utc (msec_end / 1000);
cur_date = g_date_time_ref (begin_date);
do
{

View File

@ -35,7 +35,6 @@ struct _StContainerPrivate
GList *children;
ClutterActor *first_child;
ClutterActor *last_child;
gboolean block_update_pseude_classes;
};
static void clutter_container_iface_init (ClutterContainerIface *iface);
@ -51,9 +50,6 @@ st_container_update_pseudo_classes (StContainer *container)
ClutterActor *first_child, *last_child;
StContainerPrivate *priv = container->priv;
if (priv->block_update_pseude_classes)
return;
first_item = priv->children;
first_child = first_item ? first_item->data : NULL;
if (first_child != priv->first_child)
@ -95,6 +91,28 @@ st_container_update_pseudo_classes (StContainer *container)
}
}
/**
* st_container_remove_all:
* @container: An #StContainer
*
* Removes all child actors from @container.
*/
void
st_container_remove_all (StContainer *container)
{
StContainerPrivate *priv = container->priv;
/* copied from clutter_group_remove_all() */
while (priv->children)
{
ClutterActor *child = priv->children->data;
priv->children = priv->children->next;
clutter_container_remove_actor (CLUTTER_CONTAINER (container), child);
}
st_container_update_pseudo_classes (container);
}
/**
* st_container_destroy_children:
* @container: An #StContainer
@ -106,14 +124,13 @@ st_container_destroy_children (StContainer *container)
{
StContainerPrivate *priv = container->priv;
priv->block_update_pseude_classes = TRUE;
while (priv->children)
clutter_actor_destroy (priv->children->data);
{
ClutterActor *child = priv->children->data;
priv->children = priv->children->next;
priv->block_update_pseude_classes = FALSE;
st_container_update_pseudo_classes (container);
clutter_actor_destroy (child);
}
}
void

View File

@ -53,6 +53,7 @@ struct _StContainerClass {
GType st_container_get_type (void) G_GNUC_CONST;
void st_container_remove_all (StContainer *container);
void st_container_destroy_children (StContainer *container);
GList * st_container_get_focus_chain (StContainer *container);

View File

@ -24,7 +24,6 @@
#define __NA_TRAY_CHILD_H__
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include <gdk/gdkx.h>
G_BEGIN_DECLS

View File

@ -315,13 +315,19 @@ pending_message_free (PendingMessage *message)
g_free (message);
}
static void
na_tray_manager_handle_message_data (NaTrayManager *manager,
XClientMessageEvent *xevent)
static GdkFilterReturn
na_tray_manager_handle_client_message_message_data (GdkXEvent *xev,
GdkEvent *event,
gpointer data)
{
GList *p;
int len;
XClientMessageEvent *xevent;
NaTrayManager *manager;
GList *p;
int len;
xevent = (XClientMessageEvent *) xev;
manager = data;
/* Try to see if we can find the pending message in the list */
for (p = manager->messages; p; p = p->next)
{
@ -355,6 +361,8 @@ na_tray_manager_handle_message_data (NaTrayManager *manager,
break;
}
}
return GDK_FILTER_REMOVE;
}
static void
@ -374,17 +382,13 @@ na_tray_manager_handle_begin_message (NaTrayManager *manager,
if (!socket)
return;
timeout = xevent->data.l[2];
len = xevent->data.l[3];
id = xevent->data.l[4];
/* Check if the same message is already in the queue and remove it if so */
for (p = manager->messages; p; p = p->next)
{
PendingMessage *pmsg = p->data;
if (xevent->window == pmsg->window &&
id == pmsg->id)
xevent->data.l[4] == pmsg->id)
{
/* Hmm, we found it, now remove it */
pending_message_free (pmsg);
@ -394,6 +398,10 @@ na_tray_manager_handle_begin_message (NaTrayManager *manager,
}
}
timeout = xevent->data.l[2];
len = xevent->data.l[3];
id = xevent->data.l[4];
if (len == 0)
{
g_signal_emit (manager, manager_signals[MESSAGE_SENT], 0,
@ -420,9 +428,6 @@ na_tray_manager_handle_cancel_message (NaTrayManager *manager,
{
GList *p;
GtkSocket *socket;
long id;
id = xevent->data.l[2];
/* Check if the message is in the queue and remove it if so */
for (p = manager->messages; p; p = p->next)
@ -430,7 +435,7 @@ na_tray_manager_handle_cancel_message (NaTrayManager *manager,
PendingMessage *msg = p->data;
if (xevent->window == msg->window &&
id == msg->id)
xevent->data.l[4] == msg->id)
{
pending_message_free (msg);
manager->messages = g_list_remove_link (manager->messages, p);
@ -449,6 +454,39 @@ na_tray_manager_handle_cancel_message (NaTrayManager *manager,
}
}
static GdkFilterReturn
na_tray_manager_handle_client_message_opcode (GdkXEvent *xev,
GdkEvent *event,
gpointer data)
{
XClientMessageEvent *xevent;
NaTrayManager *manager;
xevent = (XClientMessageEvent *) xev;
manager = data;
switch (xevent->data.l[1])
{
case SYSTEM_TRAY_REQUEST_DOCK:
/* Ignore this one since we don't know on which window this was received
* and so we can't know for which screen this is. It will be handled
* in na_tray_manager_window_filter() since we also receive it there */
break;
case SYSTEM_TRAY_BEGIN_MESSAGE:
na_tray_manager_handle_begin_message (manager, xevent);
return GDK_FILTER_REMOVE;
case SYSTEM_TRAY_CANCEL_MESSAGE:
na_tray_manager_handle_cancel_message (manager, xevent);
return GDK_FILTER_REMOVE;
default:
break;
}
return GDK_FILTER_CONTINUE;
}
static GdkFilterReturn
na_tray_manager_window_filter (GdkXEvent *xev,
GdkEvent *event,
@ -459,7 +497,8 @@ na_tray_manager_window_filter (GdkXEvent *xev,
if (xevent->type == ClientMessage)
{
/* _NET_SYSTEM_TRAY_OPCODE: SYSTEM_TRAY_REQUEST_DOCK */
/* We handle this client message here. See comment in
* na_tray_manager_handle_client_message_opcode() for details */
if (xevent->xclient.message_type == manager->opcode_atom &&
xevent->xclient.data.l[1] == SYSTEM_TRAY_REQUEST_DOCK)
{
@ -467,29 +506,6 @@ na_tray_manager_window_filter (GdkXEvent *xev,
(XClientMessageEvent *) xevent);
return GDK_FILTER_REMOVE;
}
/* _NET_SYSTEM_TRAY_OPCODE: SYSTEM_TRAY_BEGIN_MESSAGE */
else if (xevent->xclient.message_type == manager->opcode_atom &&
xevent->xclient.data.l[1] == SYSTEM_TRAY_BEGIN_MESSAGE)
{
na_tray_manager_handle_begin_message (manager,
(XClientMessageEvent *) event);
return GDK_FILTER_REMOVE;
}
/* _NET_SYSTEM_TRAY_OPCODE: SYSTEM_TRAY_CANCEL_MESSAGE */
else if (xevent->xclient.message_type == manager->opcode_atom &&
xevent->xclient.data.l[1] == SYSTEM_TRAY_CANCEL_MESSAGE)
{
na_tray_manager_handle_cancel_message (manager,
(XClientMessageEvent *) event);
return GDK_FILTER_REMOVE;
}
/* _NET_SYSTEM_TRAY_MESSAGE_DATA */
else if (xevent->xclient.message_type == manager->message_data_atom)
{
na_tray_manager_handle_message_data (manager,
(XClientMessageEvent *) event);
return GDK_FILTER_REMOVE;
}
}
else if (xevent->type == SelectionClear)
{
@ -547,6 +563,9 @@ na_tray_manager_unmanage (NaTrayManager *manager)
TRUE);
}
//FIXME: we should also use gdk_remove_client_message_filter when it's
//available
// See bug #351254
gdk_window_remove_filter (window,
na_tray_manager_window_filter, manager);
@ -717,8 +736,6 @@ na_tray_manager_manage_screen_x11 (NaTrayManager *manager,
message_data_atom = gdk_atom_intern ("_NET_SYSTEM_TRAY_MESSAGE_DATA",
FALSE);
manager->message_data_atom = gdk_x11_atom_to_xatom_for_display (display,
message_data_atom);
/* Add a window filter */
#if 0
@ -727,8 +744,17 @@ na_tray_manager_manage_screen_x11 (NaTrayManager *manager,
G_CALLBACK (na_tray_manager_selection_clear_event),
manager);
#endif
/* This is for SYSTEM_TRAY_REQUEST_DOCK and SelectionClear */
gdk_window_add_filter (window,
na_tray_manager_window_filter, manager);
/* This is for SYSTEM_TRAY_BEGIN_MESSAGE and SYSTEM_TRAY_CANCEL_MESSAGE */
gdk_display_add_client_message_filter (display, opcode_atom,
na_tray_manager_handle_client_message_opcode,
manager);
/* This is for _NET_SYSTEM_TRAY_MESSAGE_DATA */
gdk_display_add_client_message_filter (display, message_data_atom,
na_tray_manager_handle_client_message_message_data,
manager);
return TRUE;
}
else

View File

@ -50,7 +50,6 @@ struct _NaTrayManager
#ifdef GDK_WINDOWING_X11
GdkAtom selection_atom;
Atom opcode_atom;
Atom message_data_atom;
#endif
GtkWidget *invisible;

View File

@ -62,8 +62,7 @@ fi
# libxklavier, libxml2, ORBit2, pam, python, readline,
# spidermonkey ({mozilla,firefox,xulrunner}-js), startup-notification,
# xdamage, icon-naming-utils, upower, libtool-ltdl, libvorbis,
# libgcrypt, libtasn1, libgnome-keyring, libgtop, cups,
# evolution-data-server
# libgcrypt, libtasn1, libgnome-keyring, libgtop, cups
#
# Non-devel packages needed by gnome-shell and its deps:
# glxinfo, gstreamer-plugins-base, gstreamer-plugins-good,

View File

@ -88,10 +88,17 @@
</dependencies>
</autotools>
<autotools id="gtk-theme-engine-clearlooks">
<branch repo="git.gnome.org" module="gtk-theme-engine-clearlooks"/>
<dependencies>
<dep package="gtk3"/>
</dependencies>
</autotools>
<autotools id="gnome-themes-standard">
<branch repo="git.gnome.org" module="gnome-themes-standard"/>
<dependencies>
<dep package="gtk3"/>
<dep package="gtk-theme-engine-clearlooks"/>
</dependencies>
</autotools>