Compare commits

..

58 Commits

Author SHA1 Message Date
Owen W. Taylor
eb2ee3f259 Bump version to 2.91.3 2010-11-29 17:58:04 -05:00
Florian Müllner
8b5cd4ef0f calendar: Take week start and month/year ordering from GTK+-3
Despite of switching to GTK+-3 unconditionally, those settings were
still taken from GTK+-2.
2010-11-29 22:47:14 +01:00
Florian Müllner
4517f60630 environment: Get text direction from GTK+-3
Despite of switching to GTK+-3 unconditionally, the default text
direction was still taken from GTK+-2.
2010-11-29 22:00:37 +01:00
Dan Winship
b25bad9995 notificationDaemon: fix escaping in xchat rewrite rules
https://bugzilla.gnome.org/show_bug.cgi?id=635712
2010-11-29 14:31:20 -05:00
William Jon McCann
c9b178b193 Touch up padding again this time with the correct box 2010-11-29 14:03:07 -05:00
Marina Zhurakhinskaya
6b0fe1b0b0 Add padding on the left of the notification scrollbar
It looks better that way.

https://bugzilla.gnome.org/show_bug.cgi?id=630752
2010-11-29 13:29:57 -05:00
William Jon McCann
c908a060b8 Touch up the spacing and style of the app view
Adds more padding between app icons, left aligns the view,
removes the ugly separator, adds some margin on the right.
2010-11-29 13:16:20 -05:00
Fran Diéguez
063fc8e29c Updated Galician translations 2010-11-29 17:33:20 +01:00
Owen W. Taylor
d870fef122 StBoxLayout: report correct paint volume when scrolled
When scrolled, st_box_layout_apply_transform() includes the scroll
offset and affects paint volumes. This is right for our children, but
our paint volume is determined by our allocation and borders and
doesn't scroll, so we need to reverse-compensate, the same as we do
when painting.

https://bugzilla.gnome.org/show_bug.cgi?id=630932
2010-11-29 11:23:47 -05:00
Owen W. Taylor
6b723ed72a StImText: add get_paint_volume()
Since StImText isn't a StWidget, it needs it's own implementation
of get_paint_volume() to enable clipped redraws.

https://bugzilla.gnome.org/show_bug.cgi?id=630932
2010-11-29 11:23:47 -05:00
Adel Gadllah
56fb7e2c58 St: Take advantage of clipped redraws
In order to take advantage of clipped redraws (only redraw the
parts that actually changed), we have to inform clutter about
our paint_volume by implementing the get_paint_volume virtual
method.

As this feature had been added in in clutter 1.5.x we now require
that.

https://bugzilla.gnome.org/show_bug.cgi?id=630932
2010-11-29 11:23:47 -05:00
Dan Winship
41a5282b7e gnome-shell.css: don't override the chat-response entry's height
We were forcing the chat-response entry to have too small a height,
making underscores not show up. We're already setting the font size,
so we should just let the entry request the height it needs based on
that.

https://bugzilla.gnome.org/show_bug.cgi?id=635471
2010-11-29 11:13:15 -05:00
Florian Müllner
6f9ede569e workspace-indicators: Add hover indication
Scale up indicators on hover to hint at their clickability.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:54 +01:00
Florian Müllner
e2e11b1a29 overview: Update animation
Update the animation on entering/leaving the overview to only zoom
the window previews and fade other elements.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:54 +01:00
Florian Müllner
b59daac6f3 dash: Improve DND to dash and allow reordering
Show a positional indicator where a new favorite will be added and
make the favorites re-orderable. Also allow the removal of favorites
using drag-and-drop according to the mockups.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:54 +01:00
Florian Müllner
5fef9188c9 workspaces: Change handling of window-drag signals
Delegate the emission of the window-drag-begin/window-drag-end
signals to overview functions, as done already for other items.
This will enable objects to react to those signals without having
access to the workspace objects / the workspaces view.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:54 +01:00
Florian Müllner
2c5d825c87 search-display: Change the default display to use iconGrid
Current mockups display all search results as icons as used by
application results, so change the default result display to use
iconGrid/BaseIcon. Remove the custom application results display,
as it is no longer needed.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
d5d7d8a391 overview: Add ViewSelector to the overview
Add the view selector and adjust the positioning of elements in the
overview. Unlike the old dash, the view selector is made public to
indicate that extensions may add additional views or search providers.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
7811632e6f workspaces: Rework workspace controls for the view selector
As workspaces will appear as a particular view in the view selector,
merge WorkspacesControls and WorkspacesManager to control workspaces
and related controls, so that a single actor can be added to the
selector instead of positioning the elements from the overview.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
6c5c3bedbe workspaces-view: Swap workspace ordering for RTL locales
Make the first workspace the right-most one in RTL locales, as one
would expect. Update all dragging/scrolling functions to behave
correctly.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
0942f50781 workspaces-view: Remove MosaicView
The new layout does no longer support view switching, so merge
GenericWorkspacesView and SingleView, and remove MosaicView.
Also rename or remove workspace properties and functions which
are now unused.
The grid will have a comeback with the new DND behavior.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
1eb6dfe1b8 app-display: Slight cleanup and style update
Being no longer an independent menu pane, both the toggle() and
close() functions are no longer needed, and the view's structure
can be simplified a bit.

Also update the style to fit into the view selector.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
1a77acfda6 Fake workspaces tab
https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
ffd7eaede5 view-selector: Add keyboard shortcut for view switching
As the view selector is a tabbed interface, use the default keyboard
shortcut of Ctrl-PageUp/PageDown of GtkNotebook for switching between
views.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
688a315cbf view-selector: Move search logic into SearchTab
The view selector should only deal with view switching, so move the
logic to deal with search (find-as-you-type, cancelling a search,
navigating/activating results) into the SearchTab.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
48fff0e96b Use the old dash code to implement the view selector
The view selector is a tabbed interface with a search entry. Starting
a search switches focus to the results' tab, ending a search moves the
focus back to the previously selected tab. Activating a normal tab
while a search is active cancels the search.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
e6bb06a7cc search-display: Move SearchResults to a separate file
With the new layout, search results will be displayed in an independent
view like window previews, applications and possible future additions;
it does not make much sense keeping it with the switching logic, so move
the code to its own file.

Also remove the dash-prefix from the relevant style classes.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
26225f0bfb dash: Move padding into the icon for Fittsability
With this change, the icons' reactive area extends to the screen
edge, making them good targets according to Fitts' law.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:53 +01:00
Florian Müllner
3e4f744e56 dash: Reimplement the dash based on AppWell code
The new dash implementation is a single-column vertical sidebar,
whose items are scaled dynamically to fit the available height.
If the height is still exceeded after scaling down to a minimum
item size, excess items are cut off.
The now unused old dash implementation is renamed to OldDash, as
its code will be used as a base for the new view selector element.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 16:35:47 +01:00
Florian Müllner
2d2ac5b3f6 linear-view: Remove NewWorkspaceArea
As the button to add workspaces will move to the same position as
the new workspace drop area in drag mode, the latter is redundant
and can be removed.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 02:25:15 +01:00
Florian Müllner
e06b608b10 linear-view: Remove shadows when zoomed out
Overlaying inactive workspaces with a gradient to fade out the actors
does no longer work when re-using the normal desktop background. If
we keep the current DND behavior, we probably want to implement a real
fade effect - for now, just remove the visually disruptive shadows.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 02:25:15 +01:00
Florian Müllner
f24e567dc4 overview: Do not zoom the desktop background
While scaling the desktop background with the window previews represents
workspaces quite intuitively, the approach is not without problems.
As window previews in the overview behave quite differently to "real"
windows, the representation of workspaces as miniature versions of
"real" workspaces is flawed. The scaling also makes the transitions
to and from the overview much more visually expensive, without adding
much benefit.
Leaving the background in place provides more visual stability to the
transitions and emphasizes the distinctive behavior of elements in the
overview.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 02:25:15 +01:00
Florian Müllner
1ea488bb3d overview: Replace InfoBar with message tray notifications
The layout of recent mockups occupies the space previously reserved
for the info bar with the view selector. As the bar's purpose is
mainly to provide the user with feedback, it makes sense to use the
existing message tray facility instead of moving the bar elsewhere.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 02:25:15 +01:00
Florian Müllner
8d47a150df linear-view: Remove the scrollbar
The scrollbar is the main culprit for cluttered controls in the
linear view - all its functionality is already provided by the
workspace indicators, so it is save to remove the scrollbar in
order to clean up the interface.

https://bugzilla.gnome.org/show_bug.cgi?id=634948
2010-11-29 02:25:15 +01:00
Fran Diéguez
dc24252e82 Updated Galician translations 2010-11-27 01:43:13 +01:00
Gheyret T.Kenji
2167be053d Added UG translation 2010-11-26 14:28:16 +01:00
Giovanni Campagna
926ddc2bdf Show timestamp in expanded chat
When the last message is older than SCROLLBACK_IMMEDIATE_TIME (1
minutes), show a timestamp in the middle, indicating the time it
was sent.
Use the same style for presence changes, but show them on the left.

https://bugzilla.gnome.org/show_bug.cgi?id=617228
2010-11-25 15:31:46 +01:00
Florian Müllner
4f7a28863c st-icon: Add support for -st-shadow property
Add a drop shadow to the icon texture if the -st-shadow property is
specified.

https://bugzilla.gnome.org/show_bug.cgi?id=635608
2010-11-25 05:38:20 +01:00
Nick Glynn
6e902f5fec Add development packages needed to build on Ubuntu 2010-11-25 01:18:06 +01:00
Florian Müllner
01e7d6f30e workspace: Simplify the close button's timeout handler
Clutter actor gained a :has_pointer property after the original
code was written, so use this instead of picking.
2010-11-24 19:04:15 +01:00
Dan Winship
d6f1c10b1b messageTray: fix handling of markup vs non-markup notifications
NotificationDaemon-based notifications have markup in the banner/body,
but Telepathy-based notifications don't. (Eg, an XMPP message
containing "<b>foo</b>" should show up angle brackets and all, not as
bold.) Fix MessageTray.Notification to allow explicitly specifying
where there should and shouldn't be markup, and use that
appropriately.

https://bugzilla.gnome.org/show_bug.cgi?id=610219
2010-11-24 02:38:17 +03:00
Maxim Ermilov
65f0b483f8 messageTray: make links in message banners clickable
https://bugzilla.gnome.org/show_bug.cgi?id=610219
2010-11-24 02:38:08 +03:00
Maxim Ermilov
6a52deec7d Add function for finding urls in string
https://bugzilla.gnome.org/show_bug.cgi?id=610219
2010-11-24 02:24:43 +03:00
Sira Nokyoongtong
3d468c26b0 Updated Thai translation. 2010-11-23 10:26:22 +07:00
Adel Gadllah
a5e61e27c7 [statusMenu] Fix ellipsis in menu entries
According to the HIG we should use ellipsis when:

"Label the menu item with a trailing ellipsis ("...") only if the command requires further
input from the user before it can be performed. Do not add an ellipsis to items that only
present a confirmation dialog (such as Delete), or that do not require further input
(such as Properties, Preferences or About)"

So adjust the use of ellipsis to match that.

Pointed out by Michael Monreal.
2010-11-22 21:19:37 +01:00
Giovanni Campagna
59ba112959 Complete porting to new gnome-power-manager API
We updated the normal devices part, but we forgot the part about
the primary device (possibly because it is not reported as such
in case it is fully charged). Update that as well, to avoid showing
weird GIcon serializations.

https://bugzilla.gnome.org/show_bug.cgi?id=635288
2010-11-22 18:05:11 +01:00
Owen W. Taylor
4800f63c3a Correct and simplify setting the GJS module path
We were going to great effort to include the normal directories in the
GJS search path and the code to to do this broke recently when
jsdir and jsnativedir were moved to gjs-internals-1.0.pc. However, it
was actually unnecessary since the standard directories are appended
to the default path.

(We continue to use a GNOME_SHELL_JS envvar separate from GJS_PATH
for the Shell to enable the somewhat unlikely case where someone wants
to invoke the shell specifying a GJS_PATH.)

https://bugzilla.gnome.org/show_bug.cgi?id=635367
2010-11-22 10:21:45 -05:00
Owen W. Taylor
1fce237538 StThemeNode: suppress compiler warnings and fix minor bugs
Aggressive compiler flags can cause the compiler to be smart enough
to inline functions and detect variables not being set on certain
code paths but not smart enough to understand the overall logic;
add some extra initializations to suppress the warnings.

Fix several minor bugs in the logic found when double checking the
logic before adding the initializations.

Based on a patch by Marc-Antoine Perennou <Marc-Antoine@Perennou.com>.

https://bugzilla.gnome.org/show_bug.cgi?id=634225
2010-11-20 14:14:57 -05:00
Kjartan Maraas
71685a3b48 Fix this up 2010-11-20 14:40:40 +01:00
Kjartan Maraas
c0b9ce16a7 Updated Norwegian bokmål translation 2010-11-20 14:40:33 +01:00
Gheyret T.Kenji
d1407d0026 Added UG translation 2010-11-20 11:47:22 +01:00
Giovanni Campagna
d5bfc503fe Sound Menu: only show the slider
Reimplement UI without any indication of percentage or mutedness,
and whitout switches. The only interaction point is slider, but
it still supports mute changing for applications that track it,
and will react appropriately to external changes.

https://bugzilla.gnome.org/show_bug.cgi?id=634329
2010-11-19 23:13:32 +01:00
Giovanni Campagna
de50cf80a8 PowerStatus: Update for gnome-power-manager API changes
g-p-m no longer exports a summary, and instead exports a GIcon to
show. Update for that.

https://bugzilla.gnome.org/show_bug.cgi?id=635288
2010-11-19 22:31:37 +01:00
Giovanni Campagna
5086bfedac Fix dependencies for gnome-power-manager
Merging the g-p-m branch with the one adding gnome-settings-daemon
for A11y, a lot of modules were duplicated. Also, gnome-keyring is
not needed, the distro provided one is enough.

https://bugzilla.gnome.org/show_bug.cgi?id=635199
2010-11-19 22:27:44 +01:00
Bastien Nocera
f67ad23033 statusMenu: Fix launching gnome-control-center with an option
This isn't how you launch an app with an option...
2010-11-19 20:34:32 +00:00
Dan Winship
b7c1400eb3 dnd: fix a case where ungrabEvents wasn't being called
If the drag actor is destroyed as part of a drag target accepting it,
we were not calling ungrabEvents, meaning the mouse/keyboard remained
grabbed until you clicked somewhere to cancel it.

This fixes that without trying to improve the extremely confusing
control flow...

https://bugzilla.gnome.org/show_bug.cgi?id=635278
2010-11-19 15:09:57 -05:00
Dan Winship
b956c6f093 dnd: when snapping back, deal with moved/rescaled parents
Previously, when snapping back a drag actor, we moved it back to its
original stage-relative position and scale. This worked fine if its
parent was still in the same place it was when the drag started, but
failed in cases like the linear workspace layout window drag-and-drop,
where dragging a window would "zoom out" its parent workspace, causing
the snapback to send it to the wrong place.

Fix this by instead snapping the actor back to "where the actor would
have been right now if it were still at its original scale and
position within its original parent actor" rather than "where it was
before the drag started"

https://bugzilla.gnome.org/show_bug.cgi?id=635272
2010-11-19 15:09:57 -05:00
Bastien Nocera
bfc850a94d statusMenu: Make "My Account" menu item work again
For GNOME 3.x. gnome-about-me is dead, so we should be using the
user-accounts panel of gnome-control-center instead.

https://bugzilla.gnome.org/show_bug.cgi?id=635264
2010-11-19 13:39:25 +00:00
40 changed files with 1570 additions and 816 deletions

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([gnome-shell],[2.91.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) AC_INIT([gnome-shell],[2.91.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c]) AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -57,7 +57,7 @@ fi
AM_CONDITIONAL(BUILD_RECORDER, $build_recorder) AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.3.14 CLUTTER_MIN_VERSION=1.5.8
GOBJECT_INTROSPECTION_MIN_VERSION=0.6.11 GOBJECT_INTROSPECTION_MIN_VERSION=0.6.11
GJS_MIN_VERSION=0.7 GJS_MIN_VERSION=0.7
MUTTER_MIN_VERSION=2.91.0 MUTTER_MIN_VERSION=2.91.0
@@ -103,11 +103,7 @@ AC_SUBST(MUTTER_BIN_DIR)
AC_SUBST(MUTTER_LIB_DIR) AC_SUBST(MUTTER_LIB_DIR)
AC_SUBST(MUTTER_PLUGIN_DIR) AC_SUBST(MUTTER_PLUGIN_DIR)
GJS_JS_DIR=`$PKG_CONFIG --variable=jsdir gjs-1.0`
GJS_JS_NATIVE_DIR=`$PKG_CONFIG --variable=jsnativedir gjs-1.0`
GJS_CONSOLE=`$PKG_CONFIG --variable=gjs_console gjs-1.0` GJS_CONSOLE=`$PKG_CONFIG --variable=gjs_console gjs-1.0`
AC_SUBST(GJS_JS_DIR)
AC_SUBST(GJS_JS_NATIVE_DIR)
AC_SUBST(GJS_CONSOLE) AC_SUBST(GJS_CONSOLE)
AC_CHECK_FUNCS(fdwalk) AC_CHECK_FUNCS(fdwalk)

View File

@@ -262,54 +262,11 @@ StTooltip StLabel {
background-color: rgba(0,0,0,0.6); background-color: rgba(0,0,0,0.6);
} }
.new-workspace-area { .workspaces-view {
border: 2px solid rgba(255, 255, 255, 0.8);
border-radius: 10px;
background-color: #111;
}
.new-workspace-area-internal {
background-gradient-direction: horizontal;
background-gradient-start: rgba(16, 16, 16, 0);
background-gradient-end: rgba(16, 16, 16, 1.0);
background-image: url("move-window-on-new.svg");
}
.new-workspace-area:hover {
border: 2px solid rgba(255, 255, 255, 1.0);
background-gradient-direction: horizontal;
background-gradient-start: rgba(130, 130, 130, 0.9);
background-gradient-end: rgba(16, 16, 16, 0.9);
}
.left-workspaces-shadow {
background-gradient-direction: horizontal;
background-gradient-start: rgba(16, 16, 16, 1.0);
background-gradient-end: rgba(16, 16, 16, 0.0);
}
.right-workspaces-shadow {
background-gradient-direction: horizontal;
background-gradient-end: rgba(16, 16, 16, 1.0);
background-gradient-start: rgba(16, 16, 16, 0);
}
.workspaces {
color: white; color: white;
}
.workspaces.single {
spacing: 25px; spacing: 25px;
} }
.workspaces.mosaic {
spacing: 15px;
}
.workspaces-bar {
spacing: 5px;
}
.workspace-indicator-panel { .workspace-indicator-panel {
spacing: 8px; spacing: 8px;
} }
@@ -324,27 +281,6 @@ StTooltip StLabel {
background: rgba(255,255,255,0.8); background: rgba(255,255,255,0.8);
} }
.window-caption {
background: rgba(0,0,0,0.8);
border: 1px solid rgba(128,128,128,0.40);
border-radius: 10px;
font-size: 12px;
padding: 2px 8px;
-shell-caption-spacing: 4px;
}
.window-close {
background-image: url("close-window.svg");
height: 24px;
width: 24px;
-st-shadow: -2px 2px 6px rgba(0,0,0,0.5);
-shell-close-overlap: 16px;
}
.single-view-controls {
padding: 8px 0px;
}
.workspace-controls { .workspace-controls {
width: 48px; width: 48px;
font-size: 32px; font-size: 32px;
@@ -371,6 +307,23 @@ StTooltip StLabel {
background-color: rgba(128, 128, 128, 0.2); background-color: rgba(128, 128, 128, 0.2);
} }
.window-caption {
background: rgba(0,0,0,0.8);
border: 1px solid rgba(128,128,128,0.40);
border-radius: 10px;
font-size: 12px;
padding: 2px 8px;
-shell-caption-spacing: 4px;
}
.window-close {
background-image: url("close-window.svg");
height: 24px;
width: 24px;
-st-shadow: -2px 2px 6px rgba(0,0,0,0.5);
-shell-close-overlap: 16px;
}
/* Dash */ /* Dash */
#dash { #dash {
@@ -383,6 +336,11 @@ StTooltip StLabel {
border-radius: 0px 9px 9px 0px; border-radius: 0px 9px 9px 0px;
} }
#dash:empty {
height: 100px;
width: 60px;
}
.dash-placeholder { .dash-placeholder {
background-image: url("dash-placeholder.svg"); background-image: url("dash-placeholder.svg");
height: 27px; height: 27px;
@@ -392,8 +350,12 @@ StTooltip StLabel {
spacing: 16px; spacing: 16px;
} }
#viewSelectorTabBar {
padding: 16px;
}
#searchArea { #searchArea {
padding: 0px 12px; padding: 0px 24px;
} }
#searchEntry { #searchEntry {
@@ -527,22 +489,21 @@ StTooltip StLabel {
} }
.icon-grid { .icon-grid {
spacing: 6px; spacing: 36px;
-shell-grid-item-size: 70px; -shell-grid-item-size: 70px;
} }
.all-app { .all-app {
padding: 10px; padding: 16px 250px 10px 16px;
} }
.app-section-divider-container { .app-section-divider-container {
padding-top: 10px; padding-top: 36px;
padding-bottom: 10px; padding-bottom: 36px;
} }
.app-section-divider { .app-section-divider {
height: 2px; height: 2px;
background-image: url("separator-white.png");
} }
#dash > .app-well-app { #dash > .app-well-app {
@@ -555,6 +516,7 @@ StTooltip StLabel {
.remove-favorite-icon:hover { .remove-favorite-icon:hover {
color: white; color: white;
-st-shadow: black 0px 2px 2px;
} }
.app-well-app > .overview-icon, .app-well-app > .overview-icon,
@@ -814,6 +776,10 @@ StTooltip StLabel {
color: #cccccc; color: #cccccc;
} }
.url-highlighter {
link-color: #ccccff;
}
/* Message Tray */ /* Message Tray */
#message-tray { #message-tray {
background-gradient-direction: vertical; background-gradient-direction: vertical;
@@ -860,6 +826,10 @@ StTooltip StLabel {
height: 1em; height: 1em;
} }
#notification-scrollview > StScrollBar {
padding-left: 6px;
}
#notification-body { #notification-body {
spacing: 5px; spacing: 5px;
} }
@@ -920,6 +890,13 @@ StTooltip StLabel {
border-radius: 4px; border-radius: 4px;
} }
.chat-meta-message {
padding-left: 4px;
border-radius: 4px;
font-size: 14px;
color: #bbbbbb;
}
.chat-response { .chat-response {
padding: 4px; padding: 4px;
border-radius: 4px; border-radius: 4px;
@@ -928,7 +905,6 @@ StTooltip StLabel {
background-color: #404040; background-color: #404040;
caret-color: #ffffff; caret-color: #ffffff;
caret-size: 1px; caret-size: 1px;
height: 18px;
} }
.chat-response:focus { .chat-response:focus {

View File

@@ -8,6 +8,7 @@ nobase_dist_js_DATA = \
misc/gnomeSession.js \ misc/gnomeSession.js \
misc/params.js \ misc/params.js \
misc/telepathy.js \ misc/telepathy.js \
misc/utils.js \
perf/core.js \ perf/core.js \
prefs/clockPreferences.js \ prefs/clockPreferences.js \
ui/altTab.js \ ui/altTab.js \

View File

@@ -272,9 +272,7 @@ const ChannelTextIface = {
], ],
signals: [ signals: [
{ name: 'Received', { name: 'Received',
inSignature: 'uuuuus' }, inSignature: 'uuuuus' }
{ name: 'Sent',
inSignature: 'uus' }
] ]
}; };
let ChannelText = DBus.makeProxyClass(ChannelTextIface); let ChannelText = DBus.makeProxyClass(ChannelTextIface);

19
js/misc/utils.js Normal file
View File

@@ -0,0 +1,19 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
/* http://daringfireball.net/2010/07/improved_regex_for_matching_urls */
const _urlRegexp = /\b(([a-z][\w-]+:(\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)([^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/gi;
// findUrls:
// @str: string to find URLs in
//
// Searches @str for URLs and returns an array of objects with %url
// properties showing the matched URL string, and %pos properties indicating
// the position within @str where the URL was found.
//
// Return value: the list of match objects, as described above
function findUrls(str) {
let res = [], match;
while ((match = _urlRegexp.exec(str)))
res.push({ url: match[0], pos: match.index });
return res;
}

View File

@@ -30,7 +30,7 @@ function AlphabeticalView() {
AlphabeticalView.prototype = { AlphabeticalView.prototype = {
_init: function() { _init: function() {
this.actor = new St.BoxLayout({ vertical: true }); this.actor = new St.BoxLayout({ vertical: true });
this._grid = new IconGrid.IconGrid(); this._grid = new IconGrid.IconGrid({ xAlign: St.Align.START });
this._appSystem = Shell.AppSystem.get_default(); this._appSystem = Shell.AppSystem.get_default();
this.actor.add(this._grid.actor, { y_align: St.Align.START, expand: true }); this.actor.add(this._grid.actor, { y_align: St.Align.START, expand: true });
}, },

View File

@@ -5,7 +5,7 @@ const Gio = imports.gi.Gio;
const Lang = imports.lang; const Lang = imports.lang;
const St = imports.gi.St; const St = imports.gi.St;
const Pango = imports.gi.Pango; const Pango = imports.gi.Pango;
const Gettext_gtk20 = imports.gettext.domain('gtk20'); const Gettext_gtk30 = imports.gettext.domain('gtk30');
const MSECS_IN_DAY = 24 * 60 * 60 * 1000; const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
const WEEKDATE_HEADER_WIDTH_DIGITS = 3; const WEEKDATE_HEADER_WIDTH_DIGITS = 3;
@@ -60,7 +60,7 @@ Calendar.prototype = {
this._settings.connect('changed::' + SHOW_WEEKDATE_KEY, Lang.bind(this, this._onSettingsChange)); this._settings.connect('changed::' + SHOW_WEEKDATE_KEY, Lang.bind(this, this._onSettingsChange));
this._useWeekdate = this._settings.get_boolean(SHOW_WEEKDATE_KEY); this._useWeekdate = this._settings.get_boolean(SHOW_WEEKDATE_KEY);
let weekStartString = Gettext_gtk20.gettext('calendar:week_start:0'); let weekStartString = Gettext_gtk30.gettext('calendar:week_start:0');
if (weekStartString.indexOf('calendar:week_start:') == 0) { if (weekStartString.indexOf('calendar:week_start:') == 0) {
this._weekStart = parseInt(weekStartString.substring(20)); this._weekStart = parseInt(weekStartString.substring(20));
} }
@@ -71,7 +71,7 @@ Calendar.prototype = {
} }
// Find the ordering for month/year in the calendar heading // Find the ordering for month/year in the calendar heading
switch (Gettext_gtk20.gettext('calendar:MY')) { switch (Gettext_gtk30.gettext('calendar:MY')) {
case 'calendar:MY': case 'calendar:MY':
this._headerFormat = '%B %Y'; this._headerFormat = '%B %Y';
break; break;

View File

@@ -78,7 +78,6 @@ function Dash() {
Dash.prototype = { Dash.prototype = {
_init : function() { _init : function() {
this._placeholderText = null;
this._menus = []; this._menus = [];
this._menuDisplays = []; this._menuDisplays = [];
this._maxHeight = -1; this._maxHeight = -1;
@@ -216,7 +215,6 @@ Dash.prototype = {
let contextId = ''; let contextId = '';
let running = this._tracker.get_running_apps(contextId); let running = this._tracker.get_running_apps(contextId);
let runningIds = this._appIdListToHash(running);
for (let id in favorites) { for (let id in favorites) {
let app = favorites[id]; let app = favorites[id];
@@ -229,16 +227,14 @@ Dash.prototype = {
continue; continue;
this._addApp(app); this._addApp(app);
} }
if (this._placeholderText) {
this._placeholderText.destroy();
this._placeholderText = null;
}
let children = this._box.get_children(); let children = this._box.get_children();
if (children.length == 0) { if (children.length == 0) {
this._placeholderText = new St.Label({ text: _("Drag here to add favorites") }); this._box.add_style_pseudo_class('empty');
this._box.add_actor(this._placeholderText); } else {
} else if (this._maxHeight > -1) { this._box.remove_style_pseudo_class('empty');
if (this._maxHeight > -1) {
let iconSizes = [ 48, 32, 24, 22, 16 ]; let iconSizes = [ 48, 32, 24, 22, 16 ];
for (let i = 0; i < iconSizes.length; i++) { for (let i = 0; i < iconSizes.length; i++) {
@@ -254,6 +250,7 @@ Dash.prototype = {
break; break;
} }
} }
}
this._box.show(); this._box.show();
}, },

View File

@@ -26,9 +26,9 @@ const DragMotionResult = {
}; };
const DRAG_CURSOR_MAP = { const DRAG_CURSOR_MAP = {
0: Shell.Cursor.UNSUPPORTED_TARGET, 0: Shell.Cursor.DND_UNSUPPORTED_TARGET,
1: Shell.Cursor.COPY, 1: Shell.Cursor.DND_COPY,
2: Shell.Cursor.MOVE 2: Shell.Cursor.DND_MOVE
}; };
const DragDropResult = { const DragDropResult = {
@@ -100,6 +100,8 @@ _Draggable.prototype = {
this._buttonDown = false; // The mouse button has been pressed and has not yet been released. this._buttonDown = false; // The mouse button has been pressed and has not yet been released.
this._dragInProgress = false; // The drag has been started, and has not been dropped or cancelled yet. 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). this._animationInProgress = false; // The drag is over and the item is in the process of animating to its original position (snapping back or reverting).
this._eventsGrabbed = false;
}, },
_onButtonPress : function (actor, event) { _onButtonPress : function (actor, event) {
@@ -147,13 +149,19 @@ _Draggable.prototype = {
}, },
_grabEvents: function() { _grabEvents: function() {
if (!this._eventsGrabbed) {
Clutter.grab_pointer(_getEventHandlerActor()); Clutter.grab_pointer(_getEventHandlerActor());
Clutter.grab_keyboard(_getEventHandlerActor()); Clutter.grab_keyboard(_getEventHandlerActor());
this._eventsGrabbed = true;
}
}, },
_ungrabEvents: function() { _ungrabEvents: function() {
if (this._eventsGrabbed) {
Clutter.ungrab_pointer(); Clutter.ungrab_pointer();
Clutter.ungrab_keyboard(); Clutter.ungrab_keyboard();
this._eventsGrabbed = false;
}
}, },
_onEvent: function(actor, event) { _onEvent: function(actor, event) {
@@ -213,7 +221,7 @@ _Draggable.prototype = {
if (this._onEventId) if (this._onEventId)
this._ungrabActor(); this._ungrabActor();
this._grabEvents(); this._grabEvents();
global.set_cursor(Shell.Cursor.IN_DRAG); global.set_cursor(Shell.Cursor.DND_IN_DRAG);
this._dragX = this._dragStartX = stageX; this._dragX = this._dragStartX = stageX;
this._dragY = this._dragStartY = stageY; this._dragY = this._dragStartY = stageY;
@@ -374,7 +382,7 @@ _Draggable.prototype = {
} }
target = target.get_parent(); target = target.get_parent();
} }
global.set_cursor(Shell.Cursor.IN_DRAG); global.set_cursor(Shell.Cursor.DND_IN_DRAG);
} }
return true; return true;
@@ -440,24 +448,44 @@ _Draggable.prototype = {
return true; return true;
}, },
// Get position of the drag actor's source if the source is still around,
// or return the original location if the actor itself was being dragged
// or the source is no longer around.
_getRestoreLocation: function() { _getRestoreLocation: function() {
let locX = this._snapBackX; let x, y, scale;
let locY = this._snapBackY;
if (this._dragActorSource && this._dragActorSource.visible) if (this._dragActorSource && this._dragActorSource.visible) {
[locX, locY] = this._dragActorSource.get_transformed_position(); // Snap the clone back to its source
return [locX, locY]; [x, y] = this._dragActorSource.get_transformed_position();
let [sourceScaledWidth, sourceScaledHeight] = this._dragActorSource.get_transformed_size();
scale = this._dragActor.width / sourceScaledWidth;
} else if (this._dragOrigParent) {
// Snap the actor back to its original position within
// its parent, adjusting for the fact that the parent
// may have been moved or scaled
let [parentX, parentY] = this._dragOrigParent.get_transformed_position();
x = parentX + this._dragOrigParent.scale_x * this._dragOrigX;
y = parentY + this._dragOrigParent.scale_y * this._dragOrigY;
let [parentWidth, parentHeight] = this._dragOrigParent.get_size();
let [parentScaledWidth, parentScaledHeight] = this._dragOrigParent.get_transformed_size();
let parentScale = parentScaledWidth / parentWidth;
scale = this._dragOrigScale * parentScale;
} else {
// Snap back actor to its original stage position
x = this._snapBackX;
y = this._snapBackY;
scale = this._snapBackScale;
}
return [x, y, scale];
}, },
_cancelDrag: function(eventTime) { _cancelDrag: function(eventTime) {
this._dragInProgress = false; this._dragInProgress = false;
let [snapBackX, snapBackY] = this._getRestoreLocation(); let [snapBackX, snapBackY, snapBackScale] = this._getRestoreLocation();
if (this._actorDestroyed) { if (this._actorDestroyed) {
global.unset_cursor(); global.unset_cursor();
if (!this._buttonDown)
this._ungrabEvents();
this.emit('drag-end', eventTime, false); this.emit('drag-end', eventTime, false);
return; return;
} }
@@ -467,8 +495,8 @@ _Draggable.prototype = {
Tweener.addTween(this._dragActor, Tweener.addTween(this._dragActor,
{ x: snapBackX, { x: snapBackX,
y: snapBackY, y: snapBackY,
scale_x: this._snapBackScale, scale_x: snapBackScale,
scale_y: this._snapBackScale, scale_y: snapBackScale,
opacity: this._dragOrigOpacity, opacity: this._dragOrigOpacity,
time: SNAP_BACK_ANIMATION_TIME, time: SNAP_BACK_ANIMATION_TIME,
transition: 'easeOutQuad', transition: 'easeOutQuad',
@@ -480,11 +508,11 @@ _Draggable.prototype = {
_restoreDragActor: function(eventTime) { _restoreDragActor: function(eventTime) {
this._dragInProgress = false; this._dragInProgress = false;
[restoreX, restoreY] = this._getRestoreLocation(); [restoreX, restoreY, restoreScale] = this._getRestoreLocation();
// fade the actor back in at its original location // fade the actor back in at its original location
this._dragActor.set_position(restoreX, restoreY); this._dragActor.set_position(restoreX, restoreY);
this._dragActor.set_scale(this._snapBackScale, this._snapBackScale); this._dragActor.set_scale(restoreScale, restoreScale);
this._dragActor.opacity = 0; this._dragActor.opacity = 0;
this._animationInProgress = true; this._animationInProgress = true;

View File

@@ -4,7 +4,7 @@ const Clutter = imports.gi.Clutter;;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
const Gettext_gtk20 = imports.gettext.domain('gtk20'); const Gettext_gtk30 = imports.gettext.domain('gtk30');
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
@@ -65,7 +65,7 @@ function init() {
String.prototype.format = Format.format; String.prototype.format = Format.format;
// Set the default direction for St widgets (this needs to be done before any use of St) // Set the default direction for St widgets (this needs to be done before any use of St)
if (Gettext_gtk20.gettext('default:LTR') == 'default:RTL') { if (Gettext_gtk30.gettext('default:LTR') == 'default:RTL') {
St.Widget.set_default_direction(St.TextDirection.RTL); St.Widget.set_default_direction(St.TextDirection.RTL);
} }

View File

@@ -1,6 +1,8 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang; const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
@@ -14,6 +16,7 @@ const Tweener = imports.ui.tweener;
const Main = imports.ui.main; const Main = imports.ui.main;
const BoxPointer = imports.ui.boxpointer; const BoxPointer = imports.ui.boxpointer;
const Params = imports.misc.params; const Params = imports.misc.params;
const Utils = imports.misc.utils;
const ANIMATION_TIME = 0.2; const ANIMATION_TIME = 0.2;
const NOTIFICATION_TIMEOUT = 4; const NOTIFICATION_TIMEOUT = 4;
@@ -35,14 +38,131 @@ const State = {
HIDING: 3 HIDING: 3
}; };
function _cleanMarkup(text) { function _fixMarkup(text, allowMarkup) {
if (allowMarkup) {
// Support &amp;, &quot;, &apos;, &lt; and &gt;, escape all other // Support &amp;, &quot;, &apos;, &lt; and &gt;, escape all other
// occurrences of '&'. // occurrences of '&'.
let _text = text.replace(/&(?!amp;|quot;|apos;|lt;|gt;)/g, '&amp;'); let _text = text.replace(/&(?!amp;|quot;|apos;|lt;|gt;)/g, '&amp;');
// Support <b>, <i>, and <u>, escape anything else // Support <b>, <i>, and <u>, escape anything else
// so it displays as raw markup. // so it displays as raw markup.
return _text.replace(/<(\/?[^biu]>|[^>\/][^>])/g, '&lt;$1'); return _text.replace(/<(\/?[^biu]>|[^>\/][^>])/g, '&lt;$1');
} else {
// Escape everything
let _text = text.replace(/&/g, '&amp;');
return _text.replace(/</g, '&lt;');
} }
}
function URLHighlighter(text, lineWrap, allowMarkup) {
this._init(text, lineWrap, allowMarkup);
}
URLHighlighter.prototype = {
_init: function(text, lineWrap, allowMarkup) {
if (!text)
text = '';
this.actor = new St.Label({ reactive: true, style_class: 'url-highlighter' });
this._linkColor = '#ccccff';
this.actor.connect('style-changed', Lang.bind(this, function() {
let color = new Clutter.Color();
let hasColor = this.actor.get_theme_node().get_color('link-color', color);
if (hasColor) {
let linkColor = color.to_string().substr(0, 7);
if (linkColor != this._linkColor) {
this._linkColor = linkColor;
this._highlightUrls();
}
}
}));
if (lineWrap) {
this.actor.clutter_text.line_wrap = true;
this.actor.clutter_text.line_wrap_mode = Pango.WrapMode.WORD_CHAR;
this.actor.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
}
this.setMarkup(text, allowMarkup);
this.actor.connect('button-release-event', Lang.bind(this, function (actor, event) {
let urlId = this._findUrlAtPos(event);
if (urlId != -1) {
let url = this._urls[urlId].url;
if (url.indexOf(':') == -1)
url = 'http://' + url;
try {
Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context());
return true;
} catch (e) {
// TODO: remove this after gnome 3 release
let p = new Shell.Process({ 'args' : ['gvfs-open', url] });
p.run();
return true;
}
}
return false;
}));
this.actor.connect('motion-event', Lang.bind(this, function(actor, event) {
let urlId = this._findUrlAtPos(event);
if (urlId != -1 && !this._cursorChanged) {
global.set_cursor(Shell.Cursor.POINTING_HAND);
this._cursorChanged = true;
} else if (urlId == -1) {
global.unset_cursor();
this._cursorChanged = false;
}
return false;
}));
this.actor.connect('leave-event', Lang.bind(this, function() {
if (this._cursorChanged) {
this._cursorChanged = false;
global.unset_cursor();
}
}));
},
setMarkup: function(text, allowMarkup) {
text = text ? _fixMarkup(text, allowMarkup) : '';
this._text = text;
this.actor.clutter_text.set_markup(text);
/* clutter_text.text contain text without markup */
this._urls = Utils.findUrls(this.actor.clutter_text.text);
this._highlightUrls();
},
_highlightUrls: function() {
// text here contain markup
let urls = Utils.findUrls(this._text);
let markup = '';
let pos = 0;
for (let i = 0; i < urls.length; i++) {
let url = urls[i];
let str = this._text.substr(pos, url.pos - pos);
markup += str + '<span foreground="' + this._linkColor + '"><u>' + url.url + '</u></span>';
pos = url.pos + url.url.length;
}
markup += this._text.substr(pos);
this.actor.clutter_text.set_markup(markup);
},
_findUrlAtPos: function(event) {
let success;
let [x, y] = event.get_coords();
[success, x, y] = this.actor.transform_stage_point(x, y);
let find_pos = -1;
for (let i = 0; i < this.actor.clutter_text.text.length; i++) {
let [success, px, py, line_height] = this.actor.clutter_text.position_to_coords(i);
if (py > y || py + line_height < y || x < px)
continue;
find_pos = i;
}
if (find_pos != -1) {
for (let i = 0; i < this._urls.length; i++)
if (find_pos >= this._urls[i].pos &&
this._urls[i].pos + this._urls[i].url.length > find_pos)
return i;
}
return -1;
}
};
// Notification: // Notification:
// @source: the notification's Source // @source: the notification's Source
@@ -73,7 +193,8 @@ function _cleanMarkup(text) {
// area. // area.
// //
// @params can contain values for 'customContent', 'body', 'icon', // @params can contain values for 'customContent', 'body', 'icon',
// and 'clear' parameters. // 'titleMarkup', 'bannerMarkup', 'bodyMarkup', and 'clear'
// parameters.
// //
// If @params contains a 'customContent' parameter with the value %true, // If @params contains a 'customContent' parameter with the value %true,
// then @banner will not be shown in the body of the notification when the // then @banner will not be shown in the body of the notification when the
@@ -87,6 +208,12 @@ function _cleanMarkup(text) {
// source.createNotificationIcon(). However, if @params contains an 'icon' // source.createNotificationIcon(). However, if @params contains an 'icon'
// parameter, the passed in icon will be used. // parameter, the passed in icon will be used.
// //
// If @params contains a 'titleMarkup', 'bannerMarkup', or
// 'bodyMarkup' parameter with the value %true, then the corresponding
// element is assumed to use pango markup. If the parameter is not
// present for an element, then anything that looks like markup in
// that element will appear literally in the output.
//
// If @params contains a 'clear' parameter with the value %true, then // If @params contains a 'clear' parameter with the value %true, then
// the content and the action area of the notification will be cleared. // the content and the action area of the notification will be cleared.
// The content area is also always cleared if 'customContent' is false // The content area is also always cleared if 'customContent' is false
@@ -103,6 +230,7 @@ Notification.prototype = {
this._useActionIcons = false; this._useActionIcons = false;
this._customContent = false; this._customContent = false;
this._bannerBodyText = null; this._bannerBodyText = null;
this._bannerBodyMarkup = false;
this._titleFitsInBannerMode = true; this._titleFitsInBannerMode = true;
this._spacing = 0; this._spacing = 0;
@@ -148,7 +276,8 @@ Notification.prototype = {
this._titleLabel = new St.Label(); this._titleLabel = new St.Label();
this._bannerBox.add_actor(this._titleLabel); this._bannerBox.add_actor(this._titleLabel);
this._bannerLabel = new St.Label(); this._bannerUrlHighlighter = new URLHighlighter();
this._bannerLabel = this._bannerUrlHighlighter.actor;
this._bannerBox.add_actor(this._bannerLabel); this._bannerBox.add_actor(this._bannerLabel);
this.update(title, banner, params); this.update(title, banner, params);
@@ -175,6 +304,9 @@ Notification.prototype = {
params = Params.parse(params, { customContent: false, params = Params.parse(params, { customContent: false,
body: null, body: null,
icon: null, icon: null,
titleMarkup: false,
bannerMarkup: false,
bodyMarkup: false,
clear: false }); clear: false });
this._customContent = params.customContent; this._customContent = params.customContent;
@@ -205,7 +337,7 @@ Notification.prototype = {
y_fill: false, y_fill: false,
y_align: St.Align.START }); y_align: St.Align.START });
title = title ? _cleanMarkup(title.replace(/\n/g, ' ')) : ''; title = title ? _fixMarkup(title.replace(/\n/g, ' '), params.titleMarkup) : '';
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>'); this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
// Unless the notification has custom content, we save this._bannerBodyText // Unless the notification has custom content, we save this._bannerBodyText
@@ -213,9 +345,11 @@ Notification.prototype = {
// expandable due to other elements in its content area or due to the banner // expandable due to other elements in its content area or due to the banner
// not fitting fully in the single-line mode. // not fitting fully in the single-line mode.
this._bannerBodyText = this._customContent ? null : banner; this._bannerBodyText = this._customContent ? null : banner;
this._bannerBodyMarkup = params.bannerMarkup;
banner = banner ? _cleanMarkup(banner.replace(/\n/g, ' ')) : ''; banner = banner ? banner.replace(/\n/g, ' ') : '';
this._bannerLabel.clutter_text.set_markup(banner);
this._bannerUrlHighlighter.setMarkup(banner, params.bannerMarkup);
this._bannerLabel.queue_relayout(); this._bannerLabel.queue_relayout();
// Add the bannerBody now if we know for sure we'll need it // Add the bannerBody now if we know for sure we'll need it
@@ -223,7 +357,7 @@ Notification.prototype = {
this._addBannerBody(); this._addBannerBody();
if (params.body) if (params.body)
this.addBody(params.body); this.addBody(params.body, params.bodyMarkup);
this._updated(); this._updated();
}, },
@@ -231,7 +365,7 @@ Notification.prototype = {
// @actor: actor to add to the body of the notification // @actor: actor to add to the body of the notification
// //
// Appends @actor to the notification's body // Appends @actor to the notification's body
addActor: function(actor) { addActor: function(actor, style) {
if (!this._scrollArea) { if (!this._scrollArea) {
this.actor.add_style_class_name('multi-line-notification'); this.actor.add_style_class_name('multi-line-notification');
this._scrollArea = new St.ScrollView({ name: 'notification-scrollview', this._scrollArea = new St.ScrollView({ name: 'notification-scrollview',
@@ -248,34 +382,30 @@ Notification.prototype = {
this._addBannerBody(); this._addBannerBody();
} }
this._contentArea.add(actor); this._contentArea.add(actor, style ? style : {});
this._updated(); this._updated();
}, },
// addBody: // addBody:
// @text: the text // @text: the text
// @markup: %true if @text contains pango markup
// @style: style to use when adding the actor containing the text
// //
// Adds a multi-line label containing @text to the notification. // Adds a multi-line label containing @text to the notification.
// //
// Return value: the newly-added label // Return value: the newly-added label
addBody: function(text) { addBody: function(text, markup, style) {
let body = new St.Label(); let label = new URLHighlighter(text, true, markup);
body.clutter_text.line_wrap = true;
body.clutter_text.line_wrap_mode = Pango.WrapMode.WORD_CHAR;
body.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
text = text ? _cleanMarkup(text) : ''; this.addActor(label.actor, style);
body.clutter_text.set_markup(text); return label.actor;
this.addActor(body);
return body;
}, },
_addBannerBody: function() { _addBannerBody: function() {
if (this._bannerBodyText) { if (this._bannerBodyText) {
let text = this._bannerBodyText; let text = this._bannerBodyText;
this._bannerBodyText = null; this._bannerBodyText = null;
this.addBody(text); this.addBody(text, this._bannerBodyMarkup);
} }
}, },

View File

@@ -75,11 +75,11 @@ const Urgency = {
const rewriteRules = { const rewriteRules = {
'XChat': [ 'XChat': [
{ pattern: /^XChat: Private message from: (\S*) \(.*\)$/, { pattern: /^XChat: Private message from: (\S*) \(.*\)$/,
replacement: '&lt;$1&gt;' }, replacement: '<$1>' },
{ pattern: /^XChat: New public message from: (\S*) \((.*)\)$/, { pattern: /^XChat: New public message from: (\S*) \((.*)\)$/,
replacement: '$2 &lt;$1&gt;' }, replacement: '$2 <$1>' },
{ pattern: /^XChat: Highlighted message from: (\S*) \((.*)\)$/, { pattern: /^XChat: Highlighted message from: (\S*) \((.*)\)$/,
replacement: '$2 &lt;$1&gt;' } replacement: '$2 <$1>' }
] ]
}; };
@@ -205,8 +205,6 @@ NotificationDaemon.prototype = {
return id; return id;
} }
summary = GLib.markup_escape_text(summary, -1);
let rewrites = rewriteRules[appName]; let rewrites = rewriteRules[appName];
if (rewrites) { if (rewrites) {
for (let i = 0; i < rewrites.length; i++) { for (let i = 0; i < rewrites.length; i++) {
@@ -281,7 +279,9 @@ NotificationDaemon.prototype = {
let iconActor = this._iconForNotificationData(icon, hints, source.ICON_SIZE); let iconActor = this._iconForNotificationData(icon, hints, source.ICON_SIZE);
if (notification == null) { if (notification == null) {
notification = new MessageTray.Notification(source, summary, body, { icon: iconActor }); notification = new MessageTray.Notification(source, summary, body,
{ icon: iconActor,
bannerMarkup: true });
ndata.notification = notification; ndata.notification = notification;
notification.connect('clicked', Lang.bind(this, notification.connect('clicked', Lang.bind(this,
function(n) { function(n) {
@@ -294,6 +294,7 @@ NotificationDaemon.prototype = {
notification.connect('action-invoked', Lang.bind(this, this._actionInvoked, source, id)); notification.connect('action-invoked', Lang.bind(this, this._actionInvoked, source, id));
} else { } else {
notification.update(summary, body, { icon: iconActor, notification.update(summary, body, { icon: iconActor,
bannerMarkup: true,
clear: true }); clear: true });
} }

View File

@@ -124,15 +124,15 @@ function Overview() {
Overview.prototype = { Overview.prototype = {
_init : function() { _init : function() {
this._desktopFade = new St.Bin();
global.overlay_group.add_actor(this._desktopFade);
// The actual global.background_actor is inside global.window_group, // The actual global.background_actor is inside global.window_group,
// which is hidden when displaying the overview, so we display a clone. // which is hidden when displaying the overview, so we display a clone.
this._background = new Clutter.Clone({ source: global.background_actor }); this._background = new Clutter.Clone({ source: global.background_actor });
this._background.hide(); this._background.hide();
global.overlay_group.add_actor(this._background); global.overlay_group.add_actor(this._background);
this._desktopFade = new St.Bin();
global.overlay_group.add_actor(this._desktopFade);
this._spacing = 0; this._spacing = 0;
this._group = new St.Group({ name: 'overview' }); this._group = new St.Group({ name: 'overview' });
@@ -181,7 +181,6 @@ Overview.prototype = {
this.viewSelector.addSearchProvider(new AppDisplay.PrefsSearchProvider()); this.viewSelector.addSearchProvider(new AppDisplay.PrefsSearchProvider());
this.viewSelector.addSearchProvider(new PlaceDisplay.PlaceSearchProvider()); this.viewSelector.addSearchProvider(new PlaceDisplay.PlaceSearchProvider());
this.viewSelector.addSearchProvider(new DocDisplay.DocSearchProvider()); this.viewSelector.addSearchProvider(new DocDisplay.DocSearchProvider());
this.viewSelector.addSearchProvider(new WorkspacesView.WindowSearchProvider());
// TODO - recalculate everything when desktop size changes // TODO - recalculate everything when desktop size changes
this._dash = new Dash.Dash(); this._dash = new Dash.Dash();

View File

@@ -296,15 +296,15 @@ PopupBaseMenuItem.prototype = {
}; };
Signals.addSignalMethods(PopupBaseMenuItem.prototype); Signals.addSignalMethods(PopupBaseMenuItem.prototype);
function PopupMenuItem(text) { function PopupMenuItem() {
this._init(text); this._init.apply(this, arguments);
} }
PopupMenuItem.prototype = { PopupMenuItem.prototype = {
__proto__: PopupBaseMenuItem.prototype, __proto__: PopupBaseMenuItem.prototype,
_init: function (text) { _init: function (text, params) {
PopupBaseMenuItem.prototype._init.call(this); PopupBaseMenuItem.prototype._init.call(this, params);
this.label = new St.Label({ text: text }); this.label = new St.Label({ text: text });
this.addActor(this.label); this.addActor(this.label);

View File

@@ -26,7 +26,10 @@ const UPDeviceType = {
MOUSE: 5, MOUSE: 5,
KEYBOARD: 6, KEYBOARD: 6,
PDA: 7, PDA: 7,
PHONE: 8 PHONE: 8,
MEDIA_PLAYER: 9,
TABLET: 10,
COMPUTER: 11
}; };
const UPDeviceState = { const UPDeviceState = {
@@ -68,12 +71,19 @@ Indicator.prototype = {
this._deviceItems = [ ]; this._deviceItems = [ ];
this._hasPrimary = false; this._hasPrimary = false;
this._primaryDeviceId = null; this._primaryDeviceId = null;
this._batteryItem = new PopupMenu.PopupMenuItem(''); this._batteryItem = new PopupMenu.PopupMenuItem('');
this._primaryPercentage = new St.Label();
let percentBin = new St.Bin();
percentBin.set_child(this._primaryPercentage, { x_align: St.Align.END });
this._batteryItem.addActor(percentBin);
this.menu.addMenuItem(this._batteryItem); this.menu.addMenuItem(this._batteryItem);
this._deviceSep = new PopupMenu.PopupSeparatorMenuItem(); this._deviceSep = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(this._deviceSep); this.menu.addMenuItem(this._deviceSep);
this._otherDevicePosition = 2; this._otherDevicePosition = 2;
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("What's using power..."),function() { this.menu.addAction(_("What's using power..."),function() {
GLib.spawn_command_line_async('gnome-power-statistics --device wakeups'); GLib.spawn_command_line_async('gnome-power-statistics --device wakeups');
}); });
@@ -95,10 +105,12 @@ Indicator.prototype = {
this._deviceSep.actor.hide(); this._deviceSep.actor.hide();
return; return;
} }
let [device_id, device_type, summary, percentage, state, time] = device; let [device_id, device_type, icon, percentage, state, time] = device;
if (device_type == UPDeviceType.BATTERY) { if (device_type == UPDeviceType.BATTERY) {
this._hasPrimary = true; this._hasPrimary = true;
this._batteryItem.label.text = summary; let minutes = Math.floor(time / 60);
this._batteryItem.label.text = Gettext.ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes);
this._primaryPercentage.text = '%d%%'.format(Math.round(percentage));
this._batteryItem.actor.show(); this._batteryItem.actor.show();
if (this._deviceItems.length > 0) if (this._deviceItems.length > 0)
this._deviceSep.actor.show(); this._deviceSep.actor.show();
@@ -181,24 +193,12 @@ DeviceItem.prototype = {
_init: function(device) { _init: function(device) {
PopupMenu.PopupBaseMenuItem.prototype._init.call(this); PopupMenu.PopupBaseMenuItem.prototype._init.call(this);
let [device_id, device_type, summary, percentage, state, time] = device; let [device_id, device_type, icon, percentage, state, time] = device;
this._box = new St.BoxLayout({ style_class: 'popup-device-menu-item' }); this._box = new St.BoxLayout({ style_class: 'popup-device-menu-item' });
this._label = new St.Label({ text: summary }); this._label = new St.Label({ text: this._deviceTypeToString(device_type) });
let icon; this._icon = new St.Icon({ gicon: Shell.util_icon_from_string(icon),
switch (state) {
case UPDeviceState.FULLY_CHARGED:
icon = 'battery-full-charged';
break;
case UPDeviceState.UNKNOWN:
icon = 'battery-missing';
break;
default:
icon = this._percentageToIcon(percentage) + (state == UPDeviceState.CHARGING ? '-charging' : '');
}
this._icon = new St.Icon({ icon_name: icon,
icon_type: St.IconType.SYMBOLIC, icon_type: St.IconType.SYMBOLIC,
style_class: 'popup-menu-icon' }); style_class: 'popup-menu-icon' });
@@ -212,15 +212,32 @@ DeviceItem.prototype = {
this.addActor(percentBin); this.addActor(percentBin);
}, },
_percentageToIcon: function(p) { _deviceTypeToString: function(type) {
if (p > 60) switch (type) {
return 'battery-full'; case UPDeviceType.AC_POWER:
if (p > 30) return _("AC adapter");
return 'battery-good'; case UPDeviceType.BATTERY:
if (p > 10) return _("Laptop battery");
return 'battery-low'; case UPDeviceType.UPS:
if (p > 0) return _("UPS");
return 'battery-caution'; case UPDeviceType.MONITOR:
return 'battery-empty'; return _("Monitor");
case UPDeviceType.MOUSE:
return _("Mouse");
case UPDeviceType.KEYBOARD:
return _("Keyboard");
case UPDeviceType.PDA:
return _("PDA");
case UPDeviceType.PHONE:
return _("Cell phone");
case UPDeviceType.MEDIA_PLAYER:
return _("Media player");
case UPDeviceType.TABLET:
return _("Tablet");
case UPDeviceType.COMPUTER:
return _("Computer");
default:
return _("Unknown");
}
} }
} }

View File

@@ -38,12 +38,11 @@ Indicator.prototype = {
this._output = null; this._output = null;
this._outputVolumeId = 0; this._outputVolumeId = 0;
this._outputMutedId = 0; this._outputMutedId = 0;
this._outputSwitch = new PopupMenu.PopupSwitchMenuItem(_("Volume: Muted"), false); this._outputTitle = new PopupMenu.PopupMenuItem(_("Volume"), { reactive: false });
this._outputSwitch.connect('toggled', Lang.bind(this, this._switchToggled, '_output'));
this._outputSlider = new PopupMenu.PopupSliderMenuItem(0); this._outputSlider = new PopupMenu.PopupSliderMenuItem(0);
this._outputSlider.connect('value-changed', Lang.bind(this, this._sliderChanged, '_output')); this._outputSlider.connect('value-changed', Lang.bind(this, this._sliderChanged, '_output'));
this._outputSlider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange)); this._outputSlider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange));
this.menu.addMenuItem(this._outputSwitch); this.menu.addMenuItem(this._outputTitle);
this.menu.addMenuItem(this._outputSlider); this.menu.addMenuItem(this._outputSlider);
this._separator = new PopupMenu.PopupSeparatorMenuItem(); this._separator = new PopupMenu.PopupSeparatorMenuItem();
@@ -52,12 +51,11 @@ Indicator.prototype = {
this._input = null; this._input = null;
this._inputVolumeId = 0; this._inputVolumeId = 0;
this._inputMutedId = 0; this._inputMutedId = 0;
this._inputSwitch = new PopupMenu.PopupSwitchMenuItem(_("Microphone: Muted"), false); this._inputTitle = new PopupMenu.PopupMenuItem(_("Microphone"), { reactive: false });
this._inputSwitch.connect('toggled', Lang.bind(this, this._switchToggled, '_input'));
this._inputSlider = new PopupMenu.PopupSliderMenuItem(0); this._inputSlider = new PopupMenu.PopupSliderMenuItem(0);
this._inputSlider.connect('value-changed', Lang.bind(this, this._sliderChanged, '_input')); this._inputSlider.connect('value-changed', Lang.bind(this, this._sliderChanged, '_input'));
this._inputSlider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange)); this._inputSlider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange));
this.menu.addMenuItem(this._inputSwitch); this.menu.addMenuItem(this._inputTitle);
this.menu.addMenuItem(this._inputSlider); this.menu.addMenuItem(this._inputSlider);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
@@ -75,11 +73,18 @@ Indicator.prototype = {
let currentVolume = this._output.volume; let currentVolume = this._output.volume;
if (direction == Clutter.ScrollDirection.DOWN) { if (direction == Clutter.ScrollDirection.DOWN) {
let prev_muted = this._output.is_muted;
this._output.volume = Math.max(0, currentVolume - VOLUME_MAX * VOLUME_ADJUSTMENT_STEP); this._output.volume = Math.max(0, currentVolume - VOLUME_MAX * VOLUME_ADJUSTMENT_STEP);
if (this._output.volume < 1) {
this._output.volume = 0;
if (!prev_muted)
this._output.change_is_muted(true);
}
this._output.push_volume(); this._output.push_volume();
} }
else if (direction == Clutter.ScrollDirection.UP) { else if (direction == Clutter.ScrollDirection.UP) {
this._output.volume = Math.min(VOLUME_MAX, currentVolume + VOLUME_MAX * VOLUME_ADJUSTMENT_STEP); this._output.volume = Math.min(VOLUME_MAX, currentVolume + VOLUME_MAX * VOLUME_ADJUSTMENT_STEP);
this._output.change_is_muted(false);
this._output.push_volume(); this._output.push_volume();
} }
}, },
@@ -103,8 +108,7 @@ Indicator.prototype = {
this._mutedChanged (null, null, '_output'); this._mutedChanged (null, null, '_output');
this._volumeChanged (null, null, '_output'); this._volumeChanged (null, null, '_output');
} else { } else {
this._outputSwitch.label.text = _("Volume: Muted"); this._outputSlider.setValue(0);
this._outputSwitch.setToggleState(false);
this.setIcon('audio-volume-muted-symbolic'); this.setIcon('audio-volume-muted-symbolic');
} }
}, },
@@ -124,7 +128,7 @@ Indicator.prototype = {
this._volumeChanged (null, null, '_input'); this._volumeChanged (null, null, '_input');
} else { } else {
this._separator.actor.hide(); this._separator.actor.hide();
this._inputSwitch.actor.hide(); this._inputTitle.actor.hide();
this._inputSlider.actor.hide(); this._inputSlider.actor.hide();
} }
}, },
@@ -147,11 +151,11 @@ Indicator.prototype = {
} }
if (showInput) { if (showInput) {
this._separator.actor.show(); this._separator.actor.show();
this._inputSwitch.actor.show(); this._inputTitle.actor.show();
this._inputSlider.actor.show(); this._inputSlider.actor.show();
} else { } else {
this._separator.actor.hide(); this._separator.actor.hide();
this._inputSwitch.actor.hide(); this._inputTitle.actor.hide();
this._inputSlider.actor.hide(); this._inputSlider.actor.hide();
} }
}, },
@@ -174,7 +178,17 @@ Indicator.prototype = {
log ('Volume slider changed for %s, but %s does not exist'.format(property, property)); log ('Volume slider changed for %s, but %s does not exist'.format(property, property));
return; return;
} }
this[property].volume = value * VOLUME_MAX; let volume = value * VOLUME_MAX;
let prev_muted = this[property].is_muted;
if (volume < 1) {
this[property].volume = 0;
if (!prev_muted)
this[property].change_is_muted(true);
} else {
this[property].volume = volume;
if (prev_muted)
this[property].change_is_muted(false);
}
this[property].push_volume(); this[property].push_volume();
}, },
@@ -182,20 +196,10 @@ Indicator.prototype = {
global.play_theme_sound('audio-volume-change'); global.play_theme_sound('audio-volume-change');
}, },
_switchToggled: function(switchItem, state, property) {
if (this[property] == null) {
log ('Volume mute switch toggled for %s, but %s does not exist'.format(property, property));
return;
}
this[property].change_is_muted(!state);
this._notifyVolumeChange();
},
_mutedChanged: function(object, param_spec, property) { _mutedChanged: function(object, param_spec, property) {
let muted = this[property].is_muted; let muted = this[property].is_muted;
let toggleSwitch = this[property+'Switch']; let slider = this[property+'Slider'];
toggleSwitch.setToggleState(!muted); slider.setValue(muted ? 0 : (this[property].volume / VOLUME_MAX));
this._updateLabel(property);
if (property == '_output') { if (property == '_output') {
if (muted) if (muted)
this.setIcon('audio-volume-muted'); this.setIcon('audio-volume-muted');
@@ -206,17 +210,7 @@ Indicator.prototype = {
_volumeChanged: function(object, param_spec, property) { _volumeChanged: function(object, param_spec, property) {
this[property+'Slider'].setValue(this[property].volume / VOLUME_MAX); this[property+'Slider'].setValue(this[property].volume / VOLUME_MAX);
this._updateLabel(property);
if (property == '_output' && !this._output.is_muted) if (property == '_output' && !this._output.is_muted)
this.setIcon(this._volumeToIcon(this._output.volume)); this.setIcon(this._volumeToIcon(this._output.volume));
},
_updateLabel: function(property) {
let label;
if (this[property].is_muted)
label = (property == '_output' ? _("Volume: Muted") : _("Microphone: Muted"));
else
label = (property == '_output' ? _("Volume: %3.0f%%") : _("Microphone: %3.0f%%")).format(this[property].volume / VOLUME_MAX * 100);
this[property+'Switch'].label.text = label;
} }
}; };

View File

@@ -111,11 +111,11 @@ StatusMenuButton.prototype = {
item = new PopupMenu.PopupSeparatorMenuItem(); item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("My Account...")); item = new PopupMenu.PopupMenuItem(_("My Account"));
item.connect('activate', Lang.bind(this, this._onMyAccountActivate)); item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("System Settings...")); item = new PopupMenu.PopupMenuItem(_("System Settings"));
item.connect('activate', Lang.bind(this, this._onPreferencesActivate)); item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
@@ -138,7 +138,7 @@ StatusMenuButton.prototype = {
item = new PopupMenu.PopupSeparatorMenuItem(); item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Suspend")); item = new PopupMenu.PopupMenuItem(_("Suspend..."));
item.connect('activate', Lang.bind(this, this._onShutDownActivate)); item.connect('activate', Lang.bind(this, this._onShutDownActivate));
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
@@ -153,7 +153,7 @@ StatusMenuButton.prototype = {
_onMyAccountActivate: function() { _onMyAccountActivate: function() {
Main.overview.hide(); Main.overview.hide();
this._spawn(['gnome-about-me']); this._spawn(['gnome-control-center', 'user-accounts']);
}, },
_onPreferencesActivate: function() { _onPreferencesActivate: function() {

View File

@@ -3,6 +3,7 @@
const DBus = imports.dbus; const DBus = imports.dbus;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang; const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
const Gettext = imports.gettext.domain('gnome-shell'); const Gettext = imports.gettext.domain('gnome-shell');
@@ -16,6 +17,7 @@ let contactManager;
let channelDispatcher; let channelDispatcher;
// See Notification.appendMessage // See Notification.appendMessage
const SCROLLBACK_IMMEDIATE_TIME = 60; // 1 minute
const SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes const SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes
const SCROLLBACK_RECENT_LENGTH = 20; const SCROLLBACK_RECENT_LENGTH = 20;
const SCROLLBACK_IDLE_LENGTH = 5; const SCROLLBACK_IDLE_LENGTH = 5;
@@ -469,15 +471,11 @@ Source.prototype = {
})); }));
} }
this._notification = undefined;
this._sentMessages = [];
// Since we only create sources when receiving a message, this // Since we only create sources when receiving a message, this
// is a plausible default // is a plausible default
this._presence = Telepathy.ConnectionPresenceType.AVAILABLE; this._presence = Telepathy.ConnectionPresenceType.AVAILABLE;
this._channelText = new Telepathy.ChannelText(DBus.session, connName, channelPath); this._channelText = new Telepathy.ChannelText(DBus.session, connName, channelPath);
this._sentId = this._channelText.connect('Sent', Lang.bind(this, this._messageSent));
this._receivedId = this._channelText.connect('Received', Lang.bind(this, this._messageReceived)); this._receivedId = this._channelText.connect('Received', Lang.bind(this, this._messageReceived));
this._channelText.ListPendingMessagesRemote(false, Lang.bind(this, this._gotPendingMessages)); this._channelText.ListPendingMessagesRemote(false, Lang.bind(this, this._gotPendingMessages));
@@ -521,7 +519,6 @@ Source.prototype = {
_channelClosed: function() { _channelClosed: function() {
this._channel.disconnect(this._closedId); this._channel.disconnect(this._closedId);
this._channelText.disconnect(this._receivedId); this._channelText.disconnect(this._receivedId);
this._channelText.disconnect(this._sentId);
this.destroy(); this.destroy();
}, },
@@ -529,30 +526,17 @@ Source.prototype = {
if (!Main.messageTray.contains(this)) if (!Main.messageTray.contains(this))
Main.messageTray.add(this); Main.messageTray.add(this);
if (!this._notification) { if (!this._notification)
this._notification = new Notification(this); this._notification = new Notification(this);
for (let i = 0; i < this._sentMessages.length; i ++)
this._notification.appendMessage(this._sentMessages[i], false, true);
this._sentMessages = [];
}
}, },
_messageReceived: function(channel, id, timestamp, sender, _messageReceived: function(channel, id, timestamp, sender,
type, flags, text) { type, flags, text) {
this._ensureNotification(); this._ensureNotification();
this._notification.appendMessage(text, false, false); this._notification.appendMessage(text, timestamp);
this.notify(this._notification); this.notify(this._notification);
}, },
_messageSent: function(channel, timestamp, type, text) {
if (this._notification) {
this._notification.appendMessage(text, false, true);
this.notify(this._notification);
} else {
this._sentMessages.push(text);
}
},
respond: function(text) { respond: function(text) {
this._channelText.SendRemote(Telepathy.ChannelTextMessageType.NORMAL, text); this._channelText.SendRemote(Telepathy.ChannelTextMessageType.NORMAL, text);
}, },
@@ -583,7 +567,7 @@ Source.prototype = {
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>'; msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
this._ensureNotification(); this._ensureNotification();
this._notification.appendMessage(msg, true, false); this._notification.appendPresence(msg, notify);
if (notify) if (notify)
this.notify(this._notification); this.notify(this._notification);
} }
@@ -604,23 +588,40 @@ Notification.prototype = {
this.setActionArea(this._responseEntry); this.setActionArea(this._responseEntry);
this._history = []; this._history = [];
this._timestampTimeoutId = 0;
}, },
appendMessage: function(text, asTitle, sent) { appendMessage: function(text, timestamp) {
if (asTitle)
this.update(text, null, { customContent: true });
else
this.update(this.source.title, text, { customContent: true }); this.update(this.source.title, text, { customContent: true });
this._append(text, sent ? 'chat-sent' : 'chat-received'); this._append(text, 'chat-received', timestamp);
}, },
_append: function(text, style) { _append: function(text, style, timestamp) {
let currentTime = (Date.now() / 1000);
if (!timestamp)
timestamp = currentTime;
let lastMessageTime = -1;
if (this._history.length > 0)
lastMessageTime = this._history[0].time;
// Reset the old message timeout
if (this._timestampTimeoutId)
Mainloop.source_remove(this._timestampTimeoutId);
let body = this.addBody(text); let body = this.addBody(text);
body.add_style_class_name(style); body.add_style_class_name(style);
this.scrollTo(St.Side.BOTTOM); this.scrollTo(St.Side.BOTTOM);
let now = new Date().getTime() / 1000; this._history.unshift({ actor: body, time: timestamp, realMessage: true });
this._history.unshift({ actor: body, time: now });
if (timestamp < currentTime - SCROLLBACK_IMMEDIATE_TIME)
this._appendTimestamp();
else
// Schedule a new timestamp in SCROLLBACK_IMMEDIATE_TIME
// from the timestamp of the message.
this._timestampTimeoutId = Mainloop.timeout_add_seconds(
SCROLLBACK_IMMEDIATE_TIME - (currentTime - timestamp),
Lang.bind(this, this._appendTimestamp));
if (this._history.length > 1) { if (this._history.length > 1) {
// Keep the scrollback from growing too long. If the most // Keep the scrollback from growing too long. If the most
@@ -629,17 +630,43 @@ Notification.prototype = {
// SCROLLBACK_RECENT_LENGTH previous messages. Otherwise // SCROLLBACK_RECENT_LENGTH previous messages. Otherwise
// we'll keep SCROLLBACK_IDLE_LENGTH messages. // we'll keep SCROLLBACK_IDLE_LENGTH messages.
let lastMessageTime = this._history[1].time; let maxLength = (lastMessageTime < currentTime - SCROLLBACK_RECENT_TIME) ?
let maxLength = (lastMessageTime < now - SCROLLBACK_RECENT_TIME) ?
SCROLLBACK_IDLE_LENGTH : SCROLLBACK_RECENT_LENGTH; SCROLLBACK_IDLE_LENGTH : SCROLLBACK_RECENT_LENGTH;
if (this._history.length > maxLength) { let filteredHistory = this._history.filter(function(item) { return item.realMessage });
let expired = this._history.splice(maxLength); if (filteredHistory.length > maxLength) {
let lastMessageToKeep = filteredHistory[maxLength];
let expired = this._history.splice(this._history.indexOf(lastMessageToKeep));
for (let i = 0; i < expired.length; i++) for (let i = 0; i < expired.length; i++)
expired[i].actor.destroy(); expired[i].actor.destroy();
} }
} }
}, },
_appendTimestamp: function() {
let lastMessageTime = this._history[0].time;
let lastMessageDate = new Date(lastMessageTime * 1000);
/* 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. */
let timeLabel = this.addBody(lastMessageDate.toLocaleFormat(_("Sent at %X on %A")), false, { expand: true, x_fill: false, x_align: St.Align.END });
timeLabel.add_style_class_name('chat-meta-message');
this._history.unshift({ actor: timeLabel, time: lastMessageTime, realMessage: false });
this._timestampTimeoutId = 0;
return false;
},
appendPresence: function(text, asTitle) {
if (asTitle)
this.update(text, null, { customContent: true });
else
this.update(this.source.title, null, { customContent: true });
let label = this.addBody(text);
label.add_style_class_name('chat-meta-message');
this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false});
},
grabFocus: function(lockTray) { grabFocus: function(lockTray) {
// Need to call the base class function first so that // Need to call the base class function first so that
// it saves where the key focus was before. // it saves where the key focus was before.
@@ -653,6 +680,7 @@ Notification.prototype = {
return; return;
this._responseEntry.set_text(''); this._responseEntry.set_text('');
this._append(text, 'chat-sent');
this.source.respond(text); this.source.respond(text);
} }
}; };

View File

@@ -132,6 +132,9 @@ WindowClone.prototype = {
if (this.inDrag || this._zooming) if (this.inDrag || this._zooming)
// We'll fix up the stack after the drag/zooming // We'll fix up the stack after the drag/zooming
return; return;
if (this._stackAbove == null)
this.actor.lower_bottom();
else
this.actor.raise(this._stackAbove); this.actor.raise(this._stackAbove);
}, },
@@ -239,11 +242,13 @@ WindowClone.prototype = {
this.emit('zoom-end'); this.emit('zoom-end');
this.actor.reparent(this._origParent); this.actor.reparent(this._origParent);
if (this._stackAbove == null)
this.actor.lower_bottom();
// If the workspace has been destroyed while we were reparented to // If the workspace has been destroyed while we were reparented to
// the stage, _stackAbove will be unparented and we can't raise our // the stage, _stackAbove will be unparented and we can't raise our
// actor above it - as we are bound to be destroyed anyway in that // actor above it - as we are bound to be destroyed anyway in that
// case, we can skip that step // case, we can skip that step
if (this._stackAbove && this._stackAbove.get_parent()) else if (this._stackAbove.get_parent())
this.actor.raise(this._stackAbove); this.actor.raise(this._stackAbove);
[this.actor.x, this.actor.y] = this._zoomLocalOrig.getPosition(); [this.actor.x, this.actor.y] = this._zoomLocalOrig.getPosition();
@@ -275,8 +280,13 @@ WindowClone.prototype = {
// We may not have a parent if DnD completed successfully, in // We may not have a parent if DnD completed successfully, in
// which case our clone will shortly be destroyed and replaced // which case our clone will shortly be destroyed and replaced
// with a new one on the target workspace. // with a new one on the target workspace.
if (this.actor.get_parent() != null) if (this.actor.get_parent() != null) {
if (this._stackAbove == null)
this.actor.lower_bottom();
else
this.actor.raise(this._stackAbove); this.actor.raise(this._stackAbove);
}
this.emit('drag-end'); this.emit('drag-end');
} }
@@ -459,12 +469,10 @@ WindowOverlay.prototype = {
_idleToggleCloseButton: function() { _idleToggleCloseButton: function() {
this._idleToggleCloseId = 0; this._idleToggleCloseId = 0;
let [x, y, mask] = global.get_pointer(); if (!this._windowClone.actor.has_pointer &&
let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, !this.closeButton.has_pointer)
x, y);
if (actor != this._windowClone.actor && actor != this.closeButton) {
this.closeButton.hide(); this.closeButton.hide();
}
return false; return false;
}, },
@@ -999,8 +1007,6 @@ Workspace.prototype = {
}, },
syncStacking: function(stackIndices) { syncStacking: function(stackIndices) {
let desktopClone = this._windows[0];
let visibleClones = this._getVisibleClones(); let visibleClones = this._getVisibleClones();
visibleClones.sort(function (a, b) { return stackIndices[a.metaWindow.get_stable_sequence()] - stackIndices[b.metaWindow.get_stable_sequence()]; }); visibleClones.sort(function (a, b) { return stackIndices[a.metaWindow.get_stable_sequence()] - stackIndices[b.metaWindow.get_stable_sequence()]; });
@@ -1008,7 +1014,7 @@ Workspace.prototype = {
let clone = visibleClones[i]; let clone = visibleClones[i];
let metaWindow = clone.metaWindow; let metaWindow = clone.metaWindow;
if (i == 0) { if (i == 0) {
clone.setStackAbove(desktopClone.actor); clone.setStackAbove(null);
} else { } else {
let previousClone = visibleClones[i - 1]; let previousClone = visibleClones[i - 1];
clone.setStackAbove(previousClone.actor); clone.setStackAbove(previousClone.actor);

View File

@@ -14,7 +14,6 @@ const Main = imports.ui.main;
const Overview = imports.ui.overview; const Overview = imports.ui.overview;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const Workspace = imports.ui.workspace; const Workspace = imports.ui.workspace;
const Search = imports.ui.search;
const WORKSPACE_SWITCH_TIME = 0.25; const WORKSPACE_SWITCH_TIME = 0.25;
// Note that mutter has a compile-time limit of 36 // Note that mutter has a compile-time limit of 36
@@ -35,7 +34,7 @@ function WorkspacesView(width, height, x, y, workspaces) {
WorkspacesView.prototype = { WorkspacesView.prototype = {
_init: function(width, height, x, y, workspaces) { _init: function(width, height, x, y, workspaces) {
this.actor = new St.Group({ style_class: 'workspaces single' }); this.actor = new St.Group({ style_class: 'workspaces-view' });
this.actor.set_clip(x, y, width, height); this.actor.set_clip(x, y, width, height);
this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
@@ -803,13 +802,15 @@ WorkspaceIndicatorPanel.prototype = {
this._workspaces = null; this._workspaces = null;
}, },
// Allocate the box centered to the available area like StBin would do,
// except that the full height is used even if the box is not actually
// shown. This is a workaround, as the size of the workspace area is
// determined once when entering the overview, so if it would take up
// the indicator space in that case, it would overlap it later when
// additional workspaces were added.
_allocate: function(actor, box, flags) { _allocate: function(actor, box, flags) {
let children = this._box.get_children(); let children = this._box.get_children();
// Don't display a single indicator
if (children.length == 1)
return;
let availWidth = box.x2 - box.x1; let availWidth = box.x2 - box.x1;
let availHeight = box.y2 - box.y1; let availHeight = box.y2 - box.y1;
let [minWidth, natWidth] = this._box.get_preferred_width(-1); let [minWidth, natWidth] = this._box.get_preferred_width(-1);
@@ -839,6 +840,12 @@ WorkspaceIndicatorPanel.prototype = {
updateWorkspaces: function(workspaces) { updateWorkspaces: function(workspaces) {
this._workspaces = workspaces; this._workspaces = workspaces;
// Do not display a single indicator
if (this._workspaces.length == 1)
this.actor.set_skip_paint(this._box, true);
else
this.actor.set_skip_paint(this._box, false);
this._box.remove_all(); this._box.remove_all();
for (let i = 0; i < this._workspaces.length; i++) { for (let i = 0; i < this._workspaces.length; i++) {
let actor = new St.Button({ style_class: 'workspace-indicator', let actor = new St.Button({ style_class: 'workspace-indicator',
@@ -937,18 +944,45 @@ WorkspaceControlsContainer.prototype = {
this._controls.connect('notify::hover', this._controls.connect('notify::hover',
Lang.bind(this, this._onHoverChanged)); Lang.bind(this, this._onHoverChanged));
let workId = Main.initializeDeferredWork(this.actor, this._itemDragBeginId = 0;
Lang.bind(this, function() { this._itemDragEndId = 0;
Main.overview.connect('item-drag-begin', this._windowDragBeginId = 0;
this._windowDragEndId = 0;
},
show: function() {
if (this._itemDragBeginId == 0)
this._itemDragBeginId = Main.overview.connect('item-drag-begin',
Lang.bind(this, this.popOut)); Lang.bind(this, this.popOut));
Main.overview.connect('item-drag-end', if (this._itemDragEndId == 0)
this._itemDragEndId = Main.overview.connect('item-drag-end',
Lang.bind(this, this.popIn)); Lang.bind(this, this.popIn));
Main.overview.connect('window-drag-begin', if (this._windowDragBeginId == 0)
this._windowDragBeginId = Main.overview.connect('window-drag-begin',
Lang.bind(this, this.popOut)); Lang.bind(this, this.popOut));
Main.overview.connect('window-drag-end', if (this._windowDragEndId == 0)
this._windowDragEndId = Main.overview.connect('window-drag-end',
Lang.bind(this, this.popIn)); Lang.bind(this, this.popIn));
this._controls.x = this._poppedInX(); this._controls.x = this._poppedInX();
})); },
hide: function() {
if (this._itemDragBeginId > 0) {
Main.overview.disconnect(this._itemDragBeginId);
this._itemDragBeginId = 0;
}
if (this._itemEndBeginId > 0) {
Main.overview.disconnect(this._itemDragEndId);
this._itemDragEndId = 0;
}
if (this._windowDragBeginId > 0) {
Main.overview.disconnect(this._windowDragBeginId);
this._windowDragBeginId = 0;
}
if (this._windowDragEndId > 0) {
Main.overview.disconnect(this._windowDragEndId);
this._windowDragEndId = 0;
}
}, },
_getPreferredWidth: function(actor, forHeight, alloc) { _getPreferredWidth: function(actor, forHeight, alloc) {
@@ -957,12 +991,19 @@ WorkspaceControlsContainer.prototype = {
alloc.natural_size = natWidth; alloc.natural_size = natWidth;
}, },
// Always request the full width ...
_getPreferredHeight: function(actor, forWidth, alloc) { _getPreferredHeight: function(actor, forWidth, alloc) {
let [minHeight, natHeight] = this._controls.get_preferred_height(-1); let [minHeight, natHeight] = this._controls.get_preferred_height(-1);
alloc.min_size = minHeight; alloc.min_size = minHeight;
alloc.natural_size = natHeight; alloc.natural_size = natHeight;
}, },
// ... even when the controls are popped in, to keep the width constant.
// This is necessary as the workspace size is determined once before
// entering the overview, when the controls are popped in - if the width
// varied, the workspaces would be given too much width, and the controls
// would be overlapped by the workspaces when popped out, rendering them
// useless.
_allocate: function(actor, box, flags) { _allocate: function(actor, box, flags) {
let childBox = new Clutter.ActorBox(); let childBox = new Clutter.ActorBox();
childBox.x1 = this._controls.x; childBox.x1 = this._controls.x;
@@ -1053,6 +1094,8 @@ WorkspacesDisplay.prototype = {
}, },
show: function() { show: function() {
this._controlsContainer.show();
this._workspaces = []; this._workspaces = [];
for (let i = 0; i < global.screen.n_workspaces; i++) { for (let i = 0; i < global.screen.n_workspaces; i++) {
let metaWorkspace = global.screen.get_workspace_by_index(i); let metaWorkspace = global.screen.get_workspace_by_index(i);
@@ -1099,6 +1142,8 @@ WorkspacesDisplay.prototype = {
}, },
hide: function() { hide: function() {
this._controlsContainer.hide();
if (this._nWorkspacesNotifyId > 0) if (this._nWorkspacesNotifyId > 0)
global.screen.disconnect(this._nWorkspacesNotifyId); global.screen.disconnect(this._nWorkspacesNotifyId);
this.workspacesView.destroy(); this.workspacesView.destroy();
@@ -1153,77 +1198,3 @@ WorkspacesDisplay.prototype = {
} }
}; };
Signals.addSignalMethods(WorkspacesDisplay.prototype); Signals.addSignalMethods(WorkspacesDisplay.prototype);
function WindowSearchProvider() {
this._init();
}
WindowSearchProvider.prototype = {
__proto__: Search.SearchProvider.prototype,
_init: function() {
Search.SearchProvider.prototype._init.call(this, _("WINDOWS"));
this._tracker = Shell.WindowTracker.get_default();
},
_matchWindow: function(window, terms) {
let title = window.get_title().toLowerCase();
let mtype = Search.MatchType.NONE;
for (let i = 0; i < terms.length; i ++) {
let idx = title.indexOf(terms[i]);
if (idx < 0)
return Search.MatchType.NONE;
if (idx == 0)
return Search.MatchType.PREFIX;
}
return Search.MatchType.SUBSTRING;
},
_search: function(items, terms) {
let prefixMatches = [];
let substringMatches = [];
for (let i = 0; i < items.length; i ++) {
let item = items[i];
let match = this._matchWindow(item, terms);
if (match == Search.MatchType.PREFIX)
prefixMatches.push(item);
else if (match == Search.MatchType.SUBSTRING)
substringMatches.push(item);
}
return prefixMatches.concat(substringMatches);
},
getInitialResultSet: function(terms) {
let windows = global.get_window_actors();
windows = windows.map(function(w) { return w.metaWindow });
windows = windows.filter(this._tracker.is_window_interesting);
return this._search(windows, terms);
},
getSubsearchResultSet: function(previousResults, terms) {
return this._search(previousResults, terms);
},
// FIXME: resultId is the metaWindow because there's no obvious lookup ID
getResultMeta: function(resultId) {
if (!resultId)
return null;
let app = this._tracker.get_window_app(resultId);
return { 'id': resultId,
'name': resultId.get_title(),
'icon': app.create_icon_texture(Search.RESULT_ICON_SIZE) };
},
activateResult: function(resultId) {
Main.activateWindow(resultId);
},
expandSearch: function(resultId) {
if (Main.overview && Main.overview.viewSelector)
Main.overview.viewSelector._switchDefaultTab();
}
};

View File

@@ -20,5 +20,7 @@ js/ui/windowAttentionHandler.js
js/ui/workspacesView.js js/ui/workspacesView.js
src/gvc/gvc-mixer-control.c src/gvc/gvc-mixer-control.c
src/gdmuser/gdm-user.c src/gdmuser/gdm-user.c
src/shell-app-system.c
src/shell-global.c src/shell-global.c
src/shell-uri-util.c src/shell-util.c

207
po/gl.po
View File

@@ -10,8 +10,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-11-03 00:26+0100\n" "POT-Creation-Date: 2010-11-29 17:32+0100\n"
"PO-Revision-Date: 2010-11-03 00:28+0100\n" "PO-Revision-Date: 2010-11-29 17:33+0100\n"
"Last-Translator: Fran Diéguez <frandieguez@ubuntu.com>\n" "Last-Translator: Fran Diéguez <frandieguez@ubuntu.com>\n"
"Language-Team: Galician <gnome-gl-list@gnome.org>\n" "Language-Team: Galician <gnome-gl-list@gnome.org>\n"
"Language: gl\n" "Language: gl\n"
@@ -104,10 +104,6 @@ msgid "List of desktop file IDs for favorite applications"
msgstr "Mostra os ID de ficheiros desktop para os aplicativos preferidos" msgstr "Mostra os ID de ficheiros desktop para os aplicativos preferidos"
#: ../data/org.gnome.shell.gschema.xml.in.h:13 #: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Overview workspace view mode"
msgstr "Modo de visualización do espazo de traballo de vista previa"
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "" msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax " "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 " "used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -128,19 +124,19 @@ msgstr ""
"está a un valor baleiro, usarase a tubería predeterminada. Actualmente é " "está a un valor baleiro, usarase a tubería predeterminada. Actualmente é "
"«videorate ! theoraenc ! oggmux» e grava en Ogg Theora." "«videorate ! theoraenc ! oggmux» e grava en Ogg Theora."
#: ../data/org.gnome.shell.gschema.xml.in.h:15 #: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show date in clock" msgid "Show date in clock"
msgstr "Mostrar a data no reloxo" msgstr "Mostrar a data no reloxo"
#: ../data/org.gnome.shell.gschema.xml.in.h:16 #: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show the week date in the calendar" msgid "Show the week date in the calendar"
msgstr "Mostrar a data da semana no calendario" msgstr "Mostrar a data da semana no calendario"
#: ../data/org.gnome.shell.gschema.xml.in.h:17 #: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show time with seconds" msgid "Show time with seconds"
msgstr "Mostrar a hora con segundos" msgstr "Mostrar a hora con segundos"
#: ../data/org.gnome.shell.gschema.xml.in.h:18 #: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid "" msgid ""
"The applications corresponding to these identifiers will be displayed in the " "The applications corresponding to these identifiers will be displayed in the "
"favorites area." "favorites area."
@@ -148,7 +144,7 @@ msgstr ""
"Os aplicativos que corresponden a estes identificadores mostraranse na área " "Os aplicativos que corresponden a estes identificadores mostraranse na área "
"de preferidos." "de preferidos."
#: ../data/org.gnome.shell.gschema.xml.in.h:19 #: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "" msgid ""
"The filename for recorded screencasts will be a unique filename based on the " "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 " "current date, and use this extension. It should be changed when recording to "
@@ -158,7 +154,7 @@ msgstr ""
"baseado na data actual e usa esta extensión. Debería cambiar ao grabar nun " "baseado na data actual e usa esta extensión. Debería cambiar ao grabar nun "
"formato de contedor diferente." "formato de contedor diferente."
#: ../data/org.gnome.shell.gschema.xml.in.h:20 #: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid "" msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's " "The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second." "screencast recorder in frames-per-second."
@@ -166,19 +162,11 @@ msgstr ""
"A taxa de marcos do screencast resultante grabado polo grabador de " "A taxa de marcos do screencast resultante grabado polo grabador de "
"screencasts de GNOME Shell en marcos-por-segundo." "screencasts de GNOME Shell en marcos-por-segundo."
#: ../data/org.gnome.shell.gschema.xml.in.h:21 #: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "The gstreamer pipeline used to encode the screencast" msgid "The gstreamer pipeline used to encode the screencast"
msgstr "A tubería de gstreamer usada para codificar o screencast" msgstr "A tubería de gstreamer usada para codificar o screencast"
#: ../data/org.gnome.shell.gschema.xml.in.h:22 #: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid ""
"The selected workspace view mode in the overview. Supported values are "
"\"single\" and \"grid\"."
msgstr ""
"O modo de visualización do espazo de traballo seleccionado na vista previa. "
"Os valores admitidos son \"single\" e \"grid\"."
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "" msgid ""
"The shell normally monitors active applications in order to present the most " "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 " "used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -190,7 +178,7 @@ msgstr ""
"privados, vostede pode desactivar isto por motivos de privacidade. Teña en " "privados, vostede pode desactivar isto por motivos de privacidade. Teña en "
"conta que facendo isto non eliminará os datos gardados." "conta que facendo isto non eliminará os datos gardados."
#: ../data/org.gnome.shell.gschema.xml.in.h:24 #: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "" msgid ""
"This key specifies the format used by the panel clock when the format key is " "This key specifies the format used by the panel clock when the format key is "
"set to \"custom\". You can use conversion specifiers understood by strftime" "set to \"custom\". You can use conversion specifiers understood by strftime"
@@ -202,7 +190,7 @@ msgstr ""
"de conversión que entende strftime() para obter un formato de hora " "de conversión que entende strftime() para obter un formato de hora "
"especificado. Vexa o manual de strftime() para obter máis información." "especificado. Vexa o manual de strftime() para obter máis información."
#: ../data/org.gnome.shell.gschema.xml.in.h:25 #: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "" msgid ""
"This key specifies the hour format used by the panel clock. Possible values " "This key specifies the hour format used by the panel clock. Possible values "
"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", " "are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
@@ -219,11 +207,11 @@ msgstr ""
"está estabelecido a «unix» ou «custom», as chaves show_date e show_seconds " "está estabelecido a «unix» ou «custom», as chaves show_date e show_seconds "
"ignoraranse." "ignoraranse."
#: ../data/org.gnome.shell.gschema.xml.in.h:26 #: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Uuids of extensions to disable" msgid "Uuids of extensions to disable"
msgstr "Os Uuid das extensións a desactivar" msgstr "Os Uuid das extensións a desactivar"
#: ../data/org.gnome.shell.gschema.xml.in.h:27 #: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid "Whether to collect stats about applications usage" msgid "Whether to collect stats about applications usage"
msgstr "Indica se recoller estatísticas sobre o uso dos aplicativos" msgstr "Indica se recoller estatísticas sobre o uso dos aplicativos"
@@ -409,62 +397,41 @@ msgstr "Formato _12 horas"
msgid "_24 hour format" msgid "_24 hour format"
msgstr "Formato _24 horas" msgstr "Formato _24 horas"
#. **** Applications **** #: ../js/ui/appDisplay.js:215
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
msgid "APPLICATIONS" msgid "APPLICATIONS"
msgstr "APLICATIVOS" msgstr "APLICATIVOS"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:245
msgid "PREFERENCES" msgid "PREFERENCES"
msgstr "PREFERENCIAS" msgstr "PREFERENCIAS"
#: ../js/ui/appDisplay.js:647 #: ../js/ui/appDisplay.js:538
msgid "New Window" msgid "New Window"
msgstr "Xanela nova" msgstr "Xanela nova"
#: ../js/ui/appDisplay.js:651 #: ../js/ui/appDisplay.js:542
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Eliminar dos favoritos" msgstr "Eliminar dos favoritos"
#: ../js/ui/appDisplay.js:652 #: ../js/ui/appDisplay.js:543
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Engadir aos favoritos" msgstr "Engadir aos favoritos"
#: ../js/ui/appDisplay.js:829 #: ../js/ui/appFavorites.js:91
msgid "Drag here to add favorites"
msgstr "Arrastre aquí para engadir aos favoritos"
#: ../js/ui/appFavorites.js:88
#, c-format #, c-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s foi engadido aos seus favoritos." msgstr "%s foi engadido aos seus favoritos."
#: ../js/ui/appFavorites.js:107 #: ../js/ui/appFavorites.js:122
#, c-format #, c-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s foi eliminado dos seus favoritos." msgstr "%s foi eliminado dos seus favoritos."
#: ../js/ui/dash.js:142 #: ../js/ui/dash.js:27
msgid "Find" msgid "Remove"
msgstr "Buscar" msgstr "Eliminar"
#: ../js/ui/dash.js:473 #: ../js/ui/docDisplay.js:494
msgid "Searching..."
msgstr "Buscando..."
#: ../js/ui/dash.js:487
msgid "No matching results."
msgstr "Non hai resultados que coincidan."
#. **** Places ****
#. Translators: This is in the sense of locations for documents,
#. network locations, etc.
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
msgid "PLACES & DEVICES"
msgstr "LUGARES E DISPOSITIVOS"
#. **** Documents ****
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
msgid "RECENT ITEMS" msgid "RECENT ITEMS"
msgstr "ELEMENTOS RECENTES" msgstr "ELEMENTOS RECENTES"
@@ -498,63 +465,63 @@ msgstr "Ver fonte"
msgid "Web Page" msgid "Web Page"
msgstr "Páxina web" msgstr "Páxina web"
#: ../js/ui/overview.js:160 #: ../js/ui/overview.js:112
msgid "Undo" msgid "Undo"
msgstr "Desfacer" msgstr "Desfacer"
#. TODO - _quit() doesn't really work on apps in state STARTING yet #. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:469 #: ../js/ui/panel.js:470
#, c-format #, c-format
msgid "Quit %s" msgid "Quit %s"
msgstr "Saír de %s" msgstr "Saír de %s"
#: ../js/ui/panel.js:494 #: ../js/ui/panel.js:495
msgid "Preferences" msgid "Preferences"
msgstr "Preferencias" msgstr "Preferencias"
#. Translators: This is the time format with date used #. Translators: This is the time format with date used
#. in 24-hour mode. #. in 24-hour mode.
#: ../js/ui/panel.js:580 #: ../js/ui/panel.js:581
msgid "%a %b %e, %R:%S" msgid "%a %b %e, %R:%S"
msgstr "%a %e de %b, %R:%S" msgstr "%a %e de %b, %R:%S"
#: ../js/ui/panel.js:581 #: ../js/ui/panel.js:582
msgid "%a %b %e, %R" msgid "%a %b %e, %R"
msgstr "%a %e de %b, %R" msgstr "%a %e de %b, %R"
#. Translators: This is the time format without date used #. Translators: This is the time format without date used
#. in 24-hour mode. #. in 24-hour mode.
#: ../js/ui/panel.js:585 #: ../js/ui/panel.js:586
msgid "%a %R:%S" msgid "%a %R:%S"
msgstr "%a %R:%S" msgstr "%a %R:%S"
#: ../js/ui/panel.js:586 #: ../js/ui/panel.js:587
msgid "%a %R" msgid "%a %R"
msgstr "%a %R" msgstr "%a %R"
#. Translators: This is a time format with date used #. Translators: This is a time format with date used
#. for AM/PM. #. for AM/PM.
#: ../js/ui/panel.js:593 #: ../js/ui/panel.js:594
msgid "%a %b %e, %l:%M:%S %p" msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e de %b, %H:%M:%S" msgstr "%a %e de %b, %H:%M:%S"
#: ../js/ui/panel.js:594 #: ../js/ui/panel.js:595
msgid "%a %b %e, %l:%M %p" msgid "%a %b %e, %l:%M %p"
msgstr "%a %e de %b, %H:%M" msgstr "%a %e de %b, %H:%M"
#. Translators: This is a time format without date used #. Translators: This is a time format without date used
#. for AM/PM. #. for AM/PM.
#: ../js/ui/panel.js:598 #: ../js/ui/panel.js:599
msgid "%a %l:%M:%S %p" msgid "%a %l:%M:%S %p"
msgstr "%a %H:%M:%S" msgstr "%a %H:%M:%S"
#: ../js/ui/panel.js:599 #: ../js/ui/panel.js:600
msgid "%a %l:%M %p" msgid "%a %l:%M %p"
msgstr "%a %l:%M %p" msgstr "%a %l:%M %p"
#. Button on the left side of the panel. #. 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". #. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:744 #: ../js/ui/panel.js:745
msgid "Activities" msgid "Activities"
msgstr "Actividades" msgstr "Actividades"
@@ -571,6 +538,10 @@ msgstr "Reintentar"
msgid "Connect to..." msgid "Connect to..."
msgstr "Conectar con..." msgstr "Conectar con..."
#: ../js/ui/placeDisplay.js:558
msgid "PLACES & DEVICES"
msgstr "LUGARES E DISPOSITIVOS"
#. Translators: this MUST be either "toggle-switch-us" #. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words #. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle #. "ON" and "OFF") or "toggle-switch-intl" (for toggle
@@ -597,39 +568,31 @@ msgstr "Dispoñíbel"
msgid "Busy" msgid "Busy"
msgstr "Ocupado" msgstr "Ocupado"
#: ../js/ui/statusMenu.js:111 #: ../js/ui/statusMenu.js:114
msgid "Invisible" msgid "My Account"
msgstr "Invisíbel" msgstr "A miña conta"
#: ../js/ui/statusMenu.js:119 #: ../js/ui/statusMenu.js:118
msgid "My Account..." msgid "System Settings"
msgstr "A miña conta..." msgstr "Configuracións do sistema"
#: ../js/ui/statusMenu.js:123 #: ../js/ui/statusMenu.js:125
msgid "System Settings..."
msgstr "Configuracións do sistema..."
#: ../js/ui/statusMenu.js:130
msgid "Lock Screen" msgid "Lock Screen"
msgstr "Bloquear pantalla" msgstr "Bloquear pantalla"
#: ../js/ui/statusMenu.js:134 #: ../js/ui/statusMenu.js:129
msgid "Switch User" msgid "Switch User"
msgstr "Cambiar de usuario" msgstr "Cambiar de usuario"
#: ../js/ui/statusMenu.js:139 #: ../js/ui/statusMenu.js:134
msgid "Log Out..." msgid "Log Out..."
msgstr "Saír da sesión..." msgstr "Saír da sesión..."
#: ../js/ui/statusMenu.js:146 #: ../js/ui/statusMenu.js:141
msgid "Suspend" msgid "Suspend..."
msgstr "Suspender" msgstr "Suspender..."
#: ../js/ui/statusMenu.js:150 #: ../js/ui/statusMenu.js:145
msgid "Restart..."
msgstr "Reiniciar..."
#: ../js/ui/statusMenu.js:154
msgid "Shut Down..." msgid "Shut Down..."
msgstr "Apagar..." msgstr "Apagar..."
@@ -669,14 +632,18 @@ msgstr "Configuracións de acceso universal"
msgid "High Contrast" msgid "High Contrast"
msgstr "Alto contraste" msgstr "Alto contraste"
#: ../js/ui/status/accessibility.js:202 #: ../js/ui/status/accessibility.js:205
msgid "Large Text" msgid "Large Text"
msgstr "Texto máis grande" msgstr "Texto máis grande"
#: ../js/ui/status/accessibility.js:223 #: ../js/ui/status/accessibility.js:224
msgid "Zoom" msgid "Zoom"
msgstr "Ampliación" msgstr "Ampliación"
#: ../js/ui/viewSelector.js:26
msgid "Search your computer"
msgstr "Buscar no seu computador"
#: ../js/ui/windowAttentionHandler.js:43 #: ../js/ui/windowAttentionHandler.js:43
#, c-format #, c-format
msgid "%s has finished starting" msgid "%s has finished starting"
@@ -687,14 +654,14 @@ msgstr "%s rematou de iniarse"
msgid "'%s' is ready" msgid "'%s' is ready"
msgstr "«%s» está preparado" msgstr "«%s» está preparado"
#: ../js/ui/workspacesView.js:229 #: ../js/ui/workspacesView.js:244
msgid "" msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached." "Can't add a new workspace because maximum workspaces limit has been reached."
msgstr "" msgstr ""
"Non é posíbel engadir unha área de traballo nova porque chegouse ao límite " "Non é posíbel engadir unha área de traballo nova porque chegouse ao límite "
"de áreas de traballo." "de áreas de traballo."
#: ../js/ui/workspacesView.js:246 #: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace." msgid "Can't remove the first workspace."
msgstr "Non é posíbel quitar a primeira área de traballo." msgstr "Non é posíbel quitar a primeira área de traballo."
@@ -720,49 +687,53 @@ msgstr[1] "%u entradas"
msgid "System Sounds" msgid "System Sounds"
msgstr "Sons do sistema" msgstr "Sons do sistema"
#: ../src/shell-global.c:1219 #: ../src/shell-app-system.c:1012
msgid "Unknown"
msgstr "Descoñecido"
#: ../src/shell-global.c:1163
msgid "Less than a minute ago" msgid "Less than a minute ago"
msgstr "Hai menos dun minuto" msgstr "Hai menos dun minuto"
#: ../src/shell-global.c:1223 #: ../src/shell-global.c:1167
#, c-format #, c-format
msgid "%d minute ago" msgid "%d minute ago"
msgid_plural "%d minutes ago" msgid_plural "%d minutes ago"
msgstr[0] "hai %d minuto" msgstr[0] "hai %d minuto"
msgstr[1] "hai %d minutos" msgstr[1] "hai %d minutos"
#: ../src/shell-global.c:1228 #: ../src/shell-global.c:1172
#, c-format #, c-format
msgid "%d hour ago" msgid "%d hour ago"
msgid_plural "%d hours ago" msgid_plural "%d hours ago"
msgstr[0] "hai %d hora" msgstr[0] "hai %d hora"
msgstr[1] "hai %d horas" msgstr[1] "hai %d horas"
#: ../src/shell-global.c:1233 #: ../src/shell-global.c:1177
#, c-format #, c-format
msgid "%d day ago" msgid "%d day ago"
msgid_plural "%d days ago" msgid_plural "%d days ago"
msgstr[0] "hai %d día" msgstr[0] "hai %d día"
msgstr[1] "hai %d días" msgstr[1] "hai %d días"
#: ../src/shell-global.c:1238 #: ../src/shell-global.c:1182
#, c-format #, c-format
msgid "%d week ago" msgid "%d week ago"
msgid_plural "%d weeks ago" msgid_plural "%d weeks ago"
msgstr[0] "hai %d semana" msgstr[0] "hai %d semana"
msgstr[1] "hai %d semanas" msgstr[1] "hai %d semanas"
#: ../src/shell-uri-util.c:89 #: ../src/shell-util.c:89
msgid "Home Folder" msgid "Home Folder"
msgstr "Cartafol persoal" msgstr "Cartafol persoal"
#. Translators: this is the same string as the one found in #. Translators: this is the same string as the one found in
#. * nautilus #. * nautilus
#: ../src/shell-uri-util.c:104 #: ../src/shell-util.c:104
msgid "File System" msgid "File System"
msgstr "Sistema de ficheiros" msgstr "Sistema de ficheiros"
#: ../src/shell-uri-util.c:250 #: ../src/shell-util.c:250
msgid "Search" msgid "Search"
msgstr "Buscar" msgstr "Buscar"
@@ -771,11 +742,39 @@ msgstr "Buscar"
#. * example, "Trash: some-directory". It means that the #. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash. #. * directory called "some-directory" is in the trash.
#. #.
#: ../src/shell-uri-util.c:300 #: ../src/shell-util.c:300
#, c-format #, c-format
msgid "%1$s: %2$s" msgid "%1$s: %2$s"
msgstr "%1$s: %2$s" msgstr "%1$s: %2$s"
#~ msgid "Overview workspace view mode"
#~ msgstr "Modo de visualización do espazo de traballo de vista previa"
#~ msgid ""
#~ "The selected workspace view mode in the overview. Supported values are "
#~ "\"single\" and \"grid\"."
#~ msgstr ""
#~ "O modo de visualización do espazo de traballo seleccionado na vista "
#~ "previa. Os valores admitidos son \"single\" e \"grid\"."
#~ msgid "Drag here to add favorites"
#~ msgstr "Arrastre aquí para engadir aos favoritos"
#~ msgid "Find"
#~ msgstr "Buscar"
#~ msgid "Searching..."
#~ msgstr "Buscando..."
#~ msgid "No matching results."
#~ msgstr "Non hai resultados que coincidan."
#~ msgid "Invisible"
#~ msgstr "Invisíbel"
#~ msgid "Restart..."
#~ msgstr "Reiniciar..."
#~ msgid "System Preferences..." #~ msgid "System Preferences..."
#~ msgstr "Preferencias do sistema..." #~ msgstr "Preferencias do sistema..."

View File

@@ -5,10 +5,10 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell 2.31.x\n" "Project-Id-Version: gnome-shell 2.91.x\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-10-28 17:35+0200\n" "POT-Creation-Date: 2010-11-20 14:39+0100\n"
"PO-Revision-Date: 2010-10-28 17:38+0200\n" "PO-Revision-Date: 2010-11-20 14:40+0100\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n" "Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: \n" "Language: \n"
@@ -344,19 +344,19 @@ msgstr "PROGRAMMER"
msgid "PREFERENCES" msgid "PREFERENCES"
msgstr "BRUKERVALG" msgstr "BRUKERVALG"
#: ../js/ui/appDisplay.js:648 #: ../js/ui/appDisplay.js:647
msgid "New Window" msgid "New Window"
msgstr "Nytt vindu" msgstr "Nytt vindu"
#: ../js/ui/appDisplay.js:652 #: ../js/ui/appDisplay.js:651
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Fjern fra favoritter" msgstr "Fjern fra favoritter"
#: ../js/ui/appDisplay.js:653 #: ../js/ui/appDisplay.js:652
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Legg til i favoritter" msgstr "Legg til i favoritter"
#: ../js/ui/appDisplay.js:830 #: ../js/ui/appDisplay.js:829
msgid "Drag here to add favorites" msgid "Drag here to add favorites"
msgstr "Dra hit for å legge til favoritter" msgstr "Dra hit for å legge til favoritter"
@@ -385,7 +385,7 @@ msgstr "Ingen treff."
#. **** Places **** #. **** Places ****
#. Translators: This is in the sense of locations for documents, #. Translators: This is in the sense of locations for documents,
#. network locations, etc. #. network locations, etc.
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554 #: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:558
msgid "PLACES & DEVICES" msgid "PLACES & DEVICES"
msgstr "STEDER & ENHETER" msgstr "STEDER & ENHETER"
@@ -429,58 +429,58 @@ msgid "Undo"
msgstr "Angre" msgstr "Angre"
#. TODO - _quit() doesn't really work on apps in state STARTING yet #. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:469 #: ../js/ui/panel.js:470
#, c-format #, c-format
msgid "Quit %s" msgid "Quit %s"
msgstr "Avslutt %s" msgstr "Avslutt %s"
#: ../js/ui/panel.js:494 #: ../js/ui/panel.js:495
msgid "Preferences" msgid "Preferences"
msgstr "Brukervalg" msgstr "Brukervalg"
#. Translators: This is the time format with date used #. Translators: This is the time format with date used
#. in 24-hour mode. #. in 24-hour mode.
#: ../js/ui/panel.js:580 #: ../js/ui/panel.js:581
msgid "%a %b %e, %R:%S" msgid "%a %b %e, %R:%S"
msgstr "%a %e %b, %R.%S" msgstr "%a %e %b, %R.%S"
#: ../js/ui/panel.js:581 #: ../js/ui/panel.js:582
msgid "%a %b %e, %R" msgid "%a %b %e, %R"
msgstr "%a %e %b, %R" msgstr "%a %e %b, %R"
#. Translators: This is the time format without date used #. Translators: This is the time format without date used
#. in 24-hour mode. #. in 24-hour mode.
#: ../js/ui/panel.js:585 #: ../js/ui/panel.js:586
msgid "%a %R:%S" msgid "%a %R:%S"
msgstr "%a %R.%S" msgstr "%a %R.%S"
#: ../js/ui/panel.js:586 #: ../js/ui/panel.js:587
msgid "%a %R" msgid "%a %R"
msgstr "%a %R" msgstr "%a %R"
#. Translators: This is a time format with date used #. Translators: This is a time format with date used
#. for AM/PM. #. for AM/PM.
#: ../js/ui/panel.js:593 #: ../js/ui/panel.js:594
msgid "%a %b %e, %l:%M:%S %p" msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e %b, %l.%M.%S %p" msgstr "%a %e %b, %l.%M.%S %p"
#: ../js/ui/panel.js:594 #: ../js/ui/panel.js:595
msgid "%a %b %e, %l:%M %p" msgid "%a %b %e, %l:%M %p"
msgstr "%a %e %b, %l.%M %p" msgstr "%a %e %b, %l.%M %p"
#. Translators: This is a time format without date used #. Translators: This is a time format without date used
#. for AM/PM. #. for AM/PM.
#: ../js/ui/panel.js:598 #: ../js/ui/panel.js:599
msgid "%a %l:%M:%S %p" msgid "%a %l:%M:%S %p"
msgstr "%a %l.%M.%S %p" msgstr "%a %l.%M.%S %p"
#: ../js/ui/panel.js:599 #: ../js/ui/panel.js:600
msgid "%a %l:%M %p" msgid "%a %l:%M %p"
msgstr "%a %l.%M %p" msgstr "%a %l.%M %p"
#. Button on the left side of the panel. #. 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". #. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:744 #: ../js/ui/panel.js:745
msgid "Activities" msgid "Activities"
msgstr "Aktiviteter" msgstr "Aktiviteter"
@@ -523,39 +523,31 @@ msgstr "Tilgjengelig"
msgid "Busy" msgid "Busy"
msgstr "Opptatt" msgstr "Opptatt"
#: ../js/ui/statusMenu.js:111 #: ../js/ui/statusMenu.js:114
msgid "Invisible"
msgstr "Usynlig"
#: ../js/ui/statusMenu.js:119
msgid "My Account..." msgid "My Account..."
msgstr "Min konto..." msgstr "Min konto..."
#: ../js/ui/statusMenu.js:123 #: ../js/ui/statusMenu.js:118
msgid "System Preferences..." msgid "System Settings..."
msgstr "Brukervalg for systemet..." msgstr "Systeminnstillinger..."
#: ../js/ui/statusMenu.js:130 #: ../js/ui/statusMenu.js:125
msgid "Lock Screen" msgid "Lock Screen"
msgstr "Lås skjerm" msgstr "Lås skjerm"
#: ../js/ui/statusMenu.js:134 #: ../js/ui/statusMenu.js:129
msgid "Switch User" msgid "Switch User"
msgstr "Bytt bruker" msgstr "Bytt bruker"
#: ../js/ui/statusMenu.js:139 #: ../js/ui/statusMenu.js:134
msgid "Log Out..." msgid "Log Out..."
msgstr "Logg ut..." msgstr "Logg ut..."
#: ../js/ui/statusMenu.js:146 #: ../js/ui/statusMenu.js:141
msgid "Suspend" msgid "Suspend"
msgstr "Hvilemodus" msgstr "Hvilemodus"
#: ../js/ui/statusMenu.js:150 #: ../js/ui/statusMenu.js:145
msgid "Restart..."
msgstr "Start på nytt..."
#: ../js/ui/statusMenu.js:154
msgid "Shut Down..." msgid "Shut Down..."
msgstr "Avslutt..." msgstr "Avslutt..."
@@ -595,11 +587,11 @@ msgstr "Innstillinger for tilgjengelighet"
msgid "High Contrast" msgid "High Contrast"
msgstr "Høy kontrast" msgstr "Høy kontrast"
#: ../js/ui/status/accessibility.js:202 #: ../js/ui/status/accessibility.js:205
msgid "Large Text" msgid "Large Text"
msgstr "Stor tekst" msgstr "Stor tekst"
#: ../js/ui/status/accessibility.js:223 #: ../js/ui/status/accessibility.js:224
msgid "Zoom" msgid "Zoom"
msgstr "Zoom" msgstr "Zoom"
@@ -646,49 +638,53 @@ msgstr[1] "%u innganger"
msgid "System Sounds" msgid "System Sounds"
msgstr "Systemlyder" msgstr "Systemlyder"
#: ../src/shell-global.c:1204 #: ../src/shell-app-system.c:1012
msgid "Unknown"
msgstr "Ukjent"
#: ../src/shell-global.c:1158
msgid "Less than a minute ago" msgid "Less than a minute ago"
msgstr "Mindre enn ett minutt siden" msgstr "Mindre enn ett minutt siden"
#: ../src/shell-global.c:1208 #: ../src/shell-global.c:1162
#, c-format #, c-format
msgid "%d minute ago" msgid "%d minute ago"
msgid_plural "%d minutes ago" msgid_plural "%d minutes ago"
msgstr[0] "%d minutt siden" msgstr[0] "%d minutt siden"
msgstr[1] "%d minutter siden" msgstr[1] "%d minutter siden"
#: ../src/shell-global.c:1213 #: ../src/shell-global.c:1167
#, c-format #, c-format
msgid "%d hour ago" msgid "%d hour ago"
msgid_plural "%d hours ago" msgid_plural "%d hours ago"
msgstr[0] "%d time siden" msgstr[0] "%d time siden"
msgstr[1] "%d timer siden" msgstr[1] "%d timer siden"
#: ../src/shell-global.c:1218 #: ../src/shell-global.c:1172
#, c-format #, c-format
msgid "%d day ago" msgid "%d day ago"
msgid_plural "%d days ago" msgid_plural "%d days ago"
msgstr[0] "%d dag siden" msgstr[0] "%d dag siden"
msgstr[1] "%d dager siden" msgstr[1] "%d dager siden"
#: ../src/shell-global.c:1223 #: ../src/shell-global.c:1177
#, c-format #, c-format
msgid "%d week ago" msgid "%d week ago"
msgid_plural "%d weeks ago" msgid_plural "%d weeks ago"
msgstr[0] "%d uke siden" msgstr[0] "%d uke siden"
msgstr[1] "%d uker siden" msgstr[1] "%d uker siden"
#: ../src/shell-uri-util.c:89 #: ../src/shell-util.c:89
msgid "Home Folder" msgid "Home Folder"
msgstr "Hjemmemappe" msgstr "Hjemmemappe"
#. Translators: this is the same string as the one found in #. Translators: this is the same string as the one found in
#. * nautilus #. * nautilus
#: ../src/shell-uri-util.c:104 #: ../src/shell-util.c:104
msgid "File System" msgid "File System"
msgstr "Filsystem" msgstr "Filsystem"
#: ../src/shell-uri-util.c:250 #: ../src/shell-util.c:250
msgid "Search" msgid "Search"
msgstr "Søk" msgstr "Søk"
@@ -697,7 +693,7 @@ msgstr "Søk"
#. * example, "Trash: some-directory". It means that the #. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash. #. * directory called "some-directory" is in the trash.
#. #.
#: ../src/shell-uri-util.c:300 #: ../src/shell-util.c:300
#, c-format #, c-format
msgid "%1$s: %2$s" msgid "%1$s: %2$s"
msgstr "%1$s: %2$s" msgstr "%1$s: %2$s"

549
po/th.po
View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&component=general\n" "shell&component=general\n"
"POT-Creation-Date: 2010-06-13 23:04+0000\n" "POT-Creation-Date: 2010-11-20 13:40+0000\n"
"PO-Revision-Date: 2010-06-14 20:22+0700\n" "PO-Revision-Date: 2010-11-23 10:04+0700\n"
"Last-Translator: Sira Nokyoongtong <gumaraa@gmail.com>\n" "Last-Translator: Sira Nokyoongtong <gumaraa@gmail.com>\n"
"Language-Team: Thai <thai-l10n@googlegroups.com>\n" "Language-Team: Thai <thai-l10n@googlegroups.com>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -19,11 +19,11 @@ msgstr ""
#: ../data/gnome-shell.desktop.in.in.h:1 #: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell" msgid "GNOME Shell"
msgstr "" msgstr "เชลล์ GNOME"
#: ../data/gnome-shell.desktop.in.in.h:2 #: ../data/gnome-shell.desktop.in.in.h:2
msgid "Window management and application launching" msgid "Window management and application launching"
msgstr "" msgstr "การจัดการหน้าต่างและการเรียกใช้โปรแกรม"
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1 #: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
msgid "Clock" msgid "Clock"
@@ -33,6 +33,294 @@ msgstr "นาฬิกา"
msgid "Customize the panel clock" msgid "Customize the panel clock"
msgstr "ปรับแต่งนาฬิกาบนพาเนล" msgstr "ปรับแต่งนาฬิกาบนพาเนล"
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
"dialog."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:2
msgid "Custom format of the clock"
msgstr "รูปแบบนาฬิกากำหนดเอง"
#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "File extension used for storing the screencast"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid "Framerate used for recording screencasts."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
msgstr ""
"ส่วนขยายต่างๆ ของเชลล์ GNOME จะมี uuid ประจำตัว ค่านี้จะเก็บรายชื่อของส่วนขยายที่จะไม่เรียกใช้"
#: ../data/org.gnome.shell.gschema.xml.in.h:7
msgid "History for command (Alt-F2) dialog"
msgstr "ประวัติคำสั่งของกล่องโต้ตอบเรียกโปรแกรม (Alt-F2)"
#: ../data/org.gnome.shell.gschema.xml.in.h:8
msgid "Hour format"
msgstr "รูปแบบชั่วโมง"
#: ../data/org.gnome.shell.gschema.xml.in.h:9
msgid ""
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
"clock, in addition to time."
msgstr ""
"ถ้าเลือก และรูปแบบเวลาเป็น \"12-hour\" หรือ \"24-hour\" "
"ก็จะแสดงวันที่ในนาฬิกาควบคู่กับเวลาด้วย"
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid ""
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
"time."
msgstr ""
"ถ้าเลือก และรูปแบบเวลาเป็น \"12-hour\" หรือ \"24-hour\" ก็จะแสดงวินาทีในเวลาด้วย"
# See http://en.wikipedia.org/wiki/ISO_week_date
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar."
msgstr "ถ้าเลือก จะแสดงวันที่แบบสัปดาห์ของ ISO ในปฏิทิน"
#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "List of desktop file IDs for favorite applications"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Overview workspace view mode"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:14
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 "
"the recorded video is recorded. It will normally have a unconnected source "
"pad; output from that pad will be written into the output file. However the "
"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 ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show date in clock"
msgstr "แสดงวันที่ในนาฬิกา"
# See http://en.wikipedia.org/wiki/ISO_week_date
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show the week date in the calendar"
msgstr "แสดงวันที่แบบสัปดาห์ในปฏิทิน"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid "Show time with seconds"
msgstr "แสดงเวลาพร้อมวินาที"
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:19
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 "
"a different container format."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "The gstreamer pipeline used to encode the screencast"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid ""
"The selected workspace view mode in the overview. Supported values are "
"\"single\" and \"grid\"."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:23
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 "
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid ""
"This key specifies the format used by the panel clock when the format key is "
"set to \"custom\". You can use conversion specifiers understood by strftime"
"() to obtain a specific format. See the strftime() manual for more "
"information."
msgstr ""
"ค่านี้กำหนดรูปแบบของเวลาในแอพเพล็ตนาฬิกาเมื่อกำหนดรูปแบบเป็น \"custom\" "
"คุณสามารถใช้รหัสการแปลงของ strftime() เพื่อระบุรูปแบบที่ต้องการได้ "
"ดูข้อมูลเพิ่มเติมได้จากคู่มือของ strftime()"
#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid ""
"This key specifies the hour format used by the panel clock. Possible values "
"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
"to \"custom\", the clock will display time according to the format specified "
"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
"the show_date and show_seconds keys are ignored."
msgstr ""
"ค่านี้กำหนดรูปแบบชั่วโมงที่จะใช้ในแอพเพล็ตนาฬิกา ค่าที่เป็นไปได้คือ\"12-hour\", \"24-hour\", "
"\"unix\" และ \"custom\" ถ้ากำหนดเป็น \"unix\" นาฬิกาจะแสดงเวลาเป็นวินาทีนับจาก 1970-"
"01-01 ถ้ากำหนดเป็น \"custom\" นาฬิกาจะแสดงตามรูปแบบที่กำหนดใน custom_format "
"สังเกตว่าถ้ากำหนดเป็น \"unix\" หรือ \"custom\" ค่า show_date และ show_seconds "
"ก็จะไม่มีผล"
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "Uuids of extensions to disable"
msgstr "uuid ของส่วนขยายที่จะปิดใช้"
#: ../data/org.gnome.shell.gschema.xml.in.h:27
msgid "Whether to collect stats about applications usage"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
msgid "Clip the crosshairs at the center"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
msgid "Color of the crosshairs"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
msgid ""
"Determines the length of the vertical and horizontal lines that make up the "
"crosshairs."
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
msgid ""
"Determines the position of the magnified mouse image within the magnified "
"view and how it reacts to system mouse movement. The values are - none: no "
"mouse tracking; - centered: the mouse image is displayed at the center of "
"the zoom region (which also represents the point under the system mouse) and "
"the magnified contents are scrolled as the system mouse moves; - "
"proportional: the position of the magnified mouse in the zoom region is "
"proportionally the same as the position of the system mouse on screen; - "
"push: when the magnified mouse intersects a boundary of the zoom region, the "
"contents are scrolled into view."
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
msgid ""
"Determines the transparency of the crosshairs, from fully opaque to fully "
"transparent."
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
msgid ""
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
"are clipped such that the ends of the horizontal and vertical lines surround "
"the mouse image."
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
msgid "Enable lens mode"
msgstr "เปิดใช้โหมดแว่นขยาย"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
msgid ""
"Enables/disables display of crosshairs centered on the magnified mouse "
"sprite."
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
msgid ""
"For centered mouse tracking, when the system pointer is at or near the edge "
"of the screen, the magnified contents continue to scroll such that the "
"screen edge moves into the magnified view."
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
msgid "Length of the crosshairs"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
msgid "Magnification factor"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
msgid "Mouse Tracking Mode"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
msgid "Opacity of the crosshairs"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
msgid "Screen position"
msgstr "ตำแหน่งของหน้าจอ"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
msgid "Scroll magnified contents beyond the edges of the desktop"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
msgid "Show or hide crosshairs"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
msgid "Show or hide the magnifier"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
msgid "Show or hide the magnifier and all of its zoom regions."
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
msgid ""
"The color of the the vertical and horizontal lines that make up the "
"crosshairs."
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
msgid ""
"The magnified view either fills the entire screen, or occupies the top-half, "
"bottom-half, left-half, or right-half of the screen."
msgstr ""
"ช่องแสดงภาพขยายอาจจะใหญ่เต็มจอภาพ (full-screen) หรืออาจจะกินที่แค่ครึ่งบน (top-half) "
"ครึ่งล่าง (bottom-half) ครึ่งซ้าย (left-half) หรือครึ่งขวา (right-half)"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
msgid ""
"The power of the magnification. A value of 1.0 means no magnification. A "
"value of 2.0 doubles the size."
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
msgid "Thickness of the crosshairs"
msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
msgid ""
"Whether the magnified view should be centered over the location of the "
"system mouse and move with it."
msgstr "กำหนดว่าจะให้ภาพขยายหน้าจอวางตำแหน่งกึ่งกลางที่เมาส์และเคลื่อนย้ายไปตามเมาส์หรือไม่"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr ""
#: ../data/clock-preferences.ui.h:1 #: ../data/clock-preferences.ui.h:1
msgid "Clock Format" msgid "Clock Format"
msgstr "รูปแบบนาฬิกา" msgstr "รูปแบบนาฬิกา"
@@ -62,31 +350,31 @@ msgid "_24 hour format"
msgstr "แบบ _24 ขั่วโมง" msgstr "แบบ _24 ขั่วโมง"
#. **** Applications **** #. **** Applications ****
#: ../js/ui/appDisplay.js:388 ../js/ui/dash.js:872 #: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
msgid "APPLICATIONS" msgid "APPLICATIONS"
msgstr "โปรแกรม" msgstr "โปรแกรม"
#: ../js/ui/appDisplay.js:420 #: ../js/ui/appDisplay.js:348
msgid "PREFERENCES" msgid "PREFERENCES"
msgstr "ปรับแต่ง" msgstr "ปรับแต่ง"
#: ../js/ui/appDisplay.js:726 #: ../js/ui/appDisplay.js:647
msgid "New Window" msgid "New Window"
msgstr "หน้าต่างใหม่" msgstr "หน้าต่างใหม่"
#: ../js/ui/appDisplay.js:730 #: ../js/ui/appDisplay.js:651
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "ลบออกจากรายการโปรด" msgstr "ลบออกจากรายการโปรด"
#: ../js/ui/appDisplay.js:731 #: ../js/ui/appDisplay.js:652
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "เพิ่มเข้าในรายการโปรด" msgstr "เพิ่มเข้าในรายการโปรด"
#: ../js/ui/appDisplay.js:1038 #: ../js/ui/appDisplay.js:829
msgid "Drag here to add favorites" msgid "Drag here to add favorites"
msgstr "ลากมาที่นี่เพื่อเพิ่มเป็นรายการโปรด" msgstr "ลากมาที่นี่เพื่อเพิ่มเป็นรายการโปรด"
#: ../js/ui/appFavorites.js:89 #: ../js/ui/appFavorites.js:88
#, c-format #, c-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s ถูกเพิ่มเข้าในรายการโปรดของคุณแล้ว" msgstr "%s ถูกเพิ่มเข้าในรายการโปรดของคุณแล้ว"
@@ -96,233 +384,313 @@ msgstr "%s ถูกเพิ่มเข้าในรายการโปร
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s ถูกลบออกจากรายการโปรดของคุณแล้ว" msgstr "%s ถูกลบออกจากรายการโปรดของคุณแล้ว"
#: ../js/ui/dash.js:204 #: ../js/ui/dash.js:142
msgid "Find" msgid "Find"
msgstr "หา" msgstr "หา"
#: ../js/ui/dash.js:527 #: ../js/ui/dash.js:473
msgid "Searching..." msgid "Searching..."
msgstr "กำลังค้นหา..." msgstr "กำลังค้นหา..."
#: ../js/ui/dash.js:541 #: ../js/ui/dash.js:487
msgid "No matching results." msgid "No matching results."
msgstr "ไม่มีผลลัพธ์ที่ตรงกัน" msgstr "ไม่มีผลลัพธ์ที่ตรงกัน"
#. **** Places **** #. **** Places ****
#. Translators: This is in the sense of locations for documents, #. Translators: This is in the sense of locations for documents,
#. network locations, etc. #. network locations, etc.
#: ../js/ui/dash.js:891 ../js/ui/placeDisplay.js:551 #: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:558
msgid "PLACES & DEVICES" msgid "PLACES & DEVICES"
msgstr "" msgstr "ที่หลักๆ และอุปกรณ์"
#. **** Documents **** #. **** Documents ****
#: ../js/ui/dash.js:898 ../js/ui/docDisplay.js:497 #: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
msgid "RECENT ITEMS" msgid "RECENT ITEMS"
msgstr "" msgstr "รายการล่าสุด"
#: ../js/ui/lookingGlass.js:475 #: ../js/ui/lookingGlass.js:552
msgid "No extensions installed" msgid "No extensions installed"
msgstr "ไม่มีส่วนขยายติดตั้งอยู่" msgstr "ไม่มีส่วนขยายติดตั้งอยู่"
#: ../js/ui/lookingGlass.js:512 #: ../js/ui/lookingGlass.js:589
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr "เปิดใช้งาน"
#: ../js/ui/lookingGlass.js:514 #. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled" msgid "Disabled"
msgstr "" msgstr "ปิดใช้"
#: ../js/ui/lookingGlass.js:516 #: ../js/ui/lookingGlass.js:593
msgid "Error" msgid "Error"
msgstr "ผิดพลาด" msgstr "ผิดพลาด"
#: ../js/ui/lookingGlass.js:518 #: ../js/ui/lookingGlass.js:595
msgid "Out of date" msgid "Out of date"
msgstr "" msgstr "ตกรุ่น"
#: ../js/ui/lookingGlass.js:543 #: ../js/ui/lookingGlass.js:620
msgid "View Source" msgid "View Source"
msgstr "" msgstr "ดูซอร์ส"
#: ../js/ui/lookingGlass.js:549 #: ../js/ui/lookingGlass.js:626
msgid "Web Page" msgid "Web Page"
msgstr "หน้าเว็บ" msgstr "หน้าเว็บ"
#: ../js/ui/overview.js:165 #: ../js/ui/overview.js:160
msgid "Undo" msgid "Undo"
msgstr "เรียกคืน" msgstr "เรียกคืน"
#: ../js/ui/panel.js:334 #. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:470
#, c-format #, c-format
msgid "Quit %s" msgid "Quit %s"
msgstr "ออกจาก %s" msgstr "ออกจาก %s"
#: ../js/ui/panel.js:354 #: ../js/ui/panel.js:495
msgid "Preferences" msgid "Preferences"
msgstr "ปรับแต่ง" msgstr "ปรับแต่ง"
#. Translators: This is the time format with date used #. Translators: This is the time format with date used
#. in 24-hour mode. #. in 24-hour mode.
#: ../js/ui/panel.js:441 #: ../js/ui/panel.js:581
msgid "%a %b %e, %R:%S" msgid "%a %b %e, %R:%S"
msgstr "" msgstr "%a %d %b, %R:%S"
#: ../js/ui/panel.js:442 #: ../js/ui/panel.js:582
msgid "%a %b %e, %R" msgid "%a %b %e, %R"
msgstr "" msgstr "%a %d %b, %R"
#. Translators: This is the time format without date used #. Translators: This is the time format without date used
#. in 24-hour mode. #. in 24-hour mode.
#: ../js/ui/panel.js:446 #: ../js/ui/panel.js:586
msgid "%a %R:%S" msgid "%a %R:%S"
msgstr "" msgstr "%a %R:%S"
#: ../js/ui/panel.js:447 #: ../js/ui/panel.js:587
msgid "%a %R" msgid "%a %R"
msgstr "" msgstr "%a %R"
#. Translators: This is a time format with date used #. Translators: This is a time format with date used
#. for AM/PM. #. for AM/PM.
#: ../js/ui/panel.js:454 #: ../js/ui/panel.js:594
msgid "%a %b %e, %l:%M:%S %p" msgid "%a %b %e, %l:%M:%S %p"
msgstr "" msgstr "%a %d %b, %l:%M:%S %p"
#: ../js/ui/panel.js:455 #: ../js/ui/panel.js:595
msgid "%a %b %e, %l:%M %p" msgid "%a %b %e, %l:%M %p"
msgstr "" msgstr "%a %d %b, %l:%M %p"
#. Translators: This is a time format without date used #. Translators: This is a time format without date used
#. for AM/PM. #. for AM/PM.
#: ../js/ui/panel.js:459 #: ../js/ui/panel.js:599
msgid "%a %l:%M:%S %p" msgid "%a %l:%M:%S %p"
msgstr "" msgstr "%a %l:%M:%S %p"
#: ../js/ui/panel.js:460 #: ../js/ui/panel.js:600
msgid "%a %l:%M %p" msgid "%a %l:%M %p"
msgstr "" msgstr "%a %l:%M %p"
#. Button on the left side of the panel. #. 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". #. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:562 #: ../js/ui/panel.js:745
msgid "Activities" msgid "Activities"
msgstr "กิจกรรม" msgstr "กิจกรรม"
#: ../js/ui/placeDisplay.js:108 #: ../js/ui/placeDisplay.js:111
#, c-format #, c-format
msgid "Failed to unmount '%s'" msgid "Failed to unmount '%s'"
msgstr "เลิกเมานท์ '%s' ไม่สำเร็จ" msgstr "เลิกเมานท์ '%s' ไม่สำเร็จ"
#: ../js/ui/placeDisplay.js:111 #: ../js/ui/placeDisplay.js:114
msgid "Retry" msgid "Retry"
msgstr "ลองใหม่" msgstr "ลองใหม่"
#: ../js/ui/placeDisplay.js:156 #: ../js/ui/placeDisplay.js:159
msgid "Connect to..." msgid "Connect to..."
msgstr "เชื่อมต่อไปยัง..." msgstr "เชื่อมต่อไปยัง..."
#: ../js/ui/runDialog.js:235 #. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:33
msgid "toggle-switch-us"
msgstr ""
#: ../js/ui/runDialog.js:233
msgid "Please enter a command:" msgid "Please enter a command:"
msgstr "โปรดป้อนคำสั่ง:" msgstr "โปรดป้อนคำสั่ง:"
#: ../js/ui/runDialog.js:380 #: ../js/ui/runDialog.js:378
#, c-format #, c-format
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "" msgstr "คำสั่ง '%s' ทำงานล้มเหลว:"
#: ../js/ui/statusMenu.js:91 #: ../js/ui/statusMenu.js:101
msgid "Available" msgid "Available"
msgstr "" msgstr "อยู่"
#: ../js/ui/statusMenu.js:95
msgid "Busy"
msgstr ""
#: ../js/ui/statusMenu.js:99
msgid "Invisible"
msgstr ""
#: ../js/ui/statusMenu.js:106 #: ../js/ui/statusMenu.js:106
msgid "Account Information..." msgid "Busy"
msgstr "ข้อมูลบัญชี..." msgstr "ไม่ว่าง"
#: ../js/ui/statusMenu.js:110 #: ../js/ui/statusMenu.js:114
msgid "System Preferences..." msgid "My Account..."
msgstr "ปรับแต่งระบบ..." msgstr "บัญชีของฉัน..."
#: ../js/ui/statusMenu.js:117 #: ../js/ui/statusMenu.js:118
msgid "System Settings..."
msgstr "ตั้งค่าระบบ..."
#: ../js/ui/statusMenu.js:125
msgid "Lock Screen" msgid "Lock Screen"
msgstr "ล็อคหน้าจอ" msgstr "ล็อคหน้าจอ"
#: ../js/ui/statusMenu.js:121 #: ../js/ui/statusMenu.js:129
msgid "Switch User" msgid "Switch User"
msgstr "สลับผู้ใช้" msgstr "สลับผู้ใช้"
#: ../js/ui/statusMenu.js:126 #: ../js/ui/statusMenu.js:134
msgid "Log Out..." msgid "Log Out..."
msgstr "ออกจากระบบ..." msgstr "ออกจากระบบ..."
#: ../js/ui/statusMenu.js:130 #: ../js/ui/statusMenu.js:141
msgid "Suspend"
msgstr "พักเครื่อง"
#: ../js/ui/statusMenu.js:145
msgid "Shut Down..." msgid "Shut Down..."
msgstr "ปิดเครื่อง..." msgstr "ปิดเครื่อง..."
#: ../js/ui/windowAttentionHandler.js:47 #: ../js/ui/status/accessibility.js:88
msgid "Screen Reader"
msgstr "โปรแกรมอ่านหน้าจอ"
#: ../js/ui/status/accessibility.js:91
msgid "Screen Keyboard"
msgstr "แป้นพิมพ์บนหน้าจอ"
#: ../js/ui/status/accessibility.js:94
msgid "Visual Alerts"
msgstr "แจ้งเหตุด้วยภาพ"
#: ../js/ui/status/accessibility.js:97
msgid "Sticky Keys"
msgstr "ค้างปุ่มกด"
#: ../js/ui/status/accessibility.js:100
msgid "Slow Keys"
msgstr "พิมพ์แบบช้า"
#: ../js/ui/status/accessibility.js:103
msgid "Bounce Keys"
msgstr "ป้องกันการกดแป้นรัว"
#: ../js/ui/status/accessibility.js:106
msgid "Mouse Keys"
msgstr "บังคับเมาส์ด้วยแป้น"
#: ../js/ui/status/accessibility.js:110
msgid "Universal Access Settings"
msgstr "ตั้งค่าสิ่งอำนวยความสะดวก"
#: ../js/ui/status/accessibility.js:163
msgid "High Contrast"
msgstr "สีตัดกัน"
#: ../js/ui/status/accessibility.js:205
msgid "Large Text"
msgstr "อักษรขนาดใหญ่"
#: ../js/ui/status/accessibility.js:224
msgid "Zoom"
msgstr "ซูม"
#: ../js/ui/windowAttentionHandler.js:43
#, c-format #, c-format
msgid "%s has finished starting" msgid "%s has finished starting"
msgstr "" msgstr "%s เปิดเสร็จแล้ว"
#: ../js/ui/windowAttentionHandler.js:49 #: ../js/ui/windowAttentionHandler.js:45
#, c-format #, c-format
msgid "'%s' is ready" msgid "'%s' is ready"
msgstr "'%s' พร้อมแล้ว" msgstr "'%s' พร้อมแล้ว"
#: ../js/ui/workspacesView.js:237 #: ../js/ui/workspacesView.js:229
msgid "" msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached." "Can't add a new workspace because maximum workspaces limit has been reached."
msgstr "" msgstr ""
#: ../js/ui/workspacesView.js:254 #: ../js/ui/workspacesView.js:246
msgid "Can't remove the first workspace." msgid "Can't remove the first workspace."
msgstr "ไม่สามารถลบพื้นที่ทำงานแรกได้" msgstr "ไม่สามารถลบพื้นที่ทำงานแรกได้"
#: ../src/shell-global.c:1025 #. translators:
#. * The number of sound outputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1094
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
msgstr[0] ""
#. translators:
#. * The number of sound inputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1104
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] ""
#: ../src/gvc/gvc-mixer-control.c:1402
msgid "System Sounds"
msgstr "เสียงของระบบ"
#: ../src/shell-app-system.c:1012
msgid "Unknown"
msgstr ""
#: ../src/shell-global.c:1158
msgid "Less than a minute ago" msgid "Less than a minute ago"
msgstr "ไม่ถึงหนึ่งนาทีก่อน" msgstr "ไม่ถึงหนึ่งนาทีก่อน"
#: ../src/shell-global.c:1029 #: ../src/shell-global.c:1162
#, c-format #, c-format
msgid "%d minute ago" msgid "%d minute ago"
msgid_plural "%d minutes ago" msgid_plural "%d minutes ago"
msgstr[0] "%d นาทีก่อน" msgstr[0] "%d นาทีก่อน"
#: ../src/shell-global.c:1034 #: ../src/shell-global.c:1167
#, c-format #, c-format
msgid "%d hour ago" msgid "%d hour ago"
msgid_plural "%d hours ago" msgid_plural "%d hours ago"
msgstr[0] "%d ชั่วโมงก่อน" msgstr[0] "%d ชั่วโมงก่อน"
#: ../src/shell-global.c:1039 #: ../src/shell-global.c:1172
#, c-format #, c-format
msgid "%d day ago" msgid "%d day ago"
msgid_plural "%d days ago" msgid_plural "%d days ago"
msgstr[0] "%d วันก่อน" msgstr[0] "%d วันก่อน"
#: ../src/shell-global.c:1044 #: ../src/shell-global.c:1177
#, c-format #, c-format
msgid "%d week ago" msgid "%d week ago"
msgid_plural "%d weeks ago" msgid_plural "%d weeks ago"
msgstr[0] "%d สัปดาห์ก่อน" msgstr[0] "%d สัปดาห์ก่อน"
#: ../src/shell-uri-util.c:89 #: ../src/shell-util.c:89
msgid "Home Folder" msgid "Home Folder"
msgstr "โฟลเดอร์บ้าน" msgstr "โฟลเดอร์บ้าน"
#. Translators: this is the same string as the one found in #. Translators: this is the same string as the one found in
#. * nautilus #. * nautilus
#: ../src/shell-uri-util.c:104 #: ../src/shell-util.c:104
msgid "File System" msgid "File System"
msgstr "ระบบแฟ้ม" msgstr "ระบบแฟ้ม"
#: ../src/shell-uri-util.c:250 #: ../src/shell-util.c:250
msgid "Search" msgid "Search"
msgstr "ค้นหา" msgstr "ค้นหา"
@@ -331,7 +699,10 @@ msgstr "ค้นหา"
#. * example, "Trash: some-directory". It means that the #. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash. #. * directory called "some-directory" is in the trash.
#. #.
#: ../src/shell-uri-util.c:300 #: ../src/shell-util.c:300
#, c-format #, c-format
msgid "%1$s: %2$s" msgid "%1$s: %2$s"
msgstr "" msgstr "%1$s: %2$s"
#~ msgid "Account Information..."
#~ msgstr "ข้อมูลบัญชี..."

272
po/ug.po
View File

@@ -8,10 +8,11 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=general\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"POT-Creation-Date: 2010-11-11 00:43+0000\n" "shell&component=general\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "POT-Creation-Date: 2010-11-25 14:32+0000\n"
"Last-Translator: Gheyret Kenji<gheyret@yahoo.com>\n" "PO-Revision-Date: 2010-11-25 14:28+0600\n"
"Last-Translator: Sahran <sahran@live.com>\n"
"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n" "Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,7 +21,7 @@ msgstr ""
#: ../data/gnome-shell.desktop.in.in.h:1 #: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell" msgid "GNOME Shell"
msgstr "GNOME چاپان" msgstr "GNOME Shell"
#: ../data/gnome-shell.desktop.in.in.h:2 #: ../data/gnome-shell.desktop.in.in.h:2
msgid "Window management and application launching" msgid "Window management and application launching"
@@ -32,7 +33,7 @@ msgstr "سائەت"
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2 #: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
msgid "Customize the panel clock" msgid "Customize the panel clock"
msgstr "ئىختىيارىچە تاختا سائەت" msgstr "تاختا سائەتنى ئۆزلەشتۈرىدۇ"
#: ../data/org.gnome.shell.gschema.xml.in.h:1 #: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid "" msgid ""
@@ -42,25 +43,32 @@ msgstr "ئىچكى سازلاش ۋە كۆزىتىش قورالىنى زىيار
#: ../data/org.gnome.shell.gschema.xml.in.h:2 #: ../data/org.gnome.shell.gschema.xml.in.h:2
msgid "Custom format of the clock" msgid "Custom format of the clock"
msgstr "ئىختىيارىي سائەت فورماتى" msgstr "سائەتنىڭ ئىختىيارىي فورماتى"
#: ../data/org.gnome.shell.gschema.xml.in.h:3 #: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2" msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق كىرىشىگە قۇلايلىق" msgstr ""
"ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق "
"كىرىشىگە قۇلايلىق"
#: ../data/org.gnome.shell.gschema.xml.in.h:4 #: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "File extension used for storing the screencast" msgid "File extension used for storing the screencast"
msgstr "ھۆججەت كېڭەيتىلگەن ئاتى ئېكران كەسمىسى (screencasts) ساقلاشقا ئىشلىتىلىدۇ" msgstr ""
"ئېكران كەسمىسى (screencasts) ساقلاشتا ئىشلىتىلىدىغان ھۆججەتنىڭ كېڭەيتىلگەن "
"ئاتى "
#: ../data/org.gnome.shell.gschema.xml.in.h:5 #: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid "Framerate used for recording screencasts." msgid "Framerate used for recording screencasts."
msgstr "كاندۇك نىسبىتى ئېكران كەسمىسى (screencasts) خاتىرىلەشكە ئىشلىتىلىدۇ" msgstr ""
"ئېكران كەسمىسى (screencasts) خاتىرىلەشتە ئىشلىتىلىدىغان كاندۇك تېزلىكى."
#: ../data/org.gnome.shell.gschema.xml.in.h:6 #: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "" msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which " "GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded." "should not be loaded."
msgstr "GNOME چاپان (Shell)كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا يۈكلەنمەيدىغان كېڭەيتىلمىلەر تىزىملىكىنى كۆرسىتىدۇ." msgstr ""
"GNOME چاپان (Shell)كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا "
"يۈكلەنمەيدىغان كېڭەيتىلمىلەر تىزىملىكىنى كۆرسىتىدۇ."
#: ../data/org.gnome.shell.gschema.xml.in.h:7 #: ../data/org.gnome.shell.gschema.xml.in.h:7
msgid "History for command (Alt-F2) dialog" msgid "History for command (Alt-F2) dialog"
@@ -74,13 +82,17 @@ msgstr "سائەت فورماتى"
msgid "" msgid ""
"If true and format is either \"12-hour\" or \"24-hour\", display date in the " "If true and format is either \"12-hour\" or \"24-hour\", display date in the "
"clock, in addition to time." "clock, in addition to time."
msgstr "ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» كۆرسەتكەندىن سىرت چېسلانىمۇ كۆرسىتىدۇ." msgstr ""
"ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» "
"كۆرسەتكەندىن سىرت چېسلانىمۇ كۆرسىتىدۇ."
#: ../data/org.gnome.shell.gschema.xml.in.h:10 #: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "" msgid ""
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in " "If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
"time." "time."
msgstr "ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» كۆرسەتكەندىن سىرت سېكۇنتنىمۇ كۆرسىتىدۇ." msgstr ""
"ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» "
"كۆرسەتكەندىن سىرت سېكۇنتنىمۇ كۆرسىتىدۇ. "
#: ../data/org.gnome.shell.gschema.xml.in.h:11 #: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar." msgid "If true, display the ISO week date in the calendar."
@@ -88,11 +100,11 @@ msgstr "ئەگەر راست(true) بولسا يىلنامىدىكى ISO ھەپت
#: ../data/org.gnome.shell.gschema.xml.in.h:12 #: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "List of desktop file IDs for favorite applications" msgid "List of desktop file IDs for favorite applications"
msgstr "ئامراق پروگراممىلارنىڭ ئۈستەل ئۈستى ھۆججەت ID تىزىملىكى" msgstr "ئامراق قوللىنىشچان پروگراممىلارنىڭ ئۈستەل ئۈستى ھۆججەت ID تىزىملىكى"
#: ../data/org.gnome.shell.gschema.xml.in.h:13 #: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Overview workspace view mode" msgid "Overview workspace view mode"
msgstr "قىسقىچە بايان خىزمەت رايون كۆرۈنۈش ھالىتى" msgstr "خىزمەت رايون كۆرۈنۈش ھالىتى ھەققىدە قىسقىچە بايان"
#: ../data/org.gnome.shell.gschema.xml.in.h:14 #: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "" msgid ""
@@ -105,6 +117,16 @@ msgid ""
"to an empty value, the default pipeline will be used. This is currently " "to an empty value, the default pipeline will be used. This is currently "
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora." "'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr "" msgstr ""
"ئۈن ئېلىشنى كودلاشتا ئىشلىتىلىدىغان GStreamer ئاقما لىنىيىنى تەڭشەيدۇ. ئۇ "
"gst-launch گرامماتىكىسىغا بوي سۇنىدۇ. بۇ ئاقما لىنىيىدە ئۇلانمىغان sink pad "
"بولۇشى لازىم، خاتىرىلىنىدىغان سىن مۇشۇ جايدا خاتىرىلىنىدۇ. بۇ لىنىيىدە "
"ئادەتتە يەنە بىر ئۇلانمىغان مەنبە pad بولىدۇ؛ بۇ pad چىقارغان ئۇچۇرلار "
"ھۆججەتكە يېزىلىدۇ. ئەمما ئاقما لىنىيە ئۆزىنىڭ چىقىرىشىنى بىر تەرەپ "
"قىلالايدۇ، بۇنداق بولغاندا shout2send ئارقىلىق ياكى شۇنىڭغا ئوخشاش ئۇسۇلدا "
"چىقىرىشنى icecast مۇلازىمېتىرىغا يوللايدۇ. ئاقما لىنىيە تەڭشەلمىگەن ياكى بوش "
"قىممەتكە تەڭشەلگەندە كۆڭۈلدىكى ئاقما لىنىيە قوزغىتىلىدۇ. ئۇنىڭ نۆۋەتتىكى "
"قىممىتى 'videorate ! theoraenc ! oggmux' بولۇپ، فورماتى Ogg شەكلىدە "
"خاتىرىلىنىدۇ."
#: ../data/org.gnome.shell.gschema.xml.in.h:15 #: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show date in clock" msgid "Show date in clock"
@@ -112,7 +134,7 @@ msgstr "سائەت ئىچىدە چېسلا كۆرسەت"
#: ../data/org.gnome.shell.gschema.xml.in.h:16 #: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show the week date in the calendar" msgid "Show the week date in the calendar"
msgstr "يىلنامىدە ھەپتە كۆرسەت" msgstr "يىلنامىدە ھەپتىنى كۆرسىتىدۇ"
#: ../data/org.gnome.shell.gschema.xml.in.h:17 #: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid "Show time with seconds" msgid "Show time with seconds"
@@ -129,23 +151,30 @@ msgid ""
"The filename for recorded screencasts will be a unique filename based on the " "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 " "current date, and use this extension. It should be changed when recording to "
"a different container format." "a different container format."
msgstr "خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا خاتىرىلەيدۇ." msgstr ""
"خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ "
"بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا "
"خاتىرىلەيدۇ."
#: ../data/org.gnome.shell.gschema.xml.in.h:20 #: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "" msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's " "The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second." "screencast recorder in frames-per-second."
msgstr "GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى كاندۇك نىسبىتى" msgstr ""
"GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى "
"كاندۇك سۈرىتى(ھەر سېكۇنتتىكى كاندۇك سانى)."
#: ../data/org.gnome.shell.gschema.xml.in.h:21 #: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "The gstreamer pipeline used to encode the screencast" msgid "The gstreamer pipeline used to encode the screencast"
msgstr "" msgstr "ئېكران كەسمىسىنى كودلاشتا ئىشلىتىلىدىغان gstreamer ئاقما لىنىيىسى"
#: ../data/org.gnome.shell.gschema.xml.in.h:22 #: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "" msgid ""
"The selected workspace view mode in the overview. Supported values are " "The selected workspace view mode in the overview. Supported values are "
"\"single\" and \"grid\"." "\"single\" and \"grid\"."
msgstr "تاللانغان قىسقىچە مەزمۇن خىزمەت رايونى كۆرۈنۈشىدە قوللايدىغان قىممەت «يەككە» ۋە «سېتكا»" msgstr ""
"قىسقىچە باياندىكى تاللانغان خىزمەت رايونىنىڭ كۆرۈنۈش ھالىتى. ئىشلىتىشكە "
"بولىدىغان قىممەتلەر «يەككە» ۋە «سېتكا»"
#: ../data/org.gnome.shell.gschema.xml.in.h:23 #: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "" msgid ""
@@ -153,7 +182,11 @@ msgid ""
"used ones (e.g. in launchers). While this data will be kept private, you may " "used ones (e.g. in launchers). While this data will be kept private, you may "
"want to disable this for privacy reasons. Please note that doing so won't " "want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data." "remove already saved data."
msgstr "چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ." msgstr ""
"چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار"
"(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي "
"ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق "
"قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
#: ../data/org.gnome.shell.gschema.xml.in.h:24 #: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "" msgid ""
@@ -161,7 +194,11 @@ msgid ""
"set to \"custom\". You can use conversion specifiers understood by strftime" "set to \"custom\". You can use conversion specifiers understood by strftime"
"() to obtain a specific format. See the strftime() manual for more " "() to obtain a specific format. See the strftime() manual for more "
"information." "information."
msgstr "format (فورمات) كۇنۇپكىسى \"custom\" (ئىختىيارى) قىلىپ تەڭشەلسە بۇ كۇنۇپكا تاختا سائەت ئىشلىتىدىغان فورماتنى بەلگىلەيدۇ. سىز strftime()نىڭ فورمات بەلگىسىنى ئىشلىتىپ بەلگىلەنگەن فورماتقا ئېرىشەلەيسىز. تەپسىلاتىنى strftime() نىڭ قوللانمىسىدىن كۆرۈڭ." msgstr ""
"format (فورمات) كۇنۇپكىسى \"custom\" (ئىختىيارى) قىلىپ تەڭشەلسە بۇ كۇنۇپكا "
"تاختا سائەت ئىشلىتىدىغان فورماتنى بەلگىلەيدۇ. سىز strftime()نىڭ فورمات "
"بەلگىسىنى ئىشلىتىپ بەلگىلەنگەن فورماتقا ئېرىشەلەيسىز. تەپسىلاتىنى strftime() "
"نىڭ قوللانمىسىدىن كۆرۈڭ."
#: ../data/org.gnome.shell.gschema.xml.in.h:25 #: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid "" msgid ""
@@ -171,11 +208,18 @@ msgid ""
"to \"custom\", the clock will display time according to the format specified " "to \"custom\", the clock will display time according to the format specified "
"in the custom_format key. Note that if set to either \"unix\" or \"custom\", " "in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
"the show_date and show_seconds keys are ignored." "the show_date and show_seconds keys are ignored."
msgstr "بۇ كۇنۇپكا تاختا سائەت ئىشلەتكەن سائەت فورماتىنى بەلگىلىگەن. ئىشلەتكىلى بولىدىغان قىممىتى \"12-hour\" يەنى (12 سائەت)، \"24-hour\" يەنى (24 سائەت)، \"unix\" ۋە \"custom\" (ئىختىيارى). ئەگەر \"unix\" قىلىپ تەڭشەلسە سائەت ئۆزلۈكىدىن يېڭى ئېرا (يەنى، 1970-01-01) دىن ئۆتكەن سېكۇنتنى ئاساس قىلىدۇ. ئەگەر \"custom\" قىلىپ تەڭشەلسە سائەت custom_format كۇنۇپكا قىممىتىگە ئاساسەن ۋاقىتنى كۆرسىتىدۇ. ئەگەر \"unix\" ياكى \"custom\" قىلىپ تەڭشەلسە show_date ۋە show_seconds قىممىتىگە پەرۋا قىلمايدۇ" msgstr ""
"بۇ كۇنۇپكا تاختا سائەت ئىشلەتكەن سائەت فورماتىنى بەلگىلىگەن. ئىشلەتكىلى "
"بولىدىغان قىممىتى \"12-hour\" يەنى (12 سائەت)، \"24-hour\" يەنى (24 سائەت)، "
"\"unix\" ۋە \"custom\" (ئىختىيارى). ئەگەر \"unix\" قىلىپ تەڭشەلسە سائەت "
"ئۆزلۈكىدىن يېڭى ئېرا (يەنى، 1970-01-01) دىن ئۆتكەن سېكۇنتنى ئاساس قىلىدۇ. "
"ئەگەر \"custom\" قىلىپ تەڭشەلسە سائەت custom_format كۇنۇپكا قىممىتىگە "
"ئاساسەن ۋاقىتنى كۆرسىتىدۇ. ئەگەر \"unix\" ياكى \"custom\" قىلىپ تەڭشەلسە "
"show_date ۋە show_seconds قىممىتىگە پەرۋا قىلمايدۇ"
#: ../data/org.gnome.shell.gschema.xml.in.h:26 #: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "Uuids of extensions to disable" msgid "Uuids of extensions to disable"
msgstr "كېڭەيتىلمىنىڭ Uuid چەكلەندى" msgstr "چەكلىنىدىغان كېڭەيتىلمىنىڭ Uuid سى"
#: ../data/org.gnome.shell.gschema.xml.in.h:27 #: ../data/org.gnome.shell.gschema.xml.in.h:27
msgid "Whether to collect stats about applications usage" msgid "Whether to collect stats about applications usage"
@@ -183,17 +227,18 @@ msgstr "پروگراممىنىڭ ئىشلىتىلىشى ھەققىدىكى ست
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
msgid "Clip the crosshairs at the center" msgid "Clip the crosshairs at the center"
msgstr "" msgstr "نىشانلىغۇچنى ئوتتۇرىغا توغرىلا"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
msgid "Color of the crosshairs" msgid "Color of the crosshairs"
msgstr "" msgstr "نىشانلىغۇچنىڭ رەڭگى"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
msgid "" msgid ""
"Determines the length of the vertical and horizontal lines that make up the " "Determines the length of the vertical and horizontal lines that make up the "
"crosshairs." "crosshairs."
msgstr "" msgstr ""
"نىشانلىغۇچنى ھاسىل قىلىدىغان توغرا ۋە بوي سىزىقنىڭ ئۇزۇنلۇقى بەلگىلىنىدۇ."
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
msgid "" msgid ""
@@ -212,7 +257,7 @@ msgstr ""
msgid "" msgid ""
"Determines the transparency of the crosshairs, from fully opaque to fully " "Determines the transparency of the crosshairs, from fully opaque to fully "
"transparent." "transparent."
msgstr "" msgstr "نىشانلىغۇچنىڭ سۈزۈكلۈكى تولۇق سۈزۈكتىن تولۇق تۇتۇققىچە بەلگىلىنىدۇ."
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
msgid "" msgid ""
@@ -223,7 +268,7 @@ msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
msgid "Enable lens mode" msgid "Enable lens mode"
msgstr "" msgstr "لېنزا ھالىتىنى قوزغات"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
msgid "" msgid ""
@@ -240,19 +285,19 @@ msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
msgid "Length of the crosshairs" msgid "Length of the crosshairs"
msgstr "" msgstr "نىشانلىغۇچنىڭ ئېگىزلىكى"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
msgid "Magnification factor" msgid "Magnification factor"
msgstr "" msgstr "چوڭايتىش-كىچىكلىتىش نىسبىتى"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
msgid "Mouse Tracking Mode" msgid "Mouse Tracking Mode"
msgstr "" msgstr "چاشقىنەك ئىزلاش ھالىتى"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
msgid "Opacity of the crosshairs" msgid "Opacity of the crosshairs"
msgstr "" msgstr "نىشانلىغۇچنىڭ سۈزۈكلۈكى"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
msgid "Screen position" msgid "Screen position"
@@ -264,21 +309,21 @@ msgstr "دومىلىما چوڭايتقۇچ ئۈستەل ئۈستى گىرۋەك
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
msgid "Show or hide crosshairs" msgid "Show or hide crosshairs"
msgstr "" msgstr "نىشانلىغۇچنى كۆرسەت ياكى يوشۇر"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
msgid "Show or hide the magnifier" msgid "Show or hide the magnifier"
msgstr "" msgstr "لوپا ئەينەكنى كۆرسەت ياكى يوشۇر"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
msgid "Show or hide the magnifier and all of its zoom regions." msgid "Show or hide the magnifier and all of its zoom regions."
msgstr "" msgstr "لوپا ئەينەك ۋە ئۇنىڭ ھەممە چوڭايتىش دائىرىسىنى كۆرسەت ياكى يوشۇرىدۇ."
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
msgid "" msgid ""
"The color of the the vertical and horizontal lines that make up the " "The color of the the vertical and horizontal lines that make up the "
"crosshairs." "crosshairs."
msgstr "" msgstr "نىشانلىغۇچنى ھاسىل قىلىدىغان توغرا ۋە بوي سىزىقنىڭ رەڭگى."
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
msgid "" msgid ""
@@ -290,11 +335,11 @@ msgstr ""
msgid "" msgid ""
"The power of the magnification. A value of 1.0 means no magnification. A " "The power of the magnification. A value of 1.0 means no magnification. A "
"value of 2.0 doubles the size." "value of 2.0 doubles the size."
msgstr "" msgstr "چوڭايتىش كۈچى. 1.0 چوڭايتمايدۇ، 2.0 چوڭلۇقىنى ھەسسىلەيدۇ دېگەن مەنىدە."
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
msgid "Thickness of the crosshairs" msgid "Thickness of the crosshairs"
msgstr "" msgstr "نىشانلىغۇچنىڭ قېلىنلىقى"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
msgid "" msgid ""
@@ -304,7 +349,7 @@ msgstr ""
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24 #: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
msgid "Width of the vertical and horizontal lines that make up the crosshairs." msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr "" msgstr "نىشانلىغۇچنى ھاسىل قىلىدىغان توغرا ۋە بوي سىزىقنىڭ كەڭلىكى."
#: ../data/clock-preferences.ui.h:1 #: ../data/clock-preferences.ui.h:1
msgid "Clock Format" msgid "Clock Format"
@@ -316,11 +361,11 @@ msgstr "سائەت مايىللىقى"
#: ../data/clock-preferences.ui.h:3 #: ../data/clock-preferences.ui.h:3
msgid "Panel Display" msgid "Panel Display"
msgstr "تاختا كۆرسەت" msgstr "تاختا كۆرسىتىش"
#: ../data/clock-preferences.ui.h:4 #: ../data/clock-preferences.ui.h:4
msgid "Show seco_nds" msgid "Show seco_nds"
msgstr "سېكۇنت كۆرسەت(_N)" msgstr "سېكۇنتنى كۆرسەت(_N)"
#: ../data/clock-preferences.ui.h:5 #: ../data/clock-preferences.ui.h:5
msgid "Show the _date" msgid "Show the _date"
@@ -357,12 +402,12 @@ msgstr "يىغقۇچقا قوش"
#: ../js/ui/appDisplay.js:829 #: ../js/ui/appDisplay.js:829
msgid "Drag here to add favorites" msgid "Drag here to add favorites"
msgstr "بۇ جايغا سۆرەپ قىسقۇچقا قوش" msgstr "بۇ جايغا سۆرەپ يىغقۇچقا قوش"
#: ../js/ui/appFavorites.js:88 #: ../js/ui/appFavorites.js:88
#, c-format #, c-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s يىغقۇچىڭىزغا قوشۇلىدۇ." msgstr "%s يىغقۇچىڭىزغا قوشۇلدى."
#: ../js/ui/appFavorites.js:107 #: ../js/ui/appFavorites.js:107
#, c-format #, c-format
@@ -375,7 +420,7 @@ msgstr "ئىزدە"
#: ../js/ui/dash.js:473 #: ../js/ui/dash.js:473
msgid "Searching..." msgid "Searching..."
msgstr "ئىزدەۋاتىدۇ" msgstr "ئىزدەۋاتىدۇ..."
#: ../js/ui/dash.js:487 #: ../js/ui/dash.js:487
msgid "No matching results." msgid "No matching results."
@@ -384,7 +429,7 @@ msgstr "ماس كېلىدىغان نەتىجە يوق."
#. **** Places **** #. **** Places ****
#. Translators: This is in the sense of locations for documents, #. Translators: This is in the sense of locations for documents,
#. network locations, etc. #. network locations, etc.
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554 #: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:558
msgid "PLACES & DEVICES" msgid "PLACES & DEVICES"
msgstr "ئورۇن ۋە ئۈسكۈنىلەر" msgstr "ئورۇن ۋە ئۈسكۈنىلەر"
@@ -428,65 +473,65 @@ msgid "Undo"
msgstr "يېنىۋال" msgstr "يېنىۋال"
#. TODO - _quit() doesn't really work on apps in state STARTING yet #. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:469 #: ../js/ui/panel.js:470
#, c-format #, c-format
msgid "Quit %s" msgid "Quit %s"
msgstr "%s چېكىن" msgstr "%s چېكىن"
#: ../js/ui/panel.js:494 #: ../js/ui/panel.js:495
msgid "Preferences" msgid "Preferences"
msgstr "مايىللىق" msgstr "مايىللىق"
#. Translators: This is the time format with date used #. Translators: This is the time format with date used
#. in 24-hour mode. #. in 24-hour mode.
#: ../js/ui/panel.js:580 #: ../js/ui/panel.js:581
msgid "%a %b %e, %R:%S" msgid "%a %b %e, %R:%S"
msgstr "%a %b %e، %R:%S" msgstr "%a %b %e، %R:%S"
#: ../js/ui/panel.js:581 #: ../js/ui/panel.js:582
msgid "%a %b %e, %R" msgid "%a %b %e, %R"
msgstr "%a %b %e، %R" msgstr "%a %b %e، %R"
#. Translators: This is the time format without date used #. Translators: This is the time format without date used
#. in 24-hour mode. #. in 24-hour mode.
#: ../js/ui/panel.js:585 #: ../js/ui/panel.js:586
msgid "%a %R:%S" msgid "%a %R:%S"
msgstr "%a %R:%S" msgstr "%a %R:%S"
#: ../js/ui/panel.js:586 #: ../js/ui/panel.js:587
msgid "%a %R" msgid "%a %R"
msgstr "%a %R" msgstr "%a %R"
#. Translators: This is a time format with date used #. Translators: This is a time format with date used
#. for AM/PM. #. for AM/PM.
#: ../js/ui/panel.js:593
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %b %e, %l:%M:%S %p"
#: ../js/ui/panel.js:594 #: ../js/ui/panel.js:594
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %b %e، %l:%M:%S %p"
#: ../js/ui/panel.js:595
msgid "%a %b %e, %l:%M %p" msgid "%a %b %e, %l:%M %p"
msgstr "%a %b %e, %l:%M %p" msgstr "%a %b %e، %l:%M %p"
#. Translators: This is a time format without date used #. Translators: This is a time format without date used
#. for AM/PM. #. for AM/PM.
#: ../js/ui/panel.js:598 #: ../js/ui/panel.js:599
msgid "%a %l:%M:%S %p" msgid "%a %l:%M:%S %p"
msgstr "%a %l:%M:%S %p" msgstr "%a %l:%M:%S %p"
#: ../js/ui/panel.js:599 #: ../js/ui/panel.js:600
msgid "%a %l:%M %p" msgid "%a %l:%M %p"
msgstr "%p%l:%M (%a)" msgstr "%p%l:%M (%a)"
#. Button on the left side of the panel. #. 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". #. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:744 #: ../js/ui/panel.js:745
msgid "Activities" msgid "Activities"
msgstr "ھەرىكەتچان" msgstr "پائالىيەتلەر"
#: ../js/ui/placeDisplay.js:111 #: ../js/ui/placeDisplay.js:111
#, c-format #, c-format
msgid "Failed to unmount '%s'" msgid "Failed to unmount '%s'"
msgstr "%s نىڭ ئېگەرنى يېشىش مەغلۇپ بولدى." msgstr "«%s» نى ئېگەرسىزلەش مەغلۇپ بولدى"
#: ../js/ui/placeDisplay.js:114 #: ../js/ui/placeDisplay.js:114
msgid "Retry" msgid "Retry"
@@ -494,7 +539,7 @@ msgstr "قايتا سىنا"
#: ../js/ui/placeDisplay.js:159 #: ../js/ui/placeDisplay.js:159
msgid "Connect to..." msgid "Connect to..."
msgstr "باغلانماق..." msgstr "باغلىنىش…"
#. Translators: this MUST be either "toggle-switch-us" #. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words #. (for toggle switches containing the English words
@@ -503,7 +548,7 @@ msgstr "باغلانماق..."
#. simply result in invisible toggle switches. #. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:33 #: ../js/ui/popupMenu.js:33
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "" msgstr "toggle-switch-us"
#: ../js/ui/runDialog.js:233 #: ../js/ui/runDialog.js:233
msgid "Please enter a command:" msgid "Please enter a command:"
@@ -512,49 +557,47 @@ msgstr "بۇيرۇق كىرگۈزۈڭ:"
#: ../js/ui/runDialog.js:378 #: ../js/ui/runDialog.js:378
#, c-format #, c-format
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "'%s' ئىجرا قىلالمىدى:" msgstr "«%s» ئىجرا قىلىش مەغلۇپ بولدى:"
#: ../js/ui/statusMenu.js:101 #: ../js/ui/statusMenu.js:101
msgid "Available" msgid "Available"
msgstr "ئىشلىتىلىشچان" msgstr "بار"
#: ../js/ui/statusMenu.js:106 #: ../js/ui/statusMenu.js:106
msgid "Busy" msgid "Busy"
msgstr "ئالدىراش" msgstr "ئالدىراش"
#: ../js/ui/statusMenu.js:111 #: ../js/ui/statusMenu.js:114
msgid "Invisible" #, fuzzy
msgstr "يوشۇرۇن" #| msgid "My Account..."
msgid "My Account"
msgstr "ھېساباتىم…"
#: ../js/ui/statusMenu.js:119 #: ../js/ui/statusMenu.js:118
msgid "My Account..." #, fuzzy
msgstr "" #| msgid "System Settings..."
msgid "System Settings"
msgstr "سىستېما تەڭشەكلىرى..."
#: ../js/ui/statusMenu.js:123 #: ../js/ui/statusMenu.js:125
msgid "System Settings..."
msgstr "سىستېما تەڭشەكلىرى"
#: ../js/ui/statusMenu.js:130
msgid "Lock Screen" msgid "Lock Screen"
msgstr "ئېكراننى قۇلۇپلا" msgstr "ئېكراننى قۇلۇپلاش"
#: ../js/ui/statusMenu.js:129
msgid "Switch User"
msgstr "ئىشلەتكۈچى ئالماشتۇرۇش"
#: ../js/ui/statusMenu.js:134 #: ../js/ui/statusMenu.js:134
msgid "Switch User"
msgstr "ئىشلەتكۈچى ئالماشتۇر"
#: ../js/ui/statusMenu.js:139
msgid "Log Out..." msgid "Log Out..."
msgstr "تىزىمدىن چىق…" msgstr "تىزىمدىن چىقىش…"
#: ../js/ui/statusMenu.js:146 #: ../js/ui/statusMenu.js:141
msgid "Suspend" #, fuzzy
msgstr "ۋاقىتلىق توختىتىش" #| msgid "Suspend"
msgid "Suspend..."
msgstr "توڭلات"
#: ../js/ui/statusMenu.js:150 #: ../js/ui/statusMenu.js:145
msgid "Restart..."
msgstr ""
#: ../js/ui/statusMenu.js:154
msgid "Shut Down..." msgid "Shut Down..."
msgstr "تاقا…" msgstr "تاقا…"
@@ -572,33 +615,33 @@ msgstr "كۆرۈنمە ئاگاھلاندۇرۇش"
#: ../js/ui/status/accessibility.js:97 #: ../js/ui/status/accessibility.js:97
msgid "Sticky Keys" msgid "Sticky Keys"
msgstr "چاپلاش كۇنۇپكىسى" msgstr "Sticky Keys"
#: ../js/ui/status/accessibility.js:100 #: ../js/ui/status/accessibility.js:100
msgid "Slow Keys" msgid "Slow Keys"
msgstr "ئاستا كۇنۇپكا" msgstr "Slow Keys"
#: ../js/ui/status/accessibility.js:103 #: ../js/ui/status/accessibility.js:103
msgid "Bounce Keys" msgid "Bounce Keys"
msgstr "قاڭقىش كۇنۇپكىسى" msgstr "Bounce Keys"
#: ../js/ui/status/accessibility.js:106 #: ../js/ui/status/accessibility.js:106
msgid "Mouse Keys" msgid "Mouse Keys"
msgstr "چاشقىنەك كۇنۇپكا" msgstr "Mouse Keys"
#: ../js/ui/status/accessibility.js:110 #: ../js/ui/status/accessibility.js:110
msgid "Universal Access Settings" msgid "Universal Access Settings"
msgstr "ھەممىباب زىيارەت تەڭشىكى" msgstr "ئۇنىۋېرسال زىيارەت تەڭشىكى"
#: ../js/ui/status/accessibility.js:163 #: ../js/ui/status/accessibility.js:163
msgid "High Contrast" msgid "High Contrast"
msgstr "يۇقىرى ئاق-قارىلىقى" msgstr "يۇقىرى ئاق-قارىلىقى"
#: ../js/ui/status/accessibility.js:202 #: ../js/ui/status/accessibility.js:205
msgid "Large Text" msgid "Large Text"
msgstr "چوڭ تېكىست" msgstr "چوڭ تېكىست"
#: ../js/ui/status/accessibility.js:223 #: ../js/ui/status/accessibility.js:224
msgid "Zoom" msgid "Zoom"
msgstr "كېڭەيت تارايت" msgstr "كېڭەيت تارايت"
@@ -610,7 +653,7 @@ msgstr "%s باشلاشنى تاماملىدى"
#: ../js/ui/windowAttentionHandler.js:45 #: ../js/ui/windowAttentionHandler.js:45
#, c-format #, c-format
msgid "'%s' is ready" msgid "'%s' is ready"
msgstr "'%s' تەييار بولدى" msgstr "«%s» تەييار"
#: ../js/ui/workspacesView.js:229 #: ../js/ui/workspacesView.js:229
msgid "" msgid ""
@@ -619,7 +662,7 @@ msgstr "يېڭى خىزمەت رايونى قوشالمايدۇ چۈنكى ئە
#: ../js/ui/workspacesView.js:246 #: ../js/ui/workspacesView.js:246
msgid "Can't remove the first workspace." msgid "Can't remove the first workspace."
msgstr "بىرىنچى خىزمەت رايونىنى چىقىرىۋېتەلمەيدۇ." msgstr "بىرىنچى خىزمەت رايونىنى چىقىرىۋەتكىلى بولمايدۇ."
#. translators: #. translators:
#. * The number of sound outputs on a particular device #. * The number of sound outputs on a particular device
@@ -627,7 +670,7 @@ msgstr "بىرىنچى خىزمەت رايونىنى چىقىرىۋېتەلمە
#, c-format #, c-format
msgid "%u Output" msgid "%u Output"
msgid_plural "%u Outputs" msgid_plural "%u Outputs"
msgstr[0] "%u چىقار" msgstr[0] "%u چىقىرىلما"
#. translators: #. translators:
#. * The number of sound inputs on a particular device #. * The number of sound inputs on a particular device
@@ -635,51 +678,55 @@ msgstr[0] "%u چىقار"
#, c-format #, c-format
msgid "%u Input" msgid "%u Input"
msgid_plural "%u Inputs" msgid_plural "%u Inputs"
msgstr[0] "%u كىرگۈز" msgstr[0] "%u كىرگۈزۈلمە"
#: ../src/gvc/gvc-mixer-control.c:1402 #: ../src/gvc/gvc-mixer-control.c:1402
msgid "System Sounds" msgid "System Sounds"
msgstr "سىستېما ئاۋازى" msgstr "سىستېما ئاۋازى"
#: ../src/shell-global.c:1219 #: ../src/shell-app-system.c:1012
msgid "Unknown"
msgstr "نامەلۇم"
#: ../src/shell-global.c:1163
msgid "Less than a minute ago" msgid "Less than a minute ago"
msgstr "بىر مىنۇتتىنمۇ ئىلگىرى" msgstr "بىر مىنۇتتىنمۇ ئىلگىرى"
#: ../src/shell-global.c:1223 #: ../src/shell-global.c:1167
#, c-format #, c-format
msgid "%d minute ago" msgid "%d minute ago"
msgid_plural "%d minutes ago" msgid_plural "%d minutes ago"
msgstr[0] "%d مىنۇت ئىلگىرى" msgstr[0] "%d مىنۇت ئىلگىرى"
#: ../src/shell-global.c:1228 #: ../src/shell-global.c:1172
#, c-format #, c-format
msgid "%d hour ago" msgid "%d hour ago"
msgid_plural "%d hours ago" msgid_plural "%d hours ago"
msgstr[0] "%d سائەت ئىلگىرى" msgstr[0] "%d سائەت ئىلگىرى"
#: ../src/shell-global.c:1233 #: ../src/shell-global.c:1177
#, c-format #, c-format
msgid "%d day ago" msgid "%d day ago"
msgid_plural "%d days ago" msgid_plural "%d days ago"
msgstr[0] "%d كۈن ئىلگىرى" msgstr[0] "%d كۈن ئىلگىرى"
#: ../src/shell-global.c:1238 #: ../src/shell-global.c:1182
#, c-format #, c-format
msgid "%d week ago" msgid "%d week ago"
msgid_plural "%d weeks ago" msgid_plural "%d weeks ago"
msgstr[0] "%d ھەپتە ئىلگىرى" msgstr[0] "%d ھەپتە ئىلگىرى"
#: ../src/shell-uri-util.c:89 #: ../src/shell-util.c:89
msgid "Home Folder" msgid "Home Folder"
msgstr "باش مۇندەرىجە" msgstr "ماكان مۇندەرىجە"
#. Translators: this is the same string as the one found in #. Translators: this is the same string as the one found in
#. * nautilus #. * nautilus
#: ../src/shell-uri-util.c:104 #: ../src/shell-util.c:104
msgid "File System" msgid "File System"
msgstr "ھۆججەت سىستېمىسى" msgstr "ھۆججەت سىستېمىسى"
#: ../src/shell-uri-util.c:250 #: ../src/shell-util.c:250
msgid "Search" msgid "Search"
msgstr "ئىزدە" msgstr "ئىزدە"
@@ -688,7 +735,10 @@ msgstr "ئىزدە"
#. * example, "Trash: some-directory". It means that the #. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash. #. * directory called "some-directory" is in the trash.
#. #.
#: ../src/shell-uri-util.c:300 #: ../src/shell-util.c:300
#, c-format #, c-format
msgid "%1$s: %2$s" msgid "%1$s: %2$s"
msgstr "%1$s: %2$s " msgstr "%1$s: %2$s "
#~ msgid "Invisible"
#~ msgstr "يوشۇرۇن"

View File

@@ -13,8 +13,6 @@ bin_SCRIPTS = gnome-shell gnome-shell-clock-preferences
gnome-shell: gnome-shell.in gnome-shell: gnome-shell.in
$(AM_V_GEN) sed -e "s|@MUTTER_BIN_DIR[@]|$(MUTTER_BIN_DIR)|" \ $(AM_V_GEN) sed -e "s|@MUTTER_BIN_DIR[@]|$(MUTTER_BIN_DIR)|" \
-e "s|@datadir[@]|$(datadir)|" \ -e "s|@datadir[@]|$(datadir)|" \
-e "s|@GJS_JS_DIR[@]|$(GJS_JS_DIR)|" \
-e "s|@GJS_JS_NATIVE_DIR[@]|$(GJS_JS_NATIVE_DIR)|" \
-e "s|@libexecdir[@]|$(libexecdir)|" \ -e "s|@libexecdir[@]|$(libexecdir)|" \
-e "s|@libdir[@]|$(libdir)|" \ -e "s|@libdir[@]|$(libdir)|" \
-e "s|@pkgdatadir[@]|$(pkgdatadir)|" \ -e "s|@pkgdatadir[@]|$(pkgdatadir)|" \

View File

@@ -220,7 +220,7 @@ def start_shell(perf_output=None):
# Set up environment # Set up environment
env = dict(os.environ) env = dict(os.environ)
env.update({'GNOME_SHELL_JS' : '@GJS_JS_DIR@:@GJS_JS_NATIVE_DIR@:' + js_dir, env.update({'GNOME_SHELL_JS' : js_dir,
'PATH' : '@MUTTER_BIN_DIR@:' + os.environ.get('PATH', ''), 'PATH' : '@MUTTER_BIN_DIR@:' + os.environ.get('PATH', ''),
'XDG_CONFIG_DIRS' : '@sysconfdir@/xdg:' + (os.environ.get('XDG_CONFIG_DIRS') or '/etc/xdg'), 'XDG_CONFIG_DIRS' : '@sysconfdir@/xdg:' + (os.environ.get('XDG_CONFIG_DIRS') or '/etc/xdg'),
'XDG_DATA_DIRS' : '@datadir@:' + (os.environ.get('XDG_DATA_DIRS') or '/usr/local/share:/usr/share'), 'XDG_DATA_DIRS' : '@datadir@:' + (os.environ.get('XDG_DATA_DIRS') or '/usr/local/share:/usr/share'),

View File

@@ -245,6 +245,34 @@ shell_generic_container_finalize (GObject *object)
G_OBJECT_CLASS (shell_generic_container_parent_class)->finalize (object); G_OBJECT_CLASS (shell_generic_container_parent_class)->finalize (object);
} }
/* Based on implementation from clutter-group.c */
static gboolean
shell_generic_container_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume)
{
GList *l, *children;
children = st_container_get_children_list (ST_CONTAINER (actor));
CLUTTER_ACTOR_CLASS (shell_generic_container_parent_class)->get_paint_volume (actor, volume);
for (l = children; l != NULL; l = l->next)
{
ClutterActor *child = l->data;
const ClutterPaintVolume *child_volume;
/* This gets the paint volume of the child transformed into the
* group's coordinate space... */
child_volume = clutter_actor_get_transformed_paint_volume (child, actor);
if (!child_volume)
return FALSE;
clutter_paint_volume_union (volume, child_volume);
}
return TRUE;
}
static void static void
shell_generic_container_class_init (ShellGenericContainerClass *klass) shell_generic_container_class_init (ShellGenericContainerClass *klass)
{ {
@@ -257,6 +285,7 @@ shell_generic_container_class_init (ShellGenericContainerClass *klass)
actor_class->get_preferred_width = shell_generic_container_get_preferred_width; actor_class->get_preferred_width = shell_generic_container_get_preferred_width;
actor_class->get_preferred_height = shell_generic_container_get_preferred_height; actor_class->get_preferred_height = shell_generic_container_get_preferred_height;
actor_class->allocate = shell_generic_container_allocate; actor_class->allocate = shell_generic_container_allocate;
actor_class->get_paint_volume = shell_generic_container_get_paint_volume;
actor_class->paint = shell_generic_container_paint; actor_class->paint = shell_generic_container_paint;
actor_class->pick = shell_generic_container_pick; actor_class->pick = shell_generic_container_pick;

View File

@@ -497,6 +497,9 @@ shell_global_set_cursor (ShellGlobal *global,
case SHELL_CURSOR_DND_UNSUPPORTED_TARGET: case SHELL_CURSOR_DND_UNSUPPORTED_TARGET:
name = "dnd-none"; name = "dnd-none";
break; break;
case SHELL_CURSOR_POINTING_HAND:
name = "hand";
break;
default: default:
g_return_if_reached (); g_return_if_reached ();
} }
@@ -516,6 +519,8 @@ shell_global_set_cursor (ShellGlobal *global,
case SHELL_CURSOR_DND_COPY: case SHELL_CURSOR_DND_COPY:
cursor_type = GDK_PLUS; cursor_type = GDK_PLUS;
break; break;
case SHELL_CURSOR_POINTING_HAND:
cursor_type = GDK_HAND2;
case SHELL_CURSOR_DND_UNSUPPORTED_TARGET: case SHELL_CURSOR_DND_UNSUPPORTED_TARGET:
cursor_type = GDK_X_CURSOR; cursor_type = GDK_X_CURSOR;
break; break;

View File

@@ -38,7 +38,8 @@ typedef enum {
SHELL_CURSOR_DND_IN_DRAG, SHELL_CURSOR_DND_IN_DRAG,
SHELL_CURSOR_DND_UNSUPPORTED_TARGET, SHELL_CURSOR_DND_UNSUPPORTED_TARGET,
SHELL_CURSOR_DND_MOVE, SHELL_CURSOR_DND_MOVE,
SHELL_CURSOR_DND_COPY SHELL_CURSOR_DND_COPY,
SHELL_CURSOR_POINTING_HAND
} ShellCursor; } ShellCursor;
void shell_global_set_cursor (ShellGlobal *global, void shell_global_set_cursor (ShellGlobal *global,

View File

@@ -876,29 +876,39 @@ st_box_layout_apply_transform (ClutterActor *a,
cogl_matrix_translate (m, (int) -x, (int) -y, 0); cogl_matrix_translate (m, (int) -x, (int) -y, 0);
} }
/* If we are translated, then we need to translate back before chaining
* up or the background and borders will be drawn in the wrong place */
static void
get_border_paint_offsets (StBoxLayout *self,
double *x,
double *y)
{
StBoxLayoutPrivate *priv = self->priv;
if (priv->hadjustment)
*x = st_adjustment_get_value (priv->hadjustment);
else
*x = 0;
if (priv->vadjustment)
*y = st_adjustment_get_value (priv->vadjustment);
else
*y = 0;
}
static void static void
st_box_layout_paint (ClutterActor *actor) st_box_layout_paint (ClutterActor *actor)
{ {
StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (actor)->priv; StBoxLayout *self = ST_BOX_LAYOUT (actor);
StBoxLayoutPrivate *priv = self->priv;
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor)); StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
GList *l, *children; GList *l, *children;
gdouble x, y; gdouble x, y;
ClutterActorBox allocation_box; ClutterActorBox allocation_box;
ClutterActorBox content_box; ClutterActorBox content_box;
if (priv->hadjustment) get_border_paint_offsets (self, &x, &y);
x = st_adjustment_get_value (priv->hadjustment);
else
x = 0;
if (priv->vadjustment)
y = st_adjustment_get_value (priv->vadjustment);
else
y = 0;
/* If we are translated, then we need to translate back before chaining
* up or the background and borders will be drawn in the wrong place */
if (x != 0 || y != 0) if (x != 0 || y != 0)
{ {
cogl_push_matrix (); cogl_push_matrix ();
@@ -950,23 +960,15 @@ static void
st_box_layout_pick (ClutterActor *actor, st_box_layout_pick (ClutterActor *actor,
const ClutterColor *color) const ClutterColor *color)
{ {
StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (actor)->priv; StBoxLayout *self = ST_BOX_LAYOUT (actor);
StBoxLayoutPrivate *priv = self->priv;
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor)); StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
GList *l, *children; GList *l, *children;
gdouble x, y; gdouble x, y;
ClutterActorBox allocation_box; ClutterActorBox allocation_box;
ClutterActorBox content_box; ClutterActorBox content_box;
if (priv->hadjustment) get_border_paint_offsets (self, &x, &y);
x = st_adjustment_get_value (priv->hadjustment);
else
x = 0;
if (priv->vadjustment)
y = st_adjustment_get_value (priv->vadjustment);
else
y = 0;
if (x != 0 || y != 0) if (x != 0 || y != 0)
{ {
cogl_push_matrix (); cogl_push_matrix ();
@@ -1011,6 +1013,34 @@ st_box_layout_pick (ClutterActor *actor,
cogl_clip_pop (); cogl_clip_pop ();
} }
static gboolean
st_box_layout_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume)
{
StBoxLayout *self = ST_BOX_LAYOUT (actor);
gdouble x, y;
CLUTTER_ACTOR_CLASS (st_box_layout_parent_class)->get_paint_volume (actor, volume);
/* When scrolled, st_box_layout_apply_transform() includes the scroll offset
* and affects paint volumes. This is right for our children, but our paint volume
* is determined by our allocation and borders and doesn't scroll, so we need
* to reverse-compensate here, the same as we do when painting.
*/
get_border_paint_offsets (self, &x, &y);
if (x != 0 || y != 0)
{
ClutterVertex origin;
clutter_paint_volume_get_origin (volume, &origin);
origin.x += x;
origin.y += y;
clutter_paint_volume_set_origin (volume, &origin);
}
return TRUE;
}
static void static void
st_box_layout_style_changed (StWidget *self) st_box_layout_style_changed (StWidget *self)
{ {
@@ -1047,6 +1077,7 @@ st_box_layout_class_init (StBoxLayoutClass *klass)
actor_class->apply_transform = st_box_layout_apply_transform; actor_class->apply_transform = st_box_layout_apply_transform;
actor_class->paint = st_box_layout_paint; actor_class->paint = st_box_layout_paint;
actor_class->get_paint_volume = st_box_layout_get_paint_volume;
actor_class->pick = st_box_layout_pick; actor_class->pick = st_box_layout_pick;
widget_class->style_changed = st_box_layout_style_changed; widget_class->style_changed = st_box_layout_style_changed;

View File

@@ -3,6 +3,7 @@
* st-group.c: A fixed layout container based on ClutterGroup * st-group.c: A fixed layout container based on ClutterGroup
* *
* Copyright 2010 Florian Müllner * Copyright 2010 Florian Müllner
* Copyright 2010 Intel Corporation
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU Lesser General Public License, * under the terms and conditions of the GNU Lesser General Public License,
@@ -230,7 +231,33 @@ st_group_hide_all (ClutterActor *actor)
NULL); NULL);
} }
/* Based on implementation from clutter-group.c */
static gboolean
st_group_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume)
{
GList *l, *children;
children = st_container_get_children_list (ST_CONTAINER (actor));
CLUTTER_ACTOR_CLASS (st_group_parent_class)->get_paint_volume (actor, volume);
for (l = children; l != NULL; l = l->next)
{
ClutterActor *child = l->data;
const ClutterPaintVolume *child_volume;
/* This gets the paint volume of the child transformed into the
* group's coordinate space... */
child_volume = clutter_actor_get_transformed_paint_volume (child, actor);
if (!child_volume)
return FALSE;
clutter_paint_volume_union (volume, child_volume);
}
return TRUE;
}
static void static void
@@ -242,6 +269,7 @@ st_group_class_init (StGroupClass *klass)
actor_class->get_preferred_height = st_group_get_preferred_height; actor_class->get_preferred_height = st_group_get_preferred_height;
actor_class->allocate = st_group_allocate; actor_class->allocate = st_group_allocate;
actor_class->paint = st_group_paint; actor_class->paint = st_group_paint;
actor_class->get_paint_volume = st_group_get_paint_volume;
actor_class->pick = st_group_pick; actor_class->pick = st_group_pick;
actor_class->show_all = st_group_show_all; actor_class->show_all = st_group_show_all;
actor_class->hide_all = st_group_hide_all; actor_class->hide_all = st_group_hide_all;

View File

@@ -56,6 +56,10 @@ struct _StIconPrivate
gint prop_icon_size; /* icon size set as property */ gint prop_icon_size; /* icon size set as property */
gint theme_icon_size; /* icon size from theme node */ gint theme_icon_size; /* icon size from theme node */
gint icon_size; /* icon size we are using */ gint icon_size; /* icon size we are using */
CoglHandle shadow_material;
float shadow_width;
float shadow_height;
}; };
static void st_icon_update (StIcon *icon); static void st_icon_update (StIcon *icon);
@@ -145,6 +149,12 @@ st_icon_dispose (GObject *gobject)
priv->gicon = NULL; priv->gicon = NULL;
} }
if (priv->shadow_material)
{
cogl_handle_unref (priv->shadow_material);
priv->shadow_material = COGL_INVALID_HANDLE;
}
G_OBJECT_CLASS (st_icon_parent_class)->dispose (gobject); G_OBJECT_CLASS (st_icon_parent_class)->dispose (gobject);
} }
@@ -227,8 +237,31 @@ st_icon_paint (ClutterActor *actor)
CLUTTER_ACTOR_CLASS (st_icon_parent_class)->paint (actor); CLUTTER_ACTOR_CLASS (st_icon_parent_class)->paint (actor);
if (priv->icon_texture) if (priv->icon_texture)
{
if (priv->shadow_material)
{
StThemeNode *node = st_widget_get_theme_node (ST_WIDGET (actor));
StShadow *shadow_spec = st_theme_node_get_shadow (node);
ClutterActorBox allocation;
float width, height;
clutter_actor_get_allocation_box (priv->icon_texture, &allocation);
clutter_actor_box_get_size (&allocation, &width, &height);
allocation.x1 = (width - priv->shadow_width) / 2;
allocation.y1 = (height - priv->shadow_height) / 2;
allocation.x2 = allocation.x1 + priv->shadow_width;
allocation.y2 = allocation.y1 + priv->shadow_height;
_st_paint_shadow_with_opacity (shadow_spec,
priv->shadow_material,
&allocation,
clutter_actor_get_paint_opacity (priv->icon_texture));
}
clutter_actor_paint (priv->icon_texture); clutter_actor_paint (priv->icon_texture);
} }
}
static void static void
st_icon_map (ClutterActor *actor) st_icon_map (ClutterActor *actor)
@@ -326,6 +359,45 @@ st_icon_init (StIcon *self)
self->priv->icon_size = DEFAULT_ICON_SIZE; self->priv->icon_size = DEFAULT_ICON_SIZE;
self->priv->prop_icon_size = -1; self->priv->prop_icon_size = -1;
self->priv->icon_type = DEFAULT_ICON_TYPE; self->priv->icon_type = DEFAULT_ICON_TYPE;
self->priv->icon_texture = COGL_INVALID_HANDLE;
self->priv->shadow_width = -1;
self->priv->shadow_height = -1;
}
static void
st_icon_update_shadow_material (StIcon *icon)
{
StIconPrivate *priv = icon->priv;
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (icon));
StShadow *shadow_spec = st_theme_node_get_shadow (theme_node);
if (priv->shadow_material)
{
cogl_handle_unref (priv->shadow_material);
priv->shadow_material = COGL_INVALID_HANDLE;
}
if (shadow_spec)
{
CoglHandle material;
gint width, height;
clutter_texture_get_base_size (CLUTTER_TEXTURE (priv->icon_texture),
&width, &height);
material = _st_create_shadow_material_from_actor (shadow_spec,
priv->icon_texture);
priv->shadow_material = material;
priv->shadow_width = width;
priv->shadow_height = height;
}
}
static void
on_pixbuf_changed (ClutterTexture *texture,
StIcon *icon)
{
st_icon_update_shadow_material (icon);
} }
static void static void
@@ -366,7 +438,14 @@ st_icon_update (StIcon *icon)
priv->icon_size); priv->icon_size);
} }
if (priv->icon_texture) if (priv->icon_texture)
{
st_icon_update_shadow_material (icon);
clutter_actor_set_parent (priv->icon_texture, CLUTTER_ACTOR (icon)); clutter_actor_set_parent (priv->icon_texture, CLUTTER_ACTOR (icon));
/* "pixbuf-change" is actually a misnomer for "texture-changed" */
g_signal_connect (priv->icon_texture, "pixbuf-change",
G_CALLBACK (on_pixbuf_changed), icon);
}
} }
static gboolean static gboolean

View File

@@ -181,6 +181,13 @@ st_im_text_paint (ClutterActor *actor)
update_im_cursor_location (self); update_im_cursor_location (self);
} }
static gboolean
st_im_text_get_paint_volume (ClutterActor *self,
ClutterPaintVolume *volume)
{
return clutter_paint_volume_set_from_allocation (volume, self);
}
/* Returns a new reference to window */ /* Returns a new reference to window */
static GdkWindow * static GdkWindow *
window_for_actor (ClutterActor *actor) window_for_actor (ClutterActor *actor)
@@ -440,6 +447,7 @@ st_im_text_class_init (StIMTextClass *klass)
object_class->dispose = st_im_text_dispose; object_class->dispose = st_im_text_dispose;
actor_class->paint = st_im_text_paint; actor_class->paint = st_im_text_paint;
actor_class->get_paint_volume = st_im_text_get_paint_volume;
actor_class->realize = st_im_text_realize; actor_class->realize = st_im_text_realize;
actor_class->unrealize = st_im_text_unrealize; actor_class->unrealize = st_im_text_unrealize;

View File

@@ -718,7 +718,7 @@ get_length_from_term (StThemeNode *node,
if (term->type != TERM_NUMBER) if (term->type != TERM_NUMBER)
{ {
g_warning ("Ignoring length property that isn't a number"); g_warning ("Ignoring length property that isn't a number");
return FALSE; return VALUE_NOT_FOUND;
} }
num = term->content.num; num = term->content.num;
@@ -859,7 +859,7 @@ get_length_from_term_int (StThemeNode *node,
GetFromTermResult result; GetFromTermResult result;
result = get_length_from_term (node, term, use_parent_font, &value); result = get_length_from_term (node, term, use_parent_font, &value);
if (result != VALUE_NOT_FOUND) if (result == VALUE_FOUND)
*length = (int) (0.5 + value); *length = (int) (0.5 + value);
return result; return result;
} }
@@ -1053,7 +1053,7 @@ do_border_property (StThemeNode *node,
StSide side = (StSide)-1; StSide side = (StSide)-1;
ClutterColor color; ClutterColor color;
gboolean color_set = FALSE; gboolean color_set = FALSE;
int width; int width = 0; /* suppress warning */
gboolean width_set = FALSE; gboolean width_set = FALSE;
int j; int j;
@@ -1098,7 +1098,8 @@ do_border_property (StThemeNode *node,
const char *ident = term->content.str->stryng->str; const char *ident = term->content.str->stryng->str;
if (strcmp (ident, "none") == 0 || strcmp (ident, "hidden") == 0) if (strcmp (ident, "none") == 0 || strcmp (ident, "hidden") == 0)
{ {
width = 0.; width = 0;
width_set = TRUE;
continue; continue;
} }
else if (strcmp (ident, "solid") == 0) else if (strcmp (ident, "solid") == 0)
@@ -1185,7 +1186,7 @@ do_outline_property (StThemeNode *node,
const char *property_name = decl->property->stryng->str + 7; /* Skip 'outline' */ const char *property_name = decl->property->stryng->str + 7; /* Skip 'outline' */
ClutterColor color; ClutterColor color;
gboolean color_set = FALSE; gboolean color_set = FALSE;
int width; int width = 0; /* suppress warning */
gboolean width_set = FALSE; gboolean width_set = FALSE;
if (strcmp (property_name, "") == 0) if (strcmp (property_name, "") == 0)
@@ -1202,7 +1203,8 @@ do_outline_property (StThemeNode *node,
const char *ident = term->content.str->stryng->str; const char *ident = term->content.str->stryng->str;
if (strcmp (ident, "none") == 0 || strcmp (ident, "hidden") == 0) if (strcmp (ident, "none") == 0 || strcmp (ident, "hidden") == 0)
{ {
width = 0.; width = 0;
width_set = TRUE;
continue; continue;
} }
else if (strcmp (ident, "solid") == 0) else if (strcmp (ident, "solid") == 0)
@@ -2234,17 +2236,19 @@ font_variant_from_term (CRTerm *term,
const PangoFontDescription * const PangoFontDescription *
st_theme_node_get_font (StThemeNode *node) st_theme_node_get_font (StThemeNode *node)
{ {
PangoStyle font_style; /* Initialized despite _set flags to suppress compiler warnings */
PangoStyle font_style = PANGO_STYLE_NORMAL;
gboolean font_style_set = FALSE; gboolean font_style_set = FALSE;
PangoVariant variant; PangoVariant variant = PANGO_VARIANT_NORMAL;
gboolean variant_set = FALSE; gboolean variant_set = FALSE;
PangoWeight weight; PangoWeight weight = PANGO_WEIGHT_NORMAL;
gboolean weight_absolute; gboolean weight_absolute = TRUE;
gboolean weight_set = FALSE; gboolean weight_set = FALSE;
double parent_size; double size = 0.;
double size = 0.; /* Suppress warning */
gboolean size_set = FALSE; gboolean size_set = FALSE;
char *family = NULL; char *family = NULL;
double parent_size;
int i; int i;
if (node->font_desc) if (node->font_desc)

View File

@@ -7,6 +7,7 @@
* Copyright 2009, 2010 Red Hat, Inc. * Copyright 2009, 2010 Red Hat, Inc.
* Copyright 2009 Abderrahim Kitouni * Copyright 2009 Abderrahim Kitouni
* Copyright 2009, 2010 Florian Müllner * Copyright 2009, 2010 Florian Müllner
* Copyright 2010 Adel Gadllah
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU Lesser General Public License, * under the terms and conditions of the GNU Lesser General Public License,
@@ -668,6 +669,31 @@ st_widget_hide (ClutterActor *actor)
CLUTTER_ACTOR_CLASS (st_widget_parent_class)->hide (actor); CLUTTER_ACTOR_CLASS (st_widget_parent_class)->hide (actor);
} }
static gboolean
st_widget_get_paint_volume (ClutterActor *self, ClutterPaintVolume *volume)
{
ClutterActorBox paint_box, alloc_box;
StThemeNode *theme_node;
ClutterVertex origin;
/* Setting the paint volume does not make sense when we don't have any allocation */
if (!clutter_actor_has_allocation (self))
return FALSE;
theme_node = st_widget_get_theme_node (ST_WIDGET(self));
clutter_actor_get_allocation_box (self, &alloc_box);
st_theme_node_get_paint_box (theme_node, &alloc_box, &paint_box);
origin.x = paint_box.x1 - alloc_box.x1;
origin.y = paint_box.y1 - alloc_box.y1;
origin.z = 0.0f;
clutter_paint_volume_set_origin (volume, &origin);
clutter_paint_volume_set_width (volume, paint_box.x2 - paint_box.x1);
clutter_paint_volume_set_height (volume, paint_box.y2 - paint_box.y1);
return TRUE;
}
static void static void
@@ -688,6 +714,7 @@ st_widget_class_init (StWidgetClass *klass)
actor_class->get_preferred_height = st_widget_get_preferred_height; actor_class->get_preferred_height = st_widget_get_preferred_height;
actor_class->allocate = st_widget_allocate; actor_class->allocate = st_widget_allocate;
actor_class->paint = st_widget_paint; actor_class->paint = st_widget_paint;
actor_class->get_paint_volume = st_widget_get_paint_volume;
actor_class->parent_set = st_widget_parent_set; actor_class->parent_set = st_widget_parent_set;
actor_class->map = st_widget_map; actor_class->map = st_widget_map;
actor_class->unmap = st_widget_unmap; actor_class->unmap = st_widget_unmap;

View File

@@ -24,8 +24,6 @@ EXTRA_DIST += $(TEST_MISC)
run-test.sh: run-test.sh.in run-test.sh: run-test.sh.in
$(AM_V_GEN) sed \ $(AM_V_GEN) sed \
-e "s|@GJS_JS_DIR[@]|$(GJS_JS_DIR)|" \
-e "s|@GJS_JS_NATIVE_DIR[@]|$(GJS_JS_NATIVE_DIR)|" \
-e "s|@MUTTER_LIB_DIR[@]|$(MUTTER_LIB_DIR)|" \ -e "s|@MUTTER_LIB_DIR[@]|$(MUTTER_LIB_DIR)|" \
-e "s|@srcdir[@]|$(srcdir)|" \ -e "s|@srcdir[@]|$(srcdir)|" \
$< > $@ && chmod a+x $@ $< > $@ && chmod a+x $@

View File

@@ -31,17 +31,13 @@ srcdir=$builddir/@srcdir@
srcdir=`cd $srcdir && pwd` srcdir=`cd $srcdir && pwd`
GI_TYPELIB_PATH="@MUTTER_LIB_DIR@/mutter:$builddir/../src" GI_TYPELIB_PATH="@MUTTER_LIB_DIR@/mutter:$builddir/../src"
GJS_PATH="$srcdir:$srcdir/../js"
GJS_DEBUG_OUTPUT=stderr GJS_DEBUG_OUTPUT=stderr
$verbose || GJS_DEBUG_TOPICS="JS ERROR;JS LOG" $verbose || GJS_DEBUG_TOPICS="JS ERROR;JS LOG"
GNOME_SHELL_TESTSDIR="$srcdir/" GNOME_SHELL_TESTSDIR="$srcdir/"
export GI_TYPELIB_PATH GJS_DEBUG_OUTPUT GJS_DEBUG_TOPICS GNOME_SHELL_JS GNOME_SHELL_TESTSDIR LD_PRELOAD export GI_TYPELIB_PATH GJS_PATH GJS_DEBUG_OUTPUT GJS_DEBUG_TOPICS GNOME_SHELL_JS GNOME_SHELL_TESTSDIR LD_PRELOAD
run_js_test_args=
for i in $srcdir $srcdir/../js @GJS_JS_DIR@ @GJS_JS_NATIVE_DIR@ ; do
run_js_test_args="$run_js_test_args -I $i"
done
for test in $tests ; do for test in $tests ; do
$debug $builddir/../src/run-js-test $run_js_test_args $test || exit $? $debug $builddir/../src/run-js-test $test || exit $?
done done

View File

@@ -62,7 +62,7 @@ fi
# libxklavier, libxml2, ORBit2, pam, python, readline, # libxklavier, libxml2, ORBit2, pam, python, readline,
# spidermonkey ({mozilla,firefox,xulrunner}-js), startup-notification, # spidermonkey ({mozilla,firefox,xulrunner}-js), startup-notification,
# xdamage, icon-naming-utils, upower, libtool-ltdl, libvorbis, # xdamage, icon-naming-utils, upower, libtool-ltdl, libvorbis,
# libgcrypt, libtasn1 # libgcrypt, libtasn1, libgnome-keyring
# #
# Non-devel packages needed by gnome-shell and its deps: # Non-devel packages needed by gnome-shell and its deps:
# glxinfo, gstreamer-plugins-base, gstreamer-plugins-good, # glxinfo, gstreamer-plugins-base, gstreamer-plugins-good,
@@ -82,7 +82,7 @@ if test "x$system" = xUbuntu -o "x$system" = xDebian -o "x$system" = xLinuxMint
mesa-common-dev mesa-utils libpam-dev python-dev python-gconf python-gobject mesa-common-dev mesa-utils libpam-dev python-dev python-gconf python-gobject
xulrunner-dev xserver-xephyr gnome-terminal libcroco3-dev xulrunner-dev xserver-xephyr gnome-terminal libcroco3-dev
libgstreamer0.10-dev gstreamer0.10-plugins-base gstreamer0.10-plugins-good libgstreamer0.10-dev gstreamer0.10-plugins-base gstreamer0.10-plugins-good
libltdl-dev libvorbis-dev libxklavier-dev libltdl-dev libvorbis-dev libxklavier-dev libgnome-keyring-dev libupower-glib-dev
" "
if apt-cache show autopoint > /dev/null 2> /dev/null; then if apt-cache show autopoint > /dev/null 2> /dev/null; then
@@ -120,6 +120,7 @@ if test "x$system" = xFedora ; then
startup-notification-devel xorg-x11-server-Xephyr gnome-terminal zenity startup-notification-devel xorg-x11-server-Xephyr gnome-terminal zenity
icon-naming-utils upower-devel libtool-ltdl-devel libvorbis-devel icon-naming-utils upower-devel libtool-ltdl-devel libvorbis-devel
libxklavier-devel libgcrypt-devel libtasn1-devel libtasn1-tools libxklavier-devel libgcrypt-devel libtasn1-devel libtasn1-tools
libgnome-keyring-devel
" "
if expr $version \>= 14 > /dev/null ; then if expr $version \>= 14 > /dev/null ; then

View File

@@ -191,35 +191,6 @@
</dependencies> </dependencies>
</autotools> </autotools>
<autotools id="gnome-keyring">
<branch repo="git.gnome.org" module="gnome-keyring"/>
<dependencies>
<dep package="glib"/>
</dependencies>
</autotools>
<autotools id="libnotify">
<branch repo="git.gnome.org" module="libnotify"/>
<dependencies>
<dep package="gtk3"/>
</dependencies>
</autotools>
<autotools id="libgnomekbd">
<branch repo="git.gnome.org" module="libgnomekbd"/>
<dependencies>
<dep package="gtk3"/>
</dependencies>
</autotools>
<autotools id="gnome-settings-daemon">
<branch repo="git.gnome.org" module="gnome-settings-daemon"/>
<dependencies>
<dep package="libnotify"/>
<dep package="gnome-desktop-3"/>
</dependencies>
</autotools>
<autotools id="gnome-control-center"> <autotools id="gnome-control-center">
<branch repo="git.gnome.org" module="gnome-control-center"/> <branch repo="git.gnome.org" module="gnome-control-center"/>
<dependencies> <dependencies>
@@ -238,7 +209,6 @@
<dep package="gconf"/> <dep package="gconf"/>
<dep package="cairo"/> <dep package="cairo"/>
<dep package="libnotify"/> <dep package="libnotify"/>
<dep package="gnome-keyring"/>
<dep package="libcanberra"/> <dep package="libcanberra"/>
<dep package="gnome-control-center"/> <dep package="gnome-control-center"/>
</dependencies> </dependencies>