Merge remote branch 'origin/master' into zeitgeist
2
.gitignore
vendored
@ -44,7 +44,7 @@ src/calendar-server/org.gnome.Shell.CalendarServer.service
|
|||||||
src/gnome-shell
|
src/gnome-shell
|
||||||
src/gnome-shell-calendar-server
|
src/gnome-shell-calendar-server
|
||||||
src/gnome-shell-extension-tool
|
src/gnome-shell-extension-tool
|
||||||
src/gnome-shell-installed
|
src/gnome-shell-real
|
||||||
src/gnome-shell-jhbuild
|
src/gnome-shell-jhbuild
|
||||||
src/run-js-test
|
src/run-js-test
|
||||||
src/test-recorder
|
src/test-recorder
|
||||||
|
26
configure.ac
@ -1,5 +1,5 @@
|
|||||||
AC_PREREQ(2.63)
|
AC_PREREQ(2.63)
|
||||||
AC_INIT([gnome-shell],[2.91.90],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
AC_INIT([gnome-shell],[2.91.91],[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])
|
||||||
@ -63,7 +63,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
|||||||
CLUTTER_MIN_VERSION=1.5.15
|
CLUTTER_MIN_VERSION=1.5.15
|
||||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||||
GJS_MIN_VERSION=0.7.11
|
GJS_MIN_VERSION=0.7.11
|
||||||
MUTTER_MIN_VERSION=2.91.90
|
MUTTER_MIN_VERSION=2.91.91
|
||||||
GTK_MIN_VERSION=3.0.0
|
GTK_MIN_VERSION=3.0.0
|
||||||
GIO_MIN_VERSION=2.25.9
|
GIO_MIN_VERSION=2.25.9
|
||||||
LIBECAL_MIN_VERSION=2.32.0
|
LIBECAL_MIN_VERSION=2.32.0
|
||||||
@ -74,10 +74,10 @@ TELEPATHY_GLIB_MIN_VERSION=0.13.12
|
|||||||
POLKIT_MIN_VERSION=0.100
|
POLKIT_MIN_VERSION=0.100
|
||||||
|
|
||||||
# Collect more than 20 libraries for a prize!
|
# Collect more than 20 libraries for a prize!
|
||||||
PKG_CHECK_MODULES(MUTTER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION
|
PKG_CHECK_MODULES(GNOME_SHELL, gio-2.0 >= $GIO_MIN_VERSION
|
||||||
gio-unix-2.0 dbus-glib-1 libxml-2.0
|
gio-unix-2.0 dbus-glib-1 libxml-2.0
|
||||||
gtk+-3.0 >= $GTK_MIN_VERSION
|
gtk+-3.0 >= $GTK_MIN_VERSION
|
||||||
mutter-plugins >= $MUTTER_MIN_VERSION
|
libmutter-wm >= $MUTTER_MIN_VERSION
|
||||||
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
||||||
libgnome-menu $recorder_modules gconf-2.0
|
libgnome-menu $recorder_modules gconf-2.0
|
||||||
gdk-x11-3.0
|
gdk-x11-3.0
|
||||||
@ -97,8 +97,8 @@ GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
|
|||||||
|
|
||||||
saved_CFLAGS=$CFLAGS
|
saved_CFLAGS=$CFLAGS
|
||||||
saved_LIBS=$LIBS
|
saved_LIBS=$LIBS
|
||||||
CFLAGS=$MUTTER_PLUGIN_CFLAGS
|
CFLAGS=$GNOME_SHELL_CFLAGS
|
||||||
LIBS=$MUTTER_PLUGIN_LIBS
|
LIBS=$GNOME_SHELL_LIBS
|
||||||
# sn_startup_sequence_get_application_id, we can replace with a version check later
|
# sn_startup_sequence_get_application_id, we can replace with a version check later
|
||||||
AC_CHECK_FUNCS(JS_NewGlobalObject sn_startup_sequence_get_application_id)
|
AC_CHECK_FUNCS(JS_NewGlobalObject sn_startup_sequence_get_application_id)
|
||||||
CFLAGS=$saved_CFLAGS
|
CFLAGS=$saved_CFLAGS
|
||||||
@ -134,13 +134,10 @@ PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedatas
|
|||||||
AC_SUBST(CALENDAR_SERVER_CFLAGS)
|
AC_SUBST(CALENDAR_SERVER_CFLAGS)
|
||||||
AC_SUBST(CALENDAR_SERVER_LIBS)
|
AC_SUBST(CALENDAR_SERVER_LIBS)
|
||||||
|
|
||||||
MUTTER_BIN_DIR=`$PKG_CONFIG --variable=exec_prefix mutter-plugins`/bin
|
MUTTER_GIR_DIR=`$PKG_CONFIG --variable=girdir libmutter-wm`
|
||||||
# FIXME: metacity-plugins.pc should point directly to its .gir file
|
MUTTER_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir libmutter-wm`
|
||||||
MUTTER_LIB_DIR=`$PKG_CONFIG --variable=libdir mutter-plugins`
|
AC_SUBST(MUTTER_GIR_DIR)
|
||||||
MUTTER_PLUGIN_DIR=`$PKG_CONFIG --variable=plugindir mutter-plugins`
|
AC_SUBST(MUTTER_TYPELIB_DIR)
|
||||||
AC_SUBST(MUTTER_BIN_DIR)
|
|
||||||
AC_SUBST(MUTTER_LIB_DIR)
|
|
||||||
AC_SUBST(MUTTER_PLUGIN_DIR)
|
|
||||||
|
|
||||||
GJS_CONSOLE=`$PKG_CONFIG --variable=gjs_console gjs-1.0`
|
GJS_CONSOLE=`$PKG_CONFIG --variable=gjs_console gjs-1.0`
|
||||||
AC_SUBST(GJS_CONSOLE)
|
AC_SUBST(GJS_CONSOLE)
|
||||||
@ -207,9 +204,6 @@ AC_ARG_ENABLE(dynamic-mozjs-hack,
|
|||||||
ENABLE_DYNAMIC_MOZJS_HACK=$enable_dynamic_mozjs_hack
|
ENABLE_DYNAMIC_MOZJS_HACK=$enable_dynamic_mozjs_hack
|
||||||
AC_SUBST(ENABLE_DYNAMIC_MOZJS_HACK)
|
AC_SUBST(ENABLE_DYNAMIC_MOZJS_HACK)
|
||||||
|
|
||||||
AC_PATH_PROG(mutter, [mutter])
|
|
||||||
AC_SUBST(mutter)
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
data/Makefile
|
data/Makefile
|
||||||
|
@ -26,7 +26,8 @@ dist_theme_DATA = \
|
|||||||
theme/close.svg \
|
theme/close.svg \
|
||||||
theme/corner-ripple.png \
|
theme/corner-ripple.png \
|
||||||
theme/dash-placeholder.svg \
|
theme/dash-placeholder.svg \
|
||||||
theme/filter-selected.svg \
|
theme/filter-selected-ltr.svg \
|
||||||
|
theme/filter-selected-rtl.svg \
|
||||||
theme/gnome-shell.css \
|
theme/gnome-shell.css \
|
||||||
theme/mosaic-view-active.svg \
|
theme/mosaic-view-active.svg \
|
||||||
theme/mosaic-view.svg \
|
theme/mosaic-view.svg \
|
||||||
@ -35,7 +36,7 @@ dist_theme_DATA = \
|
|||||||
theme/panel-button-border.svg \
|
theme/panel-button-border.svg \
|
||||||
theme/panel-button-highlight-narrow.svg \
|
theme/panel-button-highlight-narrow.svg \
|
||||||
theme/panel-button-highlight-wide.svg \
|
theme/panel-button-highlight-wide.svg \
|
||||||
theme/process-working.png \
|
theme/process-working.svg \
|
||||||
theme/running-indicator.svg \
|
theme/running-indicator.svg \
|
||||||
theme/scroll-button-down-hover.png \
|
theme/scroll-button-down-hover.png \
|
||||||
theme/scroll-button-down.png \
|
theme/scroll-button-down.png \
|
||||||
|
@ -1,24 +1,26 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
version="1.0"
|
version="1.0"
|
||||||
id="Foreground"
|
id="Foreground"
|
||||||
x="0px"
|
x="0px"
|
||||||
y="0px"
|
y="0px"
|
||||||
width="22"
|
width="32"
|
||||||
height="22"
|
height="32"
|
||||||
viewBox="0 0 16 16"
|
viewBox="0 0 23.272727 23.272727"
|
||||||
enable-background="new 0 0 16 16"
|
enable-background="new 0 0 16 16"
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
sodipodi:version="0.32"
|
sodipodi:version="0.32"
|
||||||
inkscape:version="0.46"
|
inkscape:version="0.48+devel r10081 custom"
|
||||||
sodipodi:docname="close-window.svg"
|
sodipodi:docname="close-window.svg"
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
|
||||||
id="metadata2399"><rdf:RDF><cc:Work
|
id="metadata2399"><rdf:RDF><cc:Work
|
||||||
@ -37,11 +39,49 @@
|
|||||||
inkscape:vp_y="0 : 1000 : 0"
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
inkscape:vp_z="16 : 8 : 1"
|
inkscape:vp_z="16 : 8 : 1"
|
||||||
inkscape:persp3d-origin="8 : 5.3333333 : 1"
|
inkscape:persp3d-origin="8 : 5.3333333 : 1"
|
||||||
id="perspective2401" /></defs><sodipodi:namedview
|
id="perspective2401" /><filter
|
||||||
inkscape:window-height="999"
|
color-interpolation-filters="sRGB"
|
||||||
inkscape:window-width="1680"
|
inkscape:collect="always"
|
||||||
|
id="filter16494-4"
|
||||||
|
x="-0.20989846"
|
||||||
|
width="1.4197969"
|
||||||
|
y="-0.20903821"
|
||||||
|
height="1.4180764"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="1.3282637"
|
||||||
|
id="feGaussianBlur16496-8" /></filter><radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient16498-6"
|
||||||
|
id="radialGradient16504-1"
|
||||||
|
cx="7.6582627"
|
||||||
|
cy="5.8191104"
|
||||||
|
fx="7.6582627"
|
||||||
|
fy="5.8191104"
|
||||||
|
r="8.6928644"
|
||||||
|
gradientTransform="matrix(1.0474339,0,0,1.0517402,-0.3632615,-0.42032492)"
|
||||||
|
gradientUnits="userSpaceOnUse" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient16498-6"><stop
|
||||||
|
style="stop-color:#7b7b7b;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop16500-8" /><stop
|
||||||
|
style="stop-color:#101010;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop16502-0" /></linearGradient><filter
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="filter16524-9"
|
||||||
|
x="-0.212979"
|
||||||
|
width="1.425958"
|
||||||
|
y="-0.21305652"
|
||||||
|
height="1.426113"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.71020915"
|
||||||
|
id="feGaussianBlur16526-0" /></filter></defs><sodipodi:namedview
|
||||||
|
inkscape:window-height="1114"
|
||||||
|
inkscape:window-width="1463"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:pageopacity="1"
|
inkscape:pageopacity="0"
|
||||||
guidetolerance="10.0"
|
guidetolerance="10.0"
|
||||||
gridtolerance="10.0"
|
gridtolerance="10.0"
|
||||||
objecttolerance="10.0"
|
objecttolerance="10.0"
|
||||||
@ -50,27 +90,63 @@
|
|||||||
pagecolor="#000000"
|
pagecolor="#000000"
|
||||||
id="base"
|
id="base"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:zoom="25.648691"
|
inkscape:zoom="1"
|
||||||
inkscape:cx="8.8097603"
|
inkscape:cx="10.720189"
|
||||||
inkscape:cy="9.0472789"
|
inkscape:cy="13.739577"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="26"
|
inkscape:window-y="26"
|
||||||
inkscape:current-layer="Foreground"
|
inkscape:current-layer="Foreground"
|
||||||
showguides="true"
|
showguides="true"
|
||||||
inkscape:guide-bbox="true" />
|
inkscape:guide-bbox="true"
|
||||||
|
borderlayer="true"
|
||||||
|
inkscape:showpageshadow="false"
|
||||||
|
inkscape:window-maximized="0"><inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid11246"
|
||||||
|
empspacing="5"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true" /></sodipodi:namedview>
|
||||||
|
|
||||||
<g
|
<g
|
||||||
id="g3175"><path
|
style="display:inline"
|
||||||
|
id="g16402-8"
|
||||||
|
transform="translate(4.7533483,2.8238929)"><g
|
||||||
|
id="g3175-4"><path
|
||||||
|
sodipodi:type="inkscape:offset"
|
||||||
|
inkscape:radius="0"
|
||||||
|
inkscape:original="M 7.65625 0.125 C 3.2589349 0.125 -0.3125 3.7070002 -0.3125 8.125 C -0.3125 12.543001 3.2589349 16.125 7.65625 16.125 C 12.053566 16.125 15.625 12.543001 15.625 8.125 C 15.625 3.7070002 12.053566 0.125 7.65625 0.125 z "
|
||||||
|
xlink:href="#path2394-32"
|
||||||
|
style="opacity:0.52994014;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.18181825;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter16494-4);enable-background:accumulate"
|
||||||
|
id="path16480-5"
|
||||||
|
inkscape:href="#path2394-32"
|
||||||
|
d="m 7.65625,0.125 c -4.3973151,0 -7.96875,3.5820002 -7.96875,8 0,4.418001 3.5714349,8 7.96875,8 4.397316,0 7.96875,-3.581999 7.96875,-8 0,-4.4179998 -3.571434,-8 -7.96875,-8 z"
|
||||||
|
transform="translate(0,1.028519)" /><path
|
||||||
|
clip-rule="evenodd"
|
||||||
|
d="m -0.30428257,8.1237596 c 0,-4.4179998 3.56522987,-7.9999996 7.96254497,-7.9999996 4.3973156,0 7.9625456,3.5819998 7.9625456,7.9999996 0,4.4180014 -3.56523,8.0000004 -7.9625456,8.0000004 -4.3973151,0 -7.96254497,-3.581999 -7.96254497,-8.0000004 z"
|
||||||
|
id="path2394-32"
|
||||||
|
style="color:#000000;fill:url(#radialGradient16504-1);fill-opacity:1;fill-rule:nonzero;stroke:#eeeeec;stroke-width:1.4545455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
sodipodi:nodetypes="csssc"
|
sodipodi:nodetypes="csssc"
|
||||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.59217799;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
inkscape:connector-curvature="0" /><g
|
||||||
id="path2394"
|
id="g3172-6" /></g><g
|
||||||
d="M 0.83987936,8.0425327 C 0.83987936,4.0805265 4.0712155,0.86823453 8.0567103,0.86823453 C 12.042205,0.86823453 15.273542,4.0805265 15.273542,8.0425327 C 15.273542,12.004539 12.042205,15.216831 8.0567103,15.216831 C 4.0712155,15.216831 0.83987936,12.004539 0.83987936,8.0425327 z"
|
transform="matrix(0.72727273,0,0,0.72727273,2.368236,2.1803254)"
|
||||||
clip-rule="evenodd" /><g
|
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||||
id="g3172"><path
|
id="g27275-6-6"
|
||||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.67127273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
inkscape:label="window-close"><g
|
||||||
d="M 5.4242673,5.3313047 L 10.515414,10.421272 L 10.714004,10.646491"
|
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||||
id="path3152" /></g></g><path
|
id="g27277-1-1"
|
||||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.67127273;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
transform="translate(-41,-760)"><path
|
||||||
d="M 5.4402527,10.650392 L 10.688082,5.3573033"
|
sodipodi:type="inkscape:offset"
|
||||||
id="path3154"
|
inkscape:radius="0"
|
||||||
sodipodi:nodetypes="cc" /></svg>
|
inkscape:original="M 44.21875 764.1875 L 44.21875 765.1875 C 44.19684 765.46825 44.289258 765.74287 44.5 765.9375 L 46.78125 768.21875 L 44.5 770.46875 C 44.31181 770.65692 44.218747 770.92221 44.21875 771.1875 L 44.21875 772.1875 L 45.21875 772.1875 C 45.48404 772.1875 45.749336 772.09444 45.9375 771.90625 L 48.21875 769.625 L 50.5 771.90625 C 50.688164 772.0944 50.953449 772.18749 51.21875 772.1875 L 52.21875 772.1875 L 52.21875 771.1875 C 52.218742 770.9222 52.125688 770.65692 51.9375 770.46875 L 49.6875 768.21875 L 51.96875 765.9375 C 52.18441 765.73815 52.21875 765.47397 52.21875 765.1875 L 52.21875 764.1875 L 51.21875 764.1875 C 50.977922 764.1945 50.796875 764.2695 50.53125 764.5 L 48.21875 766.78125 L 45.9375 764.5 C 45.75987 764.31608 45.504951 764.1987 45.25 764.1875 C 45.23954 764.18704 45.22912 764.18738 45.21875 764.1875 L 44.21875 764.1875 z "
|
||||||
|
xlink:href="#path27279-0-5"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#bebebe;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter16524-9);enable-background:new;font-family:Andale Mono;-inkscape-font-specification:Andale Mono"
|
||||||
|
id="path16506-5"
|
||||||
|
inkscape:href="#path27279-0-5"
|
||||||
|
d="m 44.21875,764.1875 0,1 c -0.02191,0.28075 0.07051,0.55537 0.28125,0.75 l 2.28125,2.28125 -2.28125,2.25 c -0.18819,0.18817 -0.281253,0.45346 -0.28125,0.71875 l 0,1 1,0 c 0.26529,0 0.530586,-0.0931 0.71875,-0.28125 L 48.21875,769.625 50.5,771.90625 c 0.188164,0.18815 0.453449,0.28124 0.71875,0.28125 l 1,0 0,-1 c -8e-6,-0.2653 -0.09306,-0.53058 -0.28125,-0.71875 l -2.25,-2.25 2.28125,-2.28125 c 0.21566,-0.19935 0.25,-0.46353 0.25,-0.75 l 0,-1 -1,0 c -0.240828,0.007 -0.421875,0.082 -0.6875,0.3125 l -2.3125,2.28125 L 45.9375,764.5 c -0.17763,-0.18392 -0.432549,-0.3013 -0.6875,-0.3125 -0.01046,-4.6e-4 -0.02088,-1.2e-4 -0.03125,0 l -1,0 z"
|
||||||
|
transform="translate(0,1.3535534)" /><path
|
||||||
|
sodipodi:nodetypes="ccsccccccccccccccccccccccc"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#bebebe;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;font-family:Andale Mono;-inkscape-font-specification:Andale Mono"
|
||||||
|
id="path27279-0-5"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 44.226475,764.17222 1,0 c 0.01037,-1.2e-4 0.02079,-4.6e-4 0.03125,0 0.254951,0.0112 0.50987,0.12858 0.6875,0.3125 l 2.28125,2.28125 2.3125,-2.28125 c 0.265625,-0.2305 0.446672,-0.3055 0.6875,-0.3125 l 1,0 0,1 c 0,0.28647 -0.03434,0.55065 -0.25,0.75 l -2.28125,2.28125 2.25,2.25 c 0.188188,0.18817 0.281242,0.45345 0.28125,0.71875 l 0,1 -1,0 c -0.265301,-1e-5 -0.530586,-0.0931 -0.71875,-0.28125 l -2.28125,-2.28125 -2.28125,2.28125 c -0.188164,0.18819 -0.45346,0.28125 -0.71875,0.28125 l -1,0 0,-1 c -3e-6,-0.26529 0.09306,-0.53058 0.28125,-0.71875 l 2.28125,-2.25 -2.28125,-2.28125 c -0.210742,-0.19463 -0.30316,-0.46925 -0.28125,-0.75 l 0,-1 z" /></g></g></g></svg>
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
81
data/theme/filter-selected-rtl.svg
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="10"
|
||||||
|
height="20"
|
||||||
|
id="svg10003"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.1 r9760"
|
||||||
|
sodipodi:docname="filter-selected-ltr.svg">
|
||||||
|
<defs
|
||||||
|
id="defs10005">
|
||||||
|
<inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 32 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="64 : 32 : 1"
|
||||||
|
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||||
|
id="perspective10011" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective9998"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="5.5"
|
||||||
|
inkscape:cx="32.363636"
|
||||||
|
inkscape:cy="10.181818"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:window-width="1440"
|
||||||
|
inkscape:window-height="839"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="26"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata10008">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
transform="translate(0,-44)">
|
||||||
|
<path
|
||||||
|
inkscape:export-ydpi="90"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-filename="/home/jimmac/src/cvs/gnome/gnome-shell-design/mockups/app-picker.png"
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="rect34320"
|
||||||
|
d="m 10.369085,54.181804 -10.55634072,10.55636 -1e-5,-21.11269 z"
|
||||||
|
style="opacity:0.21000001;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
@ -195,21 +195,19 @@ StTooltip StLabel {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
#panelLeft {
|
#panelLeft:ltr {
|
||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#panelLeft:rtl {
|
#panelLeft:rtl {
|
||||||
padding-right: 0px;
|
|
||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#panelRight {
|
#panelRight:ltr {
|
||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#panelRight:rtl {
|
#panelRight:rtl {
|
||||||
padding-left: 0px;
|
|
||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,6 +295,11 @@ StTooltip StLabel {
|
|||||||
padding-left: 14px;
|
padding-left: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#legacyTray:rtl {
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
#legacyTray:compact {
|
#legacyTray:compact {
|
||||||
spacing: 8px;
|
spacing: 8px;
|
||||||
}
|
}
|
||||||
@ -354,10 +357,13 @@ StTooltip StLabel {
|
|||||||
|
|
||||||
.window-close {
|
.window-close {
|
||||||
background-image: url("close-window.svg");
|
background-image: url("close-window.svg");
|
||||||
height: 24px;
|
height: 34px;
|
||||||
width: 24px;
|
width: 34px;
|
||||||
-st-background-image-shadow: -2px 2px 6px rgba(0,0,0,0.5);
|
-shell-close-overlap: 20px;
|
||||||
-shell-close-overlap: 16px;
|
}
|
||||||
|
|
||||||
|
.window-close:rtl {
|
||||||
|
-st-background-image-shadow: 2px 2px 6px rgba(0,0,0,0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dash */
|
/* Dash */
|
||||||
@ -473,10 +479,15 @@ StTooltip StLabel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#searchResultsContent {
|
#searchResultsContent {
|
||||||
padding: 0 20px 0 0;
|
padding-right: 20px;
|
||||||
spacing: 36px;
|
spacing: 36px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#searchResultsContent:rtl {
|
||||||
|
padding-right: 0px;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
.search-statustext,
|
.search-statustext,
|
||||||
.search-section-header {
|
.search-section-header {
|
||||||
padding: 4px 12px;
|
padding: 4px 12px;
|
||||||
@ -541,6 +552,11 @@ StTooltip StLabel {
|
|||||||
spacing: 20px;
|
spacing: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.all-app:rtl {
|
||||||
|
padding-right: 16px;
|
||||||
|
padding-left: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
.app-filter {
|
.app-filter {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@ -549,12 +565,25 @@ StTooltip StLabel {
|
|||||||
width: 200px;
|
width: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app-filter:hover {
|
||||||
|
color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
.app-filter:selected {
|
.app-filter:selected {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
background-image: url("filter-selected.svg");
|
background-image: url("filter-selected-ltr.svg");
|
||||||
background-position: 190px 10px;
|
background-position: 190px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app-filter:selected:rtl {
|
||||||
|
background-image: url("filter-selected-rtl.svg");
|
||||||
|
background-position: 10px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-filter:focus {
|
||||||
|
outline: 1px solid #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
.dash-item-container > .app-well-app {
|
.dash-item-container > .app-well-app {
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
}
|
}
|
||||||
@ -572,7 +601,8 @@ StTooltip StLabel {
|
|||||||
.remove-favorite > .overview-icon,
|
.remove-favorite > .overview-icon,
|
||||||
.search-result-content > .overview-icon {
|
.search-result-content > .overview-icon {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 4px;
|
padding: 3px;
|
||||||
|
border: 1px rgba(0,0,0,0);
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
color: white;
|
color: white;
|
||||||
transition-duration: 100;
|
transition-duration: 100;
|
||||||
@ -597,6 +627,11 @@ StTooltip StLabel {
|
|||||||
transition-duration: 100;
|
transition-duration: 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app-well-app:focus > .overview-icon,
|
||||||
|
.search-result-content:focus > .overview-icon {
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
}
|
||||||
|
|
||||||
.app-well-menu {
|
.app-well-menu {
|
||||||
font-size: 12px
|
font-size: 12px
|
||||||
}
|
}
|
||||||
@ -765,6 +800,11 @@ StTooltip StLabel {
|
|||||||
background-image: url("calendar-arrow-left.svg");
|
background-image: url("calendar-arrow-left.svg");
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.calendar-change-month-back:rtl {
|
||||||
|
background-image: url("calendar-arrow-right.svg");
|
||||||
|
}
|
||||||
|
|
||||||
.calendar-change-month-back:hover {
|
.calendar-change-month-back:hover {
|
||||||
background-color: #999999;
|
background-color: #999999;
|
||||||
}
|
}
|
||||||
@ -778,6 +818,11 @@ StTooltip StLabel {
|
|||||||
background-image: url("calendar-arrow-right.svg");
|
background-image: url("calendar-arrow-right.svg");
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.calendar-change-month-forward:rtl {
|
||||||
|
background-image: url("calendar-arrow-left.svg");
|
||||||
|
}
|
||||||
|
|
||||||
.calendar-change-month-forward:hover {
|
.calendar-change-month-forward:hover {
|
||||||
background-color: #999999;
|
background-color: #999999;
|
||||||
}
|
}
|
||||||
@ -872,18 +917,31 @@ StTooltip StLabel {
|
|||||||
padding-left: 0.3em;
|
padding-left: 0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.events-day-header:rtl {
|
||||||
|
padding-left: 0em;
|
||||||
|
padding-right: 0.3em;
|
||||||
|
}
|
||||||
|
|
||||||
.events-day-dayname {
|
.events-day-dayname {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: rgba(153, 153, 153, 1.0);
|
color: rgba(153, 153, 153, 1.0);
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.events-day-dayname:rtl {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
.events-day-time {
|
.events-day-time {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.events-day-time:rtl {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
.events-day-task {
|
.events-day-task {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: rgba(153, 153, 153, 1.0);
|
color: rgba(153, 153, 153, 1.0);
|
||||||
@ -898,6 +956,11 @@ StTooltip StLabel {
|
|||||||
padding-right: 8px;
|
padding-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.events-time-box:rtl {
|
||||||
|
padding-right: 0px;
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
.events-event-box {
|
.events-event-box {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -928,7 +991,7 @@ StTooltip StLabel {
|
|||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-notification-boxpointer {
|
.summary-boxpointer {
|
||||||
-arrow-border-radius: 9px;
|
-arrow-border-radius: 9px;
|
||||||
-arrow-background-color: rgba(0,0,0,0.9);
|
-arrow-background-color: rgba(0,0,0,0.9);
|
||||||
-arrow-border-width: 2px;
|
-arrow-border-width: 2px;
|
||||||
@ -937,12 +1000,18 @@ StTooltip StLabel {
|
|||||||
-arrow-rise: 15px;
|
-arrow-rise: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-notification-boxpointer #notification {
|
.summary-boxpointer #notification {
|
||||||
border-radius: 9px;
|
border-radius: 9px;
|
||||||
background: rgba(0,0,0,0) !important;
|
background: rgba(0,0,0,0) !important;
|
||||||
padding-bottom: 12px;
|
padding-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.summary-boxpointer #summary-right-click-menu {
|
||||||
|
font-size: 14px;
|
||||||
|
padding-top: 12px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
#notification-scrollview {
|
#notification-scrollview {
|
||||||
max-height: 10em;
|
max-height: 10em;
|
||||||
}
|
}
|
||||||
@ -951,10 +1020,14 @@ StTooltip StLabel {
|
|||||||
height: 1em;
|
height: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#notification-scrollview > StScrollBar {
|
#notification-scrollview:ltr > StScrollBar {
|
||||||
padding-left: 6px;
|
padding-left: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#notification-scrollview:rtl > StScrollBar {
|
||||||
|
padding-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
#notification-body {
|
#notification-body {
|
||||||
spacing: 5px;
|
spacing: 5px;
|
||||||
}
|
}
|
||||||
@ -1014,6 +1087,11 @@ StTooltip StLabel {
|
|||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chat-received:rtl {
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
.chat-sent {
|
.chat-sent {
|
||||||
background-gradient-direction: horizontal;
|
background-gradient-direction: horizontal;
|
||||||
background-gradient-start: rgba(255, 255, 255, 0);
|
background-gradient-start: rgba(255, 255, 255, 0);
|
||||||
@ -1023,6 +1101,11 @@ StTooltip StLabel {
|
|||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chat-sent:rtl {
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
.chat-meta-message {
|
.chat-meta-message {
|
||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
@ -1030,6 +1113,11 @@ StTooltip StLabel {
|
|||||||
color: #bbbbbb;
|
color: #bbbbbb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chat-meta-message:rtl {
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
#notification StEntry {
|
#notification StEntry {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
@ -1066,21 +1154,39 @@ StTooltip StLabel {
|
|||||||
height: 36px;
|
height: 36px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-source-button {
|
#summary-mode:rtl {
|
||||||
|
padding: 2px 4px 0px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-source-button:ltr {
|
||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
padding-right: 16px;
|
padding-right: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-source-button:last-child {
|
.summary-source-button:rtl {
|
||||||
|
padding-right: 4px;
|
||||||
|
padding-left: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-source-button:last-child:ltr {
|
||||||
padding-right: 12px;
|
padding-right: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.summary-source-button:last-child:rtl {
|
||||||
|
padding-left: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
.source-title {
|
.source-title {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.source-title:rtl {
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
/* App Switcher */
|
/* App Switcher */
|
||||||
#altTabPopup {
|
#altTabPopup {
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
@ -1302,6 +1408,11 @@ StTooltip StLabel {
|
|||||||
padding-bottom: 30px;
|
padding-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-subject:rtl {
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
.end-session-dialog-description {
|
.end-session-dialog-description {
|
||||||
font-size: 10pt;
|
font-size: 10pt;
|
||||||
color: white;
|
color: white;
|
||||||
@ -1310,6 +1421,11 @@ StTooltip StLabel {
|
|||||||
width: 16em;
|
width: 16em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-description:rtl {
|
||||||
|
padding-right: 17px;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
.end-session-dialog-logout-icon {
|
.end-session-dialog-logout-icon {
|
||||||
border: 2px solid #8b8b8b;
|
border: 2px solid #8b8b8b;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
@ -1331,14 +1447,27 @@ StTooltip StLabel {
|
|||||||
padding-right: 32px;
|
padding-right: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.end-session-dialog-app-list-item {
|
.end-session-dialog-app-list:rtl {
|
||||||
|
padding-right: 17px;
|
||||||
|
padding-left: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-app-list-item:ltr {
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.end-session-dialog-app-list-item-icon {
|
.end-session-dialog-app-list-item:rtl {
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-app-list-item-icon:ltr {
|
||||||
padding-right: 17px;
|
padding-right: 17px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-app-list-item-icon:rtl {
|
||||||
|
padding-left: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
.end-session-dialog-app-list-item-name {
|
.end-session-dialog-app-list-item-name {
|
||||||
font-size: 10pt;
|
font-size: 10pt;
|
||||||
}
|
}
|
||||||
@ -1379,10 +1508,19 @@ StTooltip StLabel {
|
|||||||
spacing: 10px;
|
spacing: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.polkit-dialog-password-label {
|
.polkit-dialog-user-layout:rtl {
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.polkit-dialog-password-label:ltr {
|
||||||
padding-right: 0.5em;
|
padding-right: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.polkit-dialog-password-label:rtl {
|
||||||
|
padding-left: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
.polkit-dialog-password-entry {
|
.polkit-dialog-password-entry {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
color: black;
|
color: black;
|
||||||
|
Before Width: | Height: | Size: 4.0 KiB |
261
data/theme/process-working.svg
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
id="svg5369"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48+devel r10053 custom"
|
||||||
|
width="96"
|
||||||
|
height="48"
|
||||||
|
sodipodi:docname="process-working.svg"
|
||||||
|
style="display:inline">
|
||||||
|
<metadata
|
||||||
|
id="metadata5375">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs5373" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#808080"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1975"
|
||||||
|
inkscape:window-height="1098"
|
||||||
|
id="namedview5371"
|
||||||
|
showgrid="true"
|
||||||
|
borderlayer="true"
|
||||||
|
inkscape:showpageshadow="false"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="53.997662"
|
||||||
|
inkscape:cy="22.367695"
|
||||||
|
inkscape:window-x="1600"
|
||||||
|
inkscape:window-y="33"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="layer2">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid11933"
|
||||||
|
empspacing="5"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
inkscape:label="tiles"
|
||||||
|
style="display:none">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="rect12451"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
x="0"
|
||||||
|
y="0" />
|
||||||
|
<rect
|
||||||
|
y="24"
|
||||||
|
x="0"
|
||||||
|
height="24"
|
||||||
|
width="24"
|
||||||
|
id="rect12453"
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||||
|
<rect
|
||||||
|
y="0"
|
||||||
|
x="24"
|
||||||
|
height="24"
|
||||||
|
width="24"
|
||||||
|
id="rect12455"
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||||
|
<rect
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="rect12457"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
x="24"
|
||||||
|
y="24" />
|
||||||
|
<rect
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="rect12459"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
x="48"
|
||||||
|
y="0" />
|
||||||
|
<rect
|
||||||
|
y="24"
|
||||||
|
x="48"
|
||||||
|
height="24"
|
||||||
|
width="24"
|
||||||
|
id="rect12461"
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||||
|
<rect
|
||||||
|
y="0"
|
||||||
|
x="72"
|
||||||
|
height="24"
|
||||||
|
width="24"
|
||||||
|
id="rect12463"
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||||
|
<rect
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="rect12465"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
x="72"
|
||||||
|
y="24" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer2"
|
||||||
|
inkscape:label="spinner">
|
||||||
|
<g
|
||||||
|
transform="matrix(0.28240106,0,0,0.28240106,146.92015,-382.52444)"
|
||||||
|
id="g10450-5"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="opacity:0.6;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
d="m -477.76072,1373.3569 0,9.4717"
|
||||||
|
id="path18768"
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:transform-center-y="-4.6808838" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
inkscape:transform-center-y="-3.3099227"
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
id="path18770"
|
||||||
|
d="m -461.0171,1380.2922 -7.23427,7.3824"
|
||||||
|
style="opacity:0.7;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
inkscape:transform-center-x="-3.3098966" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
inkscape:transform-center-x="-4.6808962"
|
||||||
|
style="opacity:0.8;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
d="m -454.08163,1397.0359 -9.47165,0"
|
||||||
|
id="path18772"
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:transform-center-y="-2.6596956e-05" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
id="path18774"
|
||||||
|
d="m -461.01709,1413.7796 -6.93831,-7.0864"
|
||||||
|
style="opacity:0.9;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
inkscape:transform-center-x="-3.3098966"
|
||||||
|
inkscape:transform-center-y="3.3098652" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
inkscape:transform-center-y="4.6808757"
|
||||||
|
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
d="m -477.76074,1420.715 9e-5,-9.4716"
|
||||||
|
id="path18776"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
id="path18778"
|
||||||
|
d="m -494.50442,1413.7796 6.79048,-6.9384"
|
||||||
|
style="opacity:0.3;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
inkscape:transform-center-y="3.3098769"
|
||||||
|
inkscape:transform-center-x="3.3098883" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
inkscape:transform-center-x="4.6808941"
|
||||||
|
style="opacity:0.4;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
d="m -501.43987,1397.0359 9.47174,0"
|
||||||
|
id="path18780"
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:transform-center-y="-2.6596956e-05" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
id="path18782"
|
||||||
|
d="m -494.5044,1380.2922 6.64243,6.9384"
|
||||||
|
style="opacity:0.5;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
inkscape:transform-center-x="3.3098902"
|
||||||
|
inkscape:transform-center-y="-3.3099302" />
|
||||||
|
</g>
|
||||||
|
<use
|
||||||
|
style="display:inline"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#g10450-5"
|
||||||
|
id="use4981"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,36,-4.9705636)"
|
||||||
|
width="400"
|
||||||
|
height="400" />
|
||||||
|
<use
|
||||||
|
style="display:inline"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#use4981"
|
||||||
|
id="use4983"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,43.032478,-21.909695)"
|
||||||
|
width="400"
|
||||||
|
height="400" />
|
||||||
|
<use
|
||||||
|
style="display:inline"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#use4983"
|
||||||
|
id="use4985"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,50.081986,-38.904617)"
|
||||||
|
width="400"
|
||||||
|
height="400" />
|
||||||
|
<use
|
||||||
|
style="display:inline"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#use4985"
|
||||||
|
id="use4987"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,-38.919996,-31.872139)"
|
||||||
|
width="400"
|
||||||
|
height="400" />
|
||||||
|
<use
|
||||||
|
style="display:inline"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#use4987"
|
||||||
|
id="use4989"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,52.986628,2.0890543)"
|
||||||
|
width="400"
|
||||||
|
height="400" />
|
||||||
|
<use
|
||||||
|
style="display:inline"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#use4989"
|
||||||
|
id="use4991"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,60.013026,-14.912936)"
|
||||||
|
width="400"
|
||||||
|
height="400" />
|
||||||
|
<use
|
||||||
|
style="display:inline"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#use4991"
|
||||||
|
id="use4993"
|
||||||
|
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,67.022396,-31.859127)"
|
||||||
|
width="400"
|
||||||
|
height="400" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 9.8 KiB |
@ -2,22 +2,40 @@
|
|||||||
|
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
const DEFAULT_LIMIT = 512;
|
const DEFAULT_LIMIT = 512;
|
||||||
|
|
||||||
function HistoryManager(settings_key) {
|
function HistoryManager(params) {
|
||||||
this._init(settings_key);
|
this._init(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
HistoryManager.prototype = {
|
HistoryManager.prototype = {
|
||||||
_init: function(settings_key, limit) {
|
_init: function(params) {
|
||||||
this._limit = limit || DEFAULT_LIMIT;
|
params = Params.parse(params, { gsettingsKey: null,
|
||||||
this._key = settings_key;
|
limit: DEFAULT_LIMIT,
|
||||||
this._history = global.settings.get_strv(settings_key);
|
entry: null });
|
||||||
this._historyIndex = -1;
|
|
||||||
|
|
||||||
global.settings.connect('changed::' + settings_key,
|
this._key = params.gsettingsKey;
|
||||||
|
this._limit = params.limit;
|
||||||
|
|
||||||
|
this._historyIndex = 0;
|
||||||
|
if (this._key) {
|
||||||
|
this._history = global.settings.get_strv(this._key);
|
||||||
|
global.settings.connect('changed::' + this._key,
|
||||||
Lang.bind(this, this._historyChanged));
|
Lang.bind(this, this._historyChanged));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this._history = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
this._entry = params.entry;
|
||||||
|
|
||||||
|
if (this._entry) {
|
||||||
|
this._entry.connect('key-press-event',
|
||||||
|
Lang.bind(this, this._onEntryKeyPress));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_historyChanged: function() {
|
_historyChanged: function() {
|
||||||
@ -26,18 +44,32 @@ HistoryManager.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
prevItem: function(text) {
|
prevItem: function(text) {
|
||||||
this._setHistory(this._historyIndex--, text);
|
if (this._historyIndex <= 0)
|
||||||
|
return text;
|
||||||
|
|
||||||
|
if (text)
|
||||||
|
this._history[this._historyIndex] = text;
|
||||||
|
this._historyIndex--;
|
||||||
return this._indexChanged();
|
return this._indexChanged();
|
||||||
},
|
},
|
||||||
|
|
||||||
nextItem: function(text) {
|
nextItem: function(text) {
|
||||||
this._setHistory(this._historyIndex++, text);
|
if (this._historyIndex >= this._history.length)
|
||||||
|
return text;
|
||||||
|
|
||||||
|
if (text)
|
||||||
|
this._history[this._historyIndex] = text;
|
||||||
|
this._historyIndex++;
|
||||||
return this._indexChanged();
|
return this._indexChanged();
|
||||||
},
|
},
|
||||||
|
|
||||||
lastItem: function() {
|
lastItem: function() {
|
||||||
|
if (this._historyIndex != this._history.length) {
|
||||||
this._historyIndex = this._history.length;
|
this._historyIndex = this._history.length;
|
||||||
return this._indexChanged();
|
this._indexChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._historyIndex[this._history.length];
|
||||||
},
|
},
|
||||||
|
|
||||||
addItem: function(input) {
|
addItem: function(input) {
|
||||||
@ -45,27 +77,38 @@ HistoryManager.prototype = {
|
|||||||
this._history[this._history.length - 1] != input) {
|
this._history[this._history.length - 1] != input) {
|
||||||
|
|
||||||
this._history.push(input);
|
this._history.push(input);
|
||||||
|
this._historyIndex = this._history.length;
|
||||||
this._save();
|
this._save();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onEntryKeyPress: function(entry, event) {
|
||||||
|
let symbol = event.get_key_symbol();
|
||||||
|
if (symbol == Clutter.KEY_Up) {
|
||||||
|
this.prevItem(entry.get_text());
|
||||||
|
return true;
|
||||||
|
} else if (symbol == Clutter.KEY_Down) {
|
||||||
|
this.nextItem(entry.get_text());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
_indexChanged: function() {
|
_indexChanged: function() {
|
||||||
let current = this._history[this._historyIndex] || '';
|
let current = this._history[this._historyIndex] || '';
|
||||||
this.emit('changed', current);
|
this.emit('changed', current);
|
||||||
|
|
||||||
|
if (this._entry)
|
||||||
|
this._entry.set_text(current);
|
||||||
|
|
||||||
return current;
|
return current;
|
||||||
},
|
},
|
||||||
|
|
||||||
_setHistory: function(index, text) {
|
|
||||||
this._historyIndex = Math.max(this._historyIndex, 0);
|
|
||||||
this._historyIndex = Math.min(this._historyIndex, this._history.length);
|
|
||||||
|
|
||||||
if (text)
|
|
||||||
this._history[index] = text;
|
|
||||||
},
|
|
||||||
|
|
||||||
_save: function() {
|
_save: function() {
|
||||||
if (this._history.length > this._limit)
|
if (this._history.length > this._limit)
|
||||||
this._history.splice(0, this._history.length - this._key);
|
this._history.splice(0, this._history.length - this._limit);
|
||||||
|
|
||||||
|
if (this._key)
|
||||||
global.settings.set_strv(this._key, this._history);
|
global.settings.set_strv(this._key, this._history);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -87,7 +87,7 @@ AltTabPopup.prototype = {
|
|||||||
let [childMinHeight, childNaturalHeight] = this._appSwitcher.actor.get_preferred_height(primary.width - hPadding);
|
let [childMinHeight, childNaturalHeight] = this._appSwitcher.actor.get_preferred_height(primary.width - hPadding);
|
||||||
let [childMinWidth, childNaturalWidth] = this._appSwitcher.actor.get_preferred_width(childNaturalHeight);
|
let [childMinWidth, childNaturalWidth] = this._appSwitcher.actor.get_preferred_width(childNaturalHeight);
|
||||||
childBox.x1 = Math.max(primary.x + leftPadding, primary.x + Math.floor((primary.width - childNaturalWidth) / 2));
|
childBox.x1 = Math.max(primary.x + leftPadding, primary.x + Math.floor((primary.width - childNaturalWidth) / 2));
|
||||||
childBox.x2 = Math.min(childBox.x1 + primary.width - hPadding, childBox.x1 + childNaturalWidth);
|
childBox.x2 = Math.min(primary.x + primary.width - hPadding, childBox.x1 + childNaturalWidth);
|
||||||
childBox.y1 = primary.y + Math.floor((primary.height - childNaturalHeight) / 2);
|
childBox.y1 = primary.y + Math.floor((primary.height - childNaturalHeight) / 2);
|
||||||
childBox.y2 = childBox.y1 + childNaturalHeight;
|
childBox.y2 = childBox.y1 + childNaturalHeight;
|
||||||
this._appSwitcher.actor.allocate(childBox, flags);
|
this._appSwitcher.actor.allocate(childBox, flags);
|
||||||
|
@ -23,6 +23,7 @@ const Workspace = imports.ui.workspace;
|
|||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
const MENU_POPUP_TIMEOUT = 600;
|
const MENU_POPUP_TIMEOUT = 600;
|
||||||
|
const SCROLL_TIME = 0.1;
|
||||||
|
|
||||||
function AlphabeticalView() {
|
function AlphabeticalView() {
|
||||||
this._init();
|
this._init();
|
||||||
@ -67,6 +68,7 @@ AlphabeticalView.prototype = {
|
|||||||
let appIcon = new AppWellIcon(this._appSystem.get_app(appInfo.get_id()));
|
let appIcon = new AppWellIcon(this._appSystem.get_app(appInfo.get_id()));
|
||||||
|
|
||||||
this._grid.addItem(appIcon.actor);
|
this._grid.addItem(appIcon.actor);
|
||||||
|
appIcon.actor.connect('key-focus-in', Lang.bind(this, this._ensureIconVisible));
|
||||||
|
|
||||||
appIcon._appInfo = appInfo;
|
appIcon._appInfo = appInfo;
|
||||||
if (this._filterApp && !this._filterApp(appInfo))
|
if (this._filterApp && !this._filterApp(appInfo))
|
||||||
@ -75,6 +77,28 @@ AlphabeticalView.prototype = {
|
|||||||
this._apps.push(appIcon);
|
this._apps.push(appIcon);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_ensureIconVisible: function(icon) {
|
||||||
|
let adjustment = this.actor.vscroll.adjustment;
|
||||||
|
let [value, lower, upper, stepIncrement, pageIncrement, pageSize] = adjustment.get_values();
|
||||||
|
|
||||||
|
let offset = 0;
|
||||||
|
let vfade = this.actor.get_effect("vfade");
|
||||||
|
if (vfade)
|
||||||
|
offset = vfade.fade_offset;
|
||||||
|
|
||||||
|
if (icon.y < value + offset)
|
||||||
|
value = Math.max(0, icon.y - offset);
|
||||||
|
else if (icon.y + icon.height > value + pageSize - offset)
|
||||||
|
value = Math.min(upper, icon.y + icon.height + offset - pageSize);
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
Tweener.addTween(adjustment,
|
||||||
|
{ value: value,
|
||||||
|
time: SCROLL_TIME,
|
||||||
|
transition: 'easeOutQuad' });
|
||||||
|
},
|
||||||
|
|
||||||
setFilter: function(filter) {
|
setFilter: function(filter) {
|
||||||
this._filterApp = filter;
|
this._filterApp = filter;
|
||||||
for (let i = 0; i < this._apps.length; i++)
|
for (let i = 0; i < this._apps.length; i++)
|
||||||
@ -128,6 +152,12 @@ ViewByCategories.prototype = {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
this._sections = [];
|
this._sections = [];
|
||||||
|
|
||||||
|
// We need a dummy actor to catch the keyboard focus if the
|
||||||
|
// user Ctrl-Alt-Tabs here before the deferred work creates
|
||||||
|
// our real contents
|
||||||
|
this._focusDummy = new St.Bin({ can_focus: true });
|
||||||
|
this.actor.add(this._focusDummy);
|
||||||
},
|
},
|
||||||
|
|
||||||
_scrollFilter: function(actor, event) {
|
_scrollFilter: function(actor, event) {
|
||||||
@ -166,7 +196,8 @@ ViewByCategories.prototype = {
|
|||||||
_addFilter: function(name, num) {
|
_addFilter: function(name, num) {
|
||||||
let button = new St.Button({ label: GLib.markup_escape_text (name, -1),
|
let button = new St.Button({ label: GLib.markup_escape_text (name, -1),
|
||||||
style_class: 'app-filter',
|
style_class: 'app-filter',
|
||||||
x_align: St.Align.START });
|
x_align: St.Align.START,
|
||||||
|
can_focus: true });
|
||||||
this._filters.add(button, { expand: true, x_fill: true, y_fill: false });
|
this._filters.add(button, { expand: true, x_fill: true, y_fill: false });
|
||||||
button.connect('clicked', Lang.bind(this, function() {
|
button.connect('clicked', Lang.bind(this, function() {
|
||||||
this._selectCategory(num);
|
this._selectCategory(num);
|
||||||
@ -201,6 +232,14 @@ ViewByCategories.prototype = {
|
|||||||
this._addFilter(sections[i], i);
|
this._addFilter(sections[i], i);
|
||||||
|
|
||||||
this._selectCategory(-1);
|
this._selectCategory(-1);
|
||||||
|
|
||||||
|
if (this._focusDummy) {
|
||||||
|
let focused = this._focusDummy.has_key_focus();
|
||||||
|
this._focusDummy.destroy();
|
||||||
|
this._focusDummy = null;
|
||||||
|
if (focused)
|
||||||
|
this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -352,6 +391,7 @@ AppWellIcon.prototype = {
|
|||||||
this.actor = new St.Button({ style_class: 'app-well-app',
|
this.actor = new St.Button({ style_class: 'app-well-app',
|
||||||
reactive: true,
|
reactive: true,
|
||||||
button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO,
|
button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO,
|
||||||
|
can_focus: true,
|
||||||
x_fill: true,
|
x_fill: true,
|
||||||
y_fill: true });
|
y_fill: true });
|
||||||
this.actor._delegate = this;
|
this.actor._delegate = this;
|
||||||
@ -361,6 +401,7 @@ AppWellIcon.prototype = {
|
|||||||
|
|
||||||
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
||||||
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
||||||
|
this.actor.connect('popup-menu', Lang.bind(this, this._onKeyboardPopupMenu));
|
||||||
|
|
||||||
this._menu = null;
|
this._menu = null;
|
||||||
this._menuManager = new PopupMenu.PopupMenuManager(this);
|
this._menuManager = new PopupMenu.PopupMenuManager(this);
|
||||||
@ -437,6 +478,11 @@ AppWellIcon.prototype = {
|
|||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onKeyboardPopupMenu: function() {
|
||||||
|
this.popupMenu();
|
||||||
|
this._menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||||
|
},
|
||||||
|
|
||||||
getId: function() {
|
getId: function() {
|
||||||
return this.app.get_id();
|
return this.app.get_id();
|
||||||
},
|
},
|
||||||
@ -454,6 +500,7 @@ AppWellIcon.prototype = {
|
|||||||
if (!isPoppedUp)
|
if (!isPoppedUp)
|
||||||
this._onMenuPoppedDown();
|
this._onMenuPoppedDown();
|
||||||
}));
|
}));
|
||||||
|
Main.overview.connect('hiding', Lang.bind(this, function () { this._menu.close(); }));
|
||||||
|
|
||||||
this._menuManager.addMenu(this._menu);
|
this._menuManager.addMenu(this._menu);
|
||||||
}
|
}
|
||||||
|
@ -10,11 +10,18 @@ const St = imports.gi.St;
|
|||||||
|
|
||||||
const AltTab = imports.ui.altTab;
|
const AltTab = imports.ui.altTab;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
const Params = imports.misc.params;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
const POPUP_APPICON_SIZE = 96;
|
const POPUP_APPICON_SIZE = 96;
|
||||||
const POPUP_FADE_TIME = 0.1; // seconds
|
const POPUP_FADE_TIME = 0.1; // seconds
|
||||||
|
|
||||||
|
const SortGroup = {
|
||||||
|
TOP: 0,
|
||||||
|
MIDDLE: 1,
|
||||||
|
BOTTOM: 2
|
||||||
|
};
|
||||||
|
|
||||||
function CtrlAltTabManager() {
|
function CtrlAltTabManager() {
|
||||||
this._init();
|
this._init();
|
||||||
}
|
}
|
||||||
@ -23,14 +30,18 @@ CtrlAltTabManager.prototype = {
|
|||||||
_init: function() {
|
_init: function() {
|
||||||
this._items = [];
|
this._items = [];
|
||||||
this._focusManager = St.FocusManager.get_for_stage(global.stage);
|
this._focusManager = St.FocusManager.get_for_stage(global.stage);
|
||||||
Main.wm.setKeybindingHandler('switch_panels', Lang.bind(this,
|
|
||||||
function (shellwm, binding, window, backwards) {
|
|
||||||
this.popup(backwards);
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
addGroup: function(root, name, icon) {
|
addGroup: function(root, name, icon, params) {
|
||||||
this._items.push({ root: root, name: name, iconName: icon });
|
let item = Params.parse(params, { sortGroup: SortGroup.MIDDLE,
|
||||||
|
proxy: root,
|
||||||
|
focusCallback: null });
|
||||||
|
|
||||||
|
item.root = root;
|
||||||
|
item.name = name;
|
||||||
|
item.iconName = icon;
|
||||||
|
|
||||||
|
this._items.push(item);
|
||||||
root.connect('destroy', Lang.bind(this, function() { this.removeGroup(root); }));
|
root.connect('destroy', Lang.bind(this, function() { this.removeGroup(root); }));
|
||||||
this._focusManager.add_group(root);
|
this._focusManager.add_group(root);
|
||||||
},
|
},
|
||||||
@ -45,18 +56,50 @@ CtrlAltTabManager.prototype = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
focusGroup: function(root) {
|
focusGroup: function(item) {
|
||||||
if (global.stage_input_mode == Shell.StageInputMode.NONREACTIVE ||
|
if (global.stage_input_mode == Shell.StageInputMode.NONREACTIVE ||
|
||||||
global.stage_input_mode == Shell.StageInputMode.NORMAL)
|
global.stage_input_mode == Shell.StageInputMode.NORMAL)
|
||||||
global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
|
global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
|
||||||
root.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
|
||||||
|
if (item.window)
|
||||||
|
Main.activateWindow(item.window);
|
||||||
|
else if (item.focusCallback)
|
||||||
|
item.focusCallback();
|
||||||
|
else
|
||||||
|
item.root.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||||
|
},
|
||||||
|
|
||||||
|
// Sort the items into a consistent order; panel first, tray last,
|
||||||
|
// and everything else in between, sorted by X coordinate, so that
|
||||||
|
// they will have the same left-to-right ordering in the
|
||||||
|
// Ctrl-Alt-Tab dialog as they do onscreen.
|
||||||
|
_sortItems: function(a, b) {
|
||||||
|
if (a.sortGroup != b.sortGroup)
|
||||||
|
return a.sortGroup - b.sortGroup;
|
||||||
|
|
||||||
|
let y;
|
||||||
|
if (a.x == undefined) {
|
||||||
|
if (a.window)
|
||||||
|
a.x = a.window.get_compositor_private().x;
|
||||||
|
else
|
||||||
|
[a.x, y] = a.proxy.get_transformed_position();
|
||||||
|
}
|
||||||
|
if (b.x == undefined) {
|
||||||
|
if (b.window)
|
||||||
|
b.x = b.window.get_compositor_private().x;
|
||||||
|
else
|
||||||
|
[b.x, y] = b.proxy.get_transformed_position();
|
||||||
|
}
|
||||||
|
|
||||||
|
return a.x - b.x;
|
||||||
},
|
},
|
||||||
|
|
||||||
popup: function(backwards) {
|
popup: function(backwards) {
|
||||||
// Start with the set of focus groups that are currently mapped
|
// Start with the set of focus groups that are currently mapped
|
||||||
let items = this._items.filter(function (item) { return item.root.mapped; });
|
let items = this._items.filter(function (item) { return item.proxy.mapped; });
|
||||||
|
|
||||||
// And add the windows metacity would show in its Ctrl-Alt-Tab list
|
// And add the windows metacity would show in its Ctrl-Alt-Tab list
|
||||||
|
if (!Main.overview.visible) {
|
||||||
let screen = global.screen;
|
let screen = global.screen;
|
||||||
let display = screen.get_display();
|
let display = screen.get_display();
|
||||||
let windows = display.get_tab_list(Meta.TabList.DOCKS, screen, screen.get_active_workspace ());
|
let windows = display.get_tab_list(Meta.TabList.DOCKS, screen, screen.get_active_workspace ());
|
||||||
@ -71,12 +114,15 @@ CtrlAltTabManager.prototype = {
|
|||||||
icon = textureCache.bind_pixbuf_property(windows[i], 'icon');
|
icon = textureCache.bind_pixbuf_property(windows[i], 'icon');
|
||||||
items.push({ window: windows[i],
|
items.push({ window: windows[i],
|
||||||
name: windows[i].title,
|
name: windows[i].title,
|
||||||
iconActor: icon });
|
iconActor: icon,
|
||||||
|
sortGroup: SortGroup.MIDDLE });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!items.length)
|
if (!items.length)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
items.sort(Lang.bind(this, this._sortItems));
|
||||||
new CtrlAltTabPopup().show(items, backwards);
|
new CtrlAltTabPopup().show(items, backwards);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -91,12 +137,12 @@ function CtrlAltTabPopup() {
|
|||||||
|
|
||||||
CtrlAltTabPopup.prototype = {
|
CtrlAltTabPopup.prototype = {
|
||||||
_init : function() {
|
_init : function() {
|
||||||
let primary = global.get_primary_monitor();
|
this.actor = new Shell.GenericContainer({ name: 'ctrlAltTabPopup',
|
||||||
this.actor = new St.BoxLayout({ name: 'ctrlAltTabPopup',
|
reactive: true });
|
||||||
reactive: true,
|
|
||||||
x: primary.x + primary.width / 2,
|
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||||
y: primary.y + primary.height / 2,
|
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
||||||
anchor_gravity: Clutter.Gravity.CENTER });
|
this.actor.connect('allocate', Lang.bind(this, this._allocate));
|
||||||
|
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
@ -106,6 +152,37 @@ CtrlAltTabPopup.prototype = {
|
|||||||
Main.uiGroup.add_actor(this.actor);
|
Main.uiGroup.add_actor(this.actor);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_getPreferredWidth: function (actor, forHeight, alloc) {
|
||||||
|
let primary = global.get_primary_monitor();
|
||||||
|
|
||||||
|
alloc.min_size = primary.width;
|
||||||
|
alloc.natural_size = primary.width;
|
||||||
|
},
|
||||||
|
|
||||||
|
_getPreferredHeight: function (actor, forWidth, alloc) {
|
||||||
|
let primary = global.get_primary_monitor();
|
||||||
|
|
||||||
|
alloc.min_size = primary.height;
|
||||||
|
alloc.natural_size = primary.height;
|
||||||
|
},
|
||||||
|
|
||||||
|
_allocate: function (actor, box, flags) {
|
||||||
|
let childBox = new Clutter.ActorBox();
|
||||||
|
let primary = global.get_primary_monitor();
|
||||||
|
|
||||||
|
let leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT);
|
||||||
|
let vPadding = this.actor.get_theme_node().get_vertical_padding();
|
||||||
|
let hPadding = this.actor.get_theme_node().get_horizontal_padding();
|
||||||
|
|
||||||
|
let [childMinHeight, childNaturalHeight] = this._switcher.actor.get_preferred_height(primary.width - hPadding);
|
||||||
|
let [childMinWidth, childNaturalWidth] = this._switcher.actor.get_preferred_width(childNaturalHeight);
|
||||||
|
childBox.x1 = Math.max(primary.x + leftPadding, primary.x + Math.floor((primary.width - childNaturalWidth) / 2));
|
||||||
|
childBox.x2 = Math.min(primary.width - hPadding, childBox.x1 + childNaturalWidth);
|
||||||
|
childBox.y1 = primary.y + Math.floor((primary.height - childNaturalHeight) / 2);
|
||||||
|
childBox.y2 = childBox.y1 + childNaturalHeight;
|
||||||
|
this._switcher.actor.allocate(childBox, flags);
|
||||||
|
},
|
||||||
|
|
||||||
show : function(items, startBackwards) {
|
show : function(items, startBackwards) {
|
||||||
if (!Main.pushModal(this.actor))
|
if (!Main.pushModal(this.actor))
|
||||||
return false;
|
return false;
|
||||||
@ -180,11 +257,7 @@ CtrlAltTabPopup.prototype = {
|
|||||||
_finish : function() {
|
_finish : function() {
|
||||||
this.destroy();
|
this.destroy();
|
||||||
|
|
||||||
let item = this._items[this._selection];
|
Main.ctrlAltTabManager.focusGroup(this._items[this._selection]);
|
||||||
if (item.root)
|
|
||||||
Main.ctrlAltTabManager.focusGroup(item.root);
|
|
||||||
else
|
|
||||||
Main.activateWindow(item.window);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_popModal: function() {
|
_popModal: function() {
|
||||||
|
@ -262,11 +262,6 @@ Dash.prototype = {
|
|||||||
clip_to_allocation: true });
|
clip_to_allocation: true });
|
||||||
this._box._delegate = this;
|
this._box._delegate = this;
|
||||||
|
|
||||||
// This will eventually be automatic, see
|
|
||||||
// https://bugzilla.gnome.org/show_bug.cgi?id=584662
|
|
||||||
if (St.Widget.get_default_direction () == St.TextDirection.RTL)
|
|
||||||
this._box.add_style_pseudo_class('rtl');
|
|
||||||
|
|
||||||
this.actor = new St.Bin({ y_align: St.Align.START, child: this._box });
|
this.actor = new St.Bin({ y_align: St.Align.START, child: this._box });
|
||||||
this.actor.connect('notify::height', Lang.bind(this,
|
this.actor.connect('notify::height', Lang.bind(this,
|
||||||
function() {
|
function() {
|
||||||
|
@ -90,6 +90,7 @@ DateMenuButton.prototype = {
|
|||||||
vbox.add(item.actor, {y_align: St.Align.END, expand: true, y_fill: false});
|
vbox.add(item.actor, {y_align: St.Align.END, expand: true, y_fill: false});
|
||||||
item = new PopupMenu.PopupMenuItem(_("Date and Time Settings"));
|
item = new PopupMenu.PopupMenuItem(_("Date and Time Settings"));
|
||||||
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
||||||
|
item.actor.can_focus = false;
|
||||||
vbox.add(item.actor);
|
vbox.add(item.actor);
|
||||||
|
|
||||||
// Add vertical separator
|
// Add vertical separator
|
||||||
@ -109,6 +110,7 @@ DateMenuButton.prototype = {
|
|||||||
|
|
||||||
item = new PopupMenu.PopupMenuItem(_("Open Calendar"));
|
item = new PopupMenu.PopupMenuItem(_("Open Calendar"));
|
||||||
item.connect('activate', Lang.bind(this, this._onOpenCalendarActivate));
|
item.connect('activate', Lang.bind(this, this._onOpenCalendarActivate));
|
||||||
|
item.actor.can_focus = false;
|
||||||
vbox.add(item.actor, {y_align: St.Align.END, expand: true, y_fill: false});
|
vbox.add(item.actor, {y_align: St.Align.END, expand: true, y_fill: false});
|
||||||
|
|
||||||
// Whenever the menu is opened, select today
|
// Whenever the menu is opened, select today
|
||||||
|
48
js/ui/dnd.js
@ -87,6 +87,10 @@ _Draggable.prototype = {
|
|||||||
|
|
||||||
this.actor.connect('destroy', Lang.bind(this, function() {
|
this.actor.connect('destroy', Lang.bind(this, function() {
|
||||||
this._actorDestroyed = true;
|
this._actorDestroyed = true;
|
||||||
|
// If the drag actor is destroyed and we were going to fix
|
||||||
|
// up its hover state, fix up the parent hover state instead
|
||||||
|
if (this.actor == this._firstLeaveActor)
|
||||||
|
this._firstLeaveActor = this._dragOrigParent;
|
||||||
if (this._dragInProgress)
|
if (this._dragInProgress)
|
||||||
this._cancelDrag(global.get_current_time());
|
this._cancelDrag(global.get_current_time());
|
||||||
this.disconnectAll();
|
this.disconnectAll();
|
||||||
@ -101,6 +105,12 @@ _Draggable.prototype = {
|
|||||||
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).
|
||||||
|
|
||||||
|
// During the drag, we eat enter/leave events so that actors don't prelight or show
|
||||||
|
// tooltips. But we remember the actors that we first left/last entered so we can
|
||||||
|
// fix up the hover state after the drag ends.
|
||||||
|
this._firstLeaveActor = null;
|
||||||
|
this._lastEnterActor = null;
|
||||||
|
|
||||||
this._eventsGrabbed = false;
|
this._eventsGrabbed = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -200,6 +210,11 @@ _Draggable.prototype = {
|
|||||||
this._cancelDrag(event.get_time());
|
this._cancelDrag(event.get_time());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
} else if (event.type() == Clutter.EventType.LEAVE) {
|
||||||
|
if (this._firstLeaveActor == null)
|
||||||
|
this._firstLeaveActor = event.get_source();
|
||||||
|
} else if (event.type() == Clutter.EventType.ENTER) {
|
||||||
|
this._lastEnterActor = event.get_source();
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -465,7 +480,9 @@ _Draggable.prototype = {
|
|||||||
let [parentX, parentY] = this._dragOrigParent.get_transformed_position();
|
let [parentX, parentY] = this._dragOrigParent.get_transformed_position();
|
||||||
let [parentWidth, parentHeight] = this._dragOrigParent.get_size();
|
let [parentWidth, parentHeight] = this._dragOrigParent.get_size();
|
||||||
let [parentScaledWidth, parentScaledHeight] = this._dragOrigParent.get_transformed_size();
|
let [parentScaledWidth, parentScaledHeight] = this._dragOrigParent.get_transformed_size();
|
||||||
let parentScale = parentScaledWidth / parentWidth;
|
let parentScale = 1.0;
|
||||||
|
if (parentWidth != 0)
|
||||||
|
parentScale = parentScaledWidth / parentWidth;
|
||||||
|
|
||||||
x = parentX + parentScale * this._dragOrigX;
|
x = parentX + parentScale * this._dragOrigX;
|
||||||
y = parentY + parentScale * this._dragOrigY;
|
y = parentY + parentScale * this._dragOrigY;
|
||||||
@ -481,13 +498,14 @@ _Draggable.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_cancelDrag: function(eventTime) {
|
_cancelDrag: function(eventTime) {
|
||||||
|
this.emit('drag-cancelled', eventTime);
|
||||||
this._dragInProgress = false;
|
this._dragInProgress = false;
|
||||||
let [snapBackX, snapBackY, snapBackScale] = this._getRestoreLocation();
|
let [snapBackX, snapBackY, snapBackScale] = this._getRestoreLocation();
|
||||||
|
|
||||||
if (this._actorDestroyed) {
|
if (this._actorDestroyed) {
|
||||||
global.unset_cursor();
|
global.unset_cursor();
|
||||||
if (!this._buttonDown)
|
if (!this._buttonDown)
|
||||||
this._ungrabEvents();
|
this._dragComplete();
|
||||||
this.emit('drag-end', eventTime, false);
|
this.emit('drag-end', eventTime, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -544,12 +562,36 @@ _Draggable.prototype = {
|
|||||||
this._dragComplete();
|
this._dragComplete();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Actor is an actor we have entered or left during the drag; call
|
||||||
|
// st_widget_sync_hover on all StWidget ancestors
|
||||||
|
_syncHover: function(actor) {
|
||||||
|
while (actor) {
|
||||||
|
let parent = actor.get_parent();
|
||||||
|
if (actor instanceof St.Widget)
|
||||||
|
actor.sync_hover();
|
||||||
|
|
||||||
|
actor = parent;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
_dragComplete: function() {
|
_dragComplete: function() {
|
||||||
|
if (!this._actorDestroyed)
|
||||||
Shell.util_set_hidden_from_pick(this._dragActor, false);
|
Shell.util_set_hidden_from_pick(this._dragActor, false);
|
||||||
|
|
||||||
|
this._ungrabEvents();
|
||||||
|
|
||||||
|
if (this._firstLeaveActor) {
|
||||||
|
this._syncHover(this._firstLeaveActor);
|
||||||
|
this._firstLeaveActor = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._lastEnterActor) {
|
||||||
|
this._syncHover(this._lastEnterActor);
|
||||||
|
this._lastEnterActor = null;
|
||||||
|
}
|
||||||
|
|
||||||
this._dragActor = undefined;
|
this._dragActor = undefined;
|
||||||
currentDraggable = null;
|
currentDraggable = null;
|
||||||
this._ungrabEvents();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ var commandHeader = 'const Clutter = imports.gi.Clutter; ' +
|
|||||||
'const Meta = imports.gi.Meta; ' +
|
'const Meta = imports.gi.Meta; ' +
|
||||||
'const Semantic = imports.misc.semantic' +
|
'const Semantic = imports.misc.semantic' +
|
||||||
'const Shell = imports.gi.Shell; ' +
|
'const Shell = imports.gi.Shell; ' +
|
||||||
|
'const Tp = imports.gi.TelepathyGLib; ' +
|
||||||
'const Main = imports.ui.main; ' +
|
'const Main = imports.ui.main; ' +
|
||||||
'const Lang = imports.lang; ' +
|
'const Lang = imports.lang; ' +
|
||||||
'const Tweener = imports.ui.tweener; ' +
|
'const Tweener = imports.ui.tweener; ' +
|
||||||
@ -779,23 +780,8 @@ LookingGlass.prototype = {
|
|||||||
return true;
|
return true;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._history = new History.HistoryManager(HISTORY_KEY);
|
this._history = new History.HistoryManager({ gsettingsKey: HISTORY_KEY,
|
||||||
this._history.connect('changed', Lang.bind(this, function(history, text) {
|
entry: this._entry.clutter_text });
|
||||||
this._entry.text = text;
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._entry.clutter_text.connect('key-press-event', Lang.bind(this, function(o, e) {
|
|
||||||
let symbol = e.get_key_symbol();
|
|
||||||
if (symbol == Clutter.Up) {
|
|
||||||
this._history.prevItem(o.get_text());
|
|
||||||
return true;
|
|
||||||
} else if (symbol == Clutter.Down) {
|
|
||||||
this._history.nextItem(o.get_text());
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateFont: function() {
|
_updateFont: function() {
|
||||||
|
@ -139,6 +139,7 @@ function start() {
|
|||||||
|
|
||||||
placesManager = new PlaceDisplay.PlacesManager();
|
placesManager = new PlaceDisplay.PlacesManager();
|
||||||
xdndHandler = new XdndHandler.XdndHandler();
|
xdndHandler = new XdndHandler.XdndHandler();
|
||||||
|
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
|
||||||
overview = new Overview.Overview();
|
overview = new Overview.Overview();
|
||||||
chrome = new Chrome.Chrome();
|
chrome = new Chrome.Chrome();
|
||||||
magnifier = new Magnifier.Magnifier();
|
magnifier = new Magnifier.Magnifier();
|
||||||
@ -153,9 +154,6 @@ function start() {
|
|||||||
overview.init();
|
overview.init();
|
||||||
statusIconDispatcher.start(messageTray.actor);
|
statusIconDispatcher.start(messageTray.actor);
|
||||||
|
|
||||||
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
|
|
||||||
ctrlAltTabManager.addGroup(panel.actor, _("Panel"), 'gnome-panel');
|
|
||||||
|
|
||||||
_startDate = new Date();
|
_startDate = new Date();
|
||||||
|
|
||||||
let recorderSettings = new Gio.Settings({ schema: 'org.gnome.shell.recorder' });
|
let recorderSettings = new Gio.Settings({ schema: 'org.gnome.shell.recorder' });
|
||||||
@ -264,12 +262,28 @@ function _checkWorkspaces() {
|
|||||||
emptyWorkspaces.push(false);
|
emptyWorkspaces.push(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||||
|
let currentWorkspaceEmpty = emptyWorkspaces[activeWorkspaceIndex];
|
||||||
|
|
||||||
|
if (currentWorkspaceEmpty) {
|
||||||
|
// "Merge" the empty workspace we are removing with the one at the end
|
||||||
|
wm.blockAnimations();
|
||||||
|
}
|
||||||
|
|
||||||
// Delete other empty workspaces; do it from the end to avoid index changes
|
// Delete other empty workspaces; do it from the end to avoid index changes
|
||||||
for (i = emptyWorkspaces.length - 2; i >= 0; i--) {
|
for (i = emptyWorkspaces.length - 2; i >= 0; i--) {
|
||||||
if (emptyWorkspaces[i])
|
if (emptyWorkspaces[i])
|
||||||
global.screen.remove_workspace(_workspaces[i], global.get_current_time());
|
global.screen.remove_workspace(_workspaces[i], global.get_current_time());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (currentWorkspaceEmpty) {
|
||||||
|
global.screen.get_workspace_by_index(global.screen.n_workspaces - 1).activate(global.get_current_time());
|
||||||
|
wm.unblockAnimations();
|
||||||
|
|
||||||
|
if (!overview.visible)
|
||||||
|
overview.show();
|
||||||
|
}
|
||||||
|
|
||||||
_checkWorkspacesId = 0;
|
_checkWorkspacesId = 0;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ const St = imports.gi.St;
|
|||||||
const BoxPointer = imports.ui.boxpointer;
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
const GnomeSession = imports.misc.gnomeSession;
|
const GnomeSession = imports.misc.gnomeSession;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const Util = imports.misc.util;
|
const Util = imports.misc.util;
|
||||||
@ -517,25 +518,28 @@ Notification.prototype = {
|
|||||||
this._updated();
|
this._updated();
|
||||||
},
|
},
|
||||||
|
|
||||||
// addActor:
|
_createScrollArea: function() {
|
||||||
// @actor: actor to add to the body of the notification
|
|
||||||
//
|
|
||||||
// Appends @actor to the notification's body
|
|
||||||
addActor: function(actor, style) {
|
|
||||||
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',
|
||||||
vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
|
vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
|
||||||
hscrollbar_policy: Gtk.PolicyType.NEVER,
|
hscrollbar_policy: Gtk.PolicyType.NEVER,
|
||||||
vfade: true });
|
vfade: true });
|
||||||
this.actor.add(this._scrollArea, { row: 1,
|
this.actor.add(this._scrollArea, { row: 1, col: 1 });
|
||||||
col: 1 });
|
|
||||||
this._contentArea = new St.BoxLayout({ name: 'notification-body',
|
this._contentArea = new St.BoxLayout({ name: 'notification-body',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
this._scrollArea.add_actor(this._contentArea);
|
this._scrollArea.add_actor(this._contentArea);
|
||||||
// If we know the notification will be expandable, we need to add
|
// If we know the notification will be expandable, we need to add
|
||||||
// the banner text to the body as the first element.
|
// the banner text to the body as the first element.
|
||||||
this._addBannerBody();
|
this._addBannerBody();
|
||||||
|
},
|
||||||
|
|
||||||
|
// addActor:
|
||||||
|
// @actor: actor to add to the body of the notification
|
||||||
|
//
|
||||||
|
// Appends @actor to the notification's body
|
||||||
|
addActor: function(actor, style) {
|
||||||
|
if (!this._scrollArea) {
|
||||||
|
this._createScrollArea();
|
||||||
}
|
}
|
||||||
|
|
||||||
this._contentArea.add(actor, style ? style : {});
|
this._contentArea.add(actor, style ? style : {});
|
||||||
@ -570,11 +574,6 @@ Notification.prototype = {
|
|||||||
//
|
//
|
||||||
// Scrolls the content area (if scrollable) to the indicated edge
|
// Scrolls the content area (if scrollable) to the indicated edge
|
||||||
scrollTo: function(side) {
|
scrollTo: function(side) {
|
||||||
// Hack to force a relayout, since the caller probably
|
|
||||||
// just added or removed something to scrollArea, and
|
|
||||||
// the adjustment needs to reflect that.
|
|
||||||
global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, 0, 0);
|
|
||||||
|
|
||||||
let adjustment = this._scrollArea.vscroll.adjustment;
|
let adjustment = this._scrollArea.vscroll.adjustment;
|
||||||
if (side == St.Side.TOP)
|
if (side == St.Side.TOP)
|
||||||
adjustment.value = adjustment.lower;
|
adjustment.value = adjustment.lower;
|
||||||
@ -853,7 +852,7 @@ Source.prototype = {
|
|||||||
|
|
||||||
this.notification = notification;
|
this.notification = notification;
|
||||||
|
|
||||||
this._notificationClickedId = notification.connect('clicked', Lang.bind(this, this._notificationClicked));
|
this._notificationClickedId = notification.connect('clicked', Lang.bind(this, this.open));
|
||||||
this._notificationDestroyedId = notification.connect('destroy', Lang.bind(this,
|
this._notificationDestroyedId = notification.connect('destroy', Lang.bind(this,
|
||||||
function () {
|
function () {
|
||||||
if (this.notification == notification) {
|
if (this.notification == notification) {
|
||||||
@ -881,7 +880,7 @@ Source.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// Default implementation is to do nothing, but subclasses can override
|
// Default implementation is to do nothing, but subclasses can override
|
||||||
_notificationClicked: function(notification) {
|
open: function(notification) {
|
||||||
},
|
},
|
||||||
|
|
||||||
// Default implementation is to destroy this source, but subclasses can override
|
// Default implementation is to destroy this source, but subclasses can override
|
||||||
@ -917,6 +916,27 @@ SummaryItem.prototype = {
|
|||||||
this._sourceBox.add_actor(this._sourceIcon);
|
this._sourceBox.add_actor(this._sourceIcon);
|
||||||
this._sourceBox.add_actor(this._sourceTitleBin, { expand: true });
|
this._sourceBox.add_actor(this._sourceTitleBin, { expand: true });
|
||||||
this.actor.child = this._sourceBox;
|
this.actor.child = this._sourceBox;
|
||||||
|
this.rightClickMenu = new St.BoxLayout({ name: 'summary-right-click-menu',
|
||||||
|
vertical: true });
|
||||||
|
|
||||||
|
let item;
|
||||||
|
|
||||||
|
item = new PopupMenu.PopupMenuItem(_("Open"));
|
||||||
|
item.connect('activate', Lang.bind(this, function() {
|
||||||
|
source.open();
|
||||||
|
this.emit('right-click-menu-done-displaying');
|
||||||
|
}));
|
||||||
|
this.rightClickMenu.add(item.actor);
|
||||||
|
|
||||||
|
item = new PopupMenu.PopupMenuItem(_("Remove"));
|
||||||
|
item.connect('activate', Lang.bind(this, function() {
|
||||||
|
source.destroy();
|
||||||
|
this.emit('right-click-menu-done-displaying');
|
||||||
|
}));
|
||||||
|
this.rightClickMenu.add(item.actor);
|
||||||
|
|
||||||
|
let focusManager = St.FocusManager.get_for_stage(global.stage);
|
||||||
|
focusManager.add_group(this.rightClickMenu);
|
||||||
},
|
},
|
||||||
|
|
||||||
// getTitleNaturalWidth, getTitleWidth, and setTitleWidth include
|
// getTitleNaturalWidth, getTitleWidth, and setTitleWidth include
|
||||||
@ -943,6 +963,7 @@ SummaryItem.prototype = {
|
|||||||
this._sourceTitle.clutter_text.ellipsize = mode;
|
this._sourceTitle.clutter_text.ellipsize = mode;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Signals.addSignalMethods(SummaryItem.prototype);
|
||||||
|
|
||||||
function MessageTray() {
|
function MessageTray() {
|
||||||
this._init();
|
this._init();
|
||||||
@ -980,17 +1001,19 @@ MessageTray.prototype = {
|
|||||||
|
|
||||||
this._summaryMotionId = 0;
|
this._summaryMotionId = 0;
|
||||||
|
|
||||||
this._summaryNotificationBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM,
|
this._summaryBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM,
|
||||||
{ reactive: true,
|
{ reactive: true,
|
||||||
track_hover: true });
|
track_hover: true });
|
||||||
this._summaryNotificationBoxPointer.actor.style_class = 'summary-notification-boxpointer';
|
this._summaryBoxPointer.actor.style_class = 'summary-boxpointer';
|
||||||
this.actor.add_actor(this._summaryNotificationBoxPointer.actor);
|
this.actor.add_actor(this._summaryBoxPointer.actor);
|
||||||
this._summaryNotificationBoxPointer.actor.lower_bottom();
|
this._summaryBoxPointer.actor.lower_bottom();
|
||||||
this._summaryNotificationBoxPointer.actor.hide();
|
this._summaryBoxPointer.actor.hide();
|
||||||
|
|
||||||
this._summaryNotification = null;
|
this._summaryNotification = null;
|
||||||
this._summaryNotificationClickedId = 0;
|
this._summaryNotificationClickedId = 0;
|
||||||
|
this._summaryRightClickMenuClickedId = 0;
|
||||||
this._clickedSummaryItem = null;
|
this._clickedSummaryItem = null;
|
||||||
|
this._clickedSummaryItemMouseButton = -1;
|
||||||
this._clickedSummaryItemAllocationChangedId = 0;
|
this._clickedSummaryItemAllocationChangedId = 0;
|
||||||
this._expandedSummaryItem = null;
|
this._expandedSummaryItem = null;
|
||||||
this._summaryItemTitleWidth = 0;
|
this._summaryItemTitleWidth = 0;
|
||||||
@ -1004,7 +1027,7 @@ MessageTray.prototype = {
|
|||||||
this._focusGrabber = new FocusGrabber();
|
this._focusGrabber = new FocusGrabber();
|
||||||
this._focusGrabber.connect('focus-grabbed', Lang.bind(this,
|
this._focusGrabber.connect('focus-grabbed', Lang.bind(this,
|
||||||
function() {
|
function() {
|
||||||
if (this._summaryNotification)
|
if (this._summaryBoxPointer.bin.child)
|
||||||
this._lock();
|
this._lock();
|
||||||
}));
|
}));
|
||||||
this._focusGrabber.connect('focus-ungrabbed', Lang.bind(this, this._unlock));
|
this._focusGrabber.connect('focus-ungrabbed', Lang.bind(this, this._unlock));
|
||||||
@ -1027,7 +1050,7 @@ MessageTray.prototype = {
|
|||||||
this._notificationState = State.HIDDEN;
|
this._notificationState = State.HIDDEN;
|
||||||
this._notificationTimeoutId = 0;
|
this._notificationTimeoutId = 0;
|
||||||
this._notificationExpandedId = 0;
|
this._notificationExpandedId = 0;
|
||||||
this._summaryNotificationState = State.HIDDEN;
|
this._summaryBoxPointerState = State.HIDDEN;
|
||||||
this._summaryNotificationTimeoutId = 0;
|
this._summaryNotificationTimeoutId = 0;
|
||||||
this._summaryNotificationExpandedId = 0;
|
this._summaryNotificationExpandedId = 0;
|
||||||
this._overviewVisible = Main.overview.visible;
|
this._overviewVisible = Main.overview.visible;
|
||||||
@ -1037,7 +1060,7 @@ MessageTray.prototype = {
|
|||||||
Main.chrome.addActor(this.actor, { affectsStruts: false,
|
Main.chrome.addActor(this.actor, { affectsStruts: false,
|
||||||
visibleInOverview: true });
|
visibleInOverview: true });
|
||||||
Main.chrome.trackActor(this._notificationBin);
|
Main.chrome.trackActor(this._notificationBin);
|
||||||
Main.chrome.trackActor(this._summaryNotificationBoxPointer.actor);
|
Main.chrome.trackActor(this._summaryBoxPointer.actor);
|
||||||
|
|
||||||
global.gdk_screen.connect('monitors-changed', Lang.bind(this, this._setSizePosition));
|
global.gdk_screen.connect('monitors-changed', Lang.bind(this, this._setSizePosition));
|
||||||
|
|
||||||
@ -1138,9 +1161,9 @@ MessageTray.prototype = {
|
|||||||
this._onSummaryItemHoverChanged(summaryItem);
|
this._onSummaryItemHoverChanged(summaryItem);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
summaryItem.actor.connect('clicked', Lang.bind(this,
|
summaryItem.actor.connect('button-press-event', Lang.bind(this,
|
||||||
function () {
|
function (actor, event) {
|
||||||
this._onSummaryItemClicked(summaryItem);
|
this._onSummaryItemClicked(summaryItem, event);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
source.connect('destroy', Lang.bind(this, this._onSourceDestroy));
|
source.connect('destroy', Lang.bind(this, this._onSourceDestroy));
|
||||||
@ -1157,7 +1180,7 @@ MessageTray.prototype = {
|
|||||||
if (index == -1)
|
if (index == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._summaryItems[index].actor.destroy();
|
let summaryItemToRemove = this._summaryItems[index];
|
||||||
|
|
||||||
let newSummaryItemsIndex = this._newSummaryItems.indexOf(this._summaryItems[index]);
|
let newSummaryItemsIndex = this._newSummaryItems.indexOf(this._summaryItems[index]);
|
||||||
if (newSummaryItemsIndex != -1)
|
if (newSummaryItemsIndex != -1)
|
||||||
@ -1168,6 +1191,9 @@ MessageTray.prototype = {
|
|||||||
if (source.isChat)
|
if (source.isChat)
|
||||||
this._chatSummaryItemsCount--;
|
this._chatSummaryItemsCount--;
|
||||||
|
|
||||||
|
if (this._expandedSummaryItem == summaryItemToRemove)
|
||||||
|
this._expandedSummaryItem = null;
|
||||||
|
|
||||||
if (this._longestSummaryItem.source == source) {
|
if (this._longestSummaryItem.source == source) {
|
||||||
let newTitleWidth = 0;
|
let newTitleWidth = 0;
|
||||||
this._longestSummaryItem = null;
|
this._longestSummaryItem = null;
|
||||||
@ -1192,11 +1218,13 @@ MessageTray.prototype = {
|
|||||||
this._notificationRemoved = true;
|
this._notificationRemoved = true;
|
||||||
needUpdate = true;
|
needUpdate = true;
|
||||||
}
|
}
|
||||||
if (this._clickedSummaryItem && this._clickedSummaryItem.source == source) {
|
if (this._clickedSummaryItem == summaryItemToRemove) {
|
||||||
this._unsetClickedSummaryItem();
|
this._unsetClickedSummaryItem();
|
||||||
needUpdate = true;
|
needUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
summaryItemToRemove.actor.destroy();
|
||||||
|
|
||||||
if (needUpdate);
|
if (needUpdate);
|
||||||
this._updateState();
|
this._updateState();
|
||||||
|
|
||||||
@ -1349,11 +1377,16 @@ MessageTray.prototype = {
|
|||||||
this._expandedSummaryItem.setEllipsization(Pango.EllipsizeMode.END);
|
this._expandedSummaryItem.setEllipsization(Pango.EllipsizeMode.END);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onSummaryItemClicked: function(summaryItem) {
|
_onSummaryItemClicked: function(summaryItem, event) {
|
||||||
if (!this._clickedSummaryItem || this._clickedSummaryItem != summaryItem)
|
let clickedButton = event.get_button();
|
||||||
|
if (!this._clickedSummaryItem ||
|
||||||
|
this._clickedSummaryItem != summaryItem ||
|
||||||
|
this._clickedSummaryItemMouseButton != clickedButton) {
|
||||||
this._clickedSummaryItem = summaryItem;
|
this._clickedSummaryItem = summaryItem;
|
||||||
else
|
this._clickedSummaryItemMouseButton = clickedButton;
|
||||||
|
} else {
|
||||||
this._unsetClickedSummaryItem();
|
this._unsetClickedSummaryItem();
|
||||||
|
}
|
||||||
|
|
||||||
this._updateState();
|
this._updateState();
|
||||||
},
|
},
|
||||||
@ -1380,7 +1413,7 @@ MessageTray.prototype = {
|
|||||||
// leaving the tray. The tray is locked when the summary notification is visible anyway, but we
|
// leaving the tray. The tray is locked when the summary notification is visible anyway, but we
|
||||||
// should treat the mouse being over the summary notification as the tray being left for collapsing
|
// should treat the mouse being over the summary notification as the tray being left for collapsing
|
||||||
// any expanded summary item other than the one related to the notification.
|
// any expanded summary item other than the one related to the notification.
|
||||||
if (this._summaryNotificationBoxPointer.bin.hover)
|
if (this._summaryBoxPointer.bin.hover)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._useLongerTrayLeftTimeout = false;
|
this._useLongerTrayLeftTimeout = false;
|
||||||
@ -1538,19 +1571,23 @@ MessageTray.prototype = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Summary notification
|
// Summary notification
|
||||||
let haveSummaryNotification = this._clickedSummaryItem != null;
|
let haveClickedSummaryItem = this._clickedSummaryItem != null;
|
||||||
let summaryNotificationIsMainNotification = (haveSummaryNotification &&
|
let summarySourceIsMainNotificationSource = (haveClickedSummaryItem && this._notification &&
|
||||||
this._clickedSummaryItem.source.notification == this._notification);
|
this._clickedSummaryItem.source == this._notification.source);
|
||||||
let canShowSummaryNotification = this._summaryState == State.SHOWN;
|
let canShowSummaryBoxPointer = this._summaryState == State.SHOWN;
|
||||||
let wrongSummaryNotification = (haveSummaryNotification &&
|
let wrongSummaryNotification = (this._clickedSummaryItemMouseButton == 1 &&
|
||||||
this._summaryNotification != this._clickedSummaryItem.source.notification);
|
this._summaryNotification != this._clickedSummaryItem.source.notification);
|
||||||
|
let wrongSummaryRightClickMenu = (this._clickedSummaryItemMouseButton == 3 &&
|
||||||
|
this._summaryBoxPointer.bin.child != this._clickedSummaryItem.rightClickMenu);
|
||||||
|
let wrongSummaryBoxPointer = (haveClickedSummaryItem &&
|
||||||
|
(wrongSummaryNotification || wrongSummaryRightClickMenu));
|
||||||
|
|
||||||
if (this._summaryNotificationState == State.HIDDEN) {
|
if (this._summaryBoxPointerState == State.HIDDEN) {
|
||||||
if (haveSummaryNotification && !summaryNotificationIsMainNotification && canShowSummaryNotification)
|
if (haveClickedSummaryItem && !summarySourceIsMainNotificationSource && canShowSummaryBoxPointer)
|
||||||
this._showSummaryNotification();
|
this._showSummaryBoxPointer();
|
||||||
} else if (this._summaryNotificationState == State.SHOWN) {
|
} else if (this._summaryBoxPointerState == State.SHOWN) {
|
||||||
if (!haveSummaryNotification || !canShowSummaryNotification || wrongSummaryNotification)
|
if (!haveClickedSummaryItem || !canShowSummaryBoxPointer || wrongSummaryBoxPointer)
|
||||||
this._hideSummaryNotification();
|
this._hideSummaryBoxPointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tray itself
|
// Tray itself
|
||||||
@ -1808,44 +1845,53 @@ MessageTray.prototype = {
|
|||||||
this._expandedSummaryItemTitleWidth = this._summaryItemTitleWidth;
|
this._expandedSummaryItemTitleWidth = this._summaryItemTitleWidth;
|
||||||
},
|
},
|
||||||
|
|
||||||
_showSummaryNotification: function() {
|
_showSummaryBoxPointer: function() {
|
||||||
this._summaryNotification = this._clickedSummaryItem.source.notification;
|
if (this._clickedSummaryItemMouseButton == 1) {
|
||||||
this._summaryNotificationClickedId = this._summaryNotification.connect('done-displaying',
|
let clickedSummaryItemNotification = this._clickedSummaryItem.source.notification;
|
||||||
Lang.bind(this, this._escapeTray));
|
let index = this._notificationQueue.indexOf(clickedSummaryItemNotification);
|
||||||
let index = this._notificationQueue.indexOf(this._summaryNotification);
|
|
||||||
if (index != -1)
|
if (index != -1)
|
||||||
this._notificationQueue.splice(index, 1);
|
this._notificationQueue.splice(index, 1);
|
||||||
|
|
||||||
this._summaryNotificationBoxPointer.bin.child = this._summaryNotification.actor;
|
this._summaryNotification = clickedSummaryItemNotification;
|
||||||
this._focusGrabber.grabFocus(this._summaryNotification.actor);
|
this._summaryNotificationClickedId = this._summaryNotification.connect('done-displaying',
|
||||||
|
Lang.bind(this, this._escapeTray));
|
||||||
|
this._summaryBoxPointer.bin.child = this._summaryNotification.actor;
|
||||||
if (!this._summaryNotificationExpandedId)
|
if (!this._summaryNotificationExpandedId)
|
||||||
this._summaryNotificationExpandedId = this._summaryNotification.connect('expanded', Lang.bind(this, this._onSummaryNotificationExpanded));
|
this._summaryNotificationExpandedId = this._summaryNotification.connect('expanded',
|
||||||
|
Lang.bind(this, this._onSummaryBoxPointerExpanded));
|
||||||
this._summaryNotification.expand(false);
|
this._summaryNotification.expand(false);
|
||||||
|
} else if (this._clickedSummaryItemMouseButton == 3) {
|
||||||
|
this._summaryRightClickMenuClickedId = this._clickedSummaryItem.connect('right-click-menu-done-displaying',
|
||||||
|
Lang.bind(this, this._escapeTray));
|
||||||
|
this._summaryBoxPointer.bin.child = this._clickedSummaryItem.rightClickMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._focusGrabber.grabFocus(this._summaryBoxPointer.bin.child);
|
||||||
|
|
||||||
|
|
||||||
this._clickedSummaryItemAllocationChangedId =
|
this._clickedSummaryItemAllocationChangedId =
|
||||||
this._clickedSummaryItem.actor.connect('allocation-changed',
|
this._clickedSummaryItem.actor.connect('allocation-changed',
|
||||||
Lang.bind(this, this._adjustNotificationBoxPointerPosition));
|
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
|
||||||
// _clickedSummaryItem.actor can change absolute postiion without changing allocation
|
// _clickedSummaryItem.actor can change absolute postiion without changing allocation
|
||||||
this._summaryMotionId = this._summary.connect('allocation-changed',
|
this._summaryMotionId = this._summary.connect('allocation-changed',
|
||||||
Lang.bind(this, this._adjustNotificationBoxPointerPosition));
|
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
|
||||||
|
|
||||||
this._summaryNotificationBoxPointer.actor.opacity = 0;
|
this._summaryBoxPointer.actor.opacity = 0;
|
||||||
this._summaryNotificationBoxPointer.actor.show();
|
this._summaryBoxPointer.actor.show();
|
||||||
this._adjustNotificationBoxPointerPosition();
|
this._adjustSummaryBoxPointerPosition();
|
||||||
|
|
||||||
this._summaryNotificationState = State.SHOWING;
|
this._summaryBoxPointerState = State.SHOWING;
|
||||||
this._summaryNotificationBoxPointer.show(true, Lang.bind(this, function() {
|
this._summaryBoxPointer.show(true, Lang.bind(this, function() {
|
||||||
this._summaryNotificationState = State.SHOWN;
|
this._summaryBoxPointerState = State.SHOWN;
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
_adjustNotificationBoxPointerPosition: function() {
|
_adjustSummaryBoxPointerPosition: function() {
|
||||||
// The position of the arrow origin should be the same as center of this._clickedSummaryItem.actor
|
// The position of the arrow origin should be the same as center of this._clickedSummaryItem.actor
|
||||||
if (!this._clickedSummaryItem)
|
if (!this._clickedSummaryItem)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._summaryNotificationBoxPointer.setPosition(this._clickedSummaryItem.actor, 0, 0.5);
|
this._summaryBoxPointer.setPosition(this._clickedSummaryItem.actor, 0, 0.5);
|
||||||
},
|
},
|
||||||
|
|
||||||
_unsetClickedSummaryItem: function() {
|
_unsetClickedSummaryItem: function() {
|
||||||
@ -1856,14 +1902,20 @@ MessageTray.prototype = {
|
|||||||
this._summaryMotionId = 0;
|
this._summaryMotionId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._summaryRightClickMenuClickedId) {
|
||||||
|
this._clickedSummaryItem.disconnect(this._summaryRightClickMenuClickedId);
|
||||||
|
this._summaryRightClickMenuClickedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
this._clickedSummaryItem = null;
|
this._clickedSummaryItem = null;
|
||||||
|
this._clickedSummaryItemMouseButton = -1;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onSummaryNotificationExpanded: function() {
|
_onSummaryBoxPointerExpanded: function() {
|
||||||
this._adjustNotificationBoxPointerPosition();
|
this._adjustSummaryBoxPointerPosition();
|
||||||
},
|
},
|
||||||
|
|
||||||
_hideSummaryNotification: function() {
|
_hideSummaryBoxPointer: function() {
|
||||||
if (this._summaryNotificationExpandedId) {
|
if (this._summaryNotificationExpandedId) {
|
||||||
this._summaryNotification.disconnect(this._summaryNotificationExpandedId);
|
this._summaryNotification.disconnect(this._summaryNotificationExpandedId);
|
||||||
this._summaryNotificationExpandedId = 0;
|
this._summaryNotificationExpandedId = 0;
|
||||||
@ -1873,13 +1925,14 @@ MessageTray.prototype = {
|
|||||||
this._unsetClickedSummaryItem();
|
this._unsetClickedSummaryItem();
|
||||||
|
|
||||||
this._focusGrabber.ungrabFocus();
|
this._focusGrabber.ungrabFocus();
|
||||||
this._summaryNotificationState = State.HIDING;
|
this._summaryBoxPointerState = State.HIDING;
|
||||||
this._summaryNotificationBoxPointer.hide(true, Lang.bind(this, this._hideSummaryNotificationCompleted));
|
this._summaryBoxPointer.hide(true, Lang.bind(this, this._hideSummaryBoxPointerCompleted));
|
||||||
},
|
},
|
||||||
|
|
||||||
_hideSummaryNotificationCompleted: function() {
|
_hideSummaryBoxPointerCompleted: function() {
|
||||||
this._summaryNotificationState = State.HIDDEN;
|
this._summaryBoxPointerState = State.HIDDEN;
|
||||||
this._summaryNotificationBoxPointer.bin.child = null;
|
this._summaryBoxPointer.bin.child = null;
|
||||||
|
if (this._summaryNotification != null) {
|
||||||
this._summaryNotification.collapseCompleted();
|
this._summaryNotification.collapseCompleted();
|
||||||
this._summaryNotification.disconnect(this._summaryNotificationClickedId);
|
this._summaryNotification.disconnect(this._summaryNotificationClickedId);
|
||||||
this._summaryNotificationClickedId = 0;
|
this._summaryNotificationClickedId = 0;
|
||||||
@ -1891,6 +1944,7 @@ MessageTray.prototype = {
|
|||||||
this._onNotify(summaryNotification.source, summaryNotification);
|
this._onNotify(summaryNotification.source, summaryNotification);
|
||||||
this._reNotifyWithSummaryNotificationAfterHide = false;
|
this._reNotifyWithSummaryNotificationAfterHide = false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (this._clickedSummaryItem)
|
if (this._clickedSummaryItem)
|
||||||
this._updateState();
|
this._updateState();
|
||||||
}
|
}
|
||||||
@ -1915,7 +1969,7 @@ SystemNotificationSource.prototype = {
|
|||||||
icon_size: this.ICON_SIZE });
|
icon_size: this.ICON_SIZE });
|
||||||
},
|
},
|
||||||
|
|
||||||
_notificationClicked: function() {
|
open: function() {
|
||||||
this.destroy();
|
this.destroy();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -435,6 +435,7 @@ Source.prototype = {
|
|||||||
MessageTray.Source.prototype._init.call(this, title);
|
MessageTray.Source.prototype._init.call(this, title);
|
||||||
|
|
||||||
this._pid = pid;
|
this._pid = pid;
|
||||||
|
this._appStateChangedId = 0;
|
||||||
this._setApp();
|
this._setApp();
|
||||||
if (this.app)
|
if (this.app)
|
||||||
this.title = this.app.get_name();
|
this.title = this.app.get_name();
|
||||||
@ -459,6 +460,10 @@ Source.prototype = {
|
|||||||
if (!this.app)
|
if (!this.app)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// We only update the app if this.app is null, so we can't disconnect the old this._appStateChangedId
|
||||||
|
// even if it were non-zero for some reason.
|
||||||
|
this._appStateChangedId = this.app.connect('notify::state', Lang.bind(this, this._appStateChanged));
|
||||||
|
|
||||||
// Only override the icon if we were previously using
|
// Only override the icon if we were previously using
|
||||||
// notification-based icons (ie, not a trayicon) or if it was unset before
|
// notification-based icons (ie, not a trayicon) or if it was unset before
|
||||||
if (!this._isTrayIcon) {
|
if (!this._isTrayIcon) {
|
||||||
@ -473,7 +478,7 @@ Source.prototype = {
|
|||||||
this._isTrayIcon = true;
|
this._isTrayIcon = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_notificationClicked: function(notification) {
|
open: function(notification) {
|
||||||
this.openApp();
|
this.openApp();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -482,6 +487,16 @@ Source.prototype = {
|
|||||||
this.destroy();
|
this.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_appStateChanged: function() {
|
||||||
|
// Destroy notification sources when their apps exit.
|
||||||
|
// The app exiting would normally result in a tray icon being removed,
|
||||||
|
// so it should be ok to destroy the source associated with a tray icon
|
||||||
|
// here too, however we just let that happen through the code path
|
||||||
|
// associated with the tray icon being removed.
|
||||||
|
if (!this._isTrayIcon && this.app.get_state() == Shell.AppState.STOPPED)
|
||||||
|
this.destroy();
|
||||||
|
},
|
||||||
|
|
||||||
openApp: function() {
|
openApp: function() {
|
||||||
if (this.app == null)
|
if (this.app == null)
|
||||||
return;
|
return;
|
||||||
@ -491,5 +506,13 @@ Source.prototype = {
|
|||||||
let mostRecentWindow = windows[0];
|
let mostRecentWindow = windows[0];
|
||||||
Main.activateWindow(mostRecentWindow);
|
Main.activateWindow(mostRecentWindow);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
if (this.app && this._appStateChangedId) {
|
||||||
|
this.app.disconnect(this._appStateChangedId);
|
||||||
|
this._appStateChangedId = 0;
|
||||||
|
}
|
||||||
|
MessageTray.Source.prototype.destroy.call(this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -180,10 +180,10 @@ Overview.prototype = {
|
|||||||
this._group.add_actor(this.viewSelector.actor);
|
this._group.add_actor(this.viewSelector.actor);
|
||||||
|
|
||||||
this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay();
|
this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay();
|
||||||
this.viewSelector.addViewTab(_("Windows"), this._workspacesDisplay.actor);
|
this.viewSelector.addViewTab(_("Windows"), this._workspacesDisplay.actor, 'text-x-generic');
|
||||||
|
|
||||||
let appView = new AppDisplay.AllAppDisplay();
|
let appView = new AppDisplay.AllAppDisplay();
|
||||||
this.viewSelector.addViewTab(_("Applications"), appView.actor);
|
this.viewSelector.addViewTab(_("Applications"), appView.actor, 'system-run');
|
||||||
|
|
||||||
// Default search providers
|
// Default search providers
|
||||||
this.viewSelector.addSearchProvider(new AppDisplay.AppSearchProvider());
|
this.viewSelector.addSearchProvider(new AppDisplay.AppSearchProvider());
|
||||||
@ -201,6 +201,10 @@ Overview.prototype = {
|
|||||||
this.dash.actor.add_constraint(this.viewSelector.constrainY);
|
this.dash.actor.add_constraint(this.viewSelector.constrainY);
|
||||||
this.dash.actor.add_constraint(this.viewSelector.constrainHeight);
|
this.dash.actor.add_constraint(this.viewSelector.constrainHeight);
|
||||||
|
|
||||||
|
// Translators: this is the name of the dock/favorites area on
|
||||||
|
// the left of the overview
|
||||||
|
Main.ctrlAltTabManager.addGroup(this.dash.actor, _("Dash"), 'user-bookmarks');
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDragBegin: function() {
|
_onDragBegin: function() {
|
||||||
@ -481,35 +485,14 @@ Overview.prototype = {
|
|||||||
this.emit('window-drag-begin');
|
this.emit('window-drag-begin');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
cancelledWindowDrag: function(source) {
|
||||||
|
this.emit('window-drag-cancelled');
|
||||||
|
},
|
||||||
|
|
||||||
endWindowDrag: function(source) {
|
endWindowDrag: function(source) {
|
||||||
this.emit('window-drag-end');
|
this.emit('window-drag-end');
|
||||||
},
|
},
|
||||||
|
|
||||||
// Returns the scale the Overview has when we just start zooming out
|
|
||||||
// to overview mode. That is, when just the active workspace is showing.
|
|
||||||
getZoomedInScale : function() {
|
|
||||||
return 1 / this.workspaces.getScale();
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns the position the Overview has when we just start zooming out
|
|
||||||
// to overview mode. That is, when just the active workspace is showing.
|
|
||||||
getZoomedInPosition : function() {
|
|
||||||
let [posX, posY] = this.workspaces.getActiveWorkspacePosition();
|
|
||||||
let scale = this.getZoomedInScale();
|
|
||||||
|
|
||||||
return [- posX * scale, - posY * scale];
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns the current scale of the Overview.
|
|
||||||
getScale : function() {
|
|
||||||
return this.workspaces.actor.scaleX;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns the current position of the Overview.
|
|
||||||
getPosition : function() {
|
|
||||||
return [this.workspaces.actor.x, this.workspaces.actor.y];
|
|
||||||
},
|
|
||||||
|
|
||||||
// show:
|
// show:
|
||||||
//
|
//
|
||||||
// Animates the overview visible and grabs mouse and keyboard input
|
// Animates the overview visible and grabs mouse and keyboard input
|
||||||
@ -563,30 +546,13 @@ Overview.prototype = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a zoom out effect. First scale the workspaces view up and
|
|
||||||
// position it so that the active workspace fills up the whole screen,
|
|
||||||
// then transform it to its normal dimensions and position.
|
|
||||||
// The opposite transition is used in hide().
|
|
||||||
this.workspaces.actor.scaleX = this.workspaces.actor.scaleY = this.getZoomedInScale();
|
|
||||||
[this.workspaces.actor.x, this.workspaces.actor.y] = this.getZoomedInPosition();
|
|
||||||
let primary = global.get_primary_monitor();
|
|
||||||
Tweener.addTween(this.workspaces.actor,
|
|
||||||
{ x: primary.x - this._group.x,
|
|
||||||
y: primary.y - this._group.y,
|
|
||||||
scaleX: 1,
|
|
||||||
scaleY: 1,
|
|
||||||
transition: 'easeOutQuad',
|
|
||||||
time: ANIMATION_TIME,
|
|
||||||
onComplete: this._showDone,
|
|
||||||
onCompleteScope: this
|
|
||||||
});
|
|
||||||
|
|
||||||
// Make the other elements fade in.
|
|
||||||
this._group.opacity = 0;
|
this._group.opacity = 0;
|
||||||
Tweener.addTween(this._group,
|
Tweener.addTween(this._group,
|
||||||
{ opacity: 255,
|
{ opacity: 255,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
time: ANIMATION_TIME
|
time: ANIMATION_TIME,
|
||||||
|
onComplete: this._showDone,
|
||||||
|
onCompleteScope: this
|
||||||
});
|
});
|
||||||
|
|
||||||
this._coverPane.raise_top();
|
this._coverPane.raise_top();
|
||||||
@ -698,27 +664,13 @@ Overview.prototype = {
|
|||||||
|
|
||||||
this.workspaces.hide();
|
this.workspaces.hide();
|
||||||
|
|
||||||
// Create a zoom in effect by transforming the workspaces view so that
|
|
||||||
// the active workspace fills up the whole screen. The opposite
|
|
||||||
// transition is used in show().
|
|
||||||
let scale = this.getZoomedInScale();
|
|
||||||
let [posX, posY] = this.getZoomedInPosition();
|
|
||||||
Tweener.addTween(this.workspaces.actor,
|
|
||||||
{ x: posX,
|
|
||||||
y: posY,
|
|
||||||
scaleX: scale,
|
|
||||||
scaleY: scale,
|
|
||||||
transition: 'easeOutQuad',
|
|
||||||
time: ANIMATION_TIME,
|
|
||||||
onComplete: this._hideDone,
|
|
||||||
onCompleteScope: this
|
|
||||||
});
|
|
||||||
|
|
||||||
// Make other elements fade out.
|
// Make other elements fade out.
|
||||||
Tweener.addTween(this._group,
|
Tweener.addTween(this._group,
|
||||||
{ opacity: 0,
|
{ opacity: 0,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
time: ANIMATION_TIME
|
time: ANIMATION_TIME,
|
||||||
|
onComplete: this._hideDone,
|
||||||
|
onCompleteScope: this
|
||||||
});
|
});
|
||||||
|
|
||||||
this._coverPane.raise_top();
|
this._coverPane.raise_top();
|
||||||
|
@ -13,6 +13,7 @@ const Gettext = imports.gettext.domain('gnome-shell');
|
|||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
|
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||||
const Overview = imports.ui.overview;
|
const Overview = imports.ui.overview;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
@ -243,6 +244,10 @@ AppMenuButton.prototype = {
|
|||||||
|
|
||||||
let bin = new St.Bin({ name: 'appMenu' });
|
let bin = new St.Bin({ name: 'appMenu' });
|
||||||
this.actor.set_child(bin);
|
this.actor.set_child(bin);
|
||||||
|
|
||||||
|
this.actor.reactive = false;
|
||||||
|
this._targetIsCurrent = false;
|
||||||
|
|
||||||
this._container = new Shell.GenericContainer();
|
this._container = new Shell.GenericContainer();
|
||||||
bin.set_child(this._container);
|
bin.set_child(this._container);
|
||||||
this._container.connect('get-preferred-width', Lang.bind(this, this._getContentPreferredWidth));
|
this._container.connect('get-preferred-width', Lang.bind(this, this._getContentPreferredWidth));
|
||||||
@ -275,7 +280,7 @@ AppMenuButton.prototype = {
|
|||||||
this._clipWidth = PANEL_ICON_SIZE;
|
this._clipWidth = PANEL_ICON_SIZE;
|
||||||
this._direction = SPINNER_SPEED;
|
this._direction = SPINNER_SPEED;
|
||||||
|
|
||||||
this._spinner = new AnimatedIcon('process-working.png',
|
this._spinner = new AnimatedIcon('process-working.svg',
|
||||||
PANEL_ICON_SIZE);
|
PANEL_ICON_SIZE);
|
||||||
this._container.add_actor(this._spinner.actor);
|
this._container.add_actor(this._spinner.actor);
|
||||||
this._spinner.actor.lower_bottom();
|
this._spinner.actor.lower_bottom();
|
||||||
@ -500,13 +505,6 @@ AppMenuButton.prototype = {
|
|||||||
lastStartedApp = this._startingApps[i];
|
lastStartedApp = this._startingApps[i];
|
||||||
|
|
||||||
let focusedApp = tracker.focus_app;
|
let focusedApp = tracker.focus_app;
|
||||||
let targetApp = focusedApp != null ? focusedApp : lastStartedApp;
|
|
||||||
if (targetApp == this._targetApp) {
|
|
||||||
if (targetApp && targetApp.get_state() != Shell.AppState.STARTING)
|
|
||||||
this.stopAnimation();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._stopAnimation();
|
|
||||||
|
|
||||||
if (!focusedApp) {
|
if (!focusedApp) {
|
||||||
// If the app has just lost focus to the panel, pretend
|
// If the app has just lost focus to the panel, pretend
|
||||||
@ -516,27 +514,56 @@ AppMenuButton.prototype = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let targetApp = focusedApp != null ? focusedApp : lastStartedApp;
|
||||||
|
|
||||||
|
if (targetApp == null) {
|
||||||
|
if (!this._targetIsCurrent)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.actor.reactive = false;
|
||||||
|
this._targetIsCurrent = false;
|
||||||
|
|
||||||
|
Tweener.removeTweens(this.actor);
|
||||||
|
Tweener.addTween(this.actor, { opacity: 0,
|
||||||
|
time: Overview.ANIMATION_TIME,
|
||||||
|
transition: 'easeOutQuad' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this._targetIsCurrent) {
|
||||||
|
this.actor.reactive = true;
|
||||||
|
this._targetIsCurrent = true;
|
||||||
|
|
||||||
|
Tweener.removeTweens(this.actor);
|
||||||
|
Tweener.addTween(this.actor, { opacity: 255,
|
||||||
|
time: Overview.ANIMATION_TIME,
|
||||||
|
transition: 'easeOutQuad' });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetApp == this._targetApp) {
|
||||||
|
if (targetApp && targetApp.get_state() != Shell.AppState.STARTING)
|
||||||
|
this.stopAnimation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._stopAnimation();
|
||||||
|
|
||||||
if (this._iconBox.child != null)
|
if (this._iconBox.child != null)
|
||||||
this._iconBox.child.destroy();
|
this._iconBox.child.destroy();
|
||||||
this._iconBox.hide();
|
this._iconBox.hide();
|
||||||
this._label.setText('');
|
this._label.setText('');
|
||||||
this.actor.reactive = false;
|
|
||||||
|
|
||||||
this._targetApp = targetApp;
|
this._targetApp = targetApp;
|
||||||
if (targetApp != null) {
|
|
||||||
let icon = targetApp.get_faded_icon(2 * PANEL_ICON_SIZE);
|
let icon = targetApp.get_faded_icon(2 * PANEL_ICON_SIZE);
|
||||||
|
|
||||||
this._label.setText(targetApp.get_name());
|
this._label.setText(targetApp.get_name());
|
||||||
// TODO - _quit() doesn't really work on apps in state STARTING yet
|
// TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||||
this._quitMenu.label.set_text(_("Quit %s").format(targetApp.get_name()));
|
this._quitMenu.label.set_text(_("Quit %s").format(targetApp.get_name()));
|
||||||
|
|
||||||
this.actor.reactive = true;
|
|
||||||
this._iconBox.set_child(icon);
|
this._iconBox.set_child(icon);
|
||||||
this._iconBox.show();
|
this._iconBox.show();
|
||||||
|
|
||||||
if (targetApp.get_state() == Shell.AppState.STARTING)
|
if (targetApp.get_state() == Shell.AppState.STARTING)
|
||||||
this.startAnimation();
|
this.startAnimation();
|
||||||
}
|
|
||||||
|
|
||||||
this.emit('changed');
|
this.emit('changed');
|
||||||
}
|
}
|
||||||
@ -813,13 +840,6 @@ Panel.prototype = {
|
|||||||
this._centerBox = new St.BoxLayout({ name: 'panelCenter' });
|
this._centerBox = new St.BoxLayout({ name: 'panelCenter' });
|
||||||
this._rightBox = new St.BoxLayout({ name: 'panelRight' });
|
this._rightBox = new St.BoxLayout({ name: 'panelRight' });
|
||||||
|
|
||||||
// This will eventually be automatic, see
|
|
||||||
// https://bugzilla.gnome.org/show_bug.cgi?id=584662
|
|
||||||
if (St.Widget.get_default_direction() == St.TextDirection.RTL) {
|
|
||||||
this._leftBox.add_style_pseudo_class('rtl');
|
|
||||||
this._rightBox.add_style_pseudo_class('rtl');
|
|
||||||
}
|
|
||||||
|
|
||||||
this._leftCorner = new PanelCorner(St.Side.LEFT);
|
this._leftCorner = new PanelCorner(St.Side.LEFT);
|
||||||
this._rightCorner = new PanelCorner(St.Side.RIGHT);
|
this._rightCorner = new PanelCorner(St.Side.RIGHT);
|
||||||
|
|
||||||
@ -996,6 +1016,9 @@ Panel.prototype = {
|
|||||||
Main.chrome.addActor(this._rightCorner.actor, { visibleInOverview: true,
|
Main.chrome.addActor(this._rightCorner.actor, { visibleInOverview: true,
|
||||||
affectsStruts: false,
|
affectsStruts: false,
|
||||||
affectsInputRegion: false });
|
affectsInputRegion: false });
|
||||||
|
|
||||||
|
Main.ctrlAltTabManager.addGroup(this.actor, _("Panel"), 'start-here',
|
||||||
|
{ sortGroup: CtrlAltTab.SortGroup.TOP });
|
||||||
},
|
},
|
||||||
|
|
||||||
_xdndShowOverview: function (actor) {
|
_xdndShowOverview: function (actor) {
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
/* -*- 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 Gtk = imports.gi.Gtk;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
@ -20,9 +22,10 @@ Button.prototype = {
|
|||||||
track_hover: true });
|
track_hover: true });
|
||||||
this.actor._delegate = this;
|
this.actor._delegate = this;
|
||||||
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
||||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
|
this.actor.connect('key-press-event', Lang.bind(this, this._onSourceKeyPress));
|
||||||
this.menu = new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, /* FIXME */ 0);
|
this.menu = new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, 0);
|
||||||
this.menu.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged));
|
this.menu.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged));
|
||||||
|
this.menu.actor.connect('key-press-event', Lang.bind(this, this._onMenuKeyPress));
|
||||||
Main.chrome.addActor(this.menu.actor, { visibleInOverview: true,
|
Main.chrome.addActor(this.menu.actor, { visibleInOverview: true,
|
||||||
affectsStruts: false });
|
affectsStruts: false });
|
||||||
this.menu.actor.hide();
|
this.menu.actor.hide();
|
||||||
@ -32,20 +35,37 @@ Button.prototype = {
|
|||||||
this.menu.toggle();
|
this.menu.toggle();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onKeyPress: function(actor, event) {
|
_onSourceKeyPress: function(actor, event) {
|
||||||
let symbol = event.get_key_symbol();
|
let symbol = event.get_key_symbol();
|
||||||
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
|
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
|
||||||
this.menu.toggle();
|
this.menu.toggle();
|
||||||
return true;
|
return true;
|
||||||
|
} else if (symbol == Clutter.KEY_Escape && this.menu.isOpen) {
|
||||||
|
this.menu.close();
|
||||||
|
return true;
|
||||||
} else if (symbol == Clutter.KEY_Down) {
|
} else if (symbol == Clutter.KEY_Down) {
|
||||||
if (!this.menu.isOpen)
|
if (!this.menu.isOpen)
|
||||||
this.menu.toggle();
|
this.menu.toggle();
|
||||||
this.menu.activateFirst();
|
this.menu.actor.navigate_focus(this.actor, Gtk.DirectionType.DOWN, false);
|
||||||
return true;
|
return true;
|
||||||
} else
|
} else
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onMenuKeyPress: function(actor, event) {
|
||||||
|
let symbol = event.get_key_symbol();
|
||||||
|
if (symbol == Clutter.KEY_Left || symbol == Clutter.KEY_Right) {
|
||||||
|
let focusManager = St.FocusManager.get_for_stage(global.stage);
|
||||||
|
let group = focusManager.get_group(this.actor);
|
||||||
|
if (group) {
|
||||||
|
let direction = (symbol == Clutter.KEY_Left) ? Gtk.DirectionType.LEFT : Gtk.DirectionType.RIGHT;
|
||||||
|
group.navigate_focus(this.actor, direction, false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
_onOpenStateChanged: function(menu, open) {
|
_onOpenStateChanged: function(menu, open) {
|
||||||
if (open)
|
if (open)
|
||||||
this.actor.add_style_pseudo_class('active');
|
this.actor.add_style_pseudo_class('active');
|
||||||
|
@ -54,8 +54,10 @@ PopupBaseMenuItem.prototype = {
|
|||||||
}
|
}
|
||||||
if (params.reactive && params.hover)
|
if (params.reactive && params.hover)
|
||||||
this.actor.connect('notify::hover', Lang.bind(this, this._onHoverChanged));
|
this.actor.connect('notify::hover', Lang.bind(this, this._onHoverChanged));
|
||||||
if (params.reactive)
|
if (params.reactive) {
|
||||||
this.actor.connect('key-focus-in', Lang.bind(this, this._onKeyFocusIn));
|
this.actor.connect('key-focus-in', Lang.bind(this, this._onKeyFocusIn));
|
||||||
|
this.actor.connect('key-focus-out', Lang.bind(this, this._onKeyFocusOut));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_onStyleChanged: function (actor) {
|
_onStyleChanged: function (actor) {
|
||||||
@ -81,6 +83,10 @@ PopupBaseMenuItem.prototype = {
|
|||||||
this.setActive(true);
|
this.setActive(true);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onKeyFocusOut: function (actor) {
|
||||||
|
this.setActive(false);
|
||||||
|
},
|
||||||
|
|
||||||
_onHoverChanged: function (actor) {
|
_onHoverChanged: function (actor) {
|
||||||
this.setActive(actor.hover);
|
this.setActive(actor.hover);
|
||||||
},
|
},
|
||||||
@ -684,28 +690,6 @@ PopupImageMenuItem.prototype = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function mod(a, b) {
|
|
||||||
return (a + b) % b;
|
|
||||||
}
|
|
||||||
|
|
||||||
function findNextInCycle(items, current, direction) {
|
|
||||||
let cur;
|
|
||||||
|
|
||||||
if (items.length == 0)
|
|
||||||
return current;
|
|
||||||
else if (items.length == 1)
|
|
||||||
return items[0];
|
|
||||||
|
|
||||||
if (current)
|
|
||||||
cur = items.indexOf(current);
|
|
||||||
else if (direction == 1)
|
|
||||||
cur = items.length - 1;
|
|
||||||
else
|
|
||||||
cur = 0;
|
|
||||||
|
|
||||||
return items[mod(cur + direction, items.length)];
|
|
||||||
}
|
|
||||||
|
|
||||||
function PopupMenuBase() {
|
function PopupMenuBase() {
|
||||||
throw new TypeError('Trying to instantiate abstract class PopupMenuBase');
|
throw new TypeError('Trying to instantiate abstract class PopupMenuBase');
|
||||||
}
|
}
|
||||||
@ -861,17 +845,6 @@ PopupMenuBase.prototype = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
activateFirst: function() {
|
|
||||||
let children = this.box.get_children();
|
|
||||||
for (let i = 0; i < children.length; i++) {
|
|
||||||
let actor = children[i];
|
|
||||||
if (actor._delegate && actor._delegate instanceof PopupBaseMenuItem && actor.visible && actor.reactive) {
|
|
||||||
actor._delegate.setActive(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
toggle: function() {
|
toggle: function() {
|
||||||
if (this.isOpen)
|
if (this.isOpen)
|
||||||
this.close(true);
|
this.close(true);
|
||||||
@ -909,6 +882,8 @@ PopupMenu.prototype = {
|
|||||||
this.actor = this._boxPointer.actor;
|
this.actor = this._boxPointer.actor;
|
||||||
this.actor._delegate = this;
|
this.actor._delegate = this;
|
||||||
this.actor.style_class = 'popup-menu-boxpointer';
|
this.actor.style_class = 'popup-menu-boxpointer';
|
||||||
|
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||||
|
|
||||||
this._boxWrapper = new Shell.GenericContainer();
|
this._boxWrapper = new Shell.GenericContainer();
|
||||||
this._boxWrapper.connect('get-preferred-width', Lang.bind(this, this._boxGetPreferredWidth));
|
this._boxWrapper.connect('get-preferred-width', Lang.bind(this, this._boxGetPreferredWidth));
|
||||||
this._boxWrapper.connect('get-preferred-height', Lang.bind(this, this._boxGetPreferredHeight));
|
this._boxWrapper.connect('get-preferred-height', Lang.bind(this, this._boxGetPreferredHeight));
|
||||||
@ -937,6 +912,15 @@ PopupMenu.prototype = {
|
|||||||
this.box.allocate(box, flags);
|
this.box.allocate(box, flags);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onKeyPressEvent: function(actor, event) {
|
||||||
|
if (event.get_key_symbol() == Clutter.Escape) {
|
||||||
|
this.close(true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
setArrowOrigin: function(origin) {
|
setArrowOrigin: function(origin) {
|
||||||
this._boxPointer.setArrowOrigin(origin);
|
this._boxPointer.setArrowOrigin(origin);
|
||||||
},
|
},
|
||||||
@ -1127,11 +1111,17 @@ PopupSubMenuMenuItem.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onKeyPressEvent: function(actor, event) {
|
_onKeyPressEvent: function(actor, event) {
|
||||||
if (event.get_key_symbol() == Clutter.KEY_Right) {
|
let symbol = event.get_key_symbol();
|
||||||
|
|
||||||
|
if (symbol == Clutter.KEY_Right) {
|
||||||
this.menu.open(true);
|
this.menu.open(true);
|
||||||
this.menu.activateFirst();
|
this.menu.actor.navigate_focus(null, Gtk.DirectionType.DOWN, false);
|
||||||
|
return true;
|
||||||
|
} else if (symbol == Clutter.KEY_Left && this.menu.isOpen) {
|
||||||
|
this.menu.close();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return PopupBaseMenuItem.prototype._onKeyPressEvent.call(this, actor, event);
|
return PopupBaseMenuItem.prototype._onKeyPressEvent.call(this, actor, event);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1158,12 +1148,13 @@ PopupMenuManager.prototype = {
|
|||||||
this.grabbed = false;
|
this.grabbed = false;
|
||||||
|
|
||||||
this._eventCaptureId = 0;
|
this._eventCaptureId = 0;
|
||||||
this._keyPressEventId = 0;
|
|
||||||
this._enterEventId = 0;
|
this._enterEventId = 0;
|
||||||
this._leaveEventId = 0;
|
this._leaveEventId = 0;
|
||||||
|
this._keyFocusNotifyId = 0;
|
||||||
this._activeMenu = null;
|
this._activeMenu = null;
|
||||||
this._menus = [];
|
this._menus = [];
|
||||||
this._preGrabInputMode = null;
|
this._preGrabInputMode = null;
|
||||||
|
this._grabbedFromKeynav = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
addMenu: function(menu, position) {
|
addMenu: function(menu, position) {
|
||||||
@ -1172,15 +1163,13 @@ PopupMenuManager.prototype = {
|
|||||||
openStateChangeId: menu.connect('open-state-changed', Lang.bind(this, this._onMenuOpenState)),
|
openStateChangeId: menu.connect('open-state-changed', Lang.bind(this, this._onMenuOpenState)),
|
||||||
destroyId: menu.connect('destroy', Lang.bind(this, this._onMenuDestroy)),
|
destroyId: menu.connect('destroy', Lang.bind(this, this._onMenuDestroy)),
|
||||||
enterId: 0,
|
enterId: 0,
|
||||||
focusInId: 0,
|
focusInId: 0
|
||||||
focusOutId: 0
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let source = menu.sourceActor;
|
let source = menu.sourceActor;
|
||||||
if (source) {
|
if (source) {
|
||||||
menudata.enterId = source.connect('enter-event', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
|
menudata.enterId = source.connect('enter-event', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
|
||||||
menudata.focusInId = source.connect('key-focus-in', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
|
menudata.focusInId = source.connect('key-focus-in', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
|
||||||
menudata.focusOutId = source.connect('key-focus-out', Lang.bind(this, function() { this._onKeyFocusOut(menu); }));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (position == undefined)
|
if (position == undefined)
|
||||||
@ -1205,8 +1194,6 @@ PopupMenuManager.prototype = {
|
|||||||
menu.sourceActor.disconnect(menudata.enterId);
|
menu.sourceActor.disconnect(menudata.enterId);
|
||||||
if (menudata.focusInId)
|
if (menudata.focusInId)
|
||||||
menu.sourceActor.disconnect(menudata.focusInId);
|
menu.sourceActor.disconnect(menudata.focusInId);
|
||||||
if (menudata.focusOutId)
|
|
||||||
menu.sourceActor.disconnect(menudata.focusOutId);
|
|
||||||
|
|
||||||
this._menus.splice(position, 1);
|
this._menus.splice(position, 1);
|
||||||
},
|
},
|
||||||
@ -1215,10 +1202,10 @@ PopupMenuManager.prototype = {
|
|||||||
Main.pushModal(this._owner.actor);
|
Main.pushModal(this._owner.actor);
|
||||||
|
|
||||||
this._eventCaptureId = global.stage.connect('captured-event', Lang.bind(this, this._onEventCapture));
|
this._eventCaptureId = global.stage.connect('captured-event', Lang.bind(this, this._onEventCapture));
|
||||||
this._keyPressEventId = global.stage.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
|
||||||
// captured-event doesn't see enter/leave events
|
// captured-event doesn't see enter/leave events
|
||||||
this._enterEventId = global.stage.connect('enter-event', Lang.bind(this, this._onEventCapture));
|
this._enterEventId = global.stage.connect('enter-event', Lang.bind(this, this._onEventCapture));
|
||||||
this._leaveEventId = global.stage.connect('leave-event', Lang.bind(this, this._onEventCapture));
|
this._leaveEventId = global.stage.connect('leave-event', Lang.bind(this, this._onEventCapture));
|
||||||
|
this._keyFocusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this, this._onKeyFocusChanged));
|
||||||
|
|
||||||
this.grabbed = true;
|
this.grabbed = true;
|
||||||
},
|
},
|
||||||
@ -1226,49 +1213,47 @@ PopupMenuManager.prototype = {
|
|||||||
_ungrab: function() {
|
_ungrab: function() {
|
||||||
global.stage.disconnect(this._eventCaptureId);
|
global.stage.disconnect(this._eventCaptureId);
|
||||||
this._eventCaptureId = 0;
|
this._eventCaptureId = 0;
|
||||||
global.stage.disconnect(this._keyPressEventId);
|
|
||||||
this._keyPressEventId = 0;
|
|
||||||
global.stage.disconnect(this._enterEventId);
|
global.stage.disconnect(this._enterEventId);
|
||||||
this._enterEventId = 0;
|
this._enterEventId = 0;
|
||||||
global.stage.disconnect(this._leaveEventId);
|
global.stage.disconnect(this._leaveEventId);
|
||||||
this._leaveEventId = 0;
|
this._leaveEventId = 0;
|
||||||
|
global.stage.disconnect(this._keyFocusNotifyId);
|
||||||
|
this._keyFocusNotifyId = 0;
|
||||||
|
|
||||||
this.grabbed = false;
|
this.grabbed = false;
|
||||||
Main.popModal(this._owner.actor);
|
Main.popModal(this._owner.actor);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onMenuOpenState: function(menu, open) {
|
_onMenuOpenState: function(menu, open) {
|
||||||
|
if (open)
|
||||||
|
this._activeMenu = menu;
|
||||||
|
|
||||||
|
// Check what the focus was before calling pushModal/popModal
|
||||||
|
let focus = global.stage.key_focus;
|
||||||
|
let hadFocus = focus && this._activeMenuContains(focus);
|
||||||
|
|
||||||
if (open) {
|
if (open) {
|
||||||
if (!this.grabbed) {
|
if (!this.grabbed) {
|
||||||
this._preGrabInputMode = global.stage_input_mode;
|
this._preGrabInputMode = global.stage_input_mode;
|
||||||
|
this._grabbedFromKeynav = hadFocus;
|
||||||
this._grab();
|
this._grab();
|
||||||
}
|
}
|
||||||
this._activeMenu = menu;
|
|
||||||
|
|
||||||
// if the focus is not already associated with the menu,
|
if (hadFocus)
|
||||||
// then focus the menu
|
focus.grab_key_focus();
|
||||||
let focus = global.stage.key_focus;
|
else
|
||||||
if (!this._activeMenuContains(focus))
|
menu.actor.grab_key_focus();
|
||||||
menu.sourceActor.grab_key_focus();
|
|
||||||
} else if (menu == this._activeMenu) {
|
} else if (menu == this._activeMenu) {
|
||||||
let focus = global.stage.key_focus;
|
|
||||||
let fromActive = focus && this._activeMenuContains(focus);
|
|
||||||
|
|
||||||
if (this.grabbed)
|
if (this.grabbed)
|
||||||
this._ungrab();
|
this._ungrab();
|
||||||
this._activeMenu = null;
|
this._activeMenu = null;
|
||||||
|
|
||||||
// If keynav was in effect before we grabbed, then we need
|
if (this._grabbedFromKeynav) {
|
||||||
// to properly re-establish it after we ungrab. (popModal
|
if (this._preGrabInputMode == Shell.StageInputMode.FOCUSED)
|
||||||
// will have unset the focus.) If some part of the menu
|
|
||||||
// was focused at the time of the ungrab then focus its
|
|
||||||
// sourceActor. Otherwise just reset the focus to where it
|
|
||||||
// was right before the ungrab.
|
|
||||||
if (this._preGrabInputMode == Shell.StageInputMode.FOCUSED) {
|
|
||||||
global.stage_input_mode = Shell.StageInputMode.FOCUSED;
|
global.stage_input_mode = Shell.StageInputMode.FOCUSED;
|
||||||
if (fromActive)
|
if (hadFocus && menu.sourceActor)
|
||||||
menu.sourceActor.grab_key_focus();
|
menu.sourceActor.grab_key_focus();
|
||||||
else
|
else if (focus)
|
||||||
focus.grab_key_focus();
|
focus.grab_key_focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1296,29 +1281,20 @@ PopupMenuManager.prototype = {
|
|||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onKeyFocusOut: function(menu) {
|
_onKeyFocusChanged: function() {
|
||||||
if (!this.grabbed || menu != this._activeMenu)
|
if (!this.grabbed || !this._activeMenu)
|
||||||
return;
|
|
||||||
|
|
||||||
// We want to close the menu if the focus has moved somewhere
|
|
||||||
// other than inside the menu or to another menu's sourceActor.
|
|
||||||
// Unfortunately, when key-focus-out is emitted,
|
|
||||||
// stage.key_focus will be null. So we have to wait until
|
|
||||||
// after it emits the key-focus-in as well.
|
|
||||||
let id = global.stage.connect('notify::key-focus', Lang.bind(this,
|
|
||||||
function () {
|
|
||||||
global.stage.disconnect(id);
|
|
||||||
|
|
||||||
if (menu != this._activeMenu)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let focus = global.stage.key_focus;
|
let focus = global.stage.key_focus;
|
||||||
if (!focus || this._activeMenuContains(focus))
|
if (focus) {
|
||||||
|
if (this._activeMenuContains(focus))
|
||||||
return;
|
return;
|
||||||
if (focus._delegate && this._findMenu(focus._delegate.menu) != -1)
|
if (focus._delegate && focus._delegate.menu &&
|
||||||
|
this._findMenu(focus._delegate.menu) != -1)
|
||||||
return;
|
return;
|
||||||
menu.close(true);
|
}
|
||||||
}));
|
|
||||||
|
this._closeMenu();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onMenuDestroy: function(menu) {
|
_onMenuDestroy: function(menu) {
|
||||||
@ -1354,18 +1330,6 @@ PopupMenuManager.prototype = {
|
|||||||
return -1;
|
return -1;
|
||||||
},
|
},
|
||||||
|
|
||||||
_nextMenu: function(pos, direction) {
|
|
||||||
for (let i = 1; i < this._menus.length; i++) {
|
|
||||||
let candidate = mod(pos + i * direction, this._menus.length);
|
|
||||||
let menu = this._menus[candidate].menu;
|
|
||||||
if (!menu.sourceActor || menu.sourceActor.visible)
|
|
||||||
return menu;
|
|
||||||
}
|
|
||||||
// no menu is found? this should not happen
|
|
||||||
// anyway stay on current menu
|
|
||||||
return this._menus[pos];
|
|
||||||
},
|
|
||||||
|
|
||||||
_onEventCapture: function(actor, event) {
|
_onEventCapture: function(actor, event) {
|
||||||
if (!this.grabbed)
|
if (!this.grabbed)
|
||||||
return false;
|
return false;
|
||||||
@ -1383,8 +1347,7 @@ PopupMenuManager.prototype = {
|
|||||||
this._closeMenu();
|
this._closeMenu();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if ((eventType == Clutter.EventType.BUTTON_PRESS && !activeMenuContains)
|
} else if (eventType == Clutter.EventType.BUTTON_PRESS && !activeMenuContains) {
|
||||||
|| (eventType == Clutter.EventType.KEY_PRESS && event.get_key_symbol() == Clutter.Escape)) {
|
|
||||||
this._closeMenu();
|
this._closeMenu();
|
||||||
return true;
|
return true;
|
||||||
} else if (activeMenuContains || this._eventIsOnAnyMenuSource(event)) {
|
} else if (activeMenuContains || this._eventIsOnAnyMenuSource(event)) {
|
||||||
@ -1394,27 +1357,6 @@ PopupMenuManager.prototype = {
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onKeyPressEvent: function(actor, event) {
|
|
||||||
if (!this.grabbed || !this._activeMenu)
|
|
||||||
return false;
|
|
||||||
if (!this._eventIsOnActiveMenu(event))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
let symbol = event.get_key_symbol();
|
|
||||||
if (symbol == Clutter.Left || symbol == Clutter.Right) {
|
|
||||||
let direction = symbol == Clutter.Right ? 1 : -1;
|
|
||||||
let pos = this._findMenu(this._activeMenu);
|
|
||||||
let next = this._nextMenu(pos, direction);
|
|
||||||
if (next != this._activeMenu) {
|
|
||||||
this._changeMenu(next);
|
|
||||||
next.activateFirst();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
|
|
||||||
_closeMenu: function() {
|
_closeMenu: function() {
|
||||||
if (this._activeMenu != null)
|
if (this._activeMenu != null)
|
||||||
this._activeMenu.close(true);
|
this._activeMenu.close(true);
|
||||||
|
@ -234,21 +234,10 @@ __proto__: ModalDialog.ModalDialog.prototype,
|
|||||||
this._commandCompleter = new CommandCompleter();
|
this._commandCompleter = new CommandCompleter();
|
||||||
this._group.connect('notify::visible', Lang.bind(this._commandCompleter, this._commandCompleter.update));
|
this._group.connect('notify::visible', Lang.bind(this._commandCompleter, this._commandCompleter.update));
|
||||||
|
|
||||||
this._history = new History.HistoryManager(HISTORY_KEY);
|
this._history = new History.HistoryManager({ gsettingsKey: HISTORY_KEY,
|
||||||
this._history.connect('changed', Lang.bind(this, function(history, text) {
|
entry: this._entryText });
|
||||||
this._entryText.set_text(text);
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._entryText.connect('key-press-event', Lang.bind(this, function(o, e) {
|
this._entryText.connect('key-press-event', Lang.bind(this, function(o, e) {
|
||||||
let symbol = e.get_key_symbol();
|
let symbol = e.get_key_symbol();
|
||||||
if (symbol == Clutter.Down) {
|
|
||||||
this._history.nextItem(o.get_text());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (symbol == Clutter.Up) {
|
|
||||||
this._history.prevItem(o.get_text());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
|
if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
|
||||||
if (Shell.get_event_state(e) & Clutter.ModifierType.CONTROL_MASK)
|
if (Shell.get_event_state(e) & Clutter.ModifierType.CONTROL_MASK)
|
||||||
this._run(o.get_text(), true);
|
this._run(o.get_text(), true);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
const Gdm = imports.gi.Gdm;
|
const Gdm = imports.gi.Gdm;
|
||||||
|
const DBus = imports.dbus;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
@ -16,6 +17,16 @@ const PanelMenu = imports.ui.panelMenu;
|
|||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
const Util = imports.misc.util;
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
|
const BUS_NAME = 'org.gnome.ScreenSaver';
|
||||||
|
const OBJECT_PATH = '/org/gnome/ScreenSaver';
|
||||||
|
|
||||||
|
const ScreenSaverInterface = {
|
||||||
|
name: BUS_NAME,
|
||||||
|
methods: [ { name: 'Lock', inSignature: '' } ]
|
||||||
|
};
|
||||||
|
|
||||||
|
let ScreenSaverProxy = DBus.makeProxyClass(ScreenSaverInterface);
|
||||||
|
|
||||||
// Adapted from gdm/gui/user-switch-applet/applet.c
|
// Adapted from gdm/gui/user-switch-applet/applet.c
|
||||||
//
|
//
|
||||||
// Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>.
|
// Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>.
|
||||||
@ -43,7 +54,7 @@ StatusMenuButton.prototype = {
|
|||||||
this._account_mgr = Tp.AccountManager.dup()
|
this._account_mgr = Tp.AccountManager.dup()
|
||||||
|
|
||||||
this._upClient = new UPowerGlib.Client();
|
this._upClient = new UPowerGlib.Client();
|
||||||
|
this._screenSaverProxy = new ScreenSaverProxy(DBus.session, BUS_NAME, OBJECT_PATH);
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
this._iconBox = new St.Bin();
|
this._iconBox = new St.Bin();
|
||||||
@ -188,7 +199,7 @@ StatusMenuButton.prototype = {
|
|||||||
|
|
||||||
_onLockScreenActivate: function() {
|
_onLockScreenActivate: function() {
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
Util.spawn(['gnome-screensaver-command', '--lock']);
|
this._screenSaverProxy.LockRemote();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onLoginScreenActivate: function() {
|
_onLoginScreenActivate: function() {
|
||||||
@ -207,7 +218,9 @@ StatusMenuButton.prototype = {
|
|||||||
|
|
||||||
if (this._haveSuspend &&
|
if (this._haveSuspend &&
|
||||||
this._suspendOrPowerOffItem.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
|
this._suspendOrPowerOffItem.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
|
||||||
|
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
|
||||||
this._upClient.suspend_sync(null);
|
this._upClient.suspend_sync(null);
|
||||||
|
}));
|
||||||
} else {
|
} else {
|
||||||
Util.spawn(['gnome-session-quit', '--power-off']);
|
Util.spawn(['gnome-session-quit', '--power-off']);
|
||||||
}
|
}
|
||||||
|
@ -173,7 +173,7 @@ Source.prototype = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_notificationClicked: function(notification) {
|
open: function(notification) {
|
||||||
let props = {};
|
let props = {};
|
||||||
props[Tp.PROP_CHANNEL_CHANNEL_TYPE] = Tp.IFACE_CHANNEL_TYPE_TEXT;
|
props[Tp.PROP_CHANNEL_CHANNEL_TYPE] = Tp.IFACE_CHANNEL_TYPE_TEXT;
|
||||||
[props[Tp.PROP_CHANNEL_TARGET_HANDLE], props[Tp.PROP_CHANNEL_TARGET_HANDLE_TYPE]] = this._channel.get_handle();
|
[props[Tp.PROP_CHANNEL_TARGET_HANDLE], props[Tp.PROP_CHANNEL_TARGET_HANDLE_TYPE]] = this._channel.get_handle();
|
||||||
@ -279,6 +279,16 @@ Notification.prototype = {
|
|||||||
this._responseEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivated));
|
this._responseEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivated));
|
||||||
this.setActionArea(this._responseEntry);
|
this.setActionArea(this._responseEntry);
|
||||||
|
|
||||||
|
this._oldMaxScrollAdjustment = 0;
|
||||||
|
this._createScrollArea();
|
||||||
|
|
||||||
|
this._scrollArea.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) {
|
||||||
|
let currentValue = adjustment.value + adjustment.page_size;
|
||||||
|
if (currentValue == this._oldMaxScrollAdjustment)
|
||||||
|
this.scrollTo(St.Side.BOTTOM);
|
||||||
|
this._oldMaxScrollAdjustment = adjustment.upper;
|
||||||
|
}));
|
||||||
|
|
||||||
this._history = [];
|
this._history = [];
|
||||||
this._timestampTimeoutId = 0;
|
this._timestampTimeoutId = 0;
|
||||||
},
|
},
|
||||||
@ -305,7 +315,6 @@ Notification.prototype = {
|
|||||||
|
|
||||||
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._history.unshift({ actor: body, time: timestamp, realMessage: true });
|
this._history.unshift({ actor: body, time: timestamp, realMessage: true });
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/* -*- 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 Gtk = imports.gi.Gtk;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
@ -15,12 +16,12 @@ const Search = imports.ui.search;
|
|||||||
const SearchDisplay = imports.ui.searchDisplay;
|
const SearchDisplay = imports.ui.searchDisplay;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
function BaseTab(titleActor, pageActor) {
|
function BaseTab(titleActor, pageActor, name, a11yIcon) {
|
||||||
this._init(titleActor, pageActor);
|
this._init(titleActor, pageActor, name, a11yIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseTab.prototype = {
|
BaseTab.prototype = {
|
||||||
_init: function(titleActor, pageActor) {
|
_init: function(titleActor, pageActor, name, a11yIcon) {
|
||||||
this.title = titleActor;
|
this.title = titleActor;
|
||||||
this.page = new St.Bin({ child: pageActor,
|
this.page = new St.Bin({ child: pageActor,
|
||||||
x_align: St.Align.START,
|
x_align: St.Align.START,
|
||||||
@ -29,6 +30,14 @@ BaseTab.prototype = {
|
|||||||
y_fill: true,
|
y_fill: true,
|
||||||
style_class: 'view-tab-page' });
|
style_class: 'view-tab-page' });
|
||||||
|
|
||||||
|
if (this.title.can_focus) {
|
||||||
|
Main.ctrlAltTabManager.addGroup(this.title, name, a11yIcon);
|
||||||
|
} else {
|
||||||
|
Main.ctrlAltTabManager.addGroup(this.page, name, a11yIcon,
|
||||||
|
{ proxy: this.title,
|
||||||
|
focusCallback: Lang.bind(this, this._a11yFocus) });
|
||||||
|
}
|
||||||
|
|
||||||
this.visible = false;
|
this.visible = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -56,6 +65,11 @@ BaseTab.prototype = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_a11yFocus: function() {
|
||||||
|
this._activate();
|
||||||
|
this.page.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||||
|
},
|
||||||
|
|
||||||
_activate: function() {
|
_activate: function() {
|
||||||
this.emit('activated');
|
this.emit('activated');
|
||||||
}
|
}
|
||||||
@ -63,19 +77,19 @@ BaseTab.prototype = {
|
|||||||
Signals.addSignalMethods(BaseTab.prototype);
|
Signals.addSignalMethods(BaseTab.prototype);
|
||||||
|
|
||||||
|
|
||||||
function ViewTab(label, pageActor) {
|
function ViewTab(label, pageActor, a11yIcon) {
|
||||||
this._init(label, pageActor);
|
this._init(label, pageActor, a11yIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
ViewTab.prototype = {
|
ViewTab.prototype = {
|
||||||
__proto__: BaseTab.prototype,
|
__proto__: BaseTab.prototype,
|
||||||
|
|
||||||
_init: function(label, pageActor) {
|
_init: function(label, pageActor, a11yIcon) {
|
||||||
let titleActor = new St.Button({ label: label,
|
let titleActor = new St.Button({ label: label,
|
||||||
style_class: 'view-tab-title' });
|
style_class: 'view-tab-title' });
|
||||||
titleActor.connect('clicked', Lang.bind(this, this._activate));
|
titleActor.connect('clicked', Lang.bind(this, this._activate));
|
||||||
|
|
||||||
BaseTab.prototype._init.call(this, titleActor, pageActor);
|
BaseTab.prototype._init.call(this, titleActor, pageActor, label, a11yIcon);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -101,7 +115,8 @@ SearchTab.prototype = {
|
|||||||
active; it should not exceed ~30
|
active; it should not exceed ~30
|
||||||
characters. */
|
characters. */
|
||||||
hint_text: _("Type to search..."),
|
hint_text: _("Type to search..."),
|
||||||
track_hover: true });
|
track_hover: true,
|
||||||
|
can_focus: true });
|
||||||
this._text = this._entry.clutter_text;
|
this._text = this._entry.clutter_text;
|
||||||
this._text.connect('key-press-event', Lang.bind(this, this._onKeyPress));
|
this._text.connect('key-press-event', Lang.bind(this, this._onKeyPress));
|
||||||
|
|
||||||
@ -118,7 +133,9 @@ SearchTab.prototype = {
|
|||||||
this._searchResults = new SearchDisplay.SearchResults(this._searchSystem, this._openSearchSystem);
|
this._searchResults = new SearchDisplay.SearchResults(this._searchSystem, this._openSearchSystem);
|
||||||
BaseTab.prototype._init.call(this,
|
BaseTab.prototype._init.call(this,
|
||||||
this._entry,
|
this._entry,
|
||||||
this._searchResults.actor);
|
this._searchResults.actor,
|
||||||
|
_("Search"),
|
||||||
|
'edit-find');
|
||||||
|
|
||||||
this._text.connect('text-changed', Lang.bind(this, this._onTextChanged));
|
this._text.connect('text-changed', Lang.bind(this, this._onTextChanged));
|
||||||
this._text.connect('activate', Lang.bind(this, function (se) {
|
this._text.connect('activate', Lang.bind(this, function (se) {
|
||||||
@ -366,8 +383,8 @@ ViewSelector.prototype = {
|
|||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
addViewTab: function(title, pageActor) {
|
addViewTab: function(title, pageActor, a11yIcon) {
|
||||||
let viewTab = new ViewTab(title, pageActor);
|
let viewTab = new ViewTab(title, pageActor, a11yIcon);
|
||||||
this._tabs.push(viewTab);
|
this._tabs.push(viewTab);
|
||||||
this._tabBox.add(viewTab.title);
|
this._tabBox.add(viewTab.title);
|
||||||
this._addTab(viewTab);
|
this._addTab(viewTab);
|
||||||
|
@ -15,12 +15,11 @@ function WindowAttentionHandler() {
|
|||||||
WindowAttentionHandler.prototype = {
|
WindowAttentionHandler.prototype = {
|
||||||
_init : function() {
|
_init : function() {
|
||||||
this._startupIds = {};
|
this._startupIds = {};
|
||||||
this._sources = {};
|
this._tracker = Shell.WindowTracker.get_default();
|
||||||
|
this._tracker.connect('startup-sequence-changed', Lang.bind(this, this._onStartupSequenceChanged));
|
||||||
|
|
||||||
let display = global.screen.get_display();
|
let display = global.screen.get_display();
|
||||||
display.connect('window-demands-attention', Lang.bind(this, this._onWindowDemandsAttention));
|
display.connect('window-demands-attention', Lang.bind(this, this._onWindowDemandsAttention));
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
|
||||||
tracker.connect('startup-sequence-changed', Lang.bind(this, this._onStartupSequenceChanged));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onStartupSequenceChanged : function(tracker) {
|
_onStartupSequenceChanged : function(tracker) {
|
||||||
@ -57,28 +56,16 @@ WindowAttentionHandler.prototype = {
|
|||||||
if (!window || window.has_focus() || window.is_skip_taskbar())
|
if (!window || window.has_focus() || window.is_skip_taskbar())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
let app = this._tracker.get_window_app(window);
|
||||||
let app = tracker.get_window_app(window);
|
let source = new Source(app, window);
|
||||||
let appId = app.get_id();
|
|
||||||
|
|
||||||
let source = this._sources[appId];
|
|
||||||
if (source == null) {
|
|
||||||
source = new Source(app, window);
|
|
||||||
this._sources[appId] = source;
|
|
||||||
Main.messageTray.add(source);
|
Main.messageTray.add(source);
|
||||||
source.connect('destroy', Lang.bind(this, function() { delete this._sources[appId]; }));
|
|
||||||
}
|
|
||||||
|
|
||||||
let notification = new MessageTray.Notification(source, this._getTitle(app, window), this._getBanner(app, window));
|
let notification = new MessageTray.Notification(source, this._getTitle(app, window), this._getBanner(app, window));
|
||||||
source.notify(notification);
|
source.notify(notification);
|
||||||
|
|
||||||
window.connect('notify::title', Lang.bind(this, function(win) {
|
source.signalIDs.push(window.connect('notify::title', Lang.bind(this, function(win) {
|
||||||
notification.update(this._getTitle(app, win), this._getBanner(app, win));
|
notification.update(this._getTitle(app, win), this._getBanner(app, win));
|
||||||
}));
|
})));
|
||||||
window.connect('notify::demands-attention', Lang.bind(this, function() { source.destroy(); }));
|
|
||||||
window.connect('focus', Lang.bind(this, function() { source.destroy(); }));
|
|
||||||
window.connect('unmanaged', Lang.bind(this, function() { source.destroy(); }));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -94,13 +81,27 @@ Source.prototype = {
|
|||||||
this._window = window;
|
this._window = window;
|
||||||
this._app = app;
|
this._app = app;
|
||||||
this._setSummaryIcon(this.createNotificationIcon());
|
this._setSummaryIcon(this.createNotificationIcon());
|
||||||
|
|
||||||
|
this.signalIDs = [];
|
||||||
|
this.signalIDs.push(this._window.connect('notify::demands-attention', Lang.bind(this, function() { this.destroy(); })));
|
||||||
|
this.signalIDs.push(this._window.connect('focus', Lang.bind(this, function() { this.destroy(); })));
|
||||||
|
this.signalIDs.push(this._window.connect('unmanaged', Lang.bind(this, function() { this.destroy(); })));
|
||||||
|
|
||||||
|
this.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
},
|
||||||
|
|
||||||
|
_onDestroy : function() {
|
||||||
|
for(let i = 0; i < this.signalIDs.length; i++) {
|
||||||
|
this._window.disconnect(this.signalIDs[i]);
|
||||||
|
}
|
||||||
|
this.signalIDs = [];
|
||||||
},
|
},
|
||||||
|
|
||||||
createNotificationIcon : function() {
|
createNotificationIcon : function() {
|
||||||
return this._app.create_icon_texture(this.ICON_SIZE);
|
return this._app.create_icon_texture(this.ICON_SIZE);
|
||||||
},
|
},
|
||||||
|
|
||||||
_notificationClicked : function(notification) {
|
open : function(notification) {
|
||||||
Main.activateWindow(this._window);
|
Main.activateWindow(this._window);
|
||||||
this.destroy();
|
this.destroy();
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,8 @@ WindowManager.prototype = {
|
|||||||
|
|
||||||
this._dimmedWindows = [];
|
this._dimmedWindows = [];
|
||||||
|
|
||||||
|
this._animationBlockCount = 0;
|
||||||
|
|
||||||
this._switchData = null;
|
this._switchData = null;
|
||||||
this._shellwm.connect('kill-switch-workspace', Lang.bind(this, this._switchWorkspaceDone));
|
this._shellwm.connect('kill-switch-workspace', Lang.bind(this, this._switchWorkspaceDone));
|
||||||
this._shellwm.connect('kill-window-effects', Lang.bind(this, function (shellwm, actor) {
|
this._shellwm.connect('kill-window-effects', Lang.bind(this, function (shellwm, actor) {
|
||||||
@ -117,6 +119,7 @@ WindowManager.prototype = {
|
|||||||
this.setKeybindingHandler('switch_to_workspace_down', Lang.bind(this, this._showWorkspaceSwitcher));
|
this.setKeybindingHandler('switch_to_workspace_down', Lang.bind(this, this._showWorkspaceSwitcher));
|
||||||
this.setKeybindingHandler('switch_windows', Lang.bind(this, this._startAppSwitcher));
|
this.setKeybindingHandler('switch_windows', Lang.bind(this, this._startAppSwitcher));
|
||||||
this.setKeybindingHandler('switch_group', Lang.bind(this, this._startAppSwitcher));
|
this.setKeybindingHandler('switch_group', Lang.bind(this, this._startAppSwitcher));
|
||||||
|
this.setKeybindingHandler('switch_panels', Lang.bind(this, this._startA11ySwitcher));
|
||||||
|
|
||||||
Main.overview.connect('showing', Lang.bind(this, function() {
|
Main.overview.connect('showing', Lang.bind(this, function() {
|
||||||
for (let i = 0; i < this._dimmedWindows.length; i++)
|
for (let i = 0; i < this._dimmedWindows.length; i++)
|
||||||
@ -138,8 +141,16 @@ WindowManager.prototype = {
|
|||||||
this._shellwm.connect('keybinding::' + keybinding, handler);
|
this._shellwm.connect('keybinding::' + keybinding, handler);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
blockAnimations: function() {
|
||||||
|
this._animationBlockCount++;
|
||||||
|
},
|
||||||
|
|
||||||
|
unblockAnimations: function() {
|
||||||
|
this._animationBlockCount = Math.max(0, this._animationBlockCount - 1);
|
||||||
|
},
|
||||||
|
|
||||||
_shouldAnimate : function(actor) {
|
_shouldAnimate : function(actor) {
|
||||||
if (Main.overview.visible)
|
if (Main.overview.visible || this._animationsBlocked > 0)
|
||||||
return false;
|
return false;
|
||||||
if (actor && (actor.meta_window.get_window_type() != Meta.WindowType.NORMAL))
|
if (actor && (actor.meta_window.get_window_type() != Meta.WindowType.NORMAL))
|
||||||
return false;
|
return false;
|
||||||
@ -525,6 +536,10 @@ WindowManager.prototype = {
|
|||||||
tabPopup.destroy();
|
tabPopup.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_startA11ySwitcher : function(shellwm, binding, window, backwards) {
|
||||||
|
Main.ctrlAltTabManager.popup(backwards);
|
||||||
|
},
|
||||||
|
|
||||||
_showWorkspaceSwitcher : function(shellwm, binding, window, backwards) {
|
_showWorkspaceSwitcher : function(shellwm, binding, window, backwards) {
|
||||||
if (global.screen.n_workspaces == 1)
|
if (global.screen.n_workspaces == 1)
|
||||||
return;
|
return;
|
||||||
|
@ -125,6 +125,7 @@ WindowClone.prototype = {
|
|||||||
dragActorMaxSize: WINDOW_DND_SIZE,
|
dragActorMaxSize: WINDOW_DND_SIZE,
|
||||||
dragActorOpacity: DRAGGING_WINDOW_OPACITY });
|
dragActorOpacity: DRAGGING_WINDOW_OPACITY });
|
||||||
this._draggable.connect('drag-begin', Lang.bind(this, this._onDragBegin));
|
this._draggable.connect('drag-begin', Lang.bind(this, this._onDragBegin));
|
||||||
|
this._draggable.connect('drag-cancelled', Lang.bind(this, this._onDragCancelled));
|
||||||
this._draggable.connect('drag-end', Lang.bind(this, this._onDragEnd));
|
this._draggable.connect('drag-end', Lang.bind(this, this._onDragEnd));
|
||||||
this.inDrag = false;
|
this.inDrag = false;
|
||||||
|
|
||||||
@ -288,10 +289,16 @@ WindowClone.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onDragBegin : function (draggable, time) {
|
_onDragBegin : function (draggable, time) {
|
||||||
|
[this.dragOrigX, this.dragOrigY] = this.actor.get_position();
|
||||||
|
this.dragOrigScale = this.actor.scale_x;
|
||||||
this.inDrag = true;
|
this.inDrag = true;
|
||||||
this.emit('drag-begin');
|
this.emit('drag-begin');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onDragCancelled : function (draggable, time) {
|
||||||
|
this.emit('drag-cancelled');
|
||||||
|
},
|
||||||
|
|
||||||
_onDragEnd : function (draggable, time, snapback) {
|
_onDragEnd : function (draggable, time, snapback) {
|
||||||
this.inDrag = false;
|
this.inDrag = false;
|
||||||
|
|
||||||
@ -327,6 +334,7 @@ WindowOverlay.prototype = {
|
|||||||
|
|
||||||
this._windowClone = windowClone;
|
this._windowClone = windowClone;
|
||||||
this._parentActor = parentActor;
|
this._parentActor = parentActor;
|
||||||
|
this._hidden = false;
|
||||||
|
|
||||||
let title = new St.Label({ style_class: 'window-caption',
|
let title = new St.Label({ style_class: 'window-caption',
|
||||||
text: metaWindow.title });
|
text: metaWindow.title });
|
||||||
@ -372,11 +380,13 @@ WindowOverlay.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
hide: function() {
|
hide: function() {
|
||||||
|
this._hidden = true;
|
||||||
this.closeButton.hide();
|
this.closeButton.hide();
|
||||||
this.title.hide();
|
this.title.hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
show: function() {
|
show: function() {
|
||||||
|
this._hidden = false;
|
||||||
let [x, y, mask] = global.get_pointer();
|
let [x, y, mask] = global.get_pointer();
|
||||||
let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE,
|
let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE,
|
||||||
x, y);
|
x, y);
|
||||||
@ -387,8 +397,8 @@ WindowOverlay.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
fadeIn: function() {
|
fadeIn: function() {
|
||||||
|
this.show();
|
||||||
this.title.opacity = 0;
|
this.title.opacity = 0;
|
||||||
this.title.show();
|
|
||||||
this._parentActor.raise_top();
|
this._parentActor.raise_top();
|
||||||
Tweener.addTween(this.title,
|
Tweener.addTween(this.title,
|
||||||
{ opacity: 255,
|
{ opacity: 255,
|
||||||
@ -419,8 +429,13 @@ WindowOverlay.prototype = {
|
|||||||
let button = this.closeButton;
|
let button = this.closeButton;
|
||||||
let title = this.title;
|
let title = this.title;
|
||||||
|
|
||||||
let buttonX = cloneX + cloneWidth - button._overlap;
|
let buttonX;
|
||||||
let buttonY = cloneY - button.height + button._overlap;
|
let buttonY = cloneY - (button.height - button._overlap);
|
||||||
|
if (St.Widget.get_default_direction() == St.TextDirection.RTL)
|
||||||
|
buttonX = cloneX - (button.width - button._overlap);
|
||||||
|
else
|
||||||
|
buttonX = cloneX + (cloneWidth - button._overlap);
|
||||||
|
|
||||||
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
|
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
|
||||||
|
|
||||||
if (!title.fullWidth)
|
if (!title.fullWidth)
|
||||||
@ -475,6 +490,12 @@ WindowOverlay.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onEnter: function() {
|
_onEnter: function() {
|
||||||
|
// We might get enter events on the clone while the overlay is
|
||||||
|
// hidden, e.g. during animations, we ignore these events,
|
||||||
|
// as the close button will be shown as needed when the overlays
|
||||||
|
// are shown again
|
||||||
|
if (this._hidden)
|
||||||
|
return;
|
||||||
this._parentActor.raise_top();
|
this._parentActor.raise_top();
|
||||||
this.closeButton.show();
|
this.closeButton.show();
|
||||||
this.emit('show-close-button');
|
this.emit('show-close-button');
|
||||||
@ -515,7 +536,7 @@ WindowOverlay.prototype = {
|
|||||||
Signals.addSignalMethods(WindowOverlay.prototype);
|
Signals.addSignalMethods(WindowOverlay.prototype);
|
||||||
|
|
||||||
const WindowPositionFlags = {
|
const WindowPositionFlags = {
|
||||||
ZOOM: 1 << 0,
|
INITIAL: 1 << 0,
|
||||||
ANIMATE: 1 << 1
|
ANIMATE: 1 << 1
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -531,27 +552,26 @@ Workspace.prototype = {
|
|||||||
// When dragging a window, we use this slot for reserve space.
|
// When dragging a window, we use this slot for reserve space.
|
||||||
this._reservedSlot = null;
|
this._reservedSlot = null;
|
||||||
this.metaWorkspace = metaWorkspace;
|
this.metaWorkspace = metaWorkspace;
|
||||||
|
this._x = 0;
|
||||||
|
this._y = 0;
|
||||||
|
this._width = 0;
|
||||||
|
this._height = 0;
|
||||||
|
|
||||||
this._windowOverlaysGroup = new Clutter.Group();
|
this._windowOverlaysGroup = new Clutter.Group();
|
||||||
// Without this the drop area will be overlapped.
|
// Without this the drop area will be overlapped.
|
||||||
this._windowOverlaysGroup.set_size(0, 0);
|
this._windowOverlaysGroup.set_size(0, 0);
|
||||||
|
|
||||||
this.actor = new Clutter.Group();
|
this.actor = new Clutter.Group();
|
||||||
this.actor._delegate = this;
|
this.actor.set_size(0, 0);
|
||||||
|
|
||||||
|
this._dropRect = new Clutter.Rectangle({ opacity: 0 });
|
||||||
|
this._dropRect._delegate = this;
|
||||||
|
|
||||||
|
this.actor.add_actor(this._dropRect);
|
||||||
|
this.actor.add_actor(this._windowOverlaysGroup);
|
||||||
|
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
// Items in _windowOverlaysGroup should not be scaled, so we don't
|
|
||||||
// add them to this.actor, but to its parent whenever it changes
|
|
||||||
this.actor.connect('parent-set', Lang.bind(this, this._onParentSet));
|
|
||||||
|
|
||||||
// Auto-sizing is unreliable in the presence of ClutterClone, so rather than
|
|
||||||
// implicitly counting on the workspace actor to be sized to the size of the
|
|
||||||
// included desktop actor clone, set the size explicitly to the screen size.
|
|
||||||
// See http://bugzilla.openedhand.com/show_bug.cgi?id=1755
|
|
||||||
this.actor.width = global.screen_width;
|
|
||||||
this.actor.height = global.screen_height;
|
|
||||||
this.scale = 1.0;
|
|
||||||
|
|
||||||
let windows = Main.getWindowActorsForWorkspace(this.metaWorkspace.index());
|
let windows = Main.getWindowActorsForWorkspace(this.metaWorkspace.index());
|
||||||
|
|
||||||
// Create clones for windows that should be
|
// Create clones for windows that should be
|
||||||
@ -574,6 +594,22 @@ Workspace.prototype = {
|
|||||||
this.leavingOverview = false;
|
this.leavingOverview = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setGeometry: function(x, y, width, height) {
|
||||||
|
this._x = x;
|
||||||
|
this._y = y;
|
||||||
|
this._width = width;
|
||||||
|
this._height = height;
|
||||||
|
|
||||||
|
// This is sometimes called during allocation, so we do this later
|
||||||
|
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
|
||||||
|
function () {
|
||||||
|
this._dropRect.set_position(x, y);
|
||||||
|
this._dropRect.set_size(width, height);
|
||||||
|
return false;
|
||||||
|
}));
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
_lookupIndex: function (metaWindow) {
|
_lookupIndex: function (metaWindow) {
|
||||||
for (let i = 0; i < this._windows.length; i++) {
|
for (let i = 0; i < this._windows.length; i++) {
|
||||||
if (this._windows[i].metaWindow == metaWindow) {
|
if (this._windows[i].metaWindow == metaWindow) {
|
||||||
@ -583,17 +619,6 @@ Workspace.prototype = {
|
|||||||
return -1;
|
return -1;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onParentSet: function(actor, old_parent) {
|
|
||||||
let new_parent = this.actor.get_parent();
|
|
||||||
if (new_parent == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (old_parent)
|
|
||||||
this._windowOverlaysGroup.reparent(new_parent);
|
|
||||||
else
|
|
||||||
new_parent.add_actor(this._windowOverlaysGroup);
|
|
||||||
},
|
|
||||||
|
|
||||||
containsMetaWindow: function (metaWindow) {
|
containsMetaWindow: function (metaWindow) {
|
||||||
return this._lookupIndex(metaWindow) >= 0;
|
return this._lookupIndex(metaWindow) >= 0;
|
||||||
},
|
},
|
||||||
@ -672,10 +697,20 @@ Workspace.prototype = {
|
|||||||
let xDelta, yDelta, distanceSquared;
|
let xDelta, yDelta, distanceSquared;
|
||||||
let actorWidth, actorHeight;
|
let actorWidth, actorHeight;
|
||||||
|
|
||||||
actorWidth = actor.width * actor.scale_x;
|
let x = actor.x;
|
||||||
actorHeight = actor.height * actor.scale_y;
|
let y = actor.y;
|
||||||
xDelta = actor.x + actorWidth / 2.0 - xCenter * global.screen_width;
|
let scale = actor.scale_x;
|
||||||
yDelta = actor.y + actorHeight / 2.0 - yCenter * global.screen_height;
|
|
||||||
|
if (actor._delegate.inDrag) {
|
||||||
|
x = actor._delegate.dragOrigX;
|
||||||
|
y = actor._delegate.dragOrigY;
|
||||||
|
scale = actor._delegate.dragOrigScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
actorWidth = actor.width * scale;
|
||||||
|
actorHeight = actor.height * scale;
|
||||||
|
xDelta = x + actorWidth / 2.0 - xCenter * this._width - this._x;
|
||||||
|
yDelta = y + actorHeight / 2.0 - yCenter * this._height - this._y;
|
||||||
distanceSquared = xDelta * xDelta + yDelta * yDelta;
|
distanceSquared = xDelta * xDelta + yDelta * yDelta;
|
||||||
|
|
||||||
return distanceSquared;
|
return distanceSquared;
|
||||||
@ -700,6 +735,12 @@ Workspace.prototype = {
|
|||||||
let delta = this._computeWindowMotion(cloneActor, slot);
|
let delta = this._computeWindowMotion(cloneActor, slot);
|
||||||
|
|
||||||
motion += delta;
|
motion += delta;
|
||||||
|
|
||||||
|
// Bail out early if we're already larger than the
|
||||||
|
// previous best
|
||||||
|
if (minimumMotionPermutation != null &&
|
||||||
|
motion > minimumMotion)
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (minimumMotionPermutation == null || motion < minimumMotion) {
|
if (minimumMotionPermutation == null || motion < minimumMotion) {
|
||||||
@ -760,38 +801,35 @@ Workspace.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _getSlotRelativeGeometry:
|
* _getSlotGeometry:
|
||||||
* @slot: A layout slot
|
* @slot: A layout slot
|
||||||
*
|
*
|
||||||
* Returns: the workspace-relative [x, y, width, height]
|
* Returns: the screen-relative [x, y, width, height]
|
||||||
* of a given window layout slot.
|
* of a given window layout slot.
|
||||||
*/
|
*/
|
||||||
_getSlotRelativeGeometry: function(slot) {
|
_getSlotGeometry: function(slot) {
|
||||||
let [xCenter, yCenter, fraction] = slot;
|
let [xCenter, yCenter, fraction] = slot;
|
||||||
|
|
||||||
let width = global.screen_width * fraction;
|
let width = this._width * fraction;
|
||||||
let height = global.screen_height * fraction;
|
let height = this._height * fraction;
|
||||||
|
|
||||||
let x = xCenter * global.screen_width - width / 2;
|
let x = this._x + xCenter * this._width - width / 2 ;
|
||||||
let y = yCenter * global.screen_height - height / 2;
|
let y = this._y + yCenter * this._height - height / 2;
|
||||||
|
|
||||||
return [x, y, width, height];
|
return [x, y, width, height];
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _computeWindowRelativeLayout:
|
* _computeWindowLayout:
|
||||||
* @metaWindow: A #MetaWindow
|
* @metaWindow: A #MetaWindow
|
||||||
* @slot: A layout slot
|
* @slot: A layout slot
|
||||||
*
|
*
|
||||||
* Given a window and slot to fit it in, compute its
|
* Given a window and slot to fit it in, compute its
|
||||||
* workspace-relative [x, y, scale] where scale applies
|
* screen-relative [x, y, scale] where scale applies
|
||||||
* to both X and Y directions.
|
* to both X and Y directions.
|
||||||
*/
|
*/
|
||||||
_computeWindowRelativeLayout: function(metaWindow, slot) {
|
_computeWindowLayout: function(metaWindow, slot) {
|
||||||
let [xCenter, yCenter, fraction] = slot;
|
let [x, y, width, height] = this._getSlotGeometry(slot);
|
||||||
let [x, y, width, height] = this._getSlotRelativeGeometry(slot);
|
|
||||||
|
|
||||||
xCenter = xCenter * global.screen_width;
|
|
||||||
|
|
||||||
let rect = metaWindow.get_outer_rect();
|
let rect = metaWindow.get_outer_rect();
|
||||||
let buttonOuterHeight, captionHeight;
|
let buttonOuterHeight, captionHeight;
|
||||||
@ -799,23 +837,19 @@ Workspace.prototype = {
|
|||||||
|
|
||||||
if (this._windowOverlays[0]) {
|
if (this._windowOverlays[0]) {
|
||||||
[buttonOuterHeight, captionHeight] = this._windowOverlays[0].chromeHeights();
|
[buttonOuterHeight, captionHeight] = this._windowOverlays[0].chromeHeights();
|
||||||
buttonOuterWidth = this._windowOverlays[0].chromeWidth() / this.scale;
|
buttonOuterWidth = this._windowOverlays[0].chromeWidth();
|
||||||
} else
|
} else
|
||||||
[buttonOuterHeight, captionHeight] = [0, 0];
|
[buttonOuterHeight, captionHeight] = [0, 0];
|
||||||
buttonOuterHeight /= this.scale;
|
|
||||||
captionHeight /= this.scale;
|
|
||||||
|
|
||||||
let desiredWidth = global.screen_width * fraction;
|
let scale = Math.min((width - buttonOuterWidth) / rect.width,
|
||||||
let desiredHeight = global.screen_height * fraction;
|
(height - buttonOuterHeight - captionHeight) / rect.height,
|
||||||
let scale = Math.min((desiredWidth - buttonOuterWidth) / rect.width,
|
1.0);
|
||||||
(desiredHeight - buttonOuterHeight - captionHeight) / rect.height,
|
|
||||||
1.0 / this.scale);
|
|
||||||
|
|
||||||
x = Math.floor(xCenter - 0.5 * scale * rect.width);
|
x = Math.floor(x + (width - scale * rect.width) / 2);
|
||||||
|
|
||||||
// We want to center the window in case we have just one
|
// We want to center the window in case we have just one
|
||||||
if (metaWindow.get_workspace().n_windows == 1)
|
if (metaWindow.get_workspace().n_windows == 1)
|
||||||
y = Math.floor(yCenter * global.screen_height - 0.5 * scale * rect.height);
|
y = Math.floor(y + (height - scale * rect.height) / 2);
|
||||||
else
|
else
|
||||||
y = Math.floor(y + height - rect.height * scale - captionHeight);
|
y = Math.floor(y + height - rect.height * scale - captionHeight);
|
||||||
|
|
||||||
@ -841,7 +875,7 @@ Workspace.prototype = {
|
|||||||
/**
|
/**
|
||||||
* positionWindows:
|
* positionWindows:
|
||||||
* @flags:
|
* @flags:
|
||||||
* ZOOM - workspace is moving at the same time and we need to take that into account.
|
* INITIAL - this is the initial positioning of the windows.
|
||||||
* ANIMATE - Indicates that we need animate changing position.
|
* ANIMATE - Indicates that we need animate changing position.
|
||||||
*/
|
*/
|
||||||
positionWindows : function(flags) {
|
positionWindows : function(flags) {
|
||||||
@ -854,7 +888,7 @@ Workspace.prototype = {
|
|||||||
if (this._reservedSlot)
|
if (this._reservedSlot)
|
||||||
clones.push(this._reservedSlot);
|
clones.push(this._reservedSlot);
|
||||||
|
|
||||||
let workspaceZooming = flags & WindowPositionFlags.ZOOM;
|
let initialPositioning = flags & WindowPositionFlags.INITIAL;
|
||||||
let animate = flags & WindowPositionFlags.ANIMATE;
|
let animate = flags & WindowPositionFlags.ANIMATE;
|
||||||
|
|
||||||
// Start the animations
|
// Start the animations
|
||||||
@ -876,7 +910,7 @@ Workspace.prototype = {
|
|||||||
if (clone.inDrag)
|
if (clone.inDrag)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
let [x, y, scale] = this._computeWindowRelativeLayout(metaWindow, slot);
|
let [x, y, scale] = this._computeWindowLayout(metaWindow, slot);
|
||||||
|
|
||||||
if (overlay)
|
if (overlay)
|
||||||
overlay.hide();
|
overlay.hide();
|
||||||
@ -885,7 +919,7 @@ Workspace.prototype = {
|
|||||||
/* Hidden windows should fade in and grow
|
/* Hidden windows should fade in and grow
|
||||||
* therefore we need to resize them now so they
|
* therefore we need to resize them now so they
|
||||||
* can be scaled up later */
|
* can be scaled up later */
|
||||||
if (workspaceZooming) {
|
if (initialPositioning) {
|
||||||
clone.actor.opacity = 0;
|
clone.actor.opacity = 0;
|
||||||
clone.actor.scale_x = 0;
|
clone.actor.scale_x = 0;
|
||||||
clone.actor.scale_y = 0;
|
clone.actor.scale_y = 0;
|
||||||
@ -906,7 +940,6 @@ Workspace.prototype = {
|
|||||||
y: y,
|
y: y,
|
||||||
scale_x: scale,
|
scale_x: scale,
|
||||||
scale_y: scale,
|
scale_y: scale,
|
||||||
workspace_relative: workspaceZooming ? this : null,
|
|
||||||
time: Overview.ANIMATION_TIME,
|
time: Overview.ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
onComplete: Lang.bind(this, function() {
|
onComplete: Lang.bind(this, function() {
|
||||||
@ -929,7 +962,7 @@ Workspace.prototype = {
|
|||||||
let clone = clones[i];
|
let clone = clones[i];
|
||||||
let metaWindow = clone.metaWindow;
|
let metaWindow = clone.metaWindow;
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
clone.setStackAbove(null);
|
clone.setStackAbove(this._dropRect);
|
||||||
} else {
|
} else {
|
||||||
let previousClone = clones[i - 1];
|
let previousClone = clones[i - 1];
|
||||||
clone.setStackAbove(previousClone.actor);
|
clone.setStackAbove(previousClone.actor);
|
||||||
@ -949,10 +982,8 @@ Workspace.prototype = {
|
|||||||
// be after the workspace animation finishes.
|
// be after the workspace animation finishes.
|
||||||
let [cloneX, cloneY] = clone.actor.get_position();
|
let [cloneX, cloneY] = clone.actor.get_position();
|
||||||
let [cloneWidth, cloneHeight] = clone.actor.get_size();
|
let [cloneWidth, cloneHeight] = clone.actor.get_size();
|
||||||
cloneX = this.x + this.scale * cloneX;
|
cloneWidth = clone.actor.scale_x * cloneWidth;
|
||||||
cloneY = this.y + this.scale * cloneY;
|
cloneHeight = clone.actor.scale_y * cloneHeight;
|
||||||
cloneWidth = this.scale * clone.actor.scale_x * cloneWidth;
|
|
||||||
cloneHeight = this.scale * clone.actor.scale_y * cloneHeight;
|
|
||||||
|
|
||||||
if (overlay) {
|
if (overlay) {
|
||||||
overlay.updatePositions(cloneX, cloneY, cloneWidth, cloneHeight);
|
overlay.updatePositions(cloneX, cloneY, cloneWidth, cloneHeight);
|
||||||
@ -977,12 +1008,10 @@ Workspace.prototype = {
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
let [x, y, mask] = global.get_pointer();
|
let [x, y, mask] = global.get_pointer();
|
||||||
let wsWidth = this.actor.width * this.scale;
|
|
||||||
let wsHeight = this.actor.height * this.scale;
|
|
||||||
|
|
||||||
let pointerHasMoved = (this._cursorX != x && this._cursorY != y);
|
let pointerHasMoved = (this._cursorX != x && this._cursorY != y);
|
||||||
let inWorkspace = (this.x < x && x < this.x + wsWidth &&
|
let inWorkspace = (this._x < x && x < this._x + this._width &&
|
||||||
this.y < y && y < this.y + wsHeight);
|
this._y < y && y < this._y + this._height);
|
||||||
|
|
||||||
if (pointerHasMoved && inWorkspace) {
|
if (pointerHasMoved && inWorkspace) {
|
||||||
// store current cursor position
|
// store current cursor position
|
||||||
@ -1083,13 +1112,20 @@ Workspace.prototype = {
|
|||||||
let clone = this._addWindowClone(win);
|
let clone = this._addWindowClone(win);
|
||||||
|
|
||||||
if (win._overviewHint) {
|
if (win._overviewHint) {
|
||||||
let x = (win._overviewHint.x - this.actor.x) / this.scale;
|
let x = win._overviewHint.x - this.actor.x;
|
||||||
let y = (win._overviewHint.y - this.actor.y) / this.scale;
|
let y = win._overviewHint.y - this.actor.y;
|
||||||
let scale = win._overviewHint.scale / this.scale;
|
let scale = win._overviewHint.scale;
|
||||||
delete win._overviewHint;
|
delete win._overviewHint;
|
||||||
|
|
||||||
clone.actor.set_position (x, y);
|
clone.actor.set_position (x, y);
|
||||||
clone.actor.set_scale (scale, scale);
|
clone.actor.set_scale (scale, scale);
|
||||||
|
} else {
|
||||||
|
// Position new windows at the top corner of the workspace rather
|
||||||
|
// than where they were placed for real to avoid the window
|
||||||
|
// being clipped to the workspaceView. Its not really more
|
||||||
|
// natural for the window to suddenly appear in the overview
|
||||||
|
// on some seemingly random location anyway.
|
||||||
|
clone.actor.set_position (this._x, this._y);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.positionWindows(WindowPositionFlags.ANIMATE);
|
this.positionWindows(WindowPositionFlags.ANIMATE);
|
||||||
@ -1109,14 +1145,11 @@ Workspace.prototype = {
|
|||||||
|
|
||||||
// Animate the full-screen to Overview transition.
|
// Animate the full-screen to Overview transition.
|
||||||
zoomToOverview : function() {
|
zoomToOverview : function() {
|
||||||
this.actor.set_position(this.x, this.y);
|
|
||||||
this.actor.set_scale(this.scale, this.scale);
|
|
||||||
|
|
||||||
// Position and scale the windows.
|
// Position and scale the windows.
|
||||||
if (Main.overview.animationInProgress)
|
if (Main.overview.animationInProgress)
|
||||||
this.positionWindows(WindowPositionFlags.ANIMATE | WindowPositionFlags.ZOOM);
|
this.positionWindows(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL);
|
||||||
else
|
else
|
||||||
this.positionWindows(WindowPositionFlags.ZOOM);
|
this.positionWindows(WindowPositionFlags.INITIAL);
|
||||||
},
|
},
|
||||||
|
|
||||||
// Animates the return from Overview mode
|
// Animates the return from Overview mode
|
||||||
@ -1134,7 +1167,7 @@ Workspace.prototype = {
|
|||||||
this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this,
|
this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this,
|
||||||
this._doneLeavingOverview));
|
this._doneLeavingOverview));
|
||||||
|
|
||||||
if (this._metaWorkspace == currentWorkspace)
|
if (this.metaWorkspace != currentWorkspace)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Position and scale the windows.
|
// Position and scale the windows.
|
||||||
@ -1149,7 +1182,6 @@ Workspace.prototype = {
|
|||||||
y: clone.origY,
|
y: clone.origY,
|
||||||
scale_x: 1.0,
|
scale_x: 1.0,
|
||||||
scale_y: 1.0,
|
scale_y: 1.0,
|
||||||
workspace_relative: this,
|
|
||||||
time: Overview.ANIMATION_TIME,
|
time: Overview.ANIMATION_TIME,
|
||||||
opacity: 255,
|
opacity: 255,
|
||||||
transition: 'easeOutQuad'
|
transition: 'easeOutQuad'
|
||||||
@ -1160,7 +1192,6 @@ Workspace.prototype = {
|
|||||||
{ scale_x: 0,
|
{ scale_x: 0,
|
||||||
scale_y: 0,
|
scale_y: 0,
|
||||||
opacity: 0,
|
opacity: 0,
|
||||||
workspace_relative: this,
|
|
||||||
time: Overview.ANIMATION_TIME,
|
time: Overview.ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad'
|
transition: 'easeOutQuad'
|
||||||
});
|
});
|
||||||
@ -1223,6 +1254,10 @@ Workspace.prototype = {
|
|||||||
Main.overview.beginWindowDrag();
|
Main.overview.beginWindowDrag();
|
||||||
overlay.hide();
|
overlay.hide();
|
||||||
}));
|
}));
|
||||||
|
clone.connect('drag-cancelled',
|
||||||
|
Lang.bind(this, function(clone) {
|
||||||
|
Main.overview.cancelledWindowDrag();
|
||||||
|
}));
|
||||||
clone.connect('drag-end',
|
clone.connect('drag-end',
|
||||||
Lang.bind(this, function(clone) {
|
Lang.bind(this, function(clone) {
|
||||||
Main.overview.endWindowDrag();
|
Main.overview.endWindowDrag();
|
||||||
@ -1330,56 +1365,3 @@ Workspace.prototype = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Signals.addSignalMethods(Workspace.prototype);
|
Signals.addSignalMethods(Workspace.prototype);
|
||||||
|
|
||||||
// Create a SpecialPropertyModifier to let us move windows in a
|
|
||||||
// straight line on the screen even though their containing workspace
|
|
||||||
// is also moving.
|
|
||||||
Tweener.registerSpecialPropertyModifier('workspace_relative', _workspaceRelativeModifier, _workspaceRelativeGet);
|
|
||||||
|
|
||||||
function _workspaceRelativeModifier(workspace) {
|
|
||||||
let [startX, startY] = Main.overview.getPosition();
|
|
||||||
let overviewPosX, overviewPosY, overviewScale;
|
|
||||||
|
|
||||||
if (!workspace)
|
|
||||||
return [];
|
|
||||||
|
|
||||||
if (workspace.leavingOverview) {
|
|
||||||
let [zoomedInX, zoomedInY] = Main.overview.getZoomedInPosition();
|
|
||||||
overviewPosX = { begin: startX, end: zoomedInX };
|
|
||||||
overviewPosY = { begin: startY, end: zoomedInY };
|
|
||||||
overviewScale = { begin: Main.overview.getScale(),
|
|
||||||
end: Main.overview.getZoomedInScale() };
|
|
||||||
} else {
|
|
||||||
overviewPosX = { begin: startX, end: 0 };
|
|
||||||
overviewPosY = { begin: startY, end: 0 };
|
|
||||||
overviewScale = { begin: Main.overview.getScale(), end: 1 };
|
|
||||||
}
|
|
||||||
|
|
||||||
return [ { name: 'x',
|
|
||||||
parameters: { workspacePos: workspace.x,
|
|
||||||
overviewPos: overviewPosX,
|
|
||||||
overviewScale: overviewScale } },
|
|
||||||
{ name: 'y',
|
|
||||||
parameters: { workspacePos: workspace.y,
|
|
||||||
overviewPos: overviewPosY,
|
|
||||||
overviewScale: overviewScale } }
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
function _workspaceRelativeGet(begin, end, time, params) {
|
|
||||||
let curOverviewPos = (1 - time) * params.overviewPos.begin +
|
|
||||||
time * params.overviewPos.end;
|
|
||||||
let curOverviewScale = (1 - time) * params.overviewScale.begin +
|
|
||||||
time * params.overviewScale.end;
|
|
||||||
|
|
||||||
// Calculate the screen position of the window.
|
|
||||||
let screen = (1 - time) *
|
|
||||||
((begin + params.workspacePos) * params.overviewScale.begin +
|
|
||||||
params.overviewPos.begin) +
|
|
||||||
time *
|
|
||||||
((end + params.workspacePos) * params.overviewScale.end +
|
|
||||||
params.overviewPos.end);
|
|
||||||
|
|
||||||
// Return the workspace coordinates.
|
|
||||||
return (screen - curOverviewPos) / curOverviewScale - params.workspacePos;
|
|
||||||
}
|
|
||||||
|
@ -402,10 +402,6 @@ ThumbnailsBox.prototype = {
|
|||||||
// for the border and padding of the background actor.
|
// for the border and padding of the background actor.
|
||||||
this._background = new St.Bin({ style_class: 'workspace-thumbnails-background' });
|
this._background = new St.Bin({ style_class: 'workspace-thumbnails-background' });
|
||||||
|
|
||||||
// This will eventually be automatic, see https://bugzilla.gnome.org/show_bug.cgi?id=584662
|
|
||||||
if (St.Widget.get_default_direction () == St.TextDirection.RTL)
|
|
||||||
this._background.add_style_pseudo_class('rtl');
|
|
||||||
|
|
||||||
this.actor.add_actor(this._background);
|
this.actor.add_actor(this._background);
|
||||||
|
|
||||||
let indicator = new St.Bin({ style_class: 'workspace-thumbnail-indicator' });
|
let indicator = new St.Bin({ style_class: 'workspace-thumbnail-indicator' });
|
||||||
|
@ -25,14 +25,13 @@ const MAX_WORKSPACES = 16;
|
|||||||
const CONTROLS_POP_IN_TIME = 0.1;
|
const CONTROLS_POP_IN_TIME = 0.1;
|
||||||
|
|
||||||
|
|
||||||
function WorkspacesView(width, height, x, y, workspaces) {
|
function WorkspacesView(workspaces) {
|
||||||
this._init(width, height, x, y, workspaces);
|
this._init(workspaces);
|
||||||
}
|
}
|
||||||
|
|
||||||
WorkspacesView.prototype = {
|
WorkspacesView.prototype = {
|
||||||
_init: function(width, height, x, y, workspaces) {
|
_init: function(workspaces) {
|
||||||
this.actor = new St.Group({ style_class: 'workspaces-view' });
|
this.actor = new St.Group({ style_class: 'workspaces-view' });
|
||||||
this.actor.set_clip(x, y, width, height);
|
|
||||||
|
|
||||||
// The actor itself isn't a drop target, so we don't want to pick on its area
|
// The actor itself isn't a drop target, so we don't want to pick on its area
|
||||||
this.actor.set_size(0, 0);
|
this.actor.set_size(0, 0);
|
||||||
@ -43,19 +42,16 @@ WorkspacesView.prototype = {
|
|||||||
function() {
|
function() {
|
||||||
let node = this.actor.get_theme_node();
|
let node = this.actor.get_theme_node();
|
||||||
this._spacing = node.get_length('spacing');
|
this._spacing = node.get_length('spacing');
|
||||||
this._computeWorkspacePositions();
|
this._updateWorkspaceActors(false);
|
||||||
}));
|
}));
|
||||||
this.actor.connect('notify::mapped',
|
this.actor.connect('notify::mapped',
|
||||||
Lang.bind(this, this._onMappedChanged));
|
Lang.bind(this, this._onMappedChanged));
|
||||||
|
|
||||||
this._width = width;
|
this._width = 0;
|
||||||
this._height = height;
|
this._height = 0;
|
||||||
this._x = x;
|
this._x = 0;
|
||||||
this._y = y;
|
this._y = 0;
|
||||||
this._zoomScale = 1.0;
|
|
||||||
this._spacing = 0;
|
this._spacing = 0;
|
||||||
this._activeWorkspaceX = 0; // x offset of active ws while dragging
|
|
||||||
this._activeWorkspaceY = 0; // y offset of active ws while dragging
|
|
||||||
this._lostWorkspaces = [];
|
this._lostWorkspaces = [];
|
||||||
this._animating = false; // tweening
|
this._animating = false; // tweening
|
||||||
this._scrolling = false; // swipe-scrolling
|
this._scrolling = false; // swipe-scrolling
|
||||||
@ -81,6 +77,11 @@ WorkspacesView.prototype = {
|
|||||||
for (let w = 0; w < this._workspaces.length; w++)
|
for (let w = 0; w < this._workspaces.length; w++)
|
||||||
this._workspaces[w].zoomToOverview();
|
this._workspaces[w].zoomToOverview();
|
||||||
}));
|
}));
|
||||||
|
this._overviewShownId =
|
||||||
|
Main.overview.connect('shown',
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this.actor.set_clip(this._x, this._y, this._width, this._height);
|
||||||
|
}));
|
||||||
|
|
||||||
this._scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
|
this._scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
|
||||||
lower: 0,
|
lower: 0,
|
||||||
@ -109,30 +110,17 @@ WorkspacesView.prototype = {
|
|||||||
this._swipeScrollEndId = 0;
|
this._swipeScrollEndId = 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
setZoomScale: function(zoomScale) {
|
setGeometry: function(x, y, width, height) {
|
||||||
if (zoomScale == this._zoomScale)
|
if (this._x == x && this._y == y &&
|
||||||
|
this._width == width && this._height == height)
|
||||||
return;
|
return;
|
||||||
|
this._width = width;
|
||||||
|
this._height = height;
|
||||||
|
this._x = x;
|
||||||
|
this._y = y;
|
||||||
|
|
||||||
this._zoomScale = zoomScale;
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
if (this._zoomOut) {
|
this._workspaces[i].setGeometry(x, y, width, height);
|
||||||
// If we are already zoomed out, then we have to reposition.
|
|
||||||
// Note that when shown initially zoomOut is false, so we
|
|
||||||
// won't trigger this.
|
|
||||||
|
|
||||||
// setZoomScale can be invoked when the workspaces view is
|
|
||||||
// reallocated. Since we just want to animate things to the
|
|
||||||
// new position it seems OK to call updateWorkspaceActors
|
|
||||||
// immediately - adding a tween doesn't immediately cause
|
|
||||||
// a new allocation. But hide/show of the window overlays we
|
|
||||||
// do around animation does, so we need to do it later.
|
|
||||||
// This can be removed when we fix things to not hide/show
|
|
||||||
// the window overlay.
|
|
||||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this._computeWorkspacePositions();
|
|
||||||
this._updateWorkspaceActors(true);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_lookupWorkspaceForMetaWindow: function (metaWindow) {
|
_lookupWorkspaceForMetaWindow: function (metaWindow) {
|
||||||
@ -154,6 +142,8 @@ WorkspacesView.prototype = {
|
|||||||
|
|
||||||
activeWorkspace.actor.raise_top();
|
activeWorkspace.actor.raise_top();
|
||||||
|
|
||||||
|
this.actor.remove_clip(this._x, this._y, this._width, this._height);
|
||||||
|
|
||||||
for (let w = 0; w < this._workspaces.length; w++)
|
for (let w = 0; w < this._workspaces.length; w++)
|
||||||
this._workspaces[w].zoomFromOverview();
|
this._workspaces[w].zoomFromOverview();
|
||||||
},
|
},
|
||||||
@ -162,93 +152,27 @@ WorkspacesView.prototype = {
|
|||||||
this.actor.destroy();
|
this.actor.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
getScale: function() {
|
|
||||||
return this._workspaces[0].scale;
|
|
||||||
},
|
|
||||||
|
|
||||||
syncStacking: function(stackIndices) {
|
syncStacking: function(stackIndices) {
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
this._workspaces[i].syncStacking(stackIndices);
|
this._workspaces[i].syncStacking(stackIndices);
|
||||||
},
|
},
|
||||||
|
|
||||||
// Get the grid position of the active workspace.
|
updateWindowPositions: function() {
|
||||||
getActiveWorkspacePosition: function() {
|
for (let w = 0; w < this._workspaces.length; w++)
|
||||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
this._workspaces[w].positionWindows(Workspace.WindowPositionFlags.ANIMATE);
|
||||||
let activeWorkspace = this._workspaces[activeWorkspaceIndex];
|
|
||||||
|
|
||||||
return [activeWorkspace.x, activeWorkspace.y];
|
|
||||||
},
|
|
||||||
|
|
||||||
zoomOut: function() {
|
|
||||||
if (this._zoomOut)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._zoomOut = true;
|
|
||||||
this._computeWorkspacePositions();
|
|
||||||
this._updateWorkspaceActors(true);
|
|
||||||
},
|
|
||||||
|
|
||||||
zoomIn: function() {
|
|
||||||
if (!this._zoomOut)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._zoomOut = false;
|
|
||||||
this._computeWorkspacePositions();
|
|
||||||
this._updateWorkspaceActors(true);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Compute the position, scale and opacity of the workspaces, but don't
|
|
||||||
// actually change the actors to match
|
|
||||||
_computeWorkspacePositions: function() {
|
|
||||||
let active = global.screen.get_active_workspace_index();
|
|
||||||
let zoomScale = this._zoomOut ? this._zoomScale : 1;
|
|
||||||
let scale = zoomScale * this._width / global.screen_width;
|
|
||||||
|
|
||||||
let _width = this._workspaces[0].actor.width * scale;
|
|
||||||
let _height = this._workspaces[0].actor.height * scale;
|
|
||||||
|
|
||||||
this._activeWorkspaceX = (this._width - _width) / 2;
|
|
||||||
this._activeWorkspaceY = (this._height - _height) / 2;
|
|
||||||
|
|
||||||
for (let w = 0; w < this._workspaces.length; w++) {
|
|
||||||
let workspace = this._workspaces[w];
|
|
||||||
|
|
||||||
workspace.opacity = (this._inDrag && w != active) ? 200 : 255;
|
|
||||||
|
|
||||||
workspace.scale = scale;
|
|
||||||
workspace.x = this._x + this._activeWorkspaceX;
|
|
||||||
|
|
||||||
// We adjust the center because the zoomScale is to leave space for
|
|
||||||
// the expanded workspace control so we want to zoom to either the
|
|
||||||
// left part of the area or the right part of the area
|
|
||||||
let offset = 0.5 * (1 - this._zoomScale) * this._width;
|
|
||||||
let rtl = (St.Widget.get_default_direction () == St.TextDirection.RTL);
|
|
||||||
if (this._zoomOut)
|
|
||||||
workspace.x += rtl ? offset : - offset;
|
|
||||||
|
|
||||||
// We divide by zoomScale so that adjacent workspaces are always offscreen
|
|
||||||
// except when we are switching between workspaces
|
|
||||||
workspace.y = this._y + this._activeWorkspaceY
|
|
||||||
+ (w - active) * (_height + this._spacing) / zoomScale;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_scrollToActive: function(showAnimation) {
|
_scrollToActive: function(showAnimation) {
|
||||||
let active = global.screen.get_active_workspace_index();
|
let active = global.screen.get_active_workspace_index();
|
||||||
|
|
||||||
this._computeWorkspacePositions();
|
|
||||||
this._updateWorkspaceActors(showAnimation);
|
this._updateWorkspaceActors(showAnimation);
|
||||||
this._updateScrollAdjustment(active, showAnimation);
|
this._updateScrollAdjustment(active, showAnimation);
|
||||||
},
|
},
|
||||||
|
|
||||||
// Update workspace actors parameters to the values calculated in
|
// Update workspace actors parameters
|
||||||
// _computeWorkspacePositions()
|
|
||||||
// @showAnimation: iff %true, transition between states
|
// @showAnimation: iff %true, transition between states
|
||||||
_updateWorkspaceActors: function(showAnimation) {
|
_updateWorkspaceActors: function(showAnimation) {
|
||||||
let active = global.screen.get_active_workspace_index();
|
let active = global.screen.get_active_workspace_index();
|
||||||
let targetWorkspaceNewY = this._y + this._activeWorkspaceY;
|
|
||||||
let targetWorkspaceCurrentY = this._workspaces[active].y;
|
|
||||||
let dy = targetWorkspaceNewY - targetWorkspaceCurrentY;
|
|
||||||
|
|
||||||
this._animating = showAnimation;
|
this._animating = showAnimation;
|
||||||
|
|
||||||
@ -257,14 +181,12 @@ WorkspacesView.prototype = {
|
|||||||
|
|
||||||
Tweener.removeTweens(workspace.actor);
|
Tweener.removeTweens(workspace.actor);
|
||||||
|
|
||||||
workspace.y += dy;
|
let opacity = (this._inDrag && w != active) ? 200 : 255;
|
||||||
|
let y = (w - active) * (this._height + this._spacing);
|
||||||
|
|
||||||
if (showAnimation) {
|
if (showAnimation) {
|
||||||
let params = { x: workspace.x,
|
let params = { y: y,
|
||||||
y: workspace.y,
|
opacity: opacity,
|
||||||
scale_x: workspace.scale,
|
|
||||||
scale_y: workspace.scale,
|
|
||||||
opacity: workspace.opacity,
|
|
||||||
time: WORKSPACE_SWITCH_TIME,
|
time: WORKSPACE_SWITCH_TIME,
|
||||||
transition: 'easeOutQuad'
|
transition: 'easeOutQuad'
|
||||||
};
|
};
|
||||||
@ -281,9 +203,8 @@ WorkspacesView.prototype = {
|
|||||||
}
|
}
|
||||||
Tweener.addTween(workspace.actor, params);
|
Tweener.addTween(workspace.actor, params);
|
||||||
} else {
|
} else {
|
||||||
workspace.actor.set_scale(workspace.scale, workspace.scale);
|
workspace.actor.set_position(0, y);
|
||||||
workspace.actor.set_position(workspace.x, workspace.y);
|
workspace.actor.opacity = opacity;
|
||||||
workspace.actor.opacity = workspace.opacity;
|
|
||||||
if (w == 0)
|
if (w == 0)
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
}
|
}
|
||||||
@ -294,7 +215,6 @@ WorkspacesView.prototype = {
|
|||||||
|
|
||||||
Tweener.removeTweens(workspace.actor);
|
Tweener.removeTweens(workspace.actor);
|
||||||
|
|
||||||
workspace.y += dy;
|
|
||||||
workspace.actor.show();
|
workspace.actor.show();
|
||||||
workspace.hideWindowsOverlays();
|
workspace.hideWindowsOverlays();
|
||||||
|
|
||||||
@ -338,7 +258,6 @@ WorkspacesView.prototype = {
|
|||||||
this._lostWorkspaces[l].destroy();
|
this._lostWorkspaces[l].destroy();
|
||||||
this._lostWorkspaces = [];
|
this._lostWorkspaces = [];
|
||||||
|
|
||||||
this._computeWorkspacePositions();
|
|
||||||
this._updateWorkspaceActors(false);
|
this._updateWorkspaceActors(false);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -380,7 +299,6 @@ WorkspacesView.prototype = {
|
|||||||
for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++)
|
for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++)
|
||||||
this.actor.add_actor(this._workspaces[w].actor);
|
this.actor.add_actor(this._workspaces[w].actor);
|
||||||
|
|
||||||
this._computeWorkspacePositions();
|
|
||||||
this._updateWorkspaceActors(false);
|
this._updateWorkspaceActors(false);
|
||||||
} else {
|
} else {
|
||||||
this._lostWorkspaces = lostWorkspaces;
|
this._lostWorkspaces = lostWorkspaces;
|
||||||
@ -399,6 +317,7 @@ WorkspacesView.prototype = {
|
|||||||
_onDestroy: function() {
|
_onDestroy: function() {
|
||||||
this._scrollAdjustment.run_dispose();
|
this._scrollAdjustment.run_dispose();
|
||||||
Main.overview.disconnect(this._overviewShowingId);
|
Main.overview.disconnect(this._overviewShowingId);
|
||||||
|
Main.overview.disconnect(this._overviewShownId);
|
||||||
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
|
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
|
||||||
|
|
||||||
if (this._timeoutId) {
|
if (this._timeoutId) {
|
||||||
@ -557,12 +476,6 @@ WorkspacesView.prototype = {
|
|||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == Overview.SwipeScrollResult.SWIPE)
|
|
||||||
// The active workspace has changed; while swipe-scrolling
|
|
||||||
// has already taken care of the positioning, the cached
|
|
||||||
// positions need to be updated
|
|
||||||
this._computeWorkspacePositions();
|
|
||||||
|
|
||||||
// Make sure title captions etc are shown as necessary
|
// Make sure title captions etc are shown as necessary
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
},
|
},
|
||||||
@ -590,7 +503,7 @@ WorkspacesView.prototype = {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
let currentY = firstWorkspaceY;
|
let currentY = firstWorkspaceY;
|
||||||
let newY = this._y - adj.value / (adj.upper - 1) * workspacesHeight;
|
let newY = - adj.value / (adj.upper - 1) * workspacesHeight;
|
||||||
|
|
||||||
let dy = newY - currentY;
|
let dy = newY - currentY;
|
||||||
|
|
||||||
@ -640,6 +553,7 @@ WorkspacesDisplay.prototype = {
|
|||||||
this.workspacesView = null;
|
this.workspacesView = null;
|
||||||
|
|
||||||
this._inDrag = false;
|
this._inDrag = false;
|
||||||
|
this._cancelledDrag = false;
|
||||||
this._zoomOut = false;
|
this._zoomOut = false;
|
||||||
this._zoomFraction = 0;
|
this._zoomFraction = 0;
|
||||||
|
|
||||||
@ -649,6 +563,7 @@ WorkspacesDisplay.prototype = {
|
|||||||
this._itemDragBeginId = 0;
|
this._itemDragBeginId = 0;
|
||||||
this._itemDragEndId = 0;
|
this._itemDragEndId = 0;
|
||||||
this._windowDragBeginId = 0;
|
this._windowDragBeginId = 0;
|
||||||
|
this._windowDragCancelledId = 0;
|
||||||
this._windowDragEndId = 0;
|
this._windowDragEndId = 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -662,43 +577,10 @@ WorkspacesDisplay.prototype = {
|
|||||||
this._workspaces[i] = new Workspace.Workspace(metaWorkspace);
|
this._workspaces[i] = new Workspace.Workspace(metaWorkspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
let rtl = (St.Widget.get_default_direction () == St.TextDirection.RTL);
|
|
||||||
|
|
||||||
let totalAllocation = this.actor.allocation;
|
|
||||||
let totalWidth = totalAllocation.x2 - totalAllocation.x1;
|
|
||||||
let totalHeight = totalAllocation.y2 - totalAllocation.y1;
|
|
||||||
|
|
||||||
let controlsVisible = this._controls.get_theme_node().get_length('visible-width');
|
|
||||||
|
|
||||||
totalWidth -= controlsVisible;
|
|
||||||
|
|
||||||
// Workspaces expect to have the same ratio as the screen, so take
|
|
||||||
// this into account when fitting the workspace into the available space
|
|
||||||
let width, height;
|
|
||||||
let totalRatio = totalWidth / totalHeight;
|
|
||||||
let wsRatio = global.screen_width / global.screen_height;
|
|
||||||
if (wsRatio > totalRatio) {
|
|
||||||
width = totalWidth;
|
|
||||||
height = Math.floor(totalWidth / wsRatio);
|
|
||||||
} else {
|
|
||||||
width = Math.floor(totalHeight * wsRatio);
|
|
||||||
height = totalHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Position workspaces in the available space
|
|
||||||
let [x, y] = this.actor.get_transformed_position();
|
|
||||||
x = Math.floor(x + Math.abs(totalWidth - width) / 2);
|
|
||||||
y = Math.floor(y + Math.abs(totalHeight - height) / 2);
|
|
||||||
|
|
||||||
if (rtl)
|
|
||||||
x += controlsVisible;
|
|
||||||
|
|
||||||
let newView = new WorkspacesView(width, height, x, y, this._workspaces);
|
|
||||||
this._updateZoomScale();
|
|
||||||
|
|
||||||
if (this.workspacesView)
|
if (this.workspacesView)
|
||||||
this.workspacesView.destroy();
|
this.workspacesView.destroy();
|
||||||
this.workspacesView = newView;
|
this.workspacesView = new WorkspacesView(this._workspaces);
|
||||||
|
this._updateWorkspacesGeometry();
|
||||||
|
|
||||||
this._nWorkspacesNotifyId =
|
this._nWorkspacesNotifyId =
|
||||||
global.screen.connect('notify::n-workspaces',
|
global.screen.connect('notify::n-workspaces',
|
||||||
@ -717,6 +599,9 @@ WorkspacesDisplay.prototype = {
|
|||||||
if (this._windowDragBeginId == 0)
|
if (this._windowDragBeginId == 0)
|
||||||
this._windowDragBeginId = Main.overview.connect('window-drag-begin',
|
this._windowDragBeginId = Main.overview.connect('window-drag-begin',
|
||||||
Lang.bind(this, this._dragBegin));
|
Lang.bind(this, this._dragBegin));
|
||||||
|
if (this._windowDragCancelledId == 0)
|
||||||
|
this._windowDragCancelledId = Main.overview.connect('window-drag-cancelled',
|
||||||
|
Lang.bind(this, this._dragCancelled));
|
||||||
if (this._windowDragEndId == 0)
|
if (this._windowDragEndId == 0)
|
||||||
this._windowDragEndId = Main.overview.connect('window-drag-end',
|
this._windowDragEndId = Main.overview.connect('window-drag-end',
|
||||||
Lang.bind(this, this._dragEnd));
|
Lang.bind(this, this._dragEnd));
|
||||||
@ -751,6 +636,10 @@ WorkspacesDisplay.prototype = {
|
|||||||
Main.overview.disconnect(this._windowDragBeginId);
|
Main.overview.disconnect(this._windowDragBeginId);
|
||||||
this._windowDragBeginId = 0;
|
this._windowDragBeginId = 0;
|
||||||
}
|
}
|
||||||
|
if (this._windowDragCancelledId > 0) {
|
||||||
|
Main.overview.disconnect(this._windowDragCancelledId);
|
||||||
|
this._windowDragCancelledId = 0;
|
||||||
|
}
|
||||||
if (this._windowDragEndId > 0) {
|
if (this._windowDragEndId > 0) {
|
||||||
Main.overview.disconnect(this._windowDragEndId);
|
Main.overview.disconnect(this._windowDragEndId);
|
||||||
this._windowDragEndId = 0;
|
this._windowDragEndId = 0;
|
||||||
@ -809,22 +698,34 @@ WorkspacesDisplay.prototype = {
|
|||||||
childBox.y2 = box.y2- box.y1;
|
childBox.y2 = box.y2- box.y1;
|
||||||
this._controls.allocate(childBox, flags);
|
this._controls.allocate(childBox, flags);
|
||||||
|
|
||||||
this._updateZoomScale();
|
this._updateWorkspacesGeometry();
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateZoomScale: function() {
|
_updateWorkspacesGeometry: function() {
|
||||||
if (!this.workspacesView)
|
if (!this.workspacesView)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let totalAllocation = this.actor.allocation;
|
let width = this.actor.allocation.x2 - this.actor.allocation.x1;
|
||||||
let totalWidth = totalAllocation.x2 - totalAllocation.x1;
|
let height = this.actor.allocation.y2 - this.actor.allocation.y1;
|
||||||
let totalHeight = totalAllocation.y2 - totalAllocation.y1;
|
|
||||||
|
|
||||||
let [controlsMin, controlsNatural] = this._controls.get_preferred_width(totalHeight);
|
let [controlsMin, controlsNatural] = this._controls.get_preferred_width(height);
|
||||||
let controlsVisible = this._controls.get_theme_node().get_length('visible-width');
|
let controlsVisible = this._controls.get_theme_node().get_length('visible-width');
|
||||||
|
|
||||||
let zoomScale = (totalWidth - controlsNatural) / (totalWidth - controlsVisible);
|
let [x, y] = this.actor.get_transformed_position();
|
||||||
this.workspacesView.setZoomScale(zoomScale);
|
|
||||||
|
let rtl = (St.Widget.get_default_direction () == St.TextDirection.RTL);
|
||||||
|
|
||||||
|
if (this._zoomOut) {
|
||||||
|
width -= controlsNatural;
|
||||||
|
if (rtl)
|
||||||
|
x += controlsNatural;
|
||||||
|
} else {
|
||||||
|
width -= controlsVisible;
|
||||||
|
if (rtl)
|
||||||
|
x += controlsVisible;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.workspacesView.setGeometry(x, y, width, height);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onRestacked: function() {
|
_onRestacked: function() {
|
||||||
@ -890,9 +791,10 @@ WorkspacesDisplay.prototype = {
|
|||||||
if (Main.overview.animationInProgress)
|
if (Main.overview.animationInProgress)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let shouldZoom = this._controls.hover || this._inDrag;
|
let shouldZoom = this._controls.hover || (this._inDrag && !this._cancelledDrag);
|
||||||
if (shouldZoom != this._zoomOut) {
|
if (shouldZoom != this._zoomOut) {
|
||||||
this._zoomOut = shouldZoom;
|
this._zoomOut = shouldZoom;
|
||||||
|
this._updateWorkspacesGeometry();
|
||||||
|
|
||||||
if (!this.workspacesView)
|
if (!this.workspacesView)
|
||||||
return;
|
return;
|
||||||
@ -902,10 +804,7 @@ WorkspacesDisplay.prototype = {
|
|||||||
time: WORKSPACE_SWITCH_TIME,
|
time: WORKSPACE_SWITCH_TIME,
|
||||||
transition: 'easeOutQuad' });
|
transition: 'easeOutQuad' });
|
||||||
|
|
||||||
if (shouldZoom)
|
this.workspacesView.updateWindowPositions();
|
||||||
this.workspacesView.zoomOut();
|
|
||||||
else
|
|
||||||
this.workspacesView.zoomIn();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -915,6 +814,12 @@ WorkspacesDisplay.prototype = {
|
|||||||
|
|
||||||
_dragBegin: function() {
|
_dragBegin: function() {
|
||||||
this._inDrag = true;
|
this._inDrag = true;
|
||||||
|
this._cancelledDrag = false;
|
||||||
|
this._updateZoom();
|
||||||
|
},
|
||||||
|
|
||||||
|
_dragCancelled: function() {
|
||||||
|
this._cancelledDrag = true;
|
||||||
this._updateZoom();
|
this._updateZoom();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter;
|
|||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
const Mainloop = imports.mainloop;
|
|
||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
|
|
||||||
function XdndHandler() {
|
function XdndHandler() {
|
||||||
@ -41,9 +40,14 @@ XdndHandler.prototype = {
|
|||||||
// Called when the user cancels the drag (i.e release the button)
|
// Called when the user cancels the drag (i.e release the button)
|
||||||
_onLeave: function() {
|
_onLeave: function() {
|
||||||
if (this._windowGroupVisibilityHandlerId != 0) {
|
if (this._windowGroupVisibilityHandlerId != 0) {
|
||||||
Mainloop.source_remove(this._windowGroupVisibilityHandlerId);
|
global.window_group.disconnect(this._windowGroupVisibilityHandlerId);
|
||||||
this._windowGroupVisibilityHandlerId = 0;
|
this._windowGroupVisibilityHandlerId = 0;
|
||||||
}
|
}
|
||||||
|
if (this._cursorWindowClone) {
|
||||||
|
this._cursorWindowClone.destroy();
|
||||||
|
this._cursorWindowClone = null;
|
||||||
|
}
|
||||||
|
|
||||||
this.emit('drag-end');
|
this.emit('drag-end');
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -77,8 +81,7 @@ XdndHandler.prototype = {
|
|||||||
// Make sure that the clone has the same position as the source
|
// Make sure that the clone has the same position as the source
|
||||||
this._cursorWindowClone.add_constraint(constraint_position);
|
this._cursorWindowClone.add_constraint(constraint_position);
|
||||||
} else {
|
} else {
|
||||||
if (this._cursorWindowClone)
|
if (this._cursorWindowClone) {
|
||||||
{
|
|
||||||
this._cursorWindowClone.destroy();
|
this._cursorWindowClone.destroy();
|
||||||
this._cursorWindowClone = null;
|
this._cursorWindowClone = null;
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,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/main.c
|
||||||
src/shell-app-system.c
|
src/shell-app-system.c
|
||||||
src/shell-global.c
|
src/shell-global.c
|
||||||
src/shell-polkit-authentication-agent.c
|
src/shell-polkit-authentication-agent.c
|
||||||
|
152
po/ar.po
@ -6,8 +6,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: HEAD\n"
|
"Project-Id-Version: HEAD\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-02 19:08+0200\n"
|
"POT-Creation-Date: 2011-03-09 01:12+0200\n"
|
||||||
"PO-Revision-Date: 2011-03-02 19:08+0300\n"
|
"PO-Revision-Date: 2011-03-09 01:12+0300\n"
|
||||||
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
|
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
|
||||||
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -164,27 +164,27 @@ msgid "Execution of '%s' failed:"
|
|||||||
msgstr "فشل تنفيذ '%s':"
|
msgstr "فشل تنفيذ '%s':"
|
||||||
|
|
||||||
#. Translators: Filter to display all applications
|
#. Translators: Filter to display all applications
|
||||||
#: ../js/ui/appDisplay.js:195
|
#: ../js/ui/appDisplay.js:226
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "الكل"
|
msgstr "الكل"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:282
|
#: ../js/ui/appDisplay.js:324
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "التطبيقات"
|
msgstr "التطبيقات"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:312
|
#: ../js/ui/appDisplay.js:350
|
||||||
msgid "SETTINGS"
|
msgid "SETTINGS"
|
||||||
msgstr "الإعدادات"
|
msgstr "الإعدادات"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:572
|
#: ../js/ui/appDisplay.js:612
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "نافذة جديدة"
|
msgstr "نافذة جديدة"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:575
|
#: ../js/ui/appDisplay.js:615
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "أزِل من المفضّلة"
|
msgstr "أزِل من المفضّلة"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:576
|
#: ../js/ui/appDisplay.js:616
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "أضِف إلى المفضّلة"
|
msgstr "أضِف إلى المفضّلة"
|
||||||
|
|
||||||
@ -344,7 +344,7 @@ msgstr "هذا الأسبوع"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "الأسبوع القادم"
|
msgstr "الأسبوع القادم"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:174
|
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "أزِل"
|
msgstr "أزِل"
|
||||||
|
|
||||||
@ -352,54 +352,54 @@ msgstr "أزِل"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "إعدادات الوقت و التّأريخ"
|
msgstr "إعدادات الوقت و التّأريخ"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:110
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
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/dateMenu.js:162
|
#: ../js/ui/dateMenu.js:164
|
||||||
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/dateMenu.js:163
|
#: ../js/ui/dateMenu.js:165
|
||||||
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/dateMenu.js:167
|
#: ../js/ui/dateMenu.js:169
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%A %R:%S"
|
msgstr "%A %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:168
|
#: ../js/ui/dateMenu.js:170
|
||||||
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/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:177
|
||||||
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/dateMenu.js:176
|
#: ../js/ui/dateMenu.js:178
|
||||||
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/dateMenu.js:180
|
#: ../js/ui/dateMenu.js:182
|
||||||
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/dateMenu.js:181
|
#: ../js/ui/dateMenu.js:183
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%A %Ol:%OM %p"
|
msgstr "%A %Ol:%OM %p"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:207
|
#: ../js/ui/dateMenu.js:209
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A %e %B، %Y"
|
msgstr "%A %e %B، %Y"
|
||||||
|
|
||||||
@ -476,37 +476,41 @@ msgstr "أكّد"
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "ألغِ"
|
msgstr "ألغِ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:587
|
#: ../js/ui/lookingGlass.js:588
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "لم تثبّت أية امتدادات"
|
msgstr "لم تثبّت أية امتدادات"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:624
|
#: ../js/ui/lookingGlass.js:625
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "مفعّل"
|
msgstr "مفعّل"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:626 ../src/gvc/gvc-mixer-control.c:1087
|
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "معطّل"
|
msgstr "معطّل"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:628
|
#: ../js/ui/lookingGlass.js:629
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "خطأ"
|
msgstr "خطأ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:630
|
#: ../js/ui/lookingGlass.js:631
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "غير محدث"
|
msgstr "غير محدث"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:655
|
#: ../js/ui/lookingGlass.js:656
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "اعرض المصدر"
|
msgstr "اعرض المصدر"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:661
|
#: ../js/ui/lookingGlass.js:662
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "صفحة الوب"
|
msgstr "صفحة الوب"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1902
|
#: ../js/ui/messageTray.js:926
|
||||||
|
msgid "Open"
|
||||||
|
msgstr "افتح"
|
||||||
|
|
||||||
|
#: ../js/ui/messageTray.js:1963
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "معلومات النظام"
|
msgstr "معلومات النظام"
|
||||||
|
|
||||||
@ -522,18 +526,28 @@ msgstr "النوافذ"
|
|||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "التطبيقات"
|
msgstr "التطبيقات"
|
||||||
|
|
||||||
|
#. Translators: this is the name of the dock/favorites area on
|
||||||
|
#. the left of the overview
|
||||||
|
#: ../js/ui/overview.js:202
|
||||||
|
msgid "Dash"
|
||||||
|
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:529
|
#: ../js/ui/panel.js:560
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "أغلق %s"
|
msgstr "أغلق %s"
|
||||||
|
|
||||||
#. 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:897
|
#: ../js/ui/panel.js:919
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "الأنشطة"
|
msgstr "الأنشطة"
|
||||||
|
|
||||||
|
#: ../js/ui/panel.js:1020
|
||||||
|
msgid "Panel"
|
||||||
|
msgstr "اللوحة"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:122
|
#: ../js/ui/placeDisplay.js:122
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
@ -556,7 +570,7 @@ msgstr "الأماكن والأجهزة"
|
|||||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||||
#. switches containing "◯" and "|"). Other values will
|
#. switches containing "◯" and "|"). Other values will
|
||||||
#. simply result in invisible toggle switches.
|
#. simply result in invisible toggle switches.
|
||||||
#: ../js/ui/popupMenu.js:612
|
#: ../js/ui/popupMenu.js:618
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
@ -564,11 +578,11 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "من فضلك اكتب أمرا:"
|
msgstr "من فضلك اكتب أمرا:"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:295
|
#: ../js/ui/searchDisplay.js:283
|
||||||
msgid "Searching..."
|
msgid "Searching..."
|
||||||
msgstr "يبحث..."
|
msgstr "يبحث..."
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:309
|
#: ../js/ui/searchDisplay.js:297
|
||||||
msgid "No matching results."
|
msgid "No matching results."
|
||||||
msgstr "لا نتائج مطابقة."
|
msgstr "لا نتائج مطابقة."
|
||||||
|
|
||||||
@ -608,47 +622,47 @@ msgstr "بدّل المستخدم"
|
|||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "اخرج..."
|
msgstr "اخرج..."
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:81
|
#: ../js/ui/status/accessibility.js:62
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "تقريب"
|
msgstr "تقريب"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:69
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "قارئ الشاشة"
|
msgstr "قارئ الشاشة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:92
|
#: ../js/ui/status/accessibility.js:73
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "لوحة مفاتيح على الشاشة"
|
msgstr "لوحة مفاتيح على الشاشة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:96
|
#: ../js/ui/status/accessibility.js:77
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "تنبيهات بصرية"
|
msgstr "تنبيهات بصرية"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:99
|
#: ../js/ui/status/accessibility.js:80
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "مفاتيح لاصقة"
|
msgstr "مفاتيح لاصقة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:102
|
#: ../js/ui/status/accessibility.js:83
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "مفاتيح بطيئة"
|
msgstr "مفاتيح بطيئة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:105
|
#: ../js/ui/status/accessibility.js:86
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "مفاتيح لها صوت"
|
msgstr "مفاتيح لها صوت"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:108
|
#: ../js/ui/status/accessibility.js:89
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "مفاتيح الفأرة"
|
msgstr "مفاتيح الفأرة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:112
|
#: ../js/ui/status/accessibility.js:93
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "إعدادات الإتاحة"
|
msgstr "إعدادات الإتاحة"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:164
|
#: ../js/ui/status/accessibility.js:145
|
||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr "تباين عال"
|
msgstr "تباين عال"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:209
|
#: ../js/ui/status/accessibility.js:182
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "نص كبير"
|
msgstr "نص كبير"
|
||||||
|
|
||||||
@ -831,51 +845,51 @@ msgstr[3] "بقي %d دقائق"
|
|||||||
msgstr[4] "بقي %d دقيقة"
|
msgstr[4] "بقي %d دقيقة"
|
||||||
msgstr[5] "بقي %d دقيقة"
|
msgstr[5] "بقي %d دقيقة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:241
|
#: ../js/ui/status/power.js:227
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "مقبس طاقة"
|
msgstr "مقبس طاقة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:243
|
#: ../js/ui/status/power.js:229
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr "بطارية حاسوب محمول"
|
msgstr "بطارية حاسوب محمول"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:245
|
#: ../js/ui/status/power.js:231
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
msgstr "مزود طاقة لا منقطعة"
|
msgstr "مزود طاقة لا منقطعة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:247
|
#: ../js/ui/status/power.js:233
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr "شاشة"
|
msgstr "شاشة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:249
|
#: ../js/ui/status/power.js:235
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr "فأرة"
|
msgstr "فأرة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:251
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "لوحة المفاتيح"
|
msgstr "لوحة المفاتيح"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:253
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr "مساعد رقمي"
|
msgstr "مساعد رقمي"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:255
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "هاتف محمول"
|
msgstr "هاتف محمول"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:257
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr "مشغل وسائط"
|
msgstr "مشغل وسائط"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:259
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr "لوحة"
|
msgstr "لوحة"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:261
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "حاسوب"
|
msgstr "حاسوب"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:263 ../src/shell-app-system.c:1013
|
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "مجهول"
|
msgstr "مجهول"
|
||||||
|
|
||||||
@ -919,16 +933,20 @@ msgstr "أُرسلت الساعة %l:%M:%S في %A"
|
|||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters.
|
#. characters.
|
||||||
#: ../js/ui/viewSelector.js:103
|
#: ../js/ui/viewSelector.js:117
|
||||||
msgid "Type to search..."
|
msgid "Type to search..."
|
||||||
msgstr "اكتب نصا للبحث عنه..."
|
msgstr "اكتب نصا للبحث عنه..."
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:43
|
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "ابحث"
|
||||||
|
|
||||||
|
#: ../js/ui/windowAttentionHandler.js:42
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has finished starting"
|
msgid "%s has finished starting"
|
||||||
msgstr "انتهى %s من البدء"
|
msgstr "انتهى %s من البدء"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:45
|
#: ../js/ui/windowAttentionHandler.js:44
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "'%s' is ready"
|
msgid "'%s' is ready"
|
||||||
msgstr "'%s' جاهز"
|
msgstr "'%s' جاهز"
|
||||||
@ -963,11 +981,15 @@ msgstr[5] "%u مدخل"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "أصوات النظام"
|
msgstr "أصوات النظام"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1298
|
#: ../src/main.c:395
|
||||||
|
msgid "Print version"
|
||||||
|
msgstr "اطبع الإصدارة"
|
||||||
|
|
||||||
|
#: ../src/shell-global.c:1308
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "منذ أقل من دقيقة"
|
msgstr "منذ أقل من دقيقة"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1302
|
#: ../src/shell-global.c:1312
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
@ -978,7 +1000,7 @@ msgstr[3] "منذ %d دقائق"
|
|||||||
msgstr[4] "منذ %d دقيقة"
|
msgstr[4] "منذ %d دقيقة"
|
||||||
msgstr[5] "منذ %d دقيقة"
|
msgstr[5] "منذ %d دقيقة"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1307
|
#: ../src/shell-global.c:1317
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
@ -989,7 +1011,7 @@ msgstr[3] "منذ %d ساعات"
|
|||||||
msgstr[4] "منذ %d ساعة"
|
msgstr[4] "منذ %d ساعة"
|
||||||
msgstr[5] "منذ %d ساعة"
|
msgstr[5] "منذ %d ساعة"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1312
|
#: ../src/shell-global.c:1322
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
@ -1000,7 +1022,7 @@ msgstr[3] "منذ %d أيام"
|
|||||||
msgstr[4] "منذ %d يوما"
|
msgstr[4] "منذ %d يوما"
|
||||||
msgstr[5] "منذ %d يوم"
|
msgstr[5] "منذ %d يوم"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1317
|
#: ../src/shell-global.c:1327
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -1025,10 +1047,6 @@ msgstr "مجلد المنزل"
|
|||||||
msgid "File System"
|
msgid "File System"
|
||||||
msgstr "نظام الملفات"
|
msgstr "نظام الملفات"
|
||||||
|
|
||||||
#: ../src/shell-util.c:250
|
|
||||||
msgid "Search"
|
|
||||||
msgstr "ابحث"
|
|
||||||
|
|
||||||
#. Translators: the first string is the name of a gvfs
|
#. Translators: the first string is the name of a gvfs
|
||||||
#. * method, and the second string is a path. For
|
#. * method, and the second string is a path. For
|
||||||
#. * example, "Trash: some-directory". It means that the
|
#. * example, "Trash: some-directory". It means that the
|
||||||
|
1118
po/en_GB.po
156
po/es.po
@ -1,17 +1,17 @@
|
|||||||
# Spanish translation of gnome-shell.
|
# Spanish translation of gnome-shell.
|
||||||
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
|
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the gnome-shell package.
|
# This file is distributed under the same license as the gnome-shell package.
|
||||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011.
|
|
||||||
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011.
|
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011.
|
||||||
|
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
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: 2011-03-02 00:20+0000\n"
|
"POT-Creation-Date: 2011-03-09 18:36+0000\n"
|
||||||
"PO-Revision-Date: 2011-03-02 20:39+0100\n"
|
"PO-Revision-Date: 2011-03-09 19:37+0100\n"
|
||||||
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
|
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
"Language-Team: Español <gnome-es-list@gnome.org>\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"
|
||||||
@ -193,27 +193,27 @@ msgid "Execution of '%s' failed:"
|
|||||||
msgstr "Falló la ejecución de «%s»:"
|
msgstr "Falló la ejecución de «%s»:"
|
||||||
|
|
||||||
#. Translators: Filter to display all applications
|
#. Translators: Filter to display all applications
|
||||||
#: ../js/ui/appDisplay.js:195
|
#: ../js/ui/appDisplay.js:226
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Todas"
|
msgstr "Todas"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:282
|
#: ../js/ui/appDisplay.js:324
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "APLICACIONES"
|
msgstr "APLICACIONES"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:312
|
#: ../js/ui/appDisplay.js:350
|
||||||
msgid "SETTINGS"
|
msgid "SETTINGS"
|
||||||
msgstr "CONFIGURACIÓN"
|
msgstr "CONFIGURACIÓN"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:572
|
#: ../js/ui/appDisplay.js:612
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Ventana nueva"
|
msgstr "Ventana nueva"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:575
|
#: ../js/ui/appDisplay.js:615
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Quitar de los favoritos"
|
msgstr "Quitar de los favoritos"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:576
|
#: ../js/ui/appDisplay.js:616
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Añadir a los favoritos"
|
msgstr "Añadir a los favoritos"
|
||||||
|
|
||||||
@ -373,7 +373,7 @@ msgstr "Esta semana"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "La semana que viene"
|
msgstr "La semana que viene"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:174
|
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Quitar"
|
msgstr "Quitar"
|
||||||
|
|
||||||
@ -381,54 +381,54 @@ msgstr "Quitar"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Ajustes de hora y fecha"
|
msgstr "Ajustes de hora y fecha"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:110
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Abrir calendario"
|
msgstr "Abrir calendario"
|
||||||
|
|
||||||
#. 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/dateMenu.js:162
|
#: ../js/ui/dateMenu.js:164
|
||||||
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/dateMenu.js:163
|
#: ../js/ui/dateMenu.js:165
|
||||||
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/dateMenu.js:167
|
#: ../js/ui/dateMenu.js:169
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %R:%S"
|
msgstr "%a %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:168
|
#: ../js/ui/dateMenu.js:170
|
||||||
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/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:177
|
||||||
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/dateMenu.js:176
|
#: ../js/ui/dateMenu.js:178
|
||||||
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/dateMenu.js:180
|
#: ../js/ui/dateMenu.js:182
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%a %H:%M:%S"
|
msgstr "%a %H:%M:%S"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:181
|
#: ../js/ui/dateMenu.js:183
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %H:%M"
|
msgstr "%a %H:%M"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:207
|
#: ../js/ui/dateMenu.js:209
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e de %B de %Y"
|
msgstr "%A, %e de %B de %Y"
|
||||||
|
|
||||||
@ -508,37 +508,41 @@ msgstr "Confirmar"
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:587
|
#: ../js/ui/lookingGlass.js:588
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "No hay extensiones instaladas"
|
msgstr "No hay extensiones instaladas"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:624
|
#: ../js/ui/lookingGlass.js:625
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Activado"
|
msgstr "Activado"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:626 ../src/gvc/gvc-mixer-control.c:1087
|
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Desactivado"
|
msgstr "Desactivado"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:628
|
#: ../js/ui/lookingGlass.js:629
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Error"
|
msgstr "Error"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:630
|
#: ../js/ui/lookingGlass.js:631
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Caducado"
|
msgstr "Caducado"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:655
|
#: ../js/ui/lookingGlass.js:656
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Ver fuente"
|
msgstr "Ver fuente"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:661
|
#: ../js/ui/lookingGlass.js:662
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Página web"
|
msgstr "Página web"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1902
|
#: ../js/ui/messageTray.js:926
|
||||||
|
msgid "Open"
|
||||||
|
msgstr "Abrir"
|
||||||
|
|
||||||
|
#: ../js/ui/messageTray.js:1963
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Información del sistema"
|
msgstr "Información del sistema"
|
||||||
|
|
||||||
@ -554,18 +558,28 @@ msgstr "Ventanas"
|
|||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Aplicaciones"
|
msgstr "Aplicaciones"
|
||||||
|
|
||||||
|
#. Translators: this is the name of the dock/favorites area on
|
||||||
|
#. the left of the overview
|
||||||
|
#: ../js/ui/overview.js:202
|
||||||
|
msgid "Dash"
|
||||||
|
msgstr "Plano"
|
||||||
|
|
||||||
#. 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:529
|
#: ../js/ui/panel.js:560
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "Salir de %s"
|
msgstr "Salir de %s"
|
||||||
|
|
||||||
#. 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:897
|
#: ../js/ui/panel.js:919
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Actividades"
|
msgstr "Actividades"
|
||||||
|
|
||||||
|
#: ../js/ui/panel.js:1020
|
||||||
|
msgid "Panel"
|
||||||
|
msgstr "Panel"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:122
|
#: ../js/ui/placeDisplay.js:122
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
@ -588,7 +602,7 @@ msgstr "LUGARES Y DISPOSITIVOS"
|
|||||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||||
#. switches containing "◯" and "|"). Other values will
|
#. switches containing "◯" and "|"). Other values will
|
||||||
#. simply result in invisible toggle switches.
|
#. simply result in invisible toggle switches.
|
||||||
#: ../js/ui/popupMenu.js:612
|
#: ../js/ui/popupMenu.js:618
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
@ -596,11 +610,11 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "Introduzca un comando:"
|
msgstr "Introduzca un comando:"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:295
|
#: ../js/ui/searchDisplay.js:283
|
||||||
msgid "Searching..."
|
msgid "Searching..."
|
||||||
msgstr "Buscando…"
|
msgstr "Buscando…"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:309
|
#: ../js/ui/searchDisplay.js:297
|
||||||
msgid "No matching results."
|
msgid "No matching results."
|
||||||
msgstr "No se encontró ningún resultado coincidente."
|
msgstr "No se encontró ningún resultado coincidente."
|
||||||
|
|
||||||
@ -640,47 +654,47 @@ msgstr "Cambiar de usuario"
|
|||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "Cerrar la sesión…"
|
msgstr "Cerrar la sesión…"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:81
|
#: ../js/ui/status/accessibility.js:62
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "Ampliación"
|
msgstr "Ampliación"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:69
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "Lector de pantalla"
|
msgstr "Lector de pantalla"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:92
|
#: ../js/ui/status/accessibility.js:73
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "Teclado en pantalla"
|
msgstr "Teclado en pantalla"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:96
|
#: ../js/ui/status/accessibility.js:77
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "Alertas visuales"
|
msgstr "Alertas visuales"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:99
|
#: ../js/ui/status/accessibility.js:80
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "Teclas persistentes"
|
msgstr "Teclas persistentes"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:102
|
#: ../js/ui/status/accessibility.js:83
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "Teclas lentas"
|
msgstr "Teclas lentas"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:105
|
#: ../js/ui/status/accessibility.js:86
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "Rechazo de teclas"
|
msgstr "Rechazo de teclas"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:108
|
#: ../js/ui/status/accessibility.js:89
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Teclas del ratón"
|
msgstr "Teclas del ratón"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:112
|
#: ../js/ui/status/accessibility.js:93
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "Preferencias del acceso universal"
|
msgstr "Preferencias del acceso universal"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:164
|
#: ../js/ui/status/accessibility.js:145
|
||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr "Contraste alto"
|
msgstr "Contraste alto"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:209
|
#: ../js/ui/status/accessibility.js:182
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "<b>Texto:</b>"
|
msgstr "<b>Texto:</b>"
|
||||||
|
|
||||||
@ -847,51 +861,51 @@ msgid_plural "%d minutes remaining"
|
|||||||
msgstr[0] "Queda %d minuto"
|
msgstr[0] "Queda %d minuto"
|
||||||
msgstr[1] "Queda %d minutos"
|
msgstr[1] "Queda %d minutos"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:241
|
#: ../js/ui/status/power.js:227
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "Adaptador de corriente"
|
msgstr "Adaptador de corriente"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:243
|
#: ../js/ui/status/power.js:229
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr "Batería del portátil"
|
msgstr "Batería del portátil"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:245
|
#: ../js/ui/status/power.js:231
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
msgstr "SAI"
|
msgstr "SAI"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:247
|
#: ../js/ui/status/power.js:233
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr "Monitor"
|
msgstr "Monitor"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:249
|
#: ../js/ui/status/power.js:235
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr "Ratón"
|
msgstr "Ratón"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:251
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Teclado"
|
msgstr "Teclado"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:253
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr "PDA"
|
msgstr "PDA"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:255
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "Teléfono móvil"
|
msgstr "Teléfono móvil"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:257
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr "Reproductor multimedia"
|
msgstr "Reproductor multimedia"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:259
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr "Tableta"
|
msgstr "Tableta"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:261
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Equipo"
|
msgstr "Equipo"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:263 ../src/shell-app-system.c:1013
|
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Desconocido"
|
msgstr "Desconocido"
|
||||||
|
|
||||||
@ -935,16 +949,20 @@ msgstr "Enviado a las %X el %A"
|
|||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters.
|
#. characters.
|
||||||
#: ../js/ui/viewSelector.js:103
|
#: ../js/ui/viewSelector.js:117
|
||||||
msgid "Type to search..."
|
msgid "Type to search..."
|
||||||
msgstr "Teclear para buscar…"
|
msgstr "Teclear para buscar…"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:43
|
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Buscar"
|
||||||
|
|
||||||
|
#: ../js/ui/windowAttentionHandler.js:42
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has finished starting"
|
msgid "%s has finished starting"
|
||||||
msgstr "%s finalizó su lanzamiento"
|
msgstr "%s finalizó su lanzamiento"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:45
|
#: ../js/ui/windowAttentionHandler.js:44
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "'%s' is ready"
|
msgid "'%s' is ready"
|
||||||
msgstr "«%s» está preparado"
|
msgstr "«%s» está preparado"
|
||||||
@ -971,32 +989,36 @@ msgstr[1] "%u entradas"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sonidos del sistema"
|
msgstr "Sonidos del sistema"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1298
|
#: ../src/main.c:395
|
||||||
|
msgid "Print version"
|
||||||
|
msgstr "Imprimir versión"
|
||||||
|
|
||||||
|
#: ../src/shell-global.c:1308
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "Hace menos de un minuto"
|
msgstr "Hace menos de un minuto"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1302
|
#: ../src/shell-global.c:1312
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
msgstr[0] "Hace %d minuto"
|
msgstr[0] "Hace %d minuto"
|
||||||
msgstr[1] "Hace %d minutos"
|
msgstr[1] "Hace %d minutos"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1307
|
#: ../src/shell-global.c:1317
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] "Hace %d hora"
|
msgstr[0] "Hace %d hora"
|
||||||
msgstr[1] "Hace %d horas"
|
msgstr[1] "Hace %d horas"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1312
|
#: ../src/shell-global.c:1322
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
msgstr[0] "Hace %d día"
|
msgstr[0] "Hace %d día"
|
||||||
msgstr[1] "Hace %d días"
|
msgstr[1] "Hace %d días"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1317
|
#: ../src/shell-global.c:1327
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -1017,10 +1039,6 @@ msgstr "Carpeta personal"
|
|||||||
msgid "File System"
|
msgid "File System"
|
||||||
msgstr "Sistema de archivos"
|
msgstr "Sistema de archivos"
|
||||||
|
|
||||||
#: ../src/shell-util.c:250
|
|
||||||
msgid "Search"
|
|
||||||
msgstr "Buscar"
|
|
||||||
|
|
||||||
#. Translators: the first string is the name of a gvfs
|
#. Translators: the first string is the name of a gvfs
|
||||||
#. * method, and the second string is a path. For
|
#. * method, and the second string is a path. For
|
||||||
#. * example, "Trash: some-directory". It means that the
|
#. * example, "Trash: some-directory". It means that the
|
||||||
|
279
po/kn.po
@ -9,7 +9,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
|
||||||
"cgi?product=gnome-shell&component=general\n"
|
"cgi?product=gnome-shell&component=general\n"
|
||||||
"POT-Creation-Date: 2011-02-21 01:21+0000\n"
|
"POT-Creation-Date: 2011-02-21 01:21+0000\n"
|
||||||
"PO-Revision-Date: 2011-02-21 12:52+0530\n"
|
"PO-Revision-Date: 2011-03-09 09:36+0530\n"
|
||||||
"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
|
"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
|
||||||
"Language-Team: Kannada <kn@li.org>\n"
|
"Language-Team: Kannada <kn@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -20,59 +20,65 @@ 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/org.gnome.shell.gschema.xml.in.h:1
|
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||||
msgid ""
|
msgid ""
|
||||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||||
"dialog."
|
"dialog."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Alt-F2 ಸಂವಾದಚೌಕವನ್ನು ಬಳಸಿಕೊಂಡು ಆಂತರಿಕ ದೋಷ ನಿವಾರಣೆ ಹಾಗು ಮೇಲ್ವಿಚಾರಣೆ "
|
||||||
|
"ಉಪಕರಣಗಳನ್ನು ನಿಲುಕಿಸಿಕೊಳ್ಳಲು ಅನುವುಮಾಡಿಕೊಡುತ್ತದೆ."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||||
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 ""
|
msgstr ""
|
||||||
|
"Alt-F2 ಇಂದ ವಿಕಸನೆಗಾರರಿಗೆ ಹಾಗು ಪರೀಕ್ಷಕರಿಗೆ ಉಪಯುಕ್ತವಾಗುವ ಆಂತರಿಕ ಉಪಕರಣಗಳನ್ನು "
|
||||||
|
"ಶಕ್ತಗೊಳಿಸುತ್ತದೆ"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr ""
|
msgstr "ಸ್ಕ್ರೀನ್ಕ್ಯಾಸ್ಟುಗಳನ್ನು ಶೇಖರಿಸಿಡಲು ಬಳಸಲಾಗುವ ಕಡತ ವಿಸ್ತರಣೆಗಳು"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr ""
|
msgstr "ಸ್ಕ್ರೀನ್ಕ್ಯಾಸ್ಟುಗಳನ್ನು ರೆಕಾರ್ಡು ಮಾಡಲು ಬಳಸಲಾಗುವ ಫ್ರೇಮ್ದರಗಳು."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||||
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 ""
|
msgstr ""
|
||||||
|
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||||
|
"should not be loaded."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||||
msgid "History for command (Alt-F2) dialog"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr ""
|
msgstr "ಆಜ್ಞೆಯ ಇತಿಹಾಸ (Alt-F2) ಸಂವಾದಚೌಕ"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||||
msgid "History for the looking glass dialog"
|
msgid "History for the looking glass dialog"
|
||||||
msgstr ""
|
msgstr "ನೋಡುವ ಗಾಜಿನ ಸಂವಾದ ಚೌಕಕ್ಕಾಗಿನ ಇತಿಹಾಸ"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||||
msgid "If true, display date in the clock, in addition to time."
|
msgid "If true, display date in the clock, in addition to time."
|
||||||
msgstr ""
|
msgstr "true ಆದಲ್ಲಿ, ದಿನಾಂಕವನ್ನು ಸಮಯದ ಜೊತೆಗೆ ಗಡಿಯಾರದಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತದೆ."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||||
msgid "If true, display seconds in time."
|
msgid "If true, display seconds in time."
|
||||||
msgstr ""
|
msgstr "true ಆದಲ್ಲಿ, ಸಮಯದಲ್ಲಿ ಸೆಕೆಂಡುಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr ""
|
msgstr "true ಆದಲ್ಲಿ, ಕ್ಯಾಲೆಂಡರಿನಲ್ಲಿ ISO ವಾರದ ದಿನವನ್ನು ತೋರಿಸುತ್ತದೆ."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||||
msgid "List of desktop file IDs for favorite applications"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr ""
|
msgstr "ಮೆಚ್ಚಿನ ಅನ್ವಯಗಳಿಗಾಗಿನ ಗಣಕತೆರೆ ಕಡತ IDಗಳ ಪಟ್ಟಿ"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
@ -91,21 +97,22 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||||
msgid "Show date in clock"
|
msgid "Show date in clock"
|
||||||
msgstr ""
|
msgstr "ಗಡಿಯಾರದಲ್ಲಿ ದಿನಾಂಕವನ್ನು ತೋರಿಸು"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
#: ../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 ""
|
msgstr "ಕ್ಯಾಲೆಂಡರಿನಲ್ಲಿ ವಾರದ ದಿನವನ್ನು ತೋರಿಸು"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||||
msgid "Show time with seconds"
|
msgid "Show time with seconds"
|
||||||
msgstr ""
|
msgstr "ಸಮಯದೊಂದಿಗೆ ಸೆಕೆಂಡುಗಳನ್ನು ತೋರಿಸು"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
#: ../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."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"ಈ ಐಡೆಂಟಿಫಯರುಗಳಿಗೆ ಅನುಗುಣವಾದ ಅನ್ವಯಗಳನ್ನು ಮೆಚ್ಚಿನವುಗಳ ಜಾಗದಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತದೆ."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -113,16 +120,21 @@ msgid ""
|
|||||||
"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:19
|
#: ../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."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"ಪ್ರತಿ ಸೆಕೆಂಡಿನ ಫ್ರೇಮ್ಗಳಲ್ಲಿನ GNOME ಶೆಲ್ನ ಸ್ಕ್ರೀನ್ಕ್ಯಾಸ್ಟ್ ರೆಕಾರ್ಡರಿನಿಂದ "
|
||||||
|
"ರೆಕಾರ್ಡು ಮಾಡಲಾದ ಸ್ಕ್ರೀನ್ಕ್ಯಾಸ್ಟಿನ ಫ್ರೇಮ್ದರ. "
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
#: ../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 ""
|
msgstr "ಸ್ಕ್ರೀನ್ಕ್ಯಾಸ್ಟ್ ಅನ್ನು ಎನ್ಕೋಡ್ ಮಾಡಲು ಬಳಸಲಾಗುವ gstreamer ಪೈಪ್ಲೈನ್"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -134,43 +146,43 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||||
msgid "Uuids of extensions to disable"
|
msgid "Uuids of extensions to disable"
|
||||||
msgstr ""
|
msgstr "ಅಶಕ್ತಗೊಳಿಸಬೇಕಿರುವ Uuidಗಳ ವಿಸ್ತರಣೆಗಳು"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||||
msgid "Whether to collect stats about applications usage"
|
msgid "Whether to collect stats about applications usage"
|
||||||
msgstr ""
|
msgstr "ಅನ್ವಯದ ಬಳಕೆಯ ಬಗೆಗಿನ ಅಂಕಿಅಂಶಗಳನ್ನು ಸಂಗ್ರಹಿಸಬೇಕೆ"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||||
msgid "disabled OpenSearch providers"
|
msgid "disabled OpenSearch providers"
|
||||||
msgstr ""
|
msgstr "ಅಶಕ್ತಗೊಳಿಸಲಾದ OpenSearch ಒದಗಿಸುವವರು"
|
||||||
|
|
||||||
#: ../js/misc/util.js:86
|
#: ../js/misc/util.js:86
|
||||||
msgid "Command not found"
|
msgid "Command not found"
|
||||||
msgstr ""
|
msgstr "ಆಜ್ಞೆಯು ಕಂಡು ಬಂದಿಲ್ಲ"
|
||||||
|
|
||||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
#. something nicer
|
#. something nicer
|
||||||
#: ../js/misc/util.js:113
|
#: ../js/misc/util.js:113
|
||||||
msgid "Could not parse command:"
|
msgid "Could not parse command:"
|
||||||
msgstr ""
|
msgstr "ಆಜ್ಞೆಯನ್ನು ಪಾರ್ಸ್ ಮಾಡಲಾಗಿಲ್ಲ:"
|
||||||
|
|
||||||
#: ../js/misc/util.js:135
|
#: ../js/misc/util.js:135
|
||||||
msgid "No such application"
|
msgid "No such application"
|
||||||
msgstr ""
|
msgstr "ಅಂತಹ ಯಾವುದೆ ಅನ್ವಯವಿಲ್ಲ"
|
||||||
|
|
||||||
#: ../js/misc/util.js:148
|
#: ../js/misc/util.js:148
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Execution of '%s' failed:"
|
msgid "Execution of '%s' failed:"
|
||||||
msgstr ""
|
msgstr "'%s' ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ:"
|
||||||
|
|
||||||
#. Translators: Filter to display all applications
|
#. Translators: Filter to display all applications
|
||||||
#: ../js/ui/appDisplay.js:174
|
#: ../js/ui/appDisplay.js:174
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr ""
|
msgstr "ಎಲ್ಲಾ"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:261
|
#: ../js/ui/appDisplay.js:261
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr ""
|
msgstr "APPLICATIONS"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:291
|
#: ../js/ui/appDisplay.js:291
|
||||||
msgid "PREFERENCES"
|
msgid "PREFERENCES"
|
||||||
@ -182,21 +194,21 @@ msgstr "ಹೊಸ ವಿಂಡೊ"
|
|||||||
|
|
||||||
#: ../js/ui/appDisplay.js:555
|
#: ../js/ui/appDisplay.js:555
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr ""
|
msgstr "ಎಲ್ಲಾ ಅಚ್ಚುಮೆಚ್ಚಿನವುಗಳನ್ನು ತೆಗೆದುಹಾಕು"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:556
|
#: ../js/ui/appDisplay.js:556
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr ""
|
msgstr "ಅಚ್ಚುಮೆಚ್ಚಿನವುಗಳಿಗೆ ಸೇರಿಸು"
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:91
|
#: ../js/ui/appFavorites.js:91
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
msgstr ""
|
msgstr "%s ಅನ್ನು ನಿಮ್ಮ ಅಚ್ಚುಮೆಚ್ಚಿನವುಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ."
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:122
|
#: ../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 ""
|
msgstr "%s ಅನ್ನು ನಿಮ್ಮ ಅಚ್ಚುಮೆಚ್ಚಿನವುಗಳಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ."
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list for all day events
|
#. Translators: Shown in calendar event list for all day events
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
@ -314,7 +326,7 @@ msgstr "ಶ"
|
|||||||
#. Translators: Text to show if there are no events
|
#. Translators: Text to show if there are no events
|
||||||
#: ../js/ui/calendar.js:701
|
#: ../js/ui/calendar.js:701
|
||||||
msgid "Nothing Scheduled"
|
msgid "Nothing Scheduled"
|
||||||
msgstr ""
|
msgstr "ಯಾವುದೂ ಅನುಸೂಚಿತಗೊಂಡಿಲ್ಲ"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
#: ../js/ui/calendar.js:717
|
#: ../js/ui/calendar.js:717
|
||||||
@ -350,11 +362,11 @@ msgstr "ತೆಗೆದು ಹಾಕು"
|
|||||||
|
|
||||||
#: ../js/ui/dateMenu.js:93
|
#: ../js/ui/dateMenu.js:93
|
||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr ""
|
msgstr "ದಿನಾಂಕ ಹಾಗು ಸಮಯದ ಸಿದ್ಧತೆಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:112
|
#: ../js/ui/dateMenu.js:112
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
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.
|
||||||
@ -405,72 +417,76 @@ msgstr "%A %B %e, %Y"
|
|||||||
|
|
||||||
#: ../js/ui/docDisplay.js:19
|
#: ../js/ui/docDisplay.js:19
|
||||||
msgid "RECENT ITEMS"
|
msgid "RECENT ITEMS"
|
||||||
msgstr ""
|
msgstr "RECENT ITEMS"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:63
|
#: ../js/ui/endSessionDialog.js:63
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Log Out %s"
|
msgid "Log Out %s"
|
||||||
msgstr ""
|
msgstr "%s ಇಂದ ನಿರ್ಗಮಿಸಿ"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr ""
|
msgstr "ನಿರ್ಗಮಿಸಿ"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:65
|
#: ../js/ui/endSessionDialog.js:65
|
||||||
msgid "Click Log Out to quit these applications and log out of the system."
|
msgid "Click Log Out to quit these applications and log out of the system."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"ಈ ಅನ್ವಯದಿಂದ ನಿರ್ಗಮಿಸಿ ನಂತರ ವ್ಯವಸ್ಥೆಯಿಂದ ನಿರ್ಗಮಿಸಲು ನಿರ್ಗಮಿಸು ಅನ್ನು ಒತ್ತಿ."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:66
|
#: ../js/ui/endSessionDialog.js:66
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s will be logged out automatically in %d seconds."
|
msgid "%s will be logged out automatically in %d seconds."
|
||||||
msgstr ""
|
msgstr "%s ರವರು %d ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ಗಮಿಸಲ್ಪಡುತ್ತಾರೆ."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:67
|
#: ../js/ui/endSessionDialog.js:67
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "You will be logged out automatically in %d seconds."
|
msgid "You will be logged out automatically in %d seconds."
|
||||||
msgstr ""
|
msgstr "ನೀವು %d ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ಗಮಿಸಲ್ಪಡುತ್ತಾರೆ."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:68
|
#: ../js/ui/endSessionDialog.js:68
|
||||||
msgid "Logging out of the system."
|
msgid "Logging out of the system."
|
||||||
msgstr ""
|
msgstr "ವ್ಯವಸ್ಥೆಯಿಂದ ನಿರ್ಗಮಿಸಲಾಗುತ್ತಿದೆ."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||||
msgid "Shut Down"
|
msgid "Shut Down"
|
||||||
msgstr ""
|
msgstr "ಸ್ಥಗಿತಗೊಳಿಸು"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:75
|
#: ../js/ui/endSessionDialog.js:75
|
||||||
msgid "Click Shut Down to quit these applications and shut down the system."
|
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"ಈ ಅನ್ವಯದಿಂದ ನಿರ್ಗಮಿಸಿ ನಂತರ ವ್ಯವಸ್ಥೆಯನ್ನು ಸ್ಥಗಿತಗೊಳಿಲು ಸ್ಥಗಿತಗೊಳಿಸು ಅನ್ನು "
|
||||||
|
"ಒತ್ತಿ."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:76
|
#: ../js/ui/endSessionDialog.js:76
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The system will shut down automatically in %d seconds."
|
msgid "The system will shut down automatically in %d seconds."
|
||||||
msgstr ""
|
msgstr "ವ್ಯವಸ್ಥೆಯು %d ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸ್ಥಗಿತಗೊಳ್ಳುತ್ತದೆ."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:77
|
#: ../js/ui/endSessionDialog.js:77
|
||||||
msgid "Shutting down the system."
|
msgid "Shutting down the system."
|
||||||
msgstr ""
|
msgstr "ವ್ಯವಸ್ಥೆಯನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr ""
|
msgstr "ಮರಳಿ ಆರಂಭಿಸು"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:85
|
#: ../js/ui/endSessionDialog.js:85
|
||||||
msgid "Click Restart to quit these applications and restart the system."
|
msgid "Click Restart to quit these applications and restart the system."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"ಈ ಅನ್ವಯದಿಂದ ನಿರ್ಗಮಿಸಿ ಗಣಕವನ್ನು ಮರಳಿ ಅರಂಭಿಸಲು ಮರಳಿ ಆರಂಭಿಸು ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:86
|
#: ../js/ui/endSessionDialog.js:86
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The system will restart automatically in %d seconds."
|
msgid "The system will restart automatically in %d seconds."
|
||||||
msgstr ""
|
msgstr "ವ್ಯವಸ್ಥೆಯು %d ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮರಳಿ ಆರಂಭಗೊಳ್ಳುತ್ತದೆ."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:87
|
#: ../js/ui/endSessionDialog.js:87
|
||||||
msgid "Restarting the system."
|
msgid "Restarting the system."
|
||||||
msgstr ""
|
msgstr "ನಿಮ್ಮ ವ್ಯವಸ್ಥೆಯನ್ನು ಮರಳಿ ಆರಂಭಿಸಲಾಗುತ್ತಿದೆ."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:395
|
#: ../js/ui/endSessionDialog.js:395
|
||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr ""
|
msgstr "ಖಚಿತಪಡಿಸಿ"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
@ -478,17 +494,17 @@ msgstr "ರದ್ದು ಮಾಡು"
|
|||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:587
|
#: ../js/ui/lookingGlass.js:587
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr ""
|
msgstr "ಯಾವುದು ವಿಸ್ತರಣೆಗಳನ್ನು ಅನುಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:624
|
#: ../js/ui/lookingGlass.js:624
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr ""
|
msgstr "ಶಕ್ತಗೊಳಿಸಲಾಗಿದೆ"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:626 ../src/gvc/gvc-mixer-control.c:1087
|
#: ../js/ui/lookingGlass.js:626 ../src/gvc/gvc-mixer-control.c:1087
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr ""
|
msgstr "ಅಶಕ್ತಗೊಳಿಸಲಾಗಿದೆ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:628
|
#: ../js/ui/lookingGlass.js:628
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
@ -496,11 +512,11 @@ msgstr "ದೋಷ"
|
|||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:630
|
#: ../js/ui/lookingGlass.js:630
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr ""
|
msgstr "ಹಳೆಯದಾಗಿದೆ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:655
|
#: ../js/ui/lookingGlass.js:655
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr ""
|
msgstr "ಆಕರವನ್ನು ನೋಡಿ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:661
|
#: ../js/ui/lookingGlass.js:661
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
@ -526,26 +542,26 @@ msgstr "ಅನ್ವಯಗಳು"
|
|||||||
#: ../js/ui/panel.js:478
|
#: ../js/ui/panel.js:478
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr ""
|
msgstr "%s ಇಂದ ನಿರ್ಗಮಿಸು"
|
||||||
|
|
||||||
#. 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:612
|
#: ../js/ui/panel.js:612
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr ""
|
msgstr "ಚಟುವಟಿಕೆಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:122
|
#: ../js/ui/placeDisplay.js:122
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
msgstr ""
|
msgstr "'%s' ಅನ್ನು ಅವರೋಹಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:125
|
#: ../js/ui/placeDisplay.js:125
|
||||||
msgid "Retry"
|
msgid "Retry"
|
||||||
msgstr ""
|
msgstr "ಮರಳಿ ಆರಂಭಿಸು"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:165
|
#: ../js/ui/placeDisplay.js:165
|
||||||
msgid "Connect to..."
|
msgid "Connect to..."
|
||||||
msgstr ""
|
msgstr "ಇದಕ್ಕೆ ಸಂಪರ್ಕ ಜೋಡಿಸಿ..."
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:409
|
#: ../js/ui/placeDisplay.js:409
|
||||||
msgid "PLACES & DEVICES"
|
msgid "PLACES & DEVICES"
|
||||||
@ -558,7 +574,7 @@ msgstr "PLACES & DEVICES"
|
|||||||
#. simply result in invisible toggle switches.
|
#. simply result in invisible toggle switches.
|
||||||
#: ../js/ui/popupMenu.js:506
|
#: ../js/ui/popupMenu.js:506
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr ""
|
msgstr "toggle-switch-us"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:201
|
#: ../js/ui/runDialog.js:201
|
||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
@ -570,7 +586,7 @@ msgstr "ಹುಡುಕಲಾಗುತ್ತಿದೆ..."
|
|||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:309
|
#: ../js/ui/searchDisplay.js:309
|
||||||
msgid "No matching results."
|
msgid "No matching results."
|
||||||
msgstr ""
|
msgstr "ಯಾವುದೆ ಫಲಿತಾಂಶಗಳು ತಾಳೆಯಾಗಿಲ್ಲ."
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:102
|
#: ../js/ui/statusMenu.js:102
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
@ -590,7 +606,7 @@ msgstr "ವ್ಯವಸ್ಥೆಯ ಸಿದ್ಧತೆಗಳು"
|
|||||||
|
|
||||||
#: ../js/ui/statusMenu.js:126
|
#: ../js/ui/statusMenu.js:126
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
msgstr ""
|
msgstr "ತೆರೆಯನ್ನು ಲಾಕ್ ಮಾಡಿ"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:130
|
#: ../js/ui/statusMenu.js:130
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
@ -598,7 +614,7 @@ msgstr "ಬಳಕೆದಾರನನ್ನು ಬದಲಿಸು"
|
|||||||
|
|
||||||
#: ../js/ui/statusMenu.js:135
|
#: ../js/ui/statusMenu.js:135
|
||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr ""
|
msgstr "ನಿರ್ಗಮಿಸಿ..."
|
||||||
|
|
||||||
#. This is temporarily removed, see
|
#. This is temporarily removed, see
|
||||||
#. http://bugzilla.gnome.org/show_bug.cgi?id=636680
|
#. http://bugzilla.gnome.org/show_bug.cgi?id=636680
|
||||||
@ -608,51 +624,51 @@ msgstr ""
|
|||||||
#. this.menu.addMenuItem(item);
|
#. this.menu.addMenuItem(item);
|
||||||
#: ../js/ui/statusMenu.js:149
|
#: ../js/ui/statusMenu.js:149
|
||||||
msgid "Shut Down..."
|
msgid "Shut Down..."
|
||||||
msgstr ""
|
msgstr "ಸ್ಥಗಿತಗೊಳಿಸಿ..."
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:81
|
#: ../js/ui/status/accessibility.js:81
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr ""
|
msgstr "ಗಾತ್ರ ಬದಲಾವಣೆ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:88
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr ""
|
msgstr "ತೆರೆ ಓದುಗ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:92
|
#: ../js/ui/status/accessibility.js:92
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr ""
|
msgstr "ತೆರೆ ಕೀಲಿಮಣೆ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:96
|
#: ../js/ui/status/accessibility.js:96
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr ""
|
msgstr "ದೃಶ್ಯರೂಪದ ಎಚ್ಚರಿಕೆಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:99
|
#: ../js/ui/status/accessibility.js:99
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr ""
|
msgstr "ಸ್ಟಿಕಿ ಕೀಲಿಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:102
|
#: ../js/ui/status/accessibility.js:102
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr ""
|
msgstr "ನಿಧಾನ ಕೀಲಿಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:105
|
#: ../js/ui/status/accessibility.js:105
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr ""
|
msgstr "ಪುಟಿಯುವ ಕೀಲಿಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:108
|
#: ../js/ui/status/accessibility.js:108
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr ""
|
msgstr "ಮೌಸ್ ಕೀಲಿಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:112
|
#: ../js/ui/status/accessibility.js:112
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr ""
|
msgstr "ಜಾಗತಿಕ ನಿಲುಕಣೆ ಸಿದ್ಧತೆಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:164
|
#: ../js/ui/status/accessibility.js:164
|
||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr ""
|
msgstr "ಅತಿ ಹೆಚ್ಚು ವೈದೃಶ್ಯ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:206
|
#: ../js/ui/status/accessibility.js:206
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr ""
|
msgstr "ದೊಡ್ಡ ಪಠ್ಯ"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||||
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||||
@ -666,11 +682,11 @@ msgstr "ಗೋಚರಿಕೆ"
|
|||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:69
|
#: ../js/ui/status/bluetooth.js:69
|
||||||
msgid "Send Files to Device..."
|
msgid "Send Files to Device..."
|
||||||
msgstr ""
|
msgstr "ಸಾಧನಕ್ಕೆ ಕಡತಗಳನ್ನು ಕಳುಹಿಸಿ..."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:70
|
#: ../js/ui/status/bluetooth.js:70
|
||||||
msgid "Setup a New Device..."
|
msgid "Setup a New Device..."
|
||||||
msgstr ""
|
msgstr "ಒಂದು ಹೊಸ ಸಾಧನವನ್ನು ಸಿದ್ಧಗೊಳಿಸಿ..."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:95
|
#: ../js/ui/status/bluetooth.js:95
|
||||||
msgid "Bluetooth Settings"
|
msgid "Bluetooth Settings"
|
||||||
@ -690,12 +706,12 @@ msgstr "ಕಡತಗಳಿಗಾಗಿ ವೀಕ್ಷಿಸು..."
|
|||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:242
|
#: ../js/ui/status/bluetooth.js:242
|
||||||
msgid "Error browsing device"
|
msgid "Error browsing device"
|
||||||
msgstr ""
|
msgstr "ಸಾಧನವನ್ನು ವೀಕ್ಷಿಸುವಲ್ಲಿ ದೋಷ"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:243
|
#: ../js/ui/status/bluetooth.js:243
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The requested device cannot be browsed, error is '%s'"
|
msgid "The requested device cannot be browsed, error is '%s'"
|
||||||
msgstr ""
|
msgstr "ಮನವಿ ಸಲ್ಲಿಸಲಾದ ಸಾಧನವನ್ನು ವೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ, ದೋಷವು '%s' ಆಗಿದೆ"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:251
|
#: ../js/ui/status/bluetooth.js:251
|
||||||
msgid "Keyboard Settings"
|
msgid "Keyboard Settings"
|
||||||
@ -712,20 +728,20 @@ msgstr "ಧ್ವನಿಯ ಸಿದ್ಧತೆಗಳು"
|
|||||||
#: ../js/ui/status/bluetooth.js:372
|
#: ../js/ui/status/bluetooth.js:372
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Authorization request from %s"
|
msgid "Authorization request from %s"
|
||||||
msgstr ""
|
msgstr "%s ಇಂದ ದೃಢೀಕರಣ ದೋಷ"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:378
|
#: ../js/ui/status/bluetooth.js:378
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Device %s wants access to the service '%s'"
|
msgid "Device %s wants access to the service '%s'"
|
||||||
msgstr ""
|
msgstr "%s ಎಂಬ ಸಾಧನಕ್ಕಾಗಿ '%s' ಎಂಬ ಸೇವೆಯನ್ನು ನಿಲುಕಿಸಿಕೊಳ್ಳಲು ಬಯಸುತ್ತಿದೆ"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:380
|
#: ../js/ui/status/bluetooth.js:380
|
||||||
msgid "Always grant access"
|
msgid "Always grant access"
|
||||||
msgstr ""
|
msgstr "ಯಾವಾಗಲೂ ಅನುಮತಿಸು"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:381
|
#: ../js/ui/status/bluetooth.js:381
|
||||||
msgid "Grant this time only"
|
msgid "Grant this time only"
|
||||||
msgstr ""
|
msgstr "ಈ ಬಾರಿ ಮಾತ್ರ ಅನುಮತಿಸು"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:382
|
#: ../js/ui/status/bluetooth.js:382
|
||||||
msgid "Reject"
|
msgid "Reject"
|
||||||
@ -734,17 +750,17 @@ msgstr "ತಿರಸ್ಕರಿಸು"
|
|||||||
#: ../js/ui/status/bluetooth.js:412
|
#: ../js/ui/status/bluetooth.js:412
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing confirmation for %s"
|
msgid "Pairing confirmation for %s"
|
||||||
msgstr ""
|
msgstr "%s ಗಾಗಿ ಪೇರಿಂಗ್ ಖಚಿತಪಡಿಕೆ"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Device %s wants to pair with this computer"
|
msgid "Device %s wants to pair with this computer"
|
||||||
msgstr ""
|
msgstr "%s ಎನ್ನುವ ಸಾಧನದೊಂದಿಗೆ ಸಂಪರ್ಕ ಜೋಡಿಸಲು ಬಯಸುತ್ತಿದೆ"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:419
|
#: ../js/ui/status/bluetooth.js:419
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||||
msgstr ""
|
msgstr "'%s' ಎನ್ನುವ PIN ಸಾಧನದಲ್ಲಿರುವುದಕ್ಕೆ ತಾಳೆಯಾಗುತ್ತದೆಯೆ ಎಂದು ಖಚಿತಪಡಿಸಿ."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:421
|
#: ../js/ui/status/bluetooth.js:421
|
||||||
msgid "Matches"
|
msgid "Matches"
|
||||||
@ -757,11 +773,11 @@ msgstr "ತಾಳೆಯಾಗುತ್ತಿಲ್ಲ"
|
|||||||
#: ../js/ui/status/bluetooth.js:445
|
#: ../js/ui/status/bluetooth.js:445
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Pairing request for %s"
|
msgid "Pairing request for %s"
|
||||||
msgstr ""
|
msgstr "%s ಗಾಗಿ ಪೇರಿಂಗ್ ಮನವಿ"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:453
|
#: ../js/ui/status/bluetooth.js:453
|
||||||
msgid "Please enter the PIN mentioned on the device."
|
msgid "Please enter the PIN mentioned on the device."
|
||||||
msgstr ""
|
msgstr "ದಯವಿಟ್ಟು ಸಾಧನದಲ್ಲಿ ಸೂಚಿಸಿರುವ PIN ಅನ್ನು ನಮೂದಿಸಿ."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:469
|
#: ../js/ui/status/bluetooth.js:469
|
||||||
msgid "OK"
|
msgid "OK"
|
||||||
@ -769,51 +785,51 @@ msgstr "ಸರಿ"
|
|||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:72
|
#: ../js/ui/status/keyboard.js:72
|
||||||
msgid "Localization Settings"
|
msgid "Localization Settings"
|
||||||
msgstr ""
|
msgstr "ಲೋಕಲೈಸೇಶನ್ ಸಿದ್ಧತೆಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:85
|
#: ../js/ui/status/power.js:85
|
||||||
msgid "Power Settings"
|
msgid "Power Settings"
|
||||||
msgstr ""
|
msgstr "ವಿದ್ಯುಚ್ಛಕ್ತಿ ಸಿದ್ಧತೆಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:112
|
#: ../js/ui/status/power.js:112
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour remaining"
|
msgid "%d hour remaining"
|
||||||
msgid_plural "%d hours remaining"
|
msgid_plural "%d hours remaining"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d ಗಂಟೆ ಬಾಕಿ ಇದೆ"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d ಗಂಟೆಗಳು ಬಾಕಿ ಇವೆ"
|
||||||
|
|
||||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||||
#: ../js/ui/status/power.js:115
|
#: ../js/ui/status/power.js:115
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d %s %d %s remaining"
|
msgid "%d %s %d %s remaining"
|
||||||
msgstr ""
|
msgstr "%d %s %d %s ಬಾಕಿ ಇದೆ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:117
|
#: ../js/ui/status/power.js:117
|
||||||
msgid "hour"
|
msgid "hour"
|
||||||
msgid_plural "hours"
|
msgid_plural "hours"
|
||||||
msgstr[0] ""
|
msgstr[0] "ಗಂಟೆ"
|
||||||
msgstr[1] ""
|
msgstr[1] "ಗಂಟೆಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:117
|
#: ../js/ui/status/power.js:117
|
||||||
msgid "minute"
|
msgid "minute"
|
||||||
msgid_plural "minutes"
|
msgid_plural "minutes"
|
||||||
msgstr[0] ""
|
msgstr[0] "ನಿಮಿಷ"
|
||||||
msgstr[1] ""
|
msgstr[1] "ನಿಮಿಷಗಳು"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:120
|
#: ../js/ui/status/power.js:120
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute remaining"
|
msgid "%d minute remaining"
|
||||||
msgid_plural "%d minutes remaining"
|
msgid_plural "%d minutes remaining"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d ನಿಮಿಷ ಬಾಕಿ ಇದೆ"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d ನಿಮಿಷಗಳು ಬಾಕಿ ಇವೆ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:235
|
#: ../js/ui/status/power.js:235
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr ""
|
msgstr "AC ಅಡಾಪ್ಟರ್"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:237
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr ""
|
msgstr "ಲ್ಯಾಪ್ಟಾಪ್ ಬ್ಯಾಟರಿ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:239
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
@ -821,15 +837,15 @@ msgstr "UPS"
|
|||||||
|
|
||||||
#: ../js/ui/status/power.js:241
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr ""
|
msgstr "ತೆರೆ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:243
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr ""
|
msgstr "ಮೌಸ್"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:245
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr ""
|
msgstr "ಕೀಲಿಮಣೆ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:247
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
@ -837,51 +853,51 @@ msgstr "PDA"
|
|||||||
|
|
||||||
#: ../js/ui/status/power.js:249
|
#: ../js/ui/status/power.js:249
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr ""
|
msgstr "ಸೆಲ್ ಫೋನ್"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:251
|
#: ../js/ui/status/power.js:251
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr ""
|
msgstr "ಮೀಡಿಯ ಪ್ಲೇಯರ್"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:253
|
#: ../js/ui/status/power.js:253
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr ""
|
msgstr "ಟ್ಯಾಬ್ಲೆಟ್"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:255
|
#: ../js/ui/status/power.js:255
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr ""
|
msgstr "ಗಣಕ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1013
|
#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1013
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr ""
|
msgstr "ಗೊತ್ತಿರದ"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:44
|
#: ../js/ui/status/volume.js:44
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr ""
|
msgstr "ಧ್ವನಿ ಪ್ರಮಾಣ"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:57
|
#: ../js/ui/status/volume.js:57
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr ""
|
msgstr "ಮೈಕ್ರೊಫೋನ್"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:240
|
#: ../js/ui/telepathyClient.js:240
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is online."
|
msgid "%s is online."
|
||||||
msgstr ""
|
msgstr "%s ಆನ್ಲೈನ್ನಲ್ಲಿದ್ದಾರೆ."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:245
|
#: ../js/ui/telepathyClient.js:245
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is offline."
|
msgid "%s is offline."
|
||||||
msgstr ""
|
msgstr "%s ಆಫ್ಲೈನ್ನಲ್ಲಿದ್ದಾರೆ."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:248
|
#: ../js/ui/telepathyClient.js:248
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is away."
|
msgid "%s is away."
|
||||||
msgstr ""
|
msgstr "%s ಆಚೆ ಹೋಗಿದ್ದಾರೆ."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:251
|
#: ../js/ui/telepathyClient.js:251
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is busy."
|
msgid "%s is busy."
|
||||||
msgstr ""
|
msgstr "%s\" ಕಾರ್ಯನಿರತವಾಗಿದ್ದಾರೆ."
|
||||||
|
|
||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
@ -889,7 +905,7 @@ msgstr ""
|
|||||||
#: ../js/ui/telepathyClient.js:349
|
#: ../js/ui/telepathyClient.js:349
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at %X on %A"
|
msgid "Sent at %X on %A"
|
||||||
msgstr ""
|
msgstr "%X ಕ್ಕೆ %A ರಂದು ಕಳುಹಿಸಲಾಗಿದೆ"
|
||||||
|
|
||||||
#. Translators: this is the text displayed
|
#. Translators: this is the text displayed
|
||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
@ -897,17 +913,17 @@ msgstr ""
|
|||||||
#. characters
|
#. characters
|
||||||
#: ../js/ui/viewSelector.js:30
|
#: ../js/ui/viewSelector.js:30
|
||||||
msgid "Type to search..."
|
msgid "Type to search..."
|
||||||
msgstr ""
|
msgstr "ಹುಡುಕಲು ನಮೂದಿಸು..."
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:43
|
#: ../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:45
|
#: ../js/ui/windowAttentionHandler.js:45
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "'%s' is ready"
|
msgid "'%s' is ready"
|
||||||
msgstr ""
|
msgstr "'%s' ಸಿದ್ಧಗೊಂಡಿದೆ"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The number of sound outputs on a particular device
|
#. * The number of sound outputs on a particular device
|
||||||
@ -915,8 +931,8 @@ msgstr ""
|
|||||||
#, c-format
|
#, c-format
|
||||||
msgid "%u Output"
|
msgid "%u Output"
|
||||||
msgid_plural "%u Outputs"
|
msgid_plural "%u Outputs"
|
||||||
msgstr[0] ""
|
msgstr[0] "%u ಔಟ್ಪುಟ್"
|
||||||
msgstr[1] ""
|
msgstr[1] "%u ಔಟ್ಪುಟ್ಗಳು"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The number of sound inputs on a particular device
|
#. * The number of sound inputs on a particular device
|
||||||
@ -924,58 +940,58 @@ msgstr[1] ""
|
|||||||
#, c-format
|
#, c-format
|
||||||
msgid "%u Input"
|
msgid "%u Input"
|
||||||
msgid_plural "%u Inputs"
|
msgid_plural "%u Inputs"
|
||||||
msgstr[0] ""
|
msgstr[0] "%u ಇನ್ಪುಟ್"
|
||||||
msgstr[1] ""
|
msgstr[1] "%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:1363
|
#: ../src/shell-global.c:1363
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr ""
|
msgstr "ಒಂದು ನಿಮಿಷಕ್ಕೂ ಹಿಂದೆ"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1367
|
#: ../src/shell-global.c:1367
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d ನಿಮಿಷದ ಹಿಂದೆ"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d ನಿಮಿಷಗಳ ಹಿಂದೆ"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1372
|
#: ../src/shell-global.c:1372
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d ಗಂಟೆಯ ಹಿಂದೆ"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d ಗಂಟೆಗಳ ಹಿಂದೆ"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1377
|
#: ../src/shell-global.c:1377
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d ದಿನದ ಹಿಂದೆ"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d ದಿನಗಳ ಹಿಂದೆ"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1382
|
#: ../src/shell-global.c:1382
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d ವಾರದ ಹಿಂದೆ"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d ವಾರಗಳ ಹಿಂದೆ"
|
||||||
|
|
||||||
#: ../src/shell-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-util.c:104
|
#: ../src/shell-util.c:104
|
||||||
msgid "File System"
|
msgid "File System"
|
||||||
msgstr ""
|
msgstr "ಕಡತ ವ್ಯವಸ್ಥೆ"
|
||||||
|
|
||||||
#: ../src/shell-util.c:250
|
#: ../src/shell-util.c:250
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr ""
|
msgstr "ಹುಡುಕು"
|
||||||
|
|
||||||
#. Translators: the first string is the name of a gvfs
|
#. Translators: the first string is the name of a gvfs
|
||||||
#. * method, and the second string is a path. For
|
#. * method, and the second string is a path. For
|
||||||
@ -987,3 +1003,4 @@ msgstr ""
|
|||||||
msgid "%1$s: %2$s"
|
msgid "%1$s: %2$s"
|
||||||
msgstr "%1$s: %2$s"
|
msgstr "%1$s: %2$s"
|
||||||
|
|
||||||
|
|
||||||
|
155
po/nb.po
@ -8,8 +8,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell 2.91.x\n"
|
"Project-Id-Version: gnome-shell 2.91.x\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-02 20:21+0100\n"
|
"POT-Creation-Date: 2011-03-08 15:24+0100\n"
|
||||||
"PO-Revision-Date: 2011-03-02 20:22+0100\n"
|
"PO-Revision-Date: 2011-03-08 15:29+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"
|
||||||
@ -167,27 +167,27 @@ msgid "Execution of '%s' failed:"
|
|||||||
msgstr "Kjøring av «%s» feilet:"
|
msgstr "Kjøring av «%s» feilet:"
|
||||||
|
|
||||||
#. Translators: Filter to display all applications
|
#. Translators: Filter to display all applications
|
||||||
#: ../js/ui/appDisplay.js:195
|
#: ../js/ui/appDisplay.js:226
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Alle"
|
msgstr "Alle"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:282
|
#: ../js/ui/appDisplay.js:324
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "PROGRAMMER"
|
msgstr "PROGRAMMER"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:312
|
#: ../js/ui/appDisplay.js:350
|
||||||
msgid "SETTINGS"
|
msgid "SETTINGS"
|
||||||
msgstr "INNSTILLINGER"
|
msgstr "INNSTILLINGER"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:572
|
#: ../js/ui/appDisplay.js:612
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Nytt vindu"
|
msgstr "Nytt vindu"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:575
|
#: ../js/ui/appDisplay.js:615
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Fjern fra favoritter"
|
msgstr "Fjern fra favoritter"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:576
|
#: ../js/ui/appDisplay.js:616
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Legg til i favoritter"
|
msgstr "Legg til i favoritter"
|
||||||
|
|
||||||
@ -347,7 +347,7 @@ msgstr "Denne uken"
|
|||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Neste uke"
|
msgstr "Neste uke"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:174
|
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Fjern"
|
msgstr "Fjern"
|
||||||
|
|
||||||
@ -355,54 +355,54 @@ msgstr "Fjern"
|
|||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "Innstillinger for dato og klokkeslett"
|
msgstr "Innstillinger for dato og klokkeslett"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:110
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Åpne kalender"
|
msgstr "Åpne kalender"
|
||||||
|
|
||||||
#. 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/dateMenu.js:162
|
#: ../js/ui/dateMenu.js:164
|
||||||
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/dateMenu.js:163
|
#: ../js/ui/dateMenu.js:165
|
||||||
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/dateMenu.js:167
|
#: ../js/ui/dateMenu.js:169
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %R.%S"
|
msgstr "%a %R.%S"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:168
|
#: ../js/ui/dateMenu.js:170
|
||||||
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/dateMenu.js:175
|
#: ../js/ui/dateMenu.js:177
|
||||||
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/dateMenu.js:176
|
#: ../js/ui/dateMenu.js:178
|
||||||
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/dateMenu.js:180
|
#: ../js/ui/dateMenu.js:182
|
||||||
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/dateMenu.js:181
|
#: ../js/ui/dateMenu.js:183
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %l.%M %p"
|
msgstr "%a %l.%M %p"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:207
|
#: ../js/ui/dateMenu.js:209
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%a %e %B, %Y"
|
msgstr "%a %e %B, %Y"
|
||||||
|
|
||||||
@ -482,37 +482,41 @@ msgstr "Bekreft"
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Avbryt"
|
msgstr "Avbryt"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:587
|
#: ../js/ui/lookingGlass.js:588
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Ingen utvidelser installert"
|
msgstr "Ingen utvidelser installert"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:624
|
#: ../js/ui/lookingGlass.js:625
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Aktivert"
|
msgstr "Aktivert"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:626 ../src/gvc/gvc-mixer-control.c:1087
|
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Deaktivert"
|
msgstr "Deaktivert"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:628
|
#: ../js/ui/lookingGlass.js:629
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Feil"
|
msgstr "Feil"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:630
|
#: ../js/ui/lookingGlass.js:631
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Utdatert"
|
msgstr "Utdatert"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:655
|
#: ../js/ui/lookingGlass.js:656
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Vis kildekode"
|
msgstr "Vis kildekode"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:661
|
#: ../js/ui/lookingGlass.js:662
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Nettside"
|
msgstr "Nettside"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1902
|
#: ../js/ui/messageTray.js:926
|
||||||
|
msgid "Open"
|
||||||
|
msgstr "Åpne"
|
||||||
|
|
||||||
|
#: ../js/ui/messageTray.js:1963
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Systeminformasjon"
|
msgstr "Systeminformasjon"
|
||||||
|
|
||||||
@ -528,18 +532,28 @@ msgstr "Vinduer"
|
|||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Programmer"
|
msgstr "Programmer"
|
||||||
|
|
||||||
|
#. Translators: this is the name of the dock/favorites area on
|
||||||
|
#. the left of the overview
|
||||||
|
#: ../js/ui/overview.js:202
|
||||||
|
msgid "Dash"
|
||||||
|
msgstr "Favoritter"
|
||||||
|
|
||||||
#. 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:529
|
#: ../js/ui/panel.js:532
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "Avslutt %s"
|
msgstr "Avslutt %s"
|
||||||
|
|
||||||
#. 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:897
|
#: ../js/ui/panel.js:893
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Aktiviteter"
|
msgstr "Aktiviteter"
|
||||||
|
|
||||||
|
#: ../js/ui/panel.js:994
|
||||||
|
msgid "Panel"
|
||||||
|
msgstr "Panel"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:122
|
#: ../js/ui/placeDisplay.js:122
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
@ -562,7 +576,7 @@ msgstr "STEDER & ENHETER"
|
|||||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||||
#. switches containing "◯" and "|"). Other values will
|
#. switches containing "◯" and "|"). Other values will
|
||||||
#. simply result in invisible toggle switches.
|
#. simply result in invisible toggle switches.
|
||||||
#: ../js/ui/popupMenu.js:612
|
#: ../js/ui/popupMenu.js:618
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
@ -570,11 +584,11 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "Oppgi en kommando:"
|
msgstr "Oppgi en kommando:"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:295
|
#: ../js/ui/searchDisplay.js:283
|
||||||
msgid "Searching..."
|
msgid "Searching..."
|
||||||
msgstr "Søker …"
|
msgstr "Søker …"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:309
|
#: ../js/ui/searchDisplay.js:297
|
||||||
msgid "No matching results."
|
msgid "No matching results."
|
||||||
msgstr "Ingen treff."
|
msgstr "Ingen treff."
|
||||||
|
|
||||||
@ -614,47 +628,47 @@ msgstr "Bytt bruker"
|
|||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "Logg ut …"
|
msgstr "Logg ut …"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:81
|
#: ../js/ui/status/accessibility.js:62
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "Zoom"
|
msgstr "Zoom"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:69
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "Skjermleser"
|
msgstr "Skjermleser"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:92
|
#: ../js/ui/status/accessibility.js:73
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "Tastatur på skjermen"
|
msgstr "Tastatur på skjermen"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:96
|
#: ../js/ui/status/accessibility.js:77
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "Synlig varsling"
|
msgstr "Synlig varsling"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:99
|
#: ../js/ui/status/accessibility.js:80
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "Klebrige taster"
|
msgstr "Klebrige taster"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:102
|
#: ../js/ui/status/accessibility.js:83
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "Trege taster"
|
msgstr "Trege taster"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:105
|
#: ../js/ui/status/accessibility.js:86
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "Spretne taster"
|
msgstr "Spretne taster"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:108
|
#: ../js/ui/status/accessibility.js:89
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Mustaster"
|
msgstr "Mustaster"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:112
|
#: ../js/ui/status/accessibility.js:93
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "Innstillinger for tilgjengelighet"
|
msgstr "Innstillinger for tilgjengelighet"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:164
|
#: ../js/ui/status/accessibility.js:145
|
||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr "Høy kontrast"
|
msgstr "Høy kontrast"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:209
|
#: ../js/ui/status/accessibility.js:182
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "Stor tekst"
|
msgstr "Stor tekst"
|
||||||
|
|
||||||
@ -821,51 +835,51 @@ msgid_plural "%d minutes remaining"
|
|||||||
msgstr[0] "%d minutt gjenstår"
|
msgstr[0] "%d minutt gjenstår"
|
||||||
msgstr[1] "%d minutter gjenstår"
|
msgstr[1] "%d minutter gjenstår"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:241
|
#: ../js/ui/status/power.js:227
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "Strømadapter"
|
msgstr "Strømadapter"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:243
|
#: ../js/ui/status/power.js:229
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr "Batteri på bærbar"
|
msgstr "Batteri på bærbar"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:245
|
#: ../js/ui/status/power.js:231
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
msgstr "UPS"
|
msgstr "UPS"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:247
|
#: ../js/ui/status/power.js:233
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr "Skjerm"
|
msgstr "Skjerm"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:249
|
#: ../js/ui/status/power.js:235
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr "Mus"
|
msgstr "Mus"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:251
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Tastatur"
|
msgstr "Tastatur"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:253
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr "PDA"
|
msgstr "PDA"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:255
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "Mobiltelefon"
|
msgstr "Mobiltelefon"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:257
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr "Medieavspiller"
|
msgstr "Medieavspiller"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:259
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr "Nettbrett"
|
msgstr "Nettbrett"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:261
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Datamaskin"
|
msgstr "Datamaskin"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:263 ../src/shell-app-system.c:1013
|
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Ukjent"
|
msgstr "Ukjent"
|
||||||
|
|
||||||
@ -909,16 +923,20 @@ msgstr "Sendt %X på %A"
|
|||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters.
|
#. characters.
|
||||||
#: ../js/ui/viewSelector.js:103
|
#: ../js/ui/viewSelector.js:117
|
||||||
msgid "Type to search..."
|
msgid "Type to search..."
|
||||||
msgstr "Skriv for å søke …"
|
msgstr "Skriv for å søke …"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:43
|
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Søk"
|
||||||
|
|
||||||
|
#: ../js/ui/windowAttentionHandler.js:42
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has finished starting"
|
msgid "%s has finished starting"
|
||||||
msgstr "%s er ferdig startet"
|
msgstr "%s er ferdig startet"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:45
|
#: ../js/ui/windowAttentionHandler.js:44
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "'%s' is ready"
|
msgid "'%s' is ready"
|
||||||
msgstr "«%s» er klar"
|
msgstr "«%s» er klar"
|
||||||
@ -945,32 +963,36 @@ msgstr[1] "%u innganger"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Systemlyder"
|
msgstr "Systemlyder"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1298
|
#: ../src/main.c:395
|
||||||
|
msgid "Print version"
|
||||||
|
msgstr "Skriv ut versjon"
|
||||||
|
|
||||||
|
#: ../src/shell-global.c:1308
|
||||||
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:1302
|
#: ../src/shell-global.c:1312
|
||||||
#, 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:1307
|
#: ../src/shell-global.c:1317
|
||||||
#, 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:1312
|
#: ../src/shell-global.c:1322
|
||||||
#, 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:1317
|
#: ../src/shell-global.c:1327
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -991,10 +1013,6 @@ msgstr "Hjemmemappe"
|
|||||||
msgid "File System"
|
msgid "File System"
|
||||||
msgstr "Filsystem"
|
msgstr "Filsystem"
|
||||||
|
|
||||||
#: ../src/shell-util.c:250
|
|
||||||
msgid "Search"
|
|
||||||
msgstr "Søk"
|
|
||||||
|
|
||||||
#. Translators: the first string is the name of a gvfs
|
#. Translators: the first string is the name of a gvfs
|
||||||
#. * method, and the second string is a path. For
|
#. * method, and the second string is a path. For
|
||||||
#. * example, "Trash: some-directory". It means that the
|
#. * example, "Trash: some-directory". It means that the
|
||||||
@ -1004,6 +1022,3 @@ msgstr "Søk"
|
|||||||
#, 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 "PREFERENCES"
|
|
||||||
#~ msgstr "BRUKERVALG"
|
|
||||||
|
259
po/pa.po
@ -7,8 +7,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."
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
|
||||||
"cgi?product=gnome-shell&component=general\n"
|
"cgi?product=gnome-shell&component=general\n"
|
||||||
"POT-Creation-Date: 2011-02-23 16:51+0000\n"
|
"POT-Creation-Date: 2011-03-07 16:15+0000\n"
|
||||||
"PO-Revision-Date: 2011-02-25 07:31+0530\n"
|
"PO-Revision-Date: 2011-03-08 08:27+0530\n"
|
||||||
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
|
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
|
||||||
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
|
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -59,7 +59,6 @@ msgid "History for command (Alt-F2) dialog"
|
|||||||
msgstr "ਕਮਾਂਡ (Alt-F2) ਡਾਈਲਾਗ ਲਈ ਅਤੀਤ"
|
msgstr "ਕਮਾਂਡ (Alt-F2) ਡਾਈਲਾਗ ਲਈ ਅਤੀਤ"
|
||||||
|
|
||||||
#: ../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 the looking glass dialog"
|
msgid "History for the looking glass dialog"
|
||||||
msgstr "ਗਲਾਸ ਡਾਈਲਾਗ ਖੋਜ ਲਈ ਅਤੀਤ"
|
msgstr "ਗਲਾਸ ਡਾਈਲਾਗ ਖੋਜ ਲਈ ਅਤੀਤ"
|
||||||
|
|
||||||
@ -185,27 +184,27 @@ msgid "Execution of '%s' failed:"
|
|||||||
msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ:"
|
msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ:"
|
||||||
|
|
||||||
#. Translators: Filter to display all applications
|
#. Translators: Filter to display all applications
|
||||||
#: ../js/ui/appDisplay.js:174
|
#: ../js/ui/appDisplay.js:226
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "ਸਭ"
|
msgstr "ਸਭ"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:261
|
#: ../js/ui/appDisplay.js:324
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
|
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:291
|
#: ../js/ui/appDisplay.js:350
|
||||||
msgid "PREFERENCES"
|
msgid "SETTINGS"
|
||||||
msgstr "ਪਸੰਦ"
|
msgstr "ਸੈਟਿੰਗ"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:551
|
#: ../js/ui/appDisplay.js:612
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "ਨਵੀਂ ਵਿੰਡੋ"
|
msgstr "ਨਵੀਂ ਵਿੰਡੋ"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:555
|
#: ../js/ui/appDisplay.js:615
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
|
msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:556
|
#: ../js/ui/appDisplay.js:616
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "ਪਸੰਦ 'ਚ ਸ਼ਾਮਲ ਕਰੋ"
|
msgstr "ਪਸੰਦ 'ਚ ਸ਼ਾਮਲ ਕਰੋ"
|
||||||
|
|
||||||
@ -222,19 +221,19 @@ msgstr "%s ਨੂੰ ਤੁਹਾਡੀ ਪਸੰਦ ਤੋਂ ਹਟਾਇਆ
|
|||||||
#. Translators: Shown in calendar event list for all day events
|
#. Translators: Shown in calendar event list for all day events
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/calendar.js:65
|
#: ../js/ui/calendar.js:66
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "All Day"
|
msgid "All Day"
|
||||||
msgstr "ਸਭ ਦਿਨ"
|
msgstr "ਸਭ ਦਿਨ"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list, if 24h format
|
#. Translators: Shown in calendar event list, if 24h format
|
||||||
#: ../js/ui/calendar.js:70
|
#: ../js/ui/calendar.js:71
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "%H:%M"
|
msgid "%H:%M"
|
||||||
msgstr "%H:%M"
|
msgstr "%H:%M"
|
||||||
|
|
||||||
#. Transators: Shown in calendar event list, if 12h format
|
#. Transators: Shown in calendar event list, if 12h format
|
||||||
#: ../js/ui/calendar.js:77
|
#: ../js/ui/calendar.js:78
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "%l:%M %p"
|
msgid "%l:%M %p"
|
||||||
msgstr "%l:%M %p"
|
msgstr "%l:%M %p"
|
||||||
@ -244,43 +243,43 @@ msgstr "%l:%M %p"
|
|||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/calendar.js:117
|
#: ../js/ui/calendar.js:118
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "ਐ"
|
msgstr "ਐ"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday
|
#. Translators: Calendar grid abbreviation for Monday
|
||||||
#: ../js/ui/calendar.js:119
|
#: ../js/ui/calendar.js:120
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "ਸੋ"
|
msgstr "ਸੋ"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday
|
#. Translators: Calendar grid abbreviation for Tuesday
|
||||||
#: ../js/ui/calendar.js:121
|
#: ../js/ui/calendar.js:122
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "ਮੰ"
|
msgstr "ਮੰ"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday
|
#. Translators: Calendar grid abbreviation for Wednesday
|
||||||
#: ../js/ui/calendar.js:123
|
#: ../js/ui/calendar.js:124
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "ਬੁੱ"
|
msgstr "ਬੁੱ"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday
|
#. Translators: Calendar grid abbreviation for Thursday
|
||||||
#: ../js/ui/calendar.js:125
|
#: ../js/ui/calendar.js:126
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "ਵੀ"
|
msgstr "ਵੀ"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday
|
#. Translators: Calendar grid abbreviation for Friday
|
||||||
#: ../js/ui/calendar.js:127
|
#: ../js/ui/calendar.js:128
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "ਸ਼ੁੱ"
|
msgstr "ਸ਼ੁੱ"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday
|
#. Translators: Calendar grid abbreviation for Saturday
|
||||||
#: ../js/ui/calendar.js:129
|
#: ../js/ui/calendar.js:130
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "ਸ਼"
|
msgstr "ਸ਼"
|
||||||
@ -291,136 +290,136 @@ msgstr "ਸ਼"
|
|||||||
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
|
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
|
||||||
#. * both be 'T').
|
#. * both be 'T').
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/calendar.js:142
|
#: ../js/ui/calendar.js:143
|
||||||
msgctxt "list sunday"
|
msgctxt "list sunday"
|
||||||
msgid "Su"
|
msgid "Su"
|
||||||
msgstr "ਐ"
|
msgstr "ਐ"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Monday
|
#. Translators: Event list abbreviation for Monday
|
||||||
#: ../js/ui/calendar.js:144
|
#: ../js/ui/calendar.js:145
|
||||||
msgctxt "list monday"
|
msgctxt "list monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "ਸੋ"
|
msgstr "ਸੋ"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Tuesday
|
#. Translators: Event list abbreviation for Tuesday
|
||||||
#: ../js/ui/calendar.js:146
|
#: ../js/ui/calendar.js:147
|
||||||
msgctxt "list tuesday"
|
msgctxt "list tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "ਮੰ"
|
msgstr "ਮੰ"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Wednesday
|
#. Translators: Event list abbreviation for Wednesday
|
||||||
#: ../js/ui/calendar.js:148
|
#: ../js/ui/calendar.js:149
|
||||||
msgctxt "list wednesday"
|
msgctxt "list wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "ਬੁੱ"
|
msgstr "ਬੁੱ"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Thursday
|
#. Translators: Event list abbreviation for Thursday
|
||||||
#: ../js/ui/calendar.js:150
|
#: ../js/ui/calendar.js:151
|
||||||
msgctxt "list thursday"
|
msgctxt "list thursday"
|
||||||
msgid "Th"
|
msgid "Th"
|
||||||
msgstr "ਵੀ"
|
msgstr "ਵੀ"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Friday
|
#. Translators: Event list abbreviation for Friday
|
||||||
#: ../js/ui/calendar.js:152
|
#: ../js/ui/calendar.js:153
|
||||||
msgctxt "list friday"
|
msgctxt "list friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "ਸ਼ੁੱ"
|
msgstr "ਸ਼ੁੱ"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Saturday
|
#. Translators: Event list abbreviation for Saturday
|
||||||
#: ../js/ui/calendar.js:154
|
#: ../js/ui/calendar.js:155
|
||||||
msgctxt "list saturday"
|
msgctxt "list saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "ਸ਼"
|
msgstr "ਸ਼"
|
||||||
|
|
||||||
#. Translators: Text to show if there are no events
|
#. Translators: Text to show if there are no events
|
||||||
#: ../js/ui/calendar.js:701
|
#: ../js/ui/calendar.js:704
|
||||||
msgid "Nothing Scheduled"
|
msgid "Nothing Scheduled"
|
||||||
msgstr "ਕੋਈ ਵੀ ਸੈਡਿਊਲ ਨਹੀਂ ਹੈ"
|
msgstr "ਕੋਈ ਵੀ ਸੈਡਿਊਲ ਨਹੀਂ ਹੈ"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
#: ../js/ui/calendar.js:717
|
#: ../js/ui/calendar.js:720
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d %B"
|
msgstr "%A, %d %B"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
#: ../js/ui/calendar.js:720
|
#: ../js/ui/calendar.js:723
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d, %Y"
|
msgid "%A, %B %d, %Y"
|
||||||
msgstr "%A, %d %B %Y"
|
msgstr "%A, %d %B %Y"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:730
|
#: ../js/ui/calendar.js:733
|
||||||
msgid "Today"
|
msgid "Today"
|
||||||
msgstr "ਅੱਜ"
|
msgstr "ਅੱਜ"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:734
|
#: ../js/ui/calendar.js:737
|
||||||
msgid "Tomorrow"
|
msgid "Tomorrow"
|
||||||
msgstr "ਭਲਕ"
|
msgstr "ਭਲਕ"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:743
|
#: ../js/ui/calendar.js:746
|
||||||
msgid "This week"
|
msgid "This week"
|
||||||
msgstr "ਇਹ ਹਫ਼ਤਾ"
|
msgstr "ਇਹ ਹਫ਼ਤਾ"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:751
|
#: ../js/ui/calendar.js:754
|
||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "ਹਫ਼ਤਾ ਅੱਗੇ"
|
msgstr "ਹਫ਼ਤਾ ਅੱਗੇ"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:174
|
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "ਹਟਾਓ"
|
msgstr "ਹਟਾਓ"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:93
|
#: ../js/ui/dateMenu.js:91
|
||||||
msgid "Date and Time Settings"
|
msgid "Date and Time Settings"
|
||||||
msgstr "ਮਿਤੀ ਤੇ ਸਮਾਂ ਸੈਟਿੰਗ"
|
msgstr "ਮਿਤੀ ਤੇ ਸਮਾਂ ਸੈਟਿੰਗ"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:112
|
#: ../js/ui/dateMenu.js:111
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
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/dateMenu.js:151
|
#: ../js/ui/dateMenu.js:164
|
||||||
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/dateMenu.js:152
|
#: ../js/ui/dateMenu.js:165
|
||||||
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/dateMenu.js:156
|
#: ../js/ui/dateMenu.js:169
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %R:%S"
|
msgstr "%a %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:157
|
#: ../js/ui/dateMenu.js:170
|
||||||
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/dateMenu.js:164
|
#: ../js/ui/dateMenu.js:177
|
||||||
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/dateMenu.js:165
|
#: ../js/ui/dateMenu.js:178
|
||||||
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/dateMenu.js:169
|
#: ../js/ui/dateMenu.js:182
|
||||||
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/dateMenu.js:170
|
#: ../js/ui/dateMenu.js:183
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %l:%M %p"
|
msgstr "%a %l:%M %p"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:196
|
#: ../js/ui/dateMenu.js:209
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e %B %Y"
|
msgstr "%A, %e %B %Y"
|
||||||
|
|
||||||
@ -499,37 +498,41 @@ msgstr "ਪੁਸ਼ਟੀ"
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "ਰੱਦ ਕਰੋ"
|
msgstr "ਰੱਦ ਕਰੋ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:587
|
#: ../js/ui/lookingGlass.js:588
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "ਕੋਈ ਇਕਸਟੈਨਸ਼ਨ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ"
|
msgstr "ਕੋਈ ਇਕਸਟੈਨਸ਼ਨ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:624
|
#: ../js/ui/lookingGlass.js:625
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "ਚਾਲੂ ਹੈ"
|
msgstr "ਚਾਲੂ ਹੈ"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:626 ../src/gvc/gvc-mixer-control.c:1087
|
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1087
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "ਬੰਦ ਹੈ"
|
msgstr "ਬੰਦ ਹੈ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:628
|
#: ../js/ui/lookingGlass.js:629
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "ਗਲਤੀ"
|
msgstr "ਗਲਤੀ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:630
|
#: ../js/ui/lookingGlass.js:631
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "ਪੁਰਾਣਾ"
|
msgstr "ਪੁਰਾਣਾ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:655
|
#: ../js/ui/lookingGlass.js:656
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "ਸਰੋਤ ਵੇਖੋ"
|
msgstr "ਸਰੋਤ ਵੇਖੋ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:661
|
#: ../js/ui/lookingGlass.js:662
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "ਵੈੱਬ ਪੇਜ਼"
|
msgstr "ਵੈੱਬ ਪੇਜ਼"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1902
|
#: ../js/ui/messageTray.js:926
|
||||||
|
msgid "Open"
|
||||||
|
msgstr "ਖੋਲ੍ਹੋ"
|
||||||
|
|
||||||
|
#: ../js/ui/messageTray.js:1963
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "ਸਿਸਟਮ ਜਾਣਕਾਰੀ"
|
msgstr "ਸਿਸਟਮ ਜਾਣਕਾਰੀ"
|
||||||
|
|
||||||
@ -545,18 +548,29 @@ msgstr "ਵਿੰਡੋ"
|
|||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
|
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
|
||||||
|
|
||||||
|
#. Translators: this is the name of the dock/favorites area on
|
||||||
|
#. the left of the overview
|
||||||
|
#: ../js/ui/overview.js:202
|
||||||
|
msgid "Dash"
|
||||||
|
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:537
|
#: ../js/ui/panel.js:532
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "%s ਬੰਦ ਕਰੋ"
|
msgstr "%s ਬੰਦ ਕਰੋ"
|
||||||
|
|
||||||
#. 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:772
|
#: ../js/ui/panel.js:893
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "ਸਰਗਰਮੀਆਂ"
|
msgstr "ਸਰਗਰਮੀਆਂ"
|
||||||
|
|
||||||
|
#: ../js/ui/panel.js:994
|
||||||
|
#| msgid "Cancel"
|
||||||
|
msgid "Panel"
|
||||||
|
msgstr "ਪੈਨਲ"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:122
|
#: ../js/ui/placeDisplay.js:122
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
@ -579,7 +593,7 @@ msgstr "ਥਾਵਾਂ ਤੇ ਜੰਤਰ"
|
|||||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||||
#. switches containing "◯" and "|"). Other values will
|
#. switches containing "◯" and "|"). Other values will
|
||||||
#. simply result in invisible toggle switches.
|
#. simply result in invisible toggle switches.
|
||||||
#: ../js/ui/popupMenu.js:612
|
#: ../js/ui/popupMenu.js:618
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-us"
|
msgstr "toggle-switch-us"
|
||||||
|
|
||||||
@ -587,92 +601,91 @@ msgstr "toggle-switch-us"
|
|||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "ਕਮਾਂਡ ਦਿਓ ਜੀ:"
|
msgstr "ਕਮਾਂਡ ਦਿਓ ਜੀ:"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:295
|
#: ../js/ui/searchDisplay.js:283
|
||||||
msgid "Searching..."
|
msgid "Searching..."
|
||||||
msgstr "ਖੋਜ ਜਾਰੀ ਹੈ..."
|
msgstr "ਖੋਜ ਜਾਰੀ ਹੈ..."
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:309
|
#: ../js/ui/searchDisplay.js:297
|
||||||
msgid "No matching results."
|
msgid "No matching results."
|
||||||
msgstr "ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ ਲੱਭਿਆ।"
|
msgstr "ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ ਲੱਭਿਆ।"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:99 ../js/ui/statusMenu.js:163
|
#: ../js/ui/statusMenu.js:102 ../js/ui/statusMenu.js:166
|
||||||
msgid "Power Off..."
|
msgid "Power Off..."
|
||||||
msgstr "...ਬੰਦ ਕਰੋ"
|
msgstr "...ਬੰਦ ਕਰੋ"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:101 ../js/ui/statusMenu.js:162
|
#: ../js/ui/statusMenu.js:104 ../js/ui/statusMenu.js:165
|
||||||
#| msgid "Suspend..."
|
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "ਸਸਪੈਂਡ"
|
msgstr "ਸਸਪੈਂਡ"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:122
|
#: ../js/ui/statusMenu.js:125
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "ਉਪਲੱਬਧ"
|
msgstr "ਉਪਲੱਬਧ"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:127
|
#: ../js/ui/statusMenu.js:130
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "ਰੁਝਿਆ"
|
msgstr "ਰੁਝਿਆ"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:135
|
#: ../js/ui/statusMenu.js:138
|
||||||
msgid "My Account"
|
msgid "My Account"
|
||||||
msgstr "ਮੇਰਾ ਅਕਾਊਂਟ"
|
msgstr "ਮੇਰਾ ਅਕਾਊਂਟ"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:139
|
#: ../js/ui/statusMenu.js:142
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ"
|
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:146
|
#: ../js/ui/statusMenu.js:149
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
msgstr "ਸਕਰੀਨ ਲਾਕ ਕਰੋ"
|
msgstr "ਸਕਰੀਨ ਲਾਕ ਕਰੋ"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:150
|
#: ../js/ui/statusMenu.js:153
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "ਯੂਜ਼ਰ ਬਦਲੋ"
|
msgstr "ਯੂਜ਼ਰ ਬਦਲੋ"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:155
|
#: ../js/ui/statusMenu.js:158
|
||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "...ਲਾਗਆਉਟ"
|
msgstr "...ਲਾਗਆਉਟ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:81
|
#: ../js/ui/status/accessibility.js:62
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "ਜ਼ੂਮ"
|
msgstr "ਜ਼ੂਮ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:69
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "ਸਕਰੀਨ ਰੀਡਰ"
|
msgstr "ਸਕਰੀਨ ਰੀਡਰ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:92
|
#: ../js/ui/status/accessibility.js:73
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "ਸਕਰੀਨ ਕੀਬੋਰਡ"
|
msgstr "ਸਕਰੀਨ ਕੀਬੋਰਡ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:96
|
#: ../js/ui/status/accessibility.js:77
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "ਦਿੱਖ ਚੇਤਾਵਨੀ"
|
msgstr "ਦਿੱਖ ਚੇਤਾਵਨੀ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:99
|
#: ../js/ui/status/accessibility.js:80
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "ਸਟਿੱਕੀ ਸਵਿੱਚਾਂ"
|
msgstr "ਸਟਿੱਕੀ ਸਵਿੱਚਾਂ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:102
|
#: ../js/ui/status/accessibility.js:83
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "ਹੌਲੀ ਸਵਿੱਚਾਂ"
|
msgstr "ਹੌਲੀ ਸਵਿੱਚਾਂ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:105
|
#: ../js/ui/status/accessibility.js:86
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "ਬਾਊਂਸ ਸਵਿੱਚਾਂ"
|
msgstr "ਬਾਊਂਸ ਸਵਿੱਚਾਂ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:108
|
#: ../js/ui/status/accessibility.js:89
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "ਮਾਊਸ ਸਵਿੱਚਾਂ"
|
msgstr "ਮਾਊਸ ਸਵਿੱਚਾਂ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:112
|
#: ../js/ui/status/accessibility.js:93
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "ਯੂਨੀਵਰਸਲ ਅਸੈੱਸ ਸੈਟਿੰਗ"
|
msgstr "ਯੂਨੀਵਰਸਲ ਅਸੈੱਸ ਸੈਟਿੰਗ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:164
|
#: ../js/ui/status/accessibility.js:145
|
||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr "ਵੱਧ ਕਨਟਰਾਸਟ"
|
msgstr "ਵੱਧ ਕਨਟਰਾਸਟ"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:209
|
#: ../js/ui/status/accessibility.js:182
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "ਵੱਡੇ ਅੱਖਰ"
|
msgstr "ਵੱਡੇ ਅੱਖਰ"
|
||||||
|
|
||||||
@ -801,7 +814,13 @@ msgstr "ਲੋਕਲਾਈਜ਼ੇਸ਼ਨ ਸੈਟਿੰਗ"
|
|||||||
msgid "Power Settings"
|
msgid "Power Settings"
|
||||||
msgstr "ਪਾਵਰ ਸੈਟਿੰਗ"
|
msgstr "ਪਾਵਰ ਸੈਟਿੰਗ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:112
|
#. 0 is reported when UPower does not have enough data
|
||||||
|
#. to estimate battery life
|
||||||
|
#: ../js/ui/status/power.js:110
|
||||||
|
msgid "Estimating..."
|
||||||
|
msgstr "...ਅਨੁਮਾਨ ਲਾਇਆ ਜਾ ਰਿਹਾ ਹੈ"
|
||||||
|
|
||||||
|
#: ../js/ui/status/power.js:117
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour remaining"
|
msgid "%d hour remaining"
|
||||||
msgid_plural "%d hours remaining"
|
msgid_plural "%d hours remaining"
|
||||||
@ -809,75 +828,75 @@ msgstr[0] "%d ਘੰਟਾ ਬਾਕੀ"
|
|||||||
msgstr[1] "%d ਘੰਟੇ ਬਾਕੀ"
|
msgstr[1] "%d ਘੰਟੇ ਬਾਕੀ"
|
||||||
|
|
||||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||||
#: ../js/ui/status/power.js:115
|
#: ../js/ui/status/power.js:120
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d %s %d %s remaining"
|
msgid "%d %s %d %s remaining"
|
||||||
msgstr "%d %s %d %s ਬਾਕੀ"
|
msgstr "%d %s %d %s ਬਾਕੀ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:117
|
#: ../js/ui/status/power.js:122
|
||||||
msgid "hour"
|
msgid "hour"
|
||||||
msgid_plural "hours"
|
msgid_plural "hours"
|
||||||
msgstr[0] "ਘੰਟਾ"
|
msgstr[0] "ਘੰਟਾ"
|
||||||
msgstr[1] "ਘੰਟੇ"
|
msgstr[1] "ਘੰਟੇ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:117
|
#: ../js/ui/status/power.js:122
|
||||||
msgid "minute"
|
msgid "minute"
|
||||||
msgid_plural "minutes"
|
msgid_plural "minutes"
|
||||||
msgstr[0] "ਮਿੰਟ"
|
msgstr[0] "ਮਿੰਟ"
|
||||||
msgstr[1] "ਮਿੰਟ"
|
msgstr[1] "ਮਿੰਟ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:120
|
#: ../js/ui/status/power.js:125
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute remaining"
|
msgid "%d minute remaining"
|
||||||
msgid_plural "%d minutes remaining"
|
msgid_plural "%d minutes remaining"
|
||||||
msgstr[0] "%d ਮਿੰਟ ਬਾਕੀ"
|
msgstr[0] "%d ਮਿੰਟ ਬਾਕੀ"
|
||||||
msgstr[1] "%d ਮਿੰਟ ਬਾਕੀ"
|
msgstr[1] "%d ਮਿੰਟ ਬਾਕੀ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:235
|
#: ../js/ui/status/power.js:227
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "AC ਐਡਪਟਰ"
|
msgstr "AC ਐਡਪਟਰ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:237
|
#: ../js/ui/status/power.js:229
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr "ਲੈਪਟਾਪ ਬੈਟਰੀ"
|
msgstr "ਲੈਪਟਾਪ ਬੈਟਰੀ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:239
|
#: ../js/ui/status/power.js:231
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
msgstr "UPS"
|
msgstr "UPS"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:241
|
#: ../js/ui/status/power.js:233
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr "ਮਾਨੀਟਰ"
|
msgstr "ਮਾਨੀਟਰ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:243
|
#: ../js/ui/status/power.js:235
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr "ਮਾਊਸ"
|
msgstr "ਮਾਊਸ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:245
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "ਕੀਬੋਰਡ"
|
msgstr "ਕੀਬੋਰਡ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:247
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr "PDA"
|
msgstr "PDA"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:249
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "ਸੈੱਲ ਫੋਨ"
|
msgstr "ਸੈੱਲ ਫੋਨ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:251
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr "ਮੀਡਿਆ ਪਲੇਅਰ"
|
msgstr "ਮੀਡਿਆ ਪਲੇਅਰ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:253
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr "ਟੇਬਲੇਟ"
|
msgstr "ਟੇਬਲੇਟ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:255
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "ਕੰਪਿਊਟਰ"
|
msgstr "ਕੰਪਿਊਟਰ"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1013
|
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "ਅਣਜਾਣ"
|
msgstr "ਅਣਜਾਣ"
|
||||||
|
|
||||||
@ -889,22 +908,22 @@ msgstr "ਆਵਾਜ਼"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "ਮਾਈਕਰੋਫੋਨ"
|
msgstr "ਮਾਈਕਰੋਫੋਨ"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:240
|
#: ../js/ui/telepathyClient.js:239
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is online."
|
msgid "%s is online."
|
||||||
msgstr "%s ਆਨਲਾਈਨ ਹੈ।"
|
msgstr "%s ਆਨਲਾਈਨ ਹੈ।"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:245
|
#: ../js/ui/telepathyClient.js:244
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is offline."
|
msgid "%s is offline."
|
||||||
msgstr "%s ਆਫਲਾਈਨ ਹੈ।"
|
msgstr "%s ਆਫਲਾਈਨ ਹੈ।"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:248
|
#: ../js/ui/telepathyClient.js:247
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is away."
|
msgid "%s is away."
|
||||||
msgstr "%s ਦੂਰ ਹੈ।"
|
msgstr "%s ਦੂਰ ਹੈ।"
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:251
|
#: ../js/ui/telepathyClient.js:250
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is busy."
|
msgid "%s is busy."
|
||||||
msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।"
|
msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।"
|
||||||
@ -912,7 +931,7 @@ msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।"
|
|||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#: ../js/ui/telepathyClient.js:349
|
#: ../js/ui/telepathyClient.js:348
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at %X on %A"
|
msgid "Sent at %X on %A"
|
||||||
msgstr "%2$A ਨੂੰ %1$X ਵਜੇ ਭੇਜਿਆ"
|
msgstr "%2$A ਨੂੰ %1$X ਵਜੇ ਭੇਜਿਆ"
|
||||||
@ -920,17 +939,21 @@ msgstr "%2$A ਨੂੰ %1$X ਵਜੇ ਭੇਜਿਆ"
|
|||||||
#. Translators: this is the text displayed
|
#. Translators: this is the text displayed
|
||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters
|
#. characters.
|
||||||
#: ../js/ui/viewSelector.js:30
|
#: ../js/ui/viewSelector.js:117
|
||||||
msgid "Type to search..."
|
msgid "Type to search..."
|
||||||
msgstr "...ਲੱਭਣ ਲਈ ਲਿਖੋ"
|
msgstr "...ਲੱਭਣ ਲਈ ਲਿਖੋ"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:43
|
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "ਖੋਜ"
|
||||||
|
|
||||||
|
#: ../js/ui/windowAttentionHandler.js:42
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has finished starting"
|
msgid "%s has finished starting"
|
||||||
msgstr "%s ਸ਼ੁਰੂ ਹੋਣਾ ਖਤਮ ਹੋਇਆ"
|
msgstr "%s ਸ਼ੁਰੂ ਹੋਣਾ ਖਤਮ ਹੋਇਆ"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:45
|
#: ../js/ui/windowAttentionHandler.js:44
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "'%s' is ready"
|
msgid "'%s' is ready"
|
||||||
msgstr "'%s' ਤਿਆਰ ਹੈ"
|
msgstr "'%s' ਤਿਆਰ ਹੈ"
|
||||||
@ -957,32 +980,32 @@ msgstr[1] "%u ਇੰਪੁੱਟ"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "ਸਿਸਟਮ ਸਾਊਂਡ"
|
msgstr "ਸਿਸਟਮ ਸਾਊਂਡ"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1363
|
#: ../src/shell-global.c:1298
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "ਇੱਕ ਮਿੰਟ ਤੋਂ ਘੱਟ ਚਿਰ ਪਹਿਲਾਂ"
|
msgstr "ਇੱਕ ਮਿੰਟ ਤੋਂ ਘੱਟ ਚਿਰ ਪਹਿਲਾਂ"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1367
|
#: ../src/shell-global.c:1302
|
||||||
#, 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 ਮਿੰਟ ਪਹਿਲਾਂ"
|
||||||
msgstr[1] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
|
msgstr[1] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1372
|
#: ../src/shell-global.c:1307
|
||||||
#, 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 ਘੰਟਾ ਪਹਿਲਾਂ"
|
||||||
msgstr[1] "%d ਘੰਟੇ ਪਹਿਲਾਂ"
|
msgstr[1] "%d ਘੰਟੇ ਪਹਿਲਾਂ"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1377
|
#: ../src/shell-global.c:1312
|
||||||
#, 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 ਦਿਨ ਪਹਿਲਾਂ"
|
||||||
msgstr[1] "%d ਦਿਨ ਪਹਿਲਾਂ"
|
msgstr[1] "%d ਦਿਨ ਪਹਿਲਾਂ"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1382
|
#: ../src/shell-global.c:1317
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -990,8 +1013,9 @@ msgstr[0] "%d ਹਫ਼ਤਾ ਪਹਿਲਾਂ"
|
|||||||
msgstr[1] "%d ਹਫ਼ਤੇ ਪਹਿਲਾਂ"
|
msgstr[1] "%d ਹਫ਼ਤੇ ਪਹਿਲਾਂ"
|
||||||
|
|
||||||
#: ../src/shell-polkit-authentication-agent.c:334
|
#: ../src/shell-polkit-authentication-agent.c:334
|
||||||
msgid "Authentation dialog was dismissed by the user"
|
#| msgid "Authentation dialog was dismissed by the user"
|
||||||
msgstr "ਪਰਮਾਣਕਿਤਾ ਡਾਈਲਾਗ ਯੂਜ਼ਰ ਨੇ ਰੱਦ ਕੀਤਾ"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
|
msgstr "ਪਰਮਾਣਕਿਤਾ ਡਾਈਲਾਗ ਯੂਜ਼ਰ ਵਲੋਂ ਰੱਦ ਕੀਤਾ"
|
||||||
|
|
||||||
#: ../src/shell-util.c:89
|
#: ../src/shell-util.c:89
|
||||||
msgid "Home Folder"
|
msgid "Home Folder"
|
||||||
@ -1003,10 +1027,6 @@ msgstr "ਘਰ ਫੋਲਡਰ"
|
|||||||
msgid "File System"
|
msgid "File System"
|
||||||
msgstr "ਫਾਇਲ ਸਿਸਟਮ"
|
msgstr "ਫਾਇਲ ਸਿਸਟਮ"
|
||||||
|
|
||||||
#: ../src/shell-util.c:250
|
|
||||||
msgid "Search"
|
|
||||||
msgstr "ਖੋਜ"
|
|
||||||
|
|
||||||
#. Translators: the first string is the name of a gvfs
|
#. Translators: the first string is the name of a gvfs
|
||||||
#. * method, and the second string is a path. For
|
#. * method, and the second string is a path. For
|
||||||
#. * example, "Trash: some-directory". It means that the
|
#. * example, "Trash: some-directory". It means that the
|
||||||
@ -1017,6 +1037,9 @@ msgstr "ਖੋਜ"
|
|||||||
msgid "%1$s: %2$s"
|
msgid "%1$s: %2$s"
|
||||||
msgstr "%1$s: %2$s"
|
msgstr "%1$s: %2$s"
|
||||||
|
|
||||||
|
#~ msgid "PREFERENCES"
|
||||||
|
#~ msgstr "ਪਸੰਦ"
|
||||||
|
|
||||||
#~ msgid "Clip the crosshairs at the center"
|
#~ msgid "Clip the crosshairs at the center"
|
||||||
#~ msgstr "ਸੈਂਟਰ ਉੱਤੇ ਕਰਾਂਸਹੇਅਰ ਕਲਿੱਪ ਕਰੋ"
|
#~ msgstr "ਸੈਂਟਰ ਉੱਤੇ ਕਰਾਂਸਹੇਅਰ ਕਲਿੱਪ ਕਰੋ"
|
||||||
|
|
||||||
|
39
po/ta.po
@ -522,8 +522,9 @@ msgstr "PLACES & DEVICES"
|
|||||||
#. switches containing "◯" and "|"). Other values will
|
#. switches containing "◯" and "|"). Other values will
|
||||||
#. simply result in invisible toggle switches.
|
#. simply result in invisible toggle switches.
|
||||||
#: ../js/ui/popupMenu.js:33
|
#: ../js/ui/popupMenu.js:33
|
||||||
|
#, fuzzy
|
||||||
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:"
|
||||||
@ -718,39 +719,3 @@ msgstr "தேடு"
|
|||||||
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 "பணி இட மேல்பார்வை காட்சிப் பாங்கு."
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
|
||||||
#~ "\"single\" and \"grid\"."
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "மேல்பார்வையில் தேர்ந்தெடுத்த பணீட காட்சி பாங்கு. ஆதரவுள்ள மதிப்புகள் 'ஒன்று' மற்றும் "
|
|
||||||
#~ "'வலை'"
|
|
||||||
|
|
||||||
#~ msgid "Drag here to add favorites"
|
|
||||||
#~ msgstr "விருப்பங்களுக்கு சேர்க்க இங்கு இழுத்துவிடு"
|
|
||||||
|
|
||||||
#~ msgid "Find"
|
|
||||||
#~ msgstr "தேடு"
|
|
||||||
|
|
||||||
#~ msgid "Searching..."
|
|
||||||
#~ msgstr "தேடுகிறது..."
|
|
||||||
|
|
||||||
#~ msgid "No matching results."
|
|
||||||
#~ msgstr "பொருத்தமான விடைகள் இல்லை"
|
|
||||||
|
|
||||||
#~ msgid "ON"
|
|
||||||
#~ msgstr "இயக்கத்தில்"
|
|
||||||
|
|
||||||
#~ msgid "OFF"
|
|
||||||
#~ msgstr "செயல் நீக்கு"
|
|
||||||
|
|
||||||
#~ msgid "Invisible"
|
|
||||||
#~ msgstr "பார்க்கமுடியாதது"
|
|
||||||
|
|
||||||
#~ msgid "Account Information..."
|
|
||||||
#~ msgstr "கணக்கு தகவல்..."
|
|
||||||
|
|
||||||
#~ msgid "System Preferences..."
|
|
||||||
#~ msgstr "கணினி முன்னுரிமைகள்..."
|
|
||||||
|
@ -4,7 +4,10 @@ service_in_files = calendar-server/org.gnome.Shell.CalendarServer.service.in
|
|||||||
service_DATA = $(service_in_files:.service.in=.service)
|
service_DATA = $(service_in_files:.service.in=.service)
|
||||||
|
|
||||||
$(service_DATA): $(service_in_files) Makefile
|
$(service_DATA): $(service_in_files) Makefile
|
||||||
@sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@.tmp && mv $@.tmp $@
|
$(AM_V_GEN) \
|
||||||
|
[ -d $(@D) ] || $(mkdir_p) $(@D) ; \
|
||||||
|
sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@.tmp && mv $@.tmp $@
|
||||||
|
CLEANFILES += $(service_DATA)
|
||||||
|
|
||||||
libexec_PROGRAMS += gnome-shell-calendar-server
|
libexec_PROGRAMS += gnome-shell-calendar-server
|
||||||
|
|
||||||
|
@ -49,3 +49,4 @@ Gvc_1_0_gir_CFLAGS = $(INCLUDES) -I$(srcdir)/gvc -DWITH_INTROSPECTION
|
|||||||
Gvc_1_0_gir_LIBS = libgvc.la
|
Gvc_1_0_gir_LIBS = libgvc.la
|
||||||
Gvc_1_0_gir_FILES = $(addprefix $(srcdir)/,$(libgvc_la_gir_sources))
|
Gvc_1_0_gir_FILES = $(addprefix $(srcdir)/,$(libgvc_la_gir_sources))
|
||||||
INTROSPECTION_GIRS += Gvc-1.0.gir
|
INTROSPECTION_GIRS += Gvc-1.0.gir
|
||||||
|
CLEANFILES += Gvc-1.0.gir
|
||||||
|
@ -10,17 +10,31 @@ noinst_PROGRAMS =
|
|||||||
-include $(INTROSPECTION_MAKEFILE)
|
-include $(INTROSPECTION_MAKEFILE)
|
||||||
INTROSPECTION_GIRS =
|
INTROSPECTION_GIRS =
|
||||||
INTROSPECTION_SCANNER_ARGS = --warn-all --warn-error --add-include-path=$(srcdir)
|
INTROSPECTION_SCANNER_ARGS = --warn-all --warn-error --add-include-path=$(srcdir)
|
||||||
INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir) --includedir=$(MUTTER_LIB_DIR)/mutter/
|
INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir) --includedir=$(MUTTER_TYPELIB_DIR)
|
||||||
|
|
||||||
typelibdir = $(pkglibdir)
|
typelibdir = $(pkglibdir)
|
||||||
typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
|
typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
|
||||||
|
|
||||||
CLEANFILES += $(gir_DATA) $(typelib_DATA)
|
CLEANFILES += $(gir_DATA) $(typelib_DATA)
|
||||||
|
|
||||||
generated_bin_scripts = gnome-shell-installed gnome-shell-jhbuild gnome-shell-extension-tool
|
bin_SCRIPTS += gnome-shell-extension-tool
|
||||||
bin_SCRIPTS += gnome-shell $(generated_bin_scripts)
|
bin_PROGRAMS = gnome-shell-real
|
||||||
|
|
||||||
generated_script_substitutions = -e "s|@MUTTER_BIN_DIR[@]|$(MUTTER_BIN_DIR)|" \
|
if USE_JHBUILD_WRAPPER_SCRIPT
|
||||||
|
gnome_shell = gnome-shell-jhbuild
|
||||||
|
bin_SCRIPTS += gnome-shell-jhbuild
|
||||||
|
else
|
||||||
|
gnome_shell = gnome-shell-real
|
||||||
|
endif
|
||||||
|
|
||||||
|
noinst_DATA = gnome-shell
|
||||||
|
gnome-shell: $(gnome_shell) Makefile
|
||||||
|
cp $< $@.tmp && mv $@.tmp $@
|
||||||
|
install-exec-hook:
|
||||||
|
mv $(DESTDIR)$(bindir)/$(gnome_shell) $(DESTDIR)$(bindir)/gnome-shell
|
||||||
|
|
||||||
|
generated_script_substitutions = \
|
||||||
|
-e "s|@bindir[@]|$(bindir)|" \
|
||||||
-e "s|@datadir[@]|$(datadir)|" \
|
-e "s|@datadir[@]|$(datadir)|" \
|
||||||
-e "s|@libexecdir[@]|$(libexecdir)|" \
|
-e "s|@libexecdir[@]|$(libexecdir)|" \
|
||||||
-e "s|@libdir[@]|$(libdir)|" \
|
-e "s|@libdir[@]|$(libdir)|" \
|
||||||
@ -33,22 +47,11 @@ generated_script_substitutions = -e "s|@MUTTER_BIN_DIR[@]|$(MUTTER_BIN_DIR)|" \
|
|||||||
gnome-shell-jhbuild: gnome-shell-jhbuild.in Makefile
|
gnome-shell-jhbuild: gnome-shell-jhbuild.in Makefile
|
||||||
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
|
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
|
||||||
|
|
||||||
gnome-shell-installed: gnome-shell-installed.in Makefile
|
|
||||||
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
|
|
||||||
|
|
||||||
gnome-shell-extension-tool: gnome-shell-extension-tool.in Makefile
|
gnome-shell-extension-tool: gnome-shell-extension-tool.in Makefile
|
||||||
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
|
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
|
||||||
|
|
||||||
if USE_JHBUILD_WRAPPER_SCRIPT
|
CLEANFILES += gnome-shell $(bin_SCRIPTS)
|
||||||
gnome-shell: gnome-shell-jhbuild Makefile
|
EXTRA_DIST += $(bin_SCRIPTS:=.in)
|
||||||
cp $< $@.tmp && mv $@.tmp $@
|
|
||||||
else
|
|
||||||
gnome-shell: gnome-shell-installed Makefile
|
|
||||||
cp $< $@.tmp && mv $@.tmp $@
|
|
||||||
endif
|
|
||||||
|
|
||||||
CLEANFILES += gnome-shell $(generated_bin_scripts)
|
|
||||||
EXTRA_DIST += $(generated_bin_scripts:=.in)
|
|
||||||
|
|
||||||
include Makefile-gdmuser.am
|
include Makefile-gdmuser.am
|
||||||
include Makefile-st.am
|
include Makefile-st.am
|
||||||
@ -57,17 +60,17 @@ include Makefile-gvc.am
|
|||||||
include Makefile-calendar-server.am
|
include Makefile-calendar-server.am
|
||||||
|
|
||||||
gnome_shell_cflags = \
|
gnome_shell_cflags = \
|
||||||
$(MUTTER_PLUGIN_CFLAGS) \
|
$(GNOME_SHELL_CFLAGS) \
|
||||||
$(LIBGNOMEUI_CFLAGS) \
|
|
||||||
-I$(srcdir)/tray \
|
-I$(srcdir)/tray \
|
||||||
|
-DVERSION=\"$(VERSION)\" \
|
||||||
-DLOCALEDIR=\"$(datadir)/locale\" \
|
-DLOCALEDIR=\"$(datadir)/locale\" \
|
||||||
-DGNOME_SHELL_LIBEXECDIR=\"$(libexecdir)\" \
|
-DGNOME_SHELL_LIBEXECDIR=\"$(libexecdir)\" \
|
||||||
-DGNOME_SHELL_DATADIR=\"$(pkgdatadir)\" \
|
-DGNOME_SHELL_DATADIR=\"$(pkgdatadir)\" \
|
||||||
-DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\" \
|
-DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\" \
|
||||||
-DJSDIR=\"$(pkgdatadir)/js\"
|
-DJSDIR=\"$(pkgdatadir)/js\"
|
||||||
|
|
||||||
plugindir = $(MUTTER_PLUGIN_DIR)
|
privlibdir = $(pkglibdir)
|
||||||
plugin_LTLIBRARIES = libgnome-shell.la
|
privlib_LTLIBRARIES = libgnome-shell.la
|
||||||
|
|
||||||
shell_built_sources = \
|
shell_built_sources = \
|
||||||
shell-marshal.h \
|
shell-marshal.h \
|
||||||
@ -134,6 +137,12 @@ libgnome_shell_la_SOURCES = \
|
|||||||
libgnome_shell_la_gir_sources = \
|
libgnome_shell_la_gir_sources = \
|
||||||
$(filter-out %-private.h $(shell_recorder_non_gir_sources), $(shell_public_headers_h) $(libgnome_shell_la_SOURCES))
|
$(filter-out %-private.h $(shell_recorder_non_gir_sources), $(shell_public_headers_h) $(libgnome_shell_la_SOURCES))
|
||||||
|
|
||||||
|
gnome_shell_real_SOURCES = \
|
||||||
|
main.c
|
||||||
|
gnome_shell_real_CPPFLAGS = $(gnome_shell_cflags)
|
||||||
|
gnome_shell_real_LDADD = libgnome-shell.la $(libgnome_shell_la_LIBADD)
|
||||||
|
gnome_shell_real_DEPENDENCIES = libgnome-shell.la
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
|
|
||||||
shell_recorder_sources = \
|
shell_recorder_sources = \
|
||||||
@ -216,9 +225,9 @@ stamp-shell-enum-types.h: $(srcdir)/shell-enum-types.h.in $(shell_public_headers
|
|||||||
$(AM_V_GEN) ( cd $(srcdir) && \
|
$(AM_V_GEN) ( cd $(srcdir) && \
|
||||||
$(GLIB_MKENUMS) \
|
$(GLIB_MKENUMS) \
|
||||||
--template $< \
|
--template $< \
|
||||||
$(shell_public_headers_h) ) > $@.tmp && \
|
$(shell_public_headers_h) ) > $(@F).tmp && \
|
||||||
(cmp -s $@.tmp shell-enum-types.h || mv $@.tmp shell-enum-types.h) && \
|
(cmp -s $(@F).tmp shell-enum-types.h || mv $(@F).tmp shell-enum-types.h) && \
|
||||||
rm -f $@.tmp && \
|
rm -f $(@F).tmp && \
|
||||||
echo timestamp > $(@F)
|
echo timestamp > $(@F)
|
||||||
EXTRA_DIST += shell-enum-types.h.in
|
EXTRA_DIST += shell-enum-types.h.in
|
||||||
CLEANFILES += stamp-shell-enum-types.h
|
CLEANFILES += stamp-shell-enum-types.h
|
||||||
@ -227,16 +236,15 @@ shell-enum-types.c: shell-enum-types.c.in stamp-shell-enum-types.h
|
|||||||
$(AM_V_GEN) ( cd $(srcdir) && \
|
$(AM_V_GEN) ( cd $(srcdir) && \
|
||||||
$(GLIB_MKENUMS) \
|
$(GLIB_MKENUMS) \
|
||||||
--template $< \
|
--template $< \
|
||||||
$(shell_public_headers_h) ) > $@.tmp && \
|
$(shell_public_headers_h) ) > $(@F).tmp && \
|
||||||
mv $@.tmp $@ && \
|
mv $(@F).tmp $(@F) && \
|
||||||
rm -f $@.tmp
|
rm -f $(@F).tmp
|
||||||
EXTRA_DIST += shell-enum-types.c.in
|
EXTRA_DIST += shell-enum-types.c.in
|
||||||
|
|
||||||
libgnome_shell_la_LDFLAGS = -avoid-version -module
|
libgnome_shell_la_LDFLAGS = -avoid-version
|
||||||
libgnome_shell_la_LIBADD = \
|
libgnome_shell_la_LIBADD = \
|
||||||
-lm \
|
-lm \
|
||||||
$(MUTTER_PLUGIN_LIBS) \
|
$(GNOME_SHELL_LIBS) \
|
||||||
$(LIBGNOMEUI_LIBS) \
|
|
||||||
$(BLUETOOTH_LIBS) \
|
$(BLUETOOTH_LIBS) \
|
||||||
libst-1.0.la \
|
libst-1.0.la \
|
||||||
libgdmuser-1.0.la \
|
libgdmuser-1.0.la \
|
||||||
@ -244,7 +252,7 @@ libgnome_shell_la_LIBADD = \
|
|||||||
libgvc.la \
|
libgvc.la \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
libgnome_shell_la_CPPFLAGS = $(gnome_shell_cflags) $(LIBECAL_CFLAGS)
|
libgnome_shell_la_CPPFLAGS = $(gnome_shell_cflags)
|
||||||
|
|
||||||
Shell-0.1.gir: libgnome-shell.la St-1.0.gir
|
Shell-0.1.gir: libgnome-shell.la St-1.0.gir
|
||||||
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-2.91 TelepathyGLib-0.12
|
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-2.91 TelepathyGLib-0.12
|
||||||
@ -252,10 +260,9 @@ Shell_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
|
|||||||
Shell_0_1_gir_LIBS = libgnome-shell.la
|
Shell_0_1_gir_LIBS = libgnome-shell.la
|
||||||
Shell_0_1_gir_FILES = $(addprefix $(srcdir)/,$(libgnome_shell_la_gir_sources))
|
Shell_0_1_gir_FILES = $(addprefix $(srcdir)/,$(libgnome_shell_la_gir_sources))
|
||||||
Shell_0_1_gir_SCANNERFLAGS = --include-uninstalled=$(builddir)/St-1.0.gir \
|
Shell_0_1_gir_SCANNERFLAGS = --include-uninstalled=$(builddir)/St-1.0.gir \
|
||||||
--add-include-path=$(MUTTER_LIB_DIR)/mutter/ \
|
--add-include-path=$(MUTTER_GIR_DIR)
|
||||||
--program=mutter \
|
|
||||||
--program-arg=--mutter-plugins=`pwd`/libgnome-shell.la
|
|
||||||
INTROSPECTION_GIRS += Shell-0.1.gir
|
INTROSPECTION_GIRS += Shell-0.1.gir
|
||||||
|
CLEANFILES += Shell-0.1.gir
|
||||||
|
|
||||||
St-1.0.gir: libst-1.0.la
|
St-1.0.gir: libst-1.0.la
|
||||||
St_1_0_gir_INCLUDES = Clutter-1.0 Gtk-3.0
|
St_1_0_gir_INCLUDES = Clutter-1.0 Gtk-3.0
|
||||||
@ -264,6 +271,7 @@ St_1_0_gir_LIBS = libst-1.0.la
|
|||||||
St_1_0_gir_FILES = $(filter-out %-private.h $(st_non_gir_sources), $(addprefix $(srcdir)/,$(st_source_h))) \
|
St_1_0_gir_FILES = $(filter-out %-private.h $(st_non_gir_sources), $(addprefix $(srcdir)/,$(st_source_h))) \
|
||||||
$(addprefix $(srcdir)/,$(st_source_c))
|
$(addprefix $(srcdir)/,$(st_source_c))
|
||||||
INTROSPECTION_GIRS += St-1.0.gir
|
INTROSPECTION_GIRS += St-1.0.gir
|
||||||
|
CLEANFILES += St-1.0.gir
|
||||||
|
|
||||||
Gdm-1.0.gir: libgdmuser-1.0.la
|
Gdm-1.0.gir: libgdmuser-1.0.la
|
||||||
Gdm_1_0_gir_INCLUDES = GObject-2.0 GdkPixbuf-2.0
|
Gdm_1_0_gir_INCLUDES = GObject-2.0 GdkPixbuf-2.0
|
||||||
@ -272,3 +280,4 @@ Gdm_1_0_gir_LIBS = libgdmuser-1.0.la
|
|||||||
Gdm_1_0_gir_FILES = $(filter-out %-private.h, $(addprefix $(srcdir)/,$(gdmuser_source_h))) \
|
Gdm_1_0_gir_FILES = $(filter-out %-private.h, $(addprefix $(srcdir)/,$(gdmuser_source_h))) \
|
||||||
$(addprefix $(srcdir)/,$(gdmuser_source_c))
|
$(addprefix $(srcdir)/,$(gdmuser_source_c))
|
||||||
INTROSPECTION_GIRS += Gdm-1.0.gir
|
INTROSPECTION_GIRS += Gdm-1.0.gir
|
||||||
|
CLEANFILES += Gdm-1.0.gir
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# gnome-shell is a plugin for mutter; start mutter with the right
|
|
||||||
# options.
|
|
||||||
|
|
||||||
# About the value of NO_GAIL and NO_AT_BRIDGE: If a11y is enabled,
|
|
||||||
# gtk_init() will normally load gail and at-bridge. But we don't
|
|
||||||
# want at-bridge to be loaded until after clutter is initialized
|
|
||||||
# (which mutter does after initializing gtk) and we don't want
|
|
||||||
# gail to be loaded at all. So set these flags. shell_a11y_init()
|
|
||||||
# will clear them so they don't get passed to gnome-shell's
|
|
||||||
# children.
|
|
||||||
export NO_GAIL=1
|
|
||||||
export NO_AT_BRIDGE=1
|
|
||||||
|
|
||||||
# FIXME - Add gjs API to set this stuff and don't depend on the
|
|
||||||
# environment. These propagate to child processes.
|
|
||||||
export GJS_DEBUG_OUTPUT='stderr'
|
|
||||||
# By default only let gjs show errors and things that are explicitly
|
|
||||||
# logged via log() from javascript
|
|
||||||
export GJS_DEBUG_TOPICS='JS ERROR;JS LOG'
|
|
||||||
|
|
||||||
if test -z "$MUTTER_PLUGINS"; then
|
|
||||||
MUTTER_PLUGINS=libgnome-shell
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Work around Ubuntu xulrunner bug,
|
|
||||||
# http://bugzilla.gnome.org/show_bug.cgi?id=573413
|
|
||||||
if test x@ENABLE_DYNAMIC_MOZJS_HACK@ = xyes; then
|
|
||||||
sdkdir=$(pkg-config --variable=sdkdir mozilla-js)
|
|
||||||
if test -n "${sdkdir}"; then
|
|
||||||
mozjs_libdir=$(echo "$sdkdir" | sed -e s,'-\(sdk\|devel\)',,)
|
|
||||||
if test -n "$LD_LIBRARY_PATH"; then
|
|
||||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$mozjs_libdir
|
|
||||||
else
|
|
||||||
LD_LIBRARY_PATH=$mozjs_libdir
|
|
||||||
fi
|
|
||||||
export LD_LIBRARY_PATH
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec mutter --mutter-plugins=$MUTTER_PLUGINS "$@"
|
|
@ -143,17 +143,15 @@ def start_dconf_await_service():
|
|||||||
loop.run()
|
loop.run()
|
||||||
|
|
||||||
def start_shell(perf_output=None):
|
def start_shell(perf_output=None):
|
||||||
bin_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||||
if os.path.exists(os.path.join(bin_dir, 'gnome-shell-jhbuild.in')):
|
if os.path.exists(os.path.join(self_dir, 'gnome-shell-jhbuild.in')):
|
||||||
running_from_source_tree = True
|
running_from_source_tree = True
|
||||||
top_dir = os.path.dirname(bin_dir)
|
top_dir = os.path.dirname(self_dir)
|
||||||
plugin = os.path.join(top_dir, 'src', 'libgnome-shell.la')
|
|
||||||
typelib_dir = os.path.join(top_dir, "src")
|
typelib_dir = os.path.join(top_dir, "src")
|
||||||
js_dir = os.path.join(top_dir, "js")
|
js_dir = os.path.join(top_dir, "js")
|
||||||
data_dir = os.path.join(top_dir, "data")
|
data_dir = os.path.join(top_dir, "data")
|
||||||
else:
|
else:
|
||||||
running_from_source_tree = False
|
running_from_source_tree = False
|
||||||
plugin = 'libgnome-shell'
|
|
||||||
js_dir = os.path.join('@pkgdatadir@', 'js')
|
js_dir = os.path.join('@pkgdatadir@', 'js')
|
||||||
|
|
||||||
# Set up environment
|
# Set up environment
|
||||||
@ -166,13 +164,13 @@ def start_shell(perf_output=None):
|
|||||||
# below. Otherwise it's just a bad reimplementation of "jhbuild
|
# below. Otherwise it's just a bad reimplementation of "jhbuild
|
||||||
# run". See bug #642084
|
# run". See bug #642084
|
||||||
env.update({'GNOME_SHELL_JS' : js_dir,
|
env.update({'GNOME_SHELL_JS' : js_dir,
|
||||||
'PATH' : '@MUTTER_BIN_DIR@:' + os.environ.get('PATH', ''),
|
'PATH' : '@bindir@:' + 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')})
|
||||||
if running_from_source_tree:
|
if running_from_source_tree:
|
||||||
if os.environ.has_key('GI_TYPELIB_PATH'):
|
if os.environ.has_key('GI_TYPELIB_PATH'):
|
||||||
typelib_dir = typelib_dir + ":" + os.environ.get('GI_TYPELIB_PATH')
|
typelib_dir = typelib_dir + ":" + os.environ.get('GI_TYPELIB_PATH')
|
||||||
env.update({'GNOME_SHELL_BINDIR' : bin_dir,
|
env.update({'GNOME_SHELL_BINDIR' : self_dir,
|
||||||
'GNOME_SHELL_DATADIR' : data_dir,
|
'GNOME_SHELL_DATADIR' : data_dir,
|
||||||
'GI_TYPELIB_PATH' : typelib_dir,
|
'GI_TYPELIB_PATH' : typelib_dir,
|
||||||
'GSETTINGS_SCHEMA_DIR' : data_dir })
|
'GSETTINGS_SCHEMA_DIR' : data_dir })
|
||||||
@ -191,15 +189,14 @@ def start_shell(perf_output=None):
|
|||||||
if perf_output is not None:
|
if perf_output is not None:
|
||||||
env['SHELL_PERF_OUTPUT'] = perf_output
|
env['SHELL_PERF_OUTPUT'] = perf_output
|
||||||
|
|
||||||
|
args = []
|
||||||
if options.debug:
|
if options.debug:
|
||||||
debug_command = options.debug_command.split()
|
debug_command = options.debug_command.split()
|
||||||
args = list(debug_command)
|
|
||||||
else:
|
|
||||||
args = []
|
|
||||||
|
|
||||||
if running_from_source_tree:
|
if running_from_source_tree:
|
||||||
env['MUTTER_PLUGINS'] = plugin
|
args += [os.path.join(top_dir, 'libtool'), '--mode=execute']
|
||||||
args.append(os.path.join(bin_dir, 'gnome-shell-installed'))
|
args += debug_command
|
||||||
|
|
||||||
|
args.append(os.path.join(self_dir, 'gnome-shell-real'))
|
||||||
if options.replace:
|
if options.replace:
|
||||||
args.append('--replace')
|
args.append('--replace')
|
||||||
if options.sync:
|
if options.sync:
|
||||||
@ -427,9 +424,9 @@ def run_performance_test():
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Add the Git revision if available
|
# Add the Git revision if available
|
||||||
bin_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||||
if os.path.exists(os.path.join(bin_dir, 'gnome-shell.in')):
|
if os.path.exists(os.path.join(self_dir, 'gnome-shell-jhbuild.in')):
|
||||||
top_dir = os.path.dirname(bin_dir)
|
top_dir = os.path.dirname(self_dir)
|
||||||
git_dir = os.path.join(top_dir, '.git')
|
git_dir = os.path.join(top_dir, '.git')
|
||||||
if os.path.exists(git_dir):
|
if os.path.exists(git_dir):
|
||||||
env = dict(os.environ)
|
env = dict(os.environ)
|
||||||
|
@ -25,42 +25,24 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <meta-plugin.h>
|
|
||||||
|
|
||||||
#include <glib/gi18n-lib.h>
|
|
||||||
|
|
||||||
#include <clutter/clutter.h>
|
|
||||||
#include <clutter/x11/clutter-x11.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include <gdk/gdk.h>
|
|
||||||
#include <gdk/gdkx.h>
|
|
||||||
#include <gjs/gjs.h>
|
|
||||||
#include <girepository.h>
|
|
||||||
#include <gmodule.h>
|
|
||||||
#ifdef HAVE_MALLINFO
|
|
||||||
#include <malloc.h>
|
|
||||||
#endif
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <clutter/clutter.h>
|
||||||
|
#include <clutter/x11/clutter-x11.h>
|
||||||
#include <GL/glx.h>
|
#include <GL/glx.h>
|
||||||
#include <GL/glxext.h>
|
#include <GL/glxext.h>
|
||||||
|
#include <gjs/gjs.h>
|
||||||
#include "display.h"
|
#include <meta/display.h>
|
||||||
|
#include <meta/meta-plugin.h>
|
||||||
|
|
||||||
#include "shell-global-private.h"
|
#include "shell-global-private.h"
|
||||||
#include "shell-perf-log.h"
|
#include "shell-perf-log.h"
|
||||||
#include "shell-wm-private.h"
|
#include "shell-wm-private.h"
|
||||||
#include "st.h"
|
|
||||||
#include "shell-a11y.h"
|
|
||||||
|
|
||||||
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
|
|
||||||
#define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
|
|
||||||
|
|
||||||
static void gnome_shell_plugin_dispose (GObject *object);
|
static void gnome_shell_plugin_dispose (GObject *object);
|
||||||
static void gnome_shell_plugin_finalize (GObject *object);
|
static void gnome_shell_plugin_finalize (GObject *object);
|
||||||
|
|
||||||
static void gnome_shell_plugin_early_initialize (MetaPlugin *plugin);
|
|
||||||
static void gnome_shell_plugin_start (MetaPlugin *plugin);
|
static void gnome_shell_plugin_start (MetaPlugin *plugin);
|
||||||
static void gnome_shell_plugin_minimize (MetaPlugin *plugin,
|
static void gnome_shell_plugin_minimize (MetaPlugin *plugin,
|
||||||
MetaWindowActor *actor);
|
MetaWindowActor *actor);
|
||||||
@ -110,7 +92,6 @@ struct _GnomeShellPlugin
|
|||||||
{
|
{
|
||||||
MetaPlugin parent;
|
MetaPlugin parent;
|
||||||
|
|
||||||
GjsContext *gjs_context;
|
|
||||||
Atom panel_action;
|
Atom panel_action;
|
||||||
Atom panel_action_run_dialog;
|
Atom panel_action_run_dialog;
|
||||||
Atom panel_action_main_menu;
|
Atom panel_action_main_menu;
|
||||||
@ -127,11 +108,9 @@ struct _GnomeShellPluginClass
|
|||||||
MetaPluginClass parent_class;
|
MetaPluginClass parent_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
GType gnome_shell_plugin_get_type (void);
|
||||||
* Create the plugin struct; function pointers initialized in
|
|
||||||
* g_module_check_init().
|
G_DEFINE_TYPE (GnomeShellPlugin, gnome_shell_plugin, META_TYPE_PLUGIN)
|
||||||
*/
|
|
||||||
META_PLUGIN_DECLARE(GnomeShellPlugin, gnome_shell_plugin);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
|
gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
|
||||||
@ -142,7 +121,6 @@ gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
|
|||||||
gobject_class->dispose = gnome_shell_plugin_dispose;
|
gobject_class->dispose = gnome_shell_plugin_dispose;
|
||||||
gobject_class->finalize = gnome_shell_plugin_finalize;
|
gobject_class->finalize = gnome_shell_plugin_finalize;
|
||||||
|
|
||||||
plugin_class->early_initialize = gnome_shell_plugin_early_initialize;
|
|
||||||
plugin_class->start = gnome_shell_plugin_start;
|
plugin_class->start = gnome_shell_plugin_start;
|
||||||
plugin_class->map = gnome_shell_plugin_map;
|
plugin_class->map = gnome_shell_plugin_map;
|
||||||
plugin_class->minimize = gnome_shell_plugin_minimize;
|
plugin_class->minimize = gnome_shell_plugin_minimize;
|
||||||
@ -162,328 +140,6 @@ gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
|
|||||||
static void
|
static void
|
||||||
gnome_shell_plugin_init (GnomeShellPlugin *shell_plugin)
|
gnome_shell_plugin_init (GnomeShellPlugin *shell_plugin)
|
||||||
{
|
{
|
||||||
meta_prefs_override_preference_location ("/apps/mutter/general/attach_modal_dialogs",
|
|
||||||
"/desktop/gnome/shell/windows/attach_modal_dialogs");
|
|
||||||
meta_prefs_override_preference_location ("/apps/metacity/general/button_layout",
|
|
||||||
"/desktop/gnome/shell/windows/button_layout");
|
|
||||||
meta_prefs_override_preference_location ("/apps/metacity/general/edge_tiling",
|
|
||||||
"/desktop/gnome/shell/windows/edge_tiling");
|
|
||||||
meta_prefs_override_preference_location ("/apps/metacity/general/theme",
|
|
||||||
"/desktop/gnome/shell/windows/theme");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
update_font_options (GtkSettings *settings)
|
|
||||||
{
|
|
||||||
StThemeContext *context;
|
|
||||||
ClutterStage *stage;
|
|
||||||
ClutterBackend *backend;
|
|
||||||
gint dpi;
|
|
||||||
gint hinting;
|
|
||||||
gchar *hint_style_str;
|
|
||||||
cairo_hint_style_t hint_style = CAIRO_HINT_STYLE_NONE;
|
|
||||||
gint antialias;
|
|
||||||
cairo_antialias_t antialias_mode = CAIRO_ANTIALIAS_NONE;
|
|
||||||
cairo_font_options_t *options;
|
|
||||||
|
|
||||||
/* Disable text mipmapping; it causes problems on pre-GEM Intel
|
|
||||||
* drivers and we should just be rendering text at the right
|
|
||||||
* size rather than scaling it. If we do effects where we dynamically
|
|
||||||
* zoom labels, then we might want to reconsider.
|
|
||||||
*/
|
|
||||||
clutter_set_font_flags (clutter_get_font_flags () & ~CLUTTER_FONT_MIPMAPPING);
|
|
||||||
|
|
||||||
g_object_get (settings,
|
|
||||||
"gtk-xft-dpi", &dpi,
|
|
||||||
"gtk-xft-antialias", &antialias,
|
|
||||||
"gtk-xft-hinting", &hinting,
|
|
||||||
"gtk-xft-hintstyle", &hint_style_str,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
stage = CLUTTER_STAGE (clutter_stage_get_default ());
|
|
||||||
context = st_theme_context_get_for_stage (stage);
|
|
||||||
|
|
||||||
if (dpi != -1)
|
|
||||||
/* GTK stores resolution as 1024 * dots/inch */
|
|
||||||
st_theme_context_set_resolution (context, dpi / 1024);
|
|
||||||
else
|
|
||||||
st_theme_context_set_default_resolution (context);
|
|
||||||
|
|
||||||
/* Clutter (as of 0.9) passes comprehensively wrong font options
|
|
||||||
* override whatever set_font_flags() did above.
|
|
||||||
*
|
|
||||||
* http://bugzilla.openedhand.com/show_bug.cgi?id=1456
|
|
||||||
*/
|
|
||||||
backend = clutter_get_default_backend ();
|
|
||||||
options = cairo_font_options_create ();
|
|
||||||
|
|
||||||
cairo_font_options_set_hint_metrics (options, CAIRO_HINT_METRICS_ON);
|
|
||||||
|
|
||||||
if (hinting >= 0 && !hinting)
|
|
||||||
{
|
|
||||||
hint_style = CAIRO_HINT_STYLE_NONE;
|
|
||||||
}
|
|
||||||
else if (hint_style_str)
|
|
||||||
{
|
|
||||||
if (strcmp (hint_style_str, "hintnone") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_NONE;
|
|
||||||
else if (strcmp (hint_style_str, "hintslight") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_SLIGHT;
|
|
||||||
else if (strcmp (hint_style_str, "hintmedium") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_MEDIUM;
|
|
||||||
else if (strcmp (hint_style_str, "hintfull") == 0)
|
|
||||||
hint_style = CAIRO_HINT_STYLE_FULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (hint_style_str);
|
|
||||||
|
|
||||||
cairo_font_options_set_hint_style (options, hint_style);
|
|
||||||
|
|
||||||
/* We don't want to turn on subpixel anti-aliasing; since Clutter
|
|
||||||
* doesn't currently have the code to support ARGB masks,
|
|
||||||
* generating them then squashing them back to A8 is pointless.
|
|
||||||
*/
|
|
||||||
antialias_mode = (antialias < 0 || antialias) ? CAIRO_ANTIALIAS_GRAY
|
|
||||||
: CAIRO_ANTIALIAS_NONE;
|
|
||||||
|
|
||||||
cairo_font_options_set_antialias (options, antialias_mode);
|
|
||||||
|
|
||||||
clutter_backend_set_font_options (backend, options);
|
|
||||||
cairo_font_options_destroy (options);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
settings_notify_cb (GtkSettings *settings,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
update_font_options (settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
malloc_statistics_callback (ShellPerfLog *perf_log,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
#ifdef HAVE_MALLINFO
|
|
||||||
struct mallinfo info = mallinfo ();
|
|
||||||
|
|
||||||
shell_perf_log_update_statistic_i (perf_log,
|
|
||||||
"malloc.arenaSize",
|
|
||||||
info.arena);
|
|
||||||
shell_perf_log_update_statistic_i (perf_log,
|
|
||||||
"malloc.mmapSize",
|
|
||||||
info.hblkhd);
|
|
||||||
shell_perf_log_update_statistic_i (perf_log,
|
|
||||||
"malloc.usedSize",
|
|
||||||
info.uordblks);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
add_statistics (GnomeShellPlugin *shell_plugin)
|
|
||||||
{
|
|
||||||
ShellPerfLog *perf_log = shell_perf_log_get_default ();
|
|
||||||
|
|
||||||
/* For probably historical reasons, mallinfo() defines the returned values,
|
|
||||||
* even those in bytes as int, not size_t. We're determined not to use
|
|
||||||
* more than 2G of malloc'ed memory, so are OK with that.
|
|
||||||
*/
|
|
||||||
shell_perf_log_define_statistic (perf_log,
|
|
||||||
"malloc.arenaSize",
|
|
||||||
"Amount of memory allocated by malloc() with brk(), in bytes",
|
|
||||||
"i");
|
|
||||||
shell_perf_log_define_statistic (perf_log,
|
|
||||||
"malloc.mmapSize",
|
|
||||||
"Amount of memory allocated by malloc() with mmap(), in bytes",
|
|
||||||
"i");
|
|
||||||
shell_perf_log_define_statistic (perf_log,
|
|
||||||
"malloc.usedSize",
|
|
||||||
"Amount of malloc'ed memory currently in use",
|
|
||||||
"i");
|
|
||||||
|
|
||||||
shell_perf_log_add_statistics_callback (perf_log,
|
|
||||||
malloc_statistics_callback,
|
|
||||||
NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is an IBus workaround. The flow of events with IBus is that every time
|
|
||||||
* it gets gets a key event, it:
|
|
||||||
*
|
|
||||||
* Sends it to the daemon via D-Bus asynchronously
|
|
||||||
* When it gets an reply, synthesizes a new GdkEvent and puts it into the
|
|
||||||
* GDK event queue with gdk_event_put(), including
|
|
||||||
* IBUS_FORWARD_MASK = 1 << 25 in the state to prevent a loop.
|
|
||||||
*
|
|
||||||
* (Normally, IBus uses the GTK+ key snooper mechanism to get the key
|
|
||||||
* events early, but since our key events aren't visible to GTK+ key snoopers,
|
|
||||||
* IBus will instead get the events via the standard
|
|
||||||
* GtkIMContext.filter_keypress() mechanism.)
|
|
||||||
*
|
|
||||||
* There are a number of potential problems here; probably the worst
|
|
||||||
* problem is that IBus doesn't forward the timestamp with the event
|
|
||||||
* so that every key event that gets delivered ends up with
|
|
||||||
* GDK_CURRENT_TIME. This creates some very subtle bugs; for example
|
|
||||||
* if you have IBus running and a keystroke is used to trigger
|
|
||||||
* launching an application, focus stealing prevention won't work
|
|
||||||
* right. http://code.google.com/p/ibus/issues/detail?id=1184
|
|
||||||
*
|
|
||||||
* In any case, our normal flow of key events is:
|
|
||||||
*
|
|
||||||
* GDK filter function => clutter_x11_handle_event => clutter actor
|
|
||||||
*
|
|
||||||
* So, if we see a key event that gets delivered via the GDK event handler
|
|
||||||
* function - then we know it must be one of these synthesized events, and
|
|
||||||
* we should push it back to clutter.
|
|
||||||
*
|
|
||||||
* To summarize, the full key event flow with IBus is:
|
|
||||||
*
|
|
||||||
* GDK filter function
|
|
||||||
* => Mutter
|
|
||||||
* => gnome_shell_plugin_xevent_filter()
|
|
||||||
* => clutter_x11_handle_event()
|
|
||||||
* => clutter event delivery to actor
|
|
||||||
* => gtk_im_context_filter_event()
|
|
||||||
* => sent to IBus daemon
|
|
||||||
* => response received from IBus daemon
|
|
||||||
* => gdk_event_put()
|
|
||||||
* => GDK event handler
|
|
||||||
* => <this function>
|
|
||||||
* => clutter_event_put()
|
|
||||||
* => clutter event delivery to actor
|
|
||||||
*
|
|
||||||
* Anything else we see here we just pass on to the normal GDK event handler
|
|
||||||
* gtk_main_do_event().
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
gnome_shell_gdk_event_handler (GdkEvent *event_gdk,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
if (event_gdk->type == GDK_KEY_PRESS || event_gdk->type == GDK_KEY_RELEASE)
|
|
||||||
{
|
|
||||||
ClutterActor *stage;
|
|
||||||
Window stage_xwindow;
|
|
||||||
|
|
||||||
stage = clutter_stage_get_default ();
|
|
||||||
stage_xwindow = clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
|
|
||||||
|
|
||||||
if (GDK_WINDOW_XID (event_gdk->key.window) == stage_xwindow)
|
|
||||||
{
|
|
||||||
ClutterDeviceManager *device_manager = clutter_device_manager_get_default ();
|
|
||||||
ClutterInputDevice *keyboard = clutter_device_manager_get_core_device (device_manager,
|
|
||||||
CLUTTER_KEYBOARD_DEVICE);
|
|
||||||
|
|
||||||
ClutterEvent *event_clutter = clutter_event_new ((event_gdk->type == GDK_KEY_PRESS) ?
|
|
||||||
CLUTTER_KEY_PRESS : CLUTTER_KEY_RELEASE);
|
|
||||||
event_clutter->key.time = event_gdk->key.time;
|
|
||||||
event_clutter->key.flags = CLUTTER_EVENT_NONE;
|
|
||||||
event_clutter->key.stage = CLUTTER_STAGE (stage);
|
|
||||||
event_clutter->key.source = NULL;
|
|
||||||
|
|
||||||
/* This depends on ClutterModifierType and GdkModifierType being
|
|
||||||
* identical, which they are currently. (They both match the X
|
|
||||||
* modifier state in the low 16-bits and have the same extensions.) */
|
|
||||||
event_clutter->key.modifier_state = event_gdk->key.state;
|
|
||||||
|
|
||||||
event_clutter->key.keyval = event_gdk->key.keyval;
|
|
||||||
event_clutter->key.hardware_keycode = event_gdk->key.hardware_keycode;
|
|
||||||
event_clutter->key.unicode_value = gdk_keyval_to_unicode (event_clutter->key.keyval);
|
|
||||||
event_clutter->key.device = keyboard;
|
|
||||||
|
|
||||||
clutter_event_put (event_clutter);
|
|
||||||
clutter_event_free (event_clutter);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_main_do_event (event_gdk);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
muted_log_handler (const char *log_domain,
|
|
||||||
GLogLevelFlags log_level,
|
|
||||||
const char *message,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
/* Intentionally empty to discard message */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gnome_shell_plugin_early_initialize (MetaPlugin *plugin)
|
|
||||||
{
|
|
||||||
GError *error = NULL;
|
|
||||||
DBusGConnection *session;
|
|
||||||
DBusGProxy *bus;
|
|
||||||
guint32 request_name_result;
|
|
||||||
|
|
||||||
/** TODO:
|
|
||||||
* In the future we should use GDBus for this. However, in
|
|
||||||
* order to do that, we need to port all of the JavaScript
|
|
||||||
* code. Otherwise, the name will be claimed on the wrong
|
|
||||||
* connection.
|
|
||||||
*/
|
|
||||||
session = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
|
|
||||||
|
|
||||||
bus = dbus_g_proxy_new_for_name (session,
|
|
||||||
DBUS_SERVICE_DBUS,
|
|
||||||
DBUS_PATH_DBUS,
|
|
||||||
DBUS_INTERFACE_DBUS);
|
|
||||||
|
|
||||||
if (!dbus_g_proxy_call (bus, "RequestName", &error,
|
|
||||||
G_TYPE_STRING, SHELL_DBUS_SERVICE,
|
|
||||||
G_TYPE_UINT, 0,
|
|
||||||
G_TYPE_INVALID,
|
|
||||||
G_TYPE_UINT, &request_name_result,
|
|
||||||
G_TYPE_INVALID))
|
|
||||||
{
|
|
||||||
g_print ("failed to acquire org.gnome.Shell: %s\n", error->message);
|
|
||||||
/* If we somehow got started again, it's not an error to be running
|
|
||||||
* already. So just exit 0.
|
|
||||||
*/
|
|
||||||
exit (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Also grab org.gnome.Panel to replace any existing panel process,
|
|
||||||
* unless a special environment variable is passed. The environment
|
|
||||||
* variable is used by the gnome-shell (no --replace) launcher in
|
|
||||||
* Xephyr */
|
|
||||||
if (!dbus_g_proxy_call (bus, "RequestName", &error, G_TYPE_STRING,
|
|
||||||
"org.gnome.Panel", G_TYPE_UINT,
|
|
||||||
DBUS_NAME_FLAG_REPLACE_EXISTING | DBUS_NAME_FLAG_DO_NOT_QUEUE,
|
|
||||||
G_TYPE_INVALID, G_TYPE_UINT,
|
|
||||||
&request_name_result, G_TYPE_INVALID))
|
|
||||||
{
|
|
||||||
g_print ("failed to acquire org.gnome.Panel: %s\n", error->message);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ...and the org.gnome.Magnifier service.
|
|
||||||
*/
|
|
||||||
if (!dbus_g_proxy_call (bus, "RequestName", &error,
|
|
||||||
G_TYPE_STRING, MAGNIFIER_DBUS_SERVICE,
|
|
||||||
G_TYPE_UINT, 0,
|
|
||||||
G_TYPE_INVALID,
|
|
||||||
G_TYPE_UINT, &request_name_result,
|
|
||||||
G_TYPE_INVALID))
|
|
||||||
{
|
|
||||||
g_print ("failed to acquire %s: %s\n", MAGNIFIER_DBUS_SERVICE, error->message);
|
|
||||||
/* Failing to acquire the magnifer service is not fatal. Log the error,
|
|
||||||
* but keep going. */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ...and the org.freedesktop.Notifications service.
|
|
||||||
*/
|
|
||||||
if (!dbus_g_proxy_call (bus, "RequestName", &error,
|
|
||||||
G_TYPE_STRING, "org.freedesktop.Notifications",
|
|
||||||
G_TYPE_UINT, DBUS_NAME_FLAG_REPLACE_EXISTING | DBUS_NAME_FLAG_DO_NOT_QUEUE,
|
|
||||||
G_TYPE_INVALID,
|
|
||||||
G_TYPE_UINT, &request_name_result,
|
|
||||||
G_TYPE_INVALID))
|
|
||||||
{
|
|
||||||
g_print ("failed to acquire org.freedesktop.Notifications: %s\n", error->message);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref (bus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -493,32 +149,10 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
|||||||
MetaScreen *screen;
|
MetaScreen *screen;
|
||||||
MetaDisplay *display;
|
MetaDisplay *display;
|
||||||
Display *xdisplay;
|
Display *xdisplay;
|
||||||
GtkSettings *settings;
|
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
int status;
|
int status;
|
||||||
const char *shell_js;
|
|
||||||
char **search_path;
|
|
||||||
const char *glx_extensions;
|
const char *glx_extensions;
|
||||||
|
GjsContext *gjs_context;
|
||||||
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
|
||||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
|
||||||
|
|
||||||
shell_a11y_init ();
|
|
||||||
|
|
||||||
settings = gtk_settings_get_default ();
|
|
||||||
g_object_connect (settings,
|
|
||||||
"signal::notify::gtk-xft-dpi",
|
|
||||||
G_CALLBACK (settings_notify_cb), NULL,
|
|
||||||
"signal::notify::gtk-xft-antialias",
|
|
||||||
G_CALLBACK (settings_notify_cb), NULL,
|
|
||||||
"signal::notify::gtk-xft-hinting",
|
|
||||||
G_CALLBACK (settings_notify_cb), NULL,
|
|
||||||
"signal::notify::gtk-xft-hintstyle",
|
|
||||||
G_CALLBACK (settings_notify_cb), NULL,
|
|
||||||
NULL);
|
|
||||||
update_font_options (settings);
|
|
||||||
|
|
||||||
gdk_event_handler_set (gnome_shell_gdk_event_handler, plugin, NULL);
|
|
||||||
|
|
||||||
screen = meta_plugin_get_screen (plugin);
|
screen = meta_plugin_get_screen (plugin);
|
||||||
display = meta_screen_get_display (screen);
|
display = meta_screen_get_display (screen);
|
||||||
@ -538,40 +172,12 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
|||||||
"GL buffer swap complete event received (with timestamp of completion)",
|
"GL buffer swap complete event received (with timestamp of completion)",
|
||||||
"x");
|
"x");
|
||||||
|
|
||||||
#if HAVE_BLUETOOTH
|
|
||||||
g_irepository_prepend_search_path (BLUETOOTH_DIR);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
g_irepository_prepend_search_path (GNOME_SHELL_PKGLIBDIR);
|
|
||||||
|
|
||||||
shell_js = g_getenv("GNOME_SHELL_JS");
|
|
||||||
if (!shell_js)
|
|
||||||
shell_js = JSDIR;
|
|
||||||
|
|
||||||
search_path = g_strsplit(shell_js, ":", -1);
|
|
||||||
shell_plugin->gjs_context = g_object_new (GJS_TYPE_CONTEXT,
|
|
||||||
"search-path", search_path,
|
|
||||||
"js-version", "1.8",
|
|
||||||
NULL);
|
|
||||||
g_strfreev(search_path);
|
|
||||||
|
|
||||||
/* Disable debug spew from various libraries */
|
|
||||||
g_log_set_handler ("Gvc", G_LOG_LEVEL_DEBUG,
|
|
||||||
muted_log_handler, NULL);
|
|
||||||
g_log_set_handler ("GdmUser", G_LOG_LEVEL_DEBUG,
|
|
||||||
muted_log_handler, NULL);
|
|
||||||
g_log_set_handler ("Bluetooth", G_LOG_LEVEL_DEBUG | G_LOG_LEVEL_MESSAGE,
|
|
||||||
muted_log_handler, NULL);
|
|
||||||
|
|
||||||
/* Initialize the global object here. */
|
|
||||||
shell_plugin->global = shell_global_get ();
|
shell_plugin->global = shell_global_get ();
|
||||||
|
_shell_global_set_plugin (shell_plugin->global, META_PLUGIN (shell_plugin));
|
||||||
|
|
||||||
_shell_global_set_plugin (shell_plugin->global, META_PLUGIN(shell_plugin));
|
gjs_context = _shell_global_get_gjs_context (shell_plugin->global);
|
||||||
_shell_global_set_gjs_context (shell_plugin->global, shell_plugin->gjs_context);
|
|
||||||
|
|
||||||
add_statistics (shell_plugin);
|
if (!gjs_context_eval (gjs_context,
|
||||||
|
|
||||||
if (!gjs_context_eval (shell_plugin->gjs_context,
|
|
||||||
"const Main = imports.ui.main; Main.start();",
|
"const Main = imports.ui.main; Main.start();",
|
||||||
-1,
|
-1,
|
||||||
"<main>",
|
"<main>",
|
||||||
@ -752,17 +358,3 @@ MetaPluginInfo *gnome_shell_plugin_plugin_info (MetaPlugin *plugin)
|
|||||||
|
|
||||||
return &info;
|
return &info;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_BLUETOOTH
|
|
||||||
/* HACK:
|
|
||||||
Add a non-static function that calls into libgnome-bluetooth-applet.so,
|
|
||||||
to avoid the linker being too smart and removing the dependency.
|
|
||||||
This function is never actually called.
|
|
||||||
*/
|
|
||||||
extern GType bluetooth_applet_get_type(void);
|
|
||||||
void _shell_link_to_bluetooth(void);
|
|
||||||
|
|
||||||
void _shell_link_to_bluetooth(void) {
|
|
||||||
bluetooth_applet_get_type();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
460
src/main.c
Normal file
@ -0,0 +1,460 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_MALLINFO
|
||||||
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <clutter/clutter.h>
|
||||||
|
#include <clutter/x11/clutter-x11.h>
|
||||||
|
#include <dbus/dbus-glib.h>
|
||||||
|
#include <gdk/gdk.h>
|
||||||
|
#include <gdk/gdkx.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
#include <glib/gi18n-lib.h>
|
||||||
|
#include <girepository.h>
|
||||||
|
#include <meta/main.h>
|
||||||
|
#include <meta/meta-plugin.h>
|
||||||
|
#include <meta/prefs.h>
|
||||||
|
|
||||||
|
#include "shell-a11y.h"
|
||||||
|
#include "shell-global.h"
|
||||||
|
#include "shell-perf-log.h"
|
||||||
|
#include "st.h"
|
||||||
|
|
||||||
|
extern GType gnome_shell_plugin_get_type (void);
|
||||||
|
|
||||||
|
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
|
||||||
|
#define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
|
||||||
|
|
||||||
|
static void
|
||||||
|
shell_dbus_init (void)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
DBusGConnection *session;
|
||||||
|
DBusGProxy *bus;
|
||||||
|
guint32 request_name_result;
|
||||||
|
|
||||||
|
/** TODO:
|
||||||
|
* In the future we should use GDBus for this. However, in
|
||||||
|
* order to do that, we need to port all of the JavaScript
|
||||||
|
* code. Otherwise, the name will be claimed on the wrong
|
||||||
|
* connection.
|
||||||
|
*/
|
||||||
|
session = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
|
||||||
|
|
||||||
|
bus = dbus_g_proxy_new_for_name (session,
|
||||||
|
DBUS_SERVICE_DBUS,
|
||||||
|
DBUS_PATH_DBUS,
|
||||||
|
DBUS_INTERFACE_DBUS);
|
||||||
|
|
||||||
|
if (!dbus_g_proxy_call (bus, "RequestName", &error,
|
||||||
|
G_TYPE_STRING, SHELL_DBUS_SERVICE,
|
||||||
|
G_TYPE_UINT, 0,
|
||||||
|
G_TYPE_INVALID,
|
||||||
|
G_TYPE_UINT, &request_name_result,
|
||||||
|
G_TYPE_INVALID))
|
||||||
|
{
|
||||||
|
g_print ("failed to acquire org.gnome.Shell: %s\n", error->message);
|
||||||
|
/* If we somehow got started again, it's not an error to be running
|
||||||
|
* already. So just exit 0.
|
||||||
|
*/
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Also grab org.gnome.Panel to replace any existing panel process,
|
||||||
|
* unless a special environment variable is passed. The environment
|
||||||
|
* variable is used by the gnome-shell (no --replace) launcher in
|
||||||
|
* Xephyr */
|
||||||
|
if (!dbus_g_proxy_call (bus, "RequestName", &error, G_TYPE_STRING,
|
||||||
|
"org.gnome.Panel", G_TYPE_UINT,
|
||||||
|
DBUS_NAME_FLAG_REPLACE_EXISTING | DBUS_NAME_FLAG_DO_NOT_QUEUE,
|
||||||
|
G_TYPE_INVALID, G_TYPE_UINT,
|
||||||
|
&request_name_result, G_TYPE_INVALID))
|
||||||
|
{
|
||||||
|
g_print ("failed to acquire org.gnome.Panel: %s\n", error->message);
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ...and the org.gnome.Magnifier service.
|
||||||
|
*/
|
||||||
|
if (!dbus_g_proxy_call (bus, "RequestName", &error,
|
||||||
|
G_TYPE_STRING, MAGNIFIER_DBUS_SERVICE,
|
||||||
|
G_TYPE_UINT, 0,
|
||||||
|
G_TYPE_INVALID,
|
||||||
|
G_TYPE_UINT, &request_name_result,
|
||||||
|
G_TYPE_INVALID))
|
||||||
|
{
|
||||||
|
g_print ("failed to acquire %s: %s\n", MAGNIFIER_DBUS_SERVICE, error->message);
|
||||||
|
/* Failing to acquire the magnifer service is not fatal. Log the error,
|
||||||
|
* but keep going. */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ...and the org.freedesktop.Notifications service.
|
||||||
|
*/
|
||||||
|
if (!dbus_g_proxy_call (bus, "RequestName", &error,
|
||||||
|
G_TYPE_STRING, "org.freedesktop.Notifications",
|
||||||
|
G_TYPE_UINT, DBUS_NAME_FLAG_REPLACE_EXISTING | DBUS_NAME_FLAG_DO_NOT_QUEUE,
|
||||||
|
G_TYPE_INVALID,
|
||||||
|
G_TYPE_UINT, &request_name_result,
|
||||||
|
G_TYPE_INVALID))
|
||||||
|
{
|
||||||
|
g_print ("failed to acquire org.freedesktop.Notifications: %s\n", error->message);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_unref (bus);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_font_options (GtkSettings *settings)
|
||||||
|
{
|
||||||
|
StThemeContext *context;
|
||||||
|
ClutterStage *stage;
|
||||||
|
ClutterBackend *backend;
|
||||||
|
gint dpi;
|
||||||
|
gint hinting;
|
||||||
|
gchar *hint_style_str;
|
||||||
|
cairo_hint_style_t hint_style = CAIRO_HINT_STYLE_NONE;
|
||||||
|
gint antialias;
|
||||||
|
cairo_antialias_t antialias_mode = CAIRO_ANTIALIAS_NONE;
|
||||||
|
cairo_font_options_t *options;
|
||||||
|
|
||||||
|
g_object_get (settings,
|
||||||
|
"gtk-xft-dpi", &dpi,
|
||||||
|
"gtk-xft-antialias", &antialias,
|
||||||
|
"gtk-xft-hinting", &hinting,
|
||||||
|
"gtk-xft-hintstyle", &hint_style_str,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
stage = CLUTTER_STAGE (clutter_stage_get_default ());
|
||||||
|
context = st_theme_context_get_for_stage (stage);
|
||||||
|
|
||||||
|
if (dpi != -1)
|
||||||
|
/* GTK stores resolution as 1024 * dots/inch */
|
||||||
|
st_theme_context_set_resolution (context, dpi / 1024);
|
||||||
|
else
|
||||||
|
st_theme_context_set_default_resolution (context);
|
||||||
|
|
||||||
|
/* Clutter (as of 0.9) passes comprehensively wrong font options
|
||||||
|
* override whatever set_font_flags() did above.
|
||||||
|
*
|
||||||
|
* http://bugzilla.openedhand.com/show_bug.cgi?id=1456
|
||||||
|
*/
|
||||||
|
backend = clutter_get_default_backend ();
|
||||||
|
options = cairo_font_options_create ();
|
||||||
|
|
||||||
|
cairo_font_options_set_hint_metrics (options, CAIRO_HINT_METRICS_ON);
|
||||||
|
|
||||||
|
if (hinting >= 0 && !hinting)
|
||||||
|
{
|
||||||
|
hint_style = CAIRO_HINT_STYLE_NONE;
|
||||||
|
}
|
||||||
|
else if (hint_style_str)
|
||||||
|
{
|
||||||
|
if (strcmp (hint_style_str, "hintnone") == 0)
|
||||||
|
hint_style = CAIRO_HINT_STYLE_NONE;
|
||||||
|
else if (strcmp (hint_style_str, "hintslight") == 0)
|
||||||
|
hint_style = CAIRO_HINT_STYLE_SLIGHT;
|
||||||
|
else if (strcmp (hint_style_str, "hintmedium") == 0)
|
||||||
|
hint_style = CAIRO_HINT_STYLE_MEDIUM;
|
||||||
|
else if (strcmp (hint_style_str, "hintfull") == 0)
|
||||||
|
hint_style = CAIRO_HINT_STYLE_FULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (hint_style_str);
|
||||||
|
|
||||||
|
cairo_font_options_set_hint_style (options, hint_style);
|
||||||
|
|
||||||
|
/* We don't want to turn on subpixel anti-aliasing; since Clutter
|
||||||
|
* doesn't currently have the code to support ARGB masks,
|
||||||
|
* generating them then squashing them back to A8 is pointless.
|
||||||
|
*/
|
||||||
|
antialias_mode = (antialias < 0 || antialias) ? CAIRO_ANTIALIAS_GRAY
|
||||||
|
: CAIRO_ANTIALIAS_NONE;
|
||||||
|
|
||||||
|
cairo_font_options_set_antialias (options, antialias_mode);
|
||||||
|
|
||||||
|
clutter_backend_set_font_options (backend, options);
|
||||||
|
cairo_font_options_destroy (options);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_notify_cb (GtkSettings *settings,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
update_font_options (settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
shell_fonts_init (void)
|
||||||
|
{
|
||||||
|
GtkSettings *settings;
|
||||||
|
|
||||||
|
/* Disable text mipmapping; it causes problems on pre-GEM Intel
|
||||||
|
* drivers and we should just be rendering text at the right
|
||||||
|
* size rather than scaling it. If we do effects where we dynamically
|
||||||
|
* zoom labels, then we might want to reconsider.
|
||||||
|
*/
|
||||||
|
clutter_set_font_flags (clutter_get_font_flags () & ~CLUTTER_FONT_MIPMAPPING);
|
||||||
|
|
||||||
|
settings = gtk_settings_get_default ();
|
||||||
|
g_object_connect (settings,
|
||||||
|
"signal::notify::gtk-xft-dpi",
|
||||||
|
G_CALLBACK (settings_notify_cb), NULL,
|
||||||
|
"signal::notify::gtk-xft-antialias",
|
||||||
|
G_CALLBACK (settings_notify_cb), NULL,
|
||||||
|
"signal::notify::gtk-xft-hinting",
|
||||||
|
G_CALLBACK (settings_notify_cb), NULL,
|
||||||
|
"signal::notify::gtk-xft-hintstyle",
|
||||||
|
G_CALLBACK (settings_notify_cb), NULL,
|
||||||
|
NULL);
|
||||||
|
update_font_options (settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
shell_prefs_init (void)
|
||||||
|
{
|
||||||
|
meta_prefs_override_preference_location ("/apps/mutter/general/attach_modal_dialogs",
|
||||||
|
"/desktop/gnome/shell/windows/attach_modal_dialogs");
|
||||||
|
meta_prefs_override_preference_location ("/apps/metacity/general/button_layout",
|
||||||
|
"/desktop/gnome/shell/windows/button_layout");
|
||||||
|
meta_prefs_override_preference_location ("/apps/metacity/general/edge_tiling",
|
||||||
|
"/desktop/gnome/shell/windows/edge_tiling");
|
||||||
|
meta_prefs_override_preference_location ("/apps/metacity/general/theme",
|
||||||
|
"/desktop/gnome/shell/windows/theme");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is an IBus workaround. The flow of events with IBus is that every time
|
||||||
|
* it gets gets a key event, it:
|
||||||
|
*
|
||||||
|
* Sends it to the daemon via D-Bus asynchronously
|
||||||
|
* When it gets an reply, synthesizes a new GdkEvent and puts it into the
|
||||||
|
* GDK event queue with gdk_event_put(), including
|
||||||
|
* IBUS_FORWARD_MASK = 1 << 25 in the state to prevent a loop.
|
||||||
|
*
|
||||||
|
* (Normally, IBus uses the GTK+ key snooper mechanism to get the key
|
||||||
|
* events early, but since our key events aren't visible to GTK+ key snoopers,
|
||||||
|
* IBus will instead get the events via the standard
|
||||||
|
* GtkIMContext.filter_keypress() mechanism.)
|
||||||
|
*
|
||||||
|
* There are a number of potential problems here; probably the worst
|
||||||
|
* problem is that IBus doesn't forward the timestamp with the event
|
||||||
|
* so that every key event that gets delivered ends up with
|
||||||
|
* GDK_CURRENT_TIME. This creates some very subtle bugs; for example
|
||||||
|
* if you have IBus running and a keystroke is used to trigger
|
||||||
|
* launching an application, focus stealing prevention won't work
|
||||||
|
* right. http://code.google.com/p/ibus/issues/detail?id=1184
|
||||||
|
*
|
||||||
|
* In any case, our normal flow of key events is:
|
||||||
|
*
|
||||||
|
* GDK filter function => clutter_x11_handle_event => clutter actor
|
||||||
|
*
|
||||||
|
* So, if we see a key event that gets delivered via the GDK event handler
|
||||||
|
* function - then we know it must be one of these synthesized events, and
|
||||||
|
* we should push it back to clutter.
|
||||||
|
*
|
||||||
|
* To summarize, the full key event flow with IBus is:
|
||||||
|
*
|
||||||
|
* GDK filter function
|
||||||
|
* => Mutter
|
||||||
|
* => gnome_shell_plugin_xevent_filter()
|
||||||
|
* => clutter_x11_handle_event()
|
||||||
|
* => clutter event delivery to actor
|
||||||
|
* => gtk_im_context_filter_event()
|
||||||
|
* => sent to IBus daemon
|
||||||
|
* => response received from IBus daemon
|
||||||
|
* => gdk_event_put()
|
||||||
|
* => GDK event handler
|
||||||
|
* => <this function>
|
||||||
|
* => clutter_event_put()
|
||||||
|
* => clutter event delivery to actor
|
||||||
|
*
|
||||||
|
* Anything else we see here we just pass on to the normal GDK event handler
|
||||||
|
* gtk_main_do_event().
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
gnome_shell_gdk_event_handler (GdkEvent *event_gdk,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
if (event_gdk->type == GDK_KEY_PRESS || event_gdk->type == GDK_KEY_RELEASE)
|
||||||
|
{
|
||||||
|
ClutterActor *stage;
|
||||||
|
Window stage_xwindow;
|
||||||
|
|
||||||
|
stage = clutter_stage_get_default ();
|
||||||
|
stage_xwindow = clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
|
||||||
|
|
||||||
|
if (GDK_WINDOW_XID (event_gdk->key.window) == stage_xwindow)
|
||||||
|
{
|
||||||
|
ClutterDeviceManager *device_manager = clutter_device_manager_get_default ();
|
||||||
|
ClutterInputDevice *keyboard = clutter_device_manager_get_core_device (device_manager,
|
||||||
|
CLUTTER_KEYBOARD_DEVICE);
|
||||||
|
|
||||||
|
ClutterEvent *event_clutter = clutter_event_new ((event_gdk->type == GDK_KEY_PRESS) ?
|
||||||
|
CLUTTER_KEY_PRESS : CLUTTER_KEY_RELEASE);
|
||||||
|
event_clutter->key.time = event_gdk->key.time;
|
||||||
|
event_clutter->key.flags = CLUTTER_EVENT_NONE;
|
||||||
|
event_clutter->key.stage = CLUTTER_STAGE (stage);
|
||||||
|
event_clutter->key.source = NULL;
|
||||||
|
|
||||||
|
/* This depends on ClutterModifierType and GdkModifierType being
|
||||||
|
* identical, which they are currently. (They both match the X
|
||||||
|
* modifier state in the low 16-bits and have the same extensions.) */
|
||||||
|
event_clutter->key.modifier_state = event_gdk->key.state;
|
||||||
|
|
||||||
|
event_clutter->key.keyval = event_gdk->key.keyval;
|
||||||
|
event_clutter->key.hardware_keycode = event_gdk->key.hardware_keycode;
|
||||||
|
event_clutter->key.unicode_value = gdk_keyval_to_unicode (event_clutter->key.keyval);
|
||||||
|
event_clutter->key.device = keyboard;
|
||||||
|
|
||||||
|
clutter_event_put (event_clutter);
|
||||||
|
clutter_event_free (event_clutter);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_main_do_event (event_gdk);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
malloc_statistics_callback (ShellPerfLog *perf_log,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_MALLINFO
|
||||||
|
struct mallinfo info = mallinfo ();
|
||||||
|
|
||||||
|
shell_perf_log_update_statistic_i (perf_log,
|
||||||
|
"malloc.arenaSize",
|
||||||
|
info.arena);
|
||||||
|
shell_perf_log_update_statistic_i (perf_log,
|
||||||
|
"malloc.mmapSize",
|
||||||
|
info.hblkhd);
|
||||||
|
shell_perf_log_update_statistic_i (perf_log,
|
||||||
|
"malloc.usedSize",
|
||||||
|
info.uordblks);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
shell_perf_log_init (void)
|
||||||
|
{
|
||||||
|
ShellPerfLog *perf_log = shell_perf_log_get_default ();
|
||||||
|
|
||||||
|
/* For probably historical reasons, mallinfo() defines the returned values,
|
||||||
|
* even those in bytes as int, not size_t. We're determined not to use
|
||||||
|
* more than 2G of malloc'ed memory, so are OK with that.
|
||||||
|
*/
|
||||||
|
shell_perf_log_define_statistic (perf_log,
|
||||||
|
"malloc.arenaSize",
|
||||||
|
"Amount of memory allocated by malloc() with brk(), in bytes",
|
||||||
|
"i");
|
||||||
|
shell_perf_log_define_statistic (perf_log,
|
||||||
|
"malloc.mmapSize",
|
||||||
|
"Amount of memory allocated by malloc() with mmap(), in bytes",
|
||||||
|
"i");
|
||||||
|
shell_perf_log_define_statistic (perf_log,
|
||||||
|
"malloc.usedSize",
|
||||||
|
"Amount of malloc'ed memory currently in use",
|
||||||
|
"i");
|
||||||
|
|
||||||
|
shell_perf_log_add_statistics_callback (perf_log,
|
||||||
|
malloc_statistics_callback,
|
||||||
|
NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
muted_log_handler (const char *log_domain,
|
||||||
|
GLogLevelFlags log_level,
|
||||||
|
const char *message,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
/* Intentionally empty to discard message */
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
print_version (const gchar *option_name,
|
||||||
|
const gchar *value,
|
||||||
|
gpointer data,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
g_print ("GNOME Shell %s\n", VERSION);
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
GOptionEntry gnome_shell_options[] = {
|
||||||
|
{
|
||||||
|
"version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
||||||
|
print_version,
|
||||||
|
N_("Print version"),
|
||||||
|
NULL
|
||||||
|
},
|
||||||
|
{ NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
GOptionContext *ctx;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
g_type_init ();
|
||||||
|
|
||||||
|
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||||
|
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||||
|
|
||||||
|
ctx = meta_get_option_context ();
|
||||||
|
g_option_context_add_main_entries (ctx, gnome_shell_options, GETTEXT_PACKAGE);
|
||||||
|
if (!g_option_context_parse (ctx, &argc, &argv, &error))
|
||||||
|
{
|
||||||
|
g_printerr ("%s: %s\n", argv[0], error->message);
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
meta_plugin_type_register (gnome_shell_plugin_get_type ());
|
||||||
|
|
||||||
|
/* Prevent meta_init() from causing gtk to load gail and at-bridge */
|
||||||
|
g_setenv ("NO_GAIL", "1", TRUE);
|
||||||
|
g_setenv ("NO_AT_BRIDGE", "1", TRUE);
|
||||||
|
meta_init ();
|
||||||
|
g_unsetenv ("NO_GAIL");
|
||||||
|
g_unsetenv ("NO_AT_BRIDGE");
|
||||||
|
|
||||||
|
/* FIXME: Add gjs API to set this stuff and don't depend on the
|
||||||
|
* environment. These propagate to child processes.
|
||||||
|
*/
|
||||||
|
g_setenv ("GJS_DEBUG_OUTPUT", "stderr", TRUE);
|
||||||
|
g_setenv ("GJS_DEBUG_TOPICS", "JS ERROR;JS LOG", TRUE);
|
||||||
|
|
||||||
|
shell_dbus_init ();
|
||||||
|
shell_a11y_init ();
|
||||||
|
shell_fonts_init ();
|
||||||
|
shell_perf_log_init ();
|
||||||
|
shell_prefs_init ();
|
||||||
|
|
||||||
|
gdk_event_handler_set (gnome_shell_gdk_event_handler, NULL, NULL);
|
||||||
|
|
||||||
|
g_irepository_prepend_search_path (GNOME_SHELL_PKGLIBDIR);
|
||||||
|
#if HAVE_BLUETOOTH
|
||||||
|
g_irepository_prepend_search_path (BLUETOOTH_DIR);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Disable debug spew from various libraries */
|
||||||
|
g_log_set_handler ("Gvc", G_LOG_LEVEL_DEBUG,
|
||||||
|
muted_log_handler, NULL);
|
||||||
|
g_log_set_handler ("GdmUser", G_LOG_LEVEL_DEBUG,
|
||||||
|
muted_log_handler, NULL);
|
||||||
|
g_log_set_handler ("Bluetooth", G_LOG_LEVEL_DEBUG | G_LOG_LEVEL_MESSAGE,
|
||||||
|
muted_log_handler, NULL);
|
||||||
|
|
||||||
|
/* Initialize the global object */
|
||||||
|
shell_global_get ();
|
||||||
|
|
||||||
|
return meta_run ();
|
||||||
|
}
|
@ -134,9 +134,6 @@ shell_a11y_init (void)
|
|||||||
{
|
{
|
||||||
char *bridge_path = NULL;
|
char *bridge_path = NULL;
|
||||||
|
|
||||||
g_unsetenv ("NO_AT_BRIDGE");
|
|
||||||
g_unsetenv ("NO_GAIL");
|
|
||||||
|
|
||||||
if (!should_enable_a11y ())
|
if (!should_enable_a11y ())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -10,11 +10,11 @@
|
|||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
#include <meta/display.h>
|
||||||
|
|
||||||
#include "shell-app-private.h"
|
#include "shell-app-private.h"
|
||||||
#include "shell-window-tracker-private.h"
|
#include "shell-window-tracker-private.h"
|
||||||
#include "shell-global.h"
|
#include "shell-global.h"
|
||||||
#include "display.h"
|
|
||||||
#include "st.h"
|
#include "st.h"
|
||||||
|
|
||||||
#define GMENU_I_KNOW_THIS_IS_UNSTABLE
|
#define GMENU_I_KNOW_THIS_IS_UNSTABLE
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
#include <gio/gio.h>
|
#include <gio/gio.h>
|
||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
|
#include <meta/window.h>
|
||||||
|
|
||||||
#include "shell-app.h"
|
#include "shell-app.h"
|
||||||
#include "window.h"
|
|
||||||
|
|
||||||
#define SHELL_TYPE_APP_SYSTEM (shell_app_system_get_type ())
|
#define SHELL_TYPE_APP_SYSTEM (shell_app_system_get_type ())
|
||||||
#define SHELL_APP_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_APP_SYSTEM, ShellAppSystem))
|
#define SHELL_APP_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_APP_SYSTEM, ShellAppSystem))
|
||||||
|
@ -12,16 +12,15 @@
|
|||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <gio/gio.h>
|
#include <gio/gio.h>
|
||||||
#include <dbus/dbus-glib.h>
|
#include <dbus/dbus-glib.h>
|
||||||
|
#include <meta/display.h>
|
||||||
|
#include <meta/group.h>
|
||||||
|
#include <meta/window.h>
|
||||||
|
|
||||||
#include "shell-app-usage.h"
|
#include "shell-app-usage.h"
|
||||||
#include "shell-window-tracker.h"
|
#include "shell-window-tracker.h"
|
||||||
#include "shell-global.h"
|
#include "shell-global.h"
|
||||||
#include "shell-marshal.h"
|
#include "shell-marshal.h"
|
||||||
|
|
||||||
#include "display.h"
|
|
||||||
#include "window.h"
|
|
||||||
#include "group.h"
|
|
||||||
|
|
||||||
/* This file includes modified code from
|
/* This file includes modified code from
|
||||||
* desktop-data-engine/engine-dbus/hippo-application-monitor.c
|
* desktop-data-engine/engine-dbus/hippo-application-monitor.c
|
||||||
* in the functions collecting application usage data.
|
* in the functions collecting application usage data.
|
||||||
|
@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "st.h"
|
|
||||||
#include "shell-app-private.h"
|
|
||||||
#include "shell-global.h"
|
|
||||||
#include "shell-enum-types.h"
|
|
||||||
#include "display.h"
|
|
||||||
#include "st.h"
|
|
||||||
#include "shell-window-tracker-private.h"
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <meta/display.h>
|
||||||
|
|
||||||
|
#include "shell-app-private.h"
|
||||||
|
#include "shell-enum-types.h"
|
||||||
|
#include "shell-global.h"
|
||||||
|
#include "shell-window-tracker-private.h"
|
||||||
|
#include "st.h"
|
||||||
|
|
||||||
/* This is mainly a memory usage optimization - the user is going to
|
/* This is mainly a memory usage optimization - the user is going to
|
||||||
* be running far fewer of the applications at one time than they have
|
* be running far fewer of the applications at one time than they have
|
||||||
* installed. But it also just helps keep the code more logically
|
* installed. But it also just helps keep the code more logically
|
||||||
|
@ -4,8 +4,7 @@
|
|||||||
|
|
||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
#include <gio/gio.h>
|
#include <gio/gio.h>
|
||||||
|
#include <meta/window.h>
|
||||||
#include "window.h"
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
|
|
||||||
void _shell_global_set_plugin (ShellGlobal *global,
|
void _shell_global_set_plugin (ShellGlobal *global,
|
||||||
MetaPlugin *plugin);
|
MetaPlugin *plugin);
|
||||||
void _shell_global_set_gjs_context (ShellGlobal *global,
|
|
||||||
GjsContext *context);
|
GjsContext *_shell_global_get_gjs_context (ShellGlobal *global);
|
||||||
|
|
||||||
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
|
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
|
||||||
XEvent *xev);
|
XEvent *xev);
|
||||||
|
@ -2,38 +2,39 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "shell-global-private.h"
|
|
||||||
#include "shell-enum-types.h"
|
|
||||||
#include "shell-perf-log.h"
|
|
||||||
#include "shell-window-tracker.h"
|
|
||||||
#include "shell-marshal.h"
|
|
||||||
#include "shell-wm.h"
|
|
||||||
#include "st.h"
|
|
||||||
|
|
||||||
#include "display.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include <clutter/glx/clutter-glx.h>
|
|
||||||
#include <clutter/x11/clutter-x11.h>
|
|
||||||
#include <gdk/gdkx.h>
|
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <math.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <dbus/dbus-glib.h>
|
|
||||||
#include <gio/gio.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <X11/extensions/Xfixes.h>
|
|
||||||
#include <gjs/gjs-module.h>
|
|
||||||
#include <canberra.h>
|
|
||||||
#include <libxml/xmlmemory.h>
|
|
||||||
#include <libxml/parser.h>
|
|
||||||
#include <libxml/tree.h>
|
|
||||||
#ifdef HAVE_SYS_RESOURCE_H
|
#ifdef HAVE_SYS_RESOURCE_H
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <X11/extensions/Xfixes.h>
|
||||||
|
#include <canberra.h>
|
||||||
|
#include <clutter/glx/clutter-glx.h>
|
||||||
|
#include <clutter/x11/clutter-x11.h>
|
||||||
|
#include <dbus/dbus-glib.h>
|
||||||
|
#include <gdk/gdkx.h>
|
||||||
|
#include <gio/gio.h>
|
||||||
|
#include <gjs/gjs-module.h>
|
||||||
|
#include <libxml/parser.h>
|
||||||
|
#include <libxml/tree.h>
|
||||||
|
#include <libxml/xmlmemory.h>
|
||||||
|
#include <meta/display.h>
|
||||||
|
#include <meta/util.h>
|
||||||
|
|
||||||
|
#include "shell-enum-types.h"
|
||||||
|
#include "shell-global-private.h"
|
||||||
#include "shell-jsapi-compat-private.h"
|
#include "shell-jsapi-compat-private.h"
|
||||||
|
#include "shell-marshal.h"
|
||||||
|
#include "shell-perf-log.h"
|
||||||
|
#include "shell-window-tracker.h"
|
||||||
|
#include "shell-wm.h"
|
||||||
|
#include "st.h"
|
||||||
|
|
||||||
static void grab_notify (GtkWidget *widget, gboolean is_grab, gpointer user_data);
|
static void grab_notify (GtkWidget *widget, gboolean is_grab, gpointer user_data);
|
||||||
|
|
||||||
@ -203,7 +204,8 @@ static void
|
|||||||
shell_global_init (ShellGlobal *global)
|
shell_global_init (ShellGlobal *global)
|
||||||
{
|
{
|
||||||
const char *datadir = g_getenv ("GNOME_SHELL_DATADIR");
|
const char *datadir = g_getenv ("GNOME_SHELL_DATADIR");
|
||||||
char *imagedir;
|
const char *shell_js = g_getenv("GNOME_SHELL_JS");
|
||||||
|
char *imagedir, **search_path;
|
||||||
|
|
||||||
if (!datadir)
|
if (!datadir)
|
||||||
datadir = GNOME_SHELL_DATADIR;
|
datadir = GNOME_SHELL_DATADIR;
|
||||||
@ -242,6 +244,15 @@ shell_global_init (ShellGlobal *global)
|
|||||||
ca_context_create (&global->sound_context);
|
ca_context_create (&global->sound_context);
|
||||||
ca_context_change_props (global->sound_context, CA_PROP_APPLICATION_NAME, PACKAGE_NAME, CA_PROP_APPLICATION_ID, "org.gnome.Shell", NULL);
|
ca_context_change_props (global->sound_context, CA_PROP_APPLICATION_NAME, PACKAGE_NAME, CA_PROP_APPLICATION_ID, "org.gnome.Shell", NULL);
|
||||||
ca_context_open (global->sound_context);
|
ca_context_open (global->sound_context);
|
||||||
|
|
||||||
|
if (!shell_js)
|
||||||
|
shell_js = JSDIR;
|
||||||
|
search_path = g_strsplit (shell_js, ":", -1);
|
||||||
|
global->js_context = g_object_new (GJS_TYPE_CONTEXT,
|
||||||
|
"search-path", search_path,
|
||||||
|
"js-version", "1.8",
|
||||||
|
NULL);
|
||||||
|
g_strfreev (search_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -791,11 +802,10 @@ _shell_global_set_plugin (ShellGlobal *global,
|
|||||||
global->focus_manager = st_focus_manager_get_for_stage (CLUTTER_STAGE (stage));
|
global->focus_manager = st_focus_manager_get_for_stage (CLUTTER_STAGE (stage));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
GjsContext *
|
||||||
_shell_global_set_gjs_context (ShellGlobal *global,
|
_shell_global_get_gjs_context (ShellGlobal *global)
|
||||||
GjsContext *context)
|
|
||||||
{
|
{
|
||||||
global->js_context = context;
|
return global->js_context;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,12 +2,11 @@
|
|||||||
#ifndef __SHELL_GLOBAL_H__
|
#ifndef __SHELL_GLOBAL_H__
|
||||||
#define __SHELL_GLOBAL_H__
|
#define __SHELL_GLOBAL_H__
|
||||||
|
|
||||||
#include "meta-plugin.h"
|
|
||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
#include <meta/meta-plugin.h>
|
||||||
#include <telepathy-glib/telepathy-glib.h>
|
#include <telepathy-glib/telepathy-glib.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
@ -4,11 +4,9 @@
|
|||||||
|
|
||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
#include <clutter/x11/clutter-x11.h>
|
#include <clutter/x11/clutter-x11.h>
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#include <display.h>
|
|
||||||
|
|
||||||
#include <girepository.h>
|
#include <girepository.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
#include <meta/display.h>
|
||||||
|
|
||||||
#include "shell-tray-manager.h"
|
#include "shell-tray-manager.h"
|
||||||
#include "na-tray-manager.h"
|
#include "na-tray-manager.h"
|
||||||
|
@ -9,6 +9,10 @@
|
|||||||
#include <X11/Xatom.h>
|
#include <X11/Xatom.h>
|
||||||
#include <gdk/gdk.h>
|
#include <gdk/gdk.h>
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
|
#include <meta/display.h>
|
||||||
|
#include <meta/group.h>
|
||||||
|
#include <meta/util.h>
|
||||||
|
#include <meta/window.h>
|
||||||
|
|
||||||
#define SN_API_NOT_YET_FROZEN 1
|
#define SN_API_NOT_YET_FROZEN 1
|
||||||
#include <libsn/sn.h>
|
#include <libsn/sn.h>
|
||||||
@ -20,11 +24,6 @@
|
|||||||
#include "shell-marshal.h"
|
#include "shell-marshal.h"
|
||||||
#include "st.h"
|
#include "st.h"
|
||||||
|
|
||||||
#include "display.h"
|
|
||||||
#include "window.h"
|
|
||||||
#include "group.h"
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
/* This file includes modified code from
|
/* This file includes modified code from
|
||||||
* desktop-data-engine/engine-dbus/hippo-application-monitor.c
|
* desktop-data-engine/engine-dbus/hippo-application-monitor.c
|
||||||
* in the functions collecting application usage data.
|
* in the functions collecting application usage data.
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
#include <meta/window.h>
|
||||||
|
|
||||||
#include "window.h"
|
|
||||||
#include "shell-app.h"
|
#include "shell-app.h"
|
||||||
#include "shell-app-system.h"
|
#include "shell-app-system.h"
|
||||||
|
|
||||||
|
@ -4,12 +4,12 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <meta/keybindings.h>
|
||||||
|
|
||||||
#include "shell-wm-private.h"
|
#include "shell-wm-private.h"
|
||||||
#include "shell-global.h"
|
#include "shell-global.h"
|
||||||
#include "shell-marshal.h"
|
#include "shell-marshal.h"
|
||||||
|
|
||||||
#include <keybindings.h>
|
|
||||||
|
|
||||||
struct _ShellWM {
|
struct _ShellWM {
|
||||||
GObject parent;
|
GObject parent;
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#define __SHELL_WM_H__
|
#define __SHELL_WM_H__
|
||||||
|
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
#include <meta-plugin.h>
|
#include <meta/meta-plugin.h>
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ st_button_key_press (ClutterActor *actor,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return CLUTTER_ACTOR_CLASS (st_button_parent_class)->key_press_event (actor, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -646,23 +646,9 @@ st_container_navigate_focus (StWidget *widget,
|
|||||||
* any child is inconsistently scaled, then the focus chain will
|
* any child is inconsistently scaled, then the focus chain will
|
||||||
* probably be unpredictable.
|
* probably be unpredictable.
|
||||||
*/
|
*/
|
||||||
if (from)
|
if (focus_child)
|
||||||
{
|
{
|
||||||
if (from == focus_child)
|
|
||||||
clutter_actor_get_allocation_box (focus_child, &sort_data.box);
|
clutter_actor_get_allocation_box (focus_child, &sort_data.box);
|
||||||
else
|
|
||||||
{
|
|
||||||
float cx, cy, fx, fy, fw, fh;
|
|
||||||
|
|
||||||
clutter_actor_get_transformed_position (CLUTTER_ACTOR (container), &cx, &cy);
|
|
||||||
clutter_actor_get_transformed_position (from, &fx, &fy);
|
|
||||||
clutter_actor_get_transformed_size (from, &fw, &fh);
|
|
||||||
|
|
||||||
sort_data.box.x1 = fx - cx;
|
|
||||||
sort_data.box.x2 = fx - cx + fw;
|
|
||||||
sort_data.box.y1 = fy - cy;
|
|
||||||
sort_data.box.y2 = fy - cy + fh;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -586,7 +586,7 @@ st_entry_key_press_event (ClutterActor *actor,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return CLUTTER_ACTOR_CLASS (st_entry_parent_class)->key_press_event (actor, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -199,3 +199,26 @@ st_focus_manager_remove_group (StFocusManager *manager,
|
|||||||
{
|
{
|
||||||
g_hash_table_remove (manager->priv->groups, root);
|
g_hash_table_remove (manager->priv->groups, root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* st_focus_manager_get_group:
|
||||||
|
* @manager: the #StFocusManager
|
||||||
|
* @widget: an #StWidget
|
||||||
|
*
|
||||||
|
* Checks if @widget is inside a focus group, and if so, returns
|
||||||
|
* the root of that group.
|
||||||
|
*
|
||||||
|
* Return value: (transfer none): the focus group root, or %NULL if
|
||||||
|
* @widget is not in a focus group
|
||||||
|
*/
|
||||||
|
StWidget *
|
||||||
|
st_focus_manager_get_group (StFocusManager *manager,
|
||||||
|
StWidget *widget)
|
||||||
|
{
|
||||||
|
ClutterActor *actor = CLUTTER_ACTOR (widget);
|
||||||
|
|
||||||
|
while (actor && !g_hash_table_lookup (manager->priv->groups, actor))
|
||||||
|
actor = clutter_actor_get_parent (actor);
|
||||||
|
|
||||||
|
return ST_WIDGET (actor);
|
||||||
|
}
|
||||||
|
@ -73,6 +73,8 @@ void st_focus_manager_add_group (StFocusManager *manager,
|
|||||||
StWidget *root);
|
StWidget *root);
|
||||||
void st_focus_manager_remove_group (StFocusManager *manager,
|
void st_focus_manager_remove_group (StFocusManager *manager,
|
||||||
StWidget *root);
|
StWidget *root);
|
||||||
|
StWidget *st_focus_manager_get_group (StFocusManager *manager,
|
||||||
|
StWidget *widget);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -176,7 +176,8 @@ st_scroll_view_set_vfade (StScrollView *self,
|
|||||||
if (priv->vfade_effect == NULL)
|
if (priv->vfade_effect == NULL)
|
||||||
priv->vfade_effect = g_object_new (ST_TYPE_SCROLL_VIEW_FADE, NULL);
|
priv->vfade_effect = g_object_new (ST_TYPE_SCROLL_VIEW_FADE, NULL);
|
||||||
|
|
||||||
clutter_actor_add_effect (CLUTTER_ACTOR (self), CLUTTER_EFFECT (priv->vfade_effect));
|
clutter_actor_add_effect_with_name (CLUTTER_ACTOR (self), "vfade",
|
||||||
|
CLUTTER_EFFECT (priv->vfade_effect));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1391,6 +1391,36 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
|
|||||||
* icon you are loading, use %ST_ICON_FULLCOLOR.
|
* icon you are loading, use %ST_ICON_FULLCOLOR.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* generates names like g_themed_icon_new_with_default_fallbacks(),
|
||||||
|
* but *only* symbolic names
|
||||||
|
*/
|
||||||
|
static char **
|
||||||
|
symbolic_names_for_icon (const char *name)
|
||||||
|
{
|
||||||
|
char **parts, **names;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
parts = g_strsplit (name, "-", -1);
|
||||||
|
names = g_new (char *, g_strv_length (parts) + 1);
|
||||||
|
for (i = 0; parts[i]; i++)
|
||||||
|
{
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
names[i] = g_strdup_printf ("%s-symbolic", parts[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
names[i] = g_strdup_printf ("%.*s-%s-symbolic",
|
||||||
|
(int) (strlen (names[i - 1]) - strlen ("-symbolic")),
|
||||||
|
names[i - 1], parts[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
names[i] = NULL;
|
||||||
|
|
||||||
|
g_strfreev (parts);
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_texture_cache_load_icon_name:
|
* st_texture_cache_load_icon_name:
|
||||||
* @cache: The texture cache instance
|
* @cache: The texture cache instance
|
||||||
@ -1414,7 +1444,7 @@ st_texture_cache_load_icon_name (StTextureCache *cache,
|
|||||||
{
|
{
|
||||||
ClutterActor *texture;
|
ClutterActor *texture;
|
||||||
GIcon *themed;
|
GIcon *themed;
|
||||||
char *symbolic;
|
char **names;
|
||||||
|
|
||||||
g_return_val_if_fail (!(icon_type == ST_ICON_SYMBOLIC && theme_node == NULL), NULL);
|
g_return_val_if_fail (!(icon_type == ST_ICON_SYMBOLIC && theme_node == NULL), NULL);
|
||||||
|
|
||||||
@ -1429,9 +1459,9 @@ st_texture_cache_load_icon_name (StTextureCache *cache,
|
|||||||
return CLUTTER_ACTOR (texture);
|
return CLUTTER_ACTOR (texture);
|
||||||
break;
|
break;
|
||||||
case ST_ICON_SYMBOLIC:
|
case ST_ICON_SYMBOLIC:
|
||||||
symbolic = g_strconcat (name, "-symbolic", NULL);
|
names = symbolic_names_for_icon (name);
|
||||||
themed = g_themed_icon_new_with_default_fallbacks ((const gchar*)symbolic);
|
themed = g_themed_icon_new_from_names (names, -1);
|
||||||
g_free (symbolic);
|
g_strfreev (names);
|
||||||
texture = load_gicon_with_colors (cache, themed, size,
|
texture = load_gicon_with_colors (cache, themed, size,
|
||||||
st_theme_node_get_icon_colors (theme_node));
|
st_theme_node_get_icon_colors (theme_node));
|
||||||
g_object_unref (themed);
|
g_object_unref (themed);
|
||||||
|
@ -103,6 +103,7 @@ enum
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
STYLE_CHANGED,
|
STYLE_CHANGED,
|
||||||
|
POPUP_MENU,
|
||||||
|
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
@ -554,6 +555,7 @@ st_widget_get_theme_node (StWidget *widget)
|
|||||||
StThemeNode *parent_node = NULL;
|
StThemeNode *parent_node = NULL;
|
||||||
ClutterStage *stage = NULL;
|
ClutterStage *stage = NULL;
|
||||||
ClutterActor *parent;
|
ClutterActor *parent;
|
||||||
|
char *pseudo_class, *direction_pseudo_class;
|
||||||
|
|
||||||
parent = clutter_actor_get_parent (CLUTTER_ACTOR (widget));
|
parent = clutter_actor_get_parent (CLUTTER_ACTOR (widget));
|
||||||
while (parent != NULL)
|
while (parent != NULL)
|
||||||
@ -575,13 +577,31 @@ st_widget_get_theme_node (StWidget *widget)
|
|||||||
if (parent_node == NULL)
|
if (parent_node == NULL)
|
||||||
parent_node = get_root_theme_node (CLUTTER_STAGE (stage));
|
parent_node = get_root_theme_node (CLUTTER_STAGE (stage));
|
||||||
|
|
||||||
|
/* Always append a "magic" pseudo class indicating the text
|
||||||
|
* direction, to allow to adapt the CSS when necessary without
|
||||||
|
* requiring separate style sheets.
|
||||||
|
*/
|
||||||
|
if (st_widget_get_direction (widget) == ST_TEXT_DIRECTION_RTL)
|
||||||
|
direction_pseudo_class = "rtl";
|
||||||
|
else
|
||||||
|
direction_pseudo_class = "ltr";
|
||||||
|
|
||||||
|
if (priv->pseudo_class)
|
||||||
|
pseudo_class = g_strconcat(priv->pseudo_class, " ",
|
||||||
|
direction_pseudo_class, NULL);
|
||||||
|
else
|
||||||
|
pseudo_class = direction_pseudo_class;
|
||||||
|
|
||||||
priv->theme_node = st_theme_node_new (st_theme_context_get_for_stage (stage),
|
priv->theme_node = st_theme_node_new (st_theme_context_get_for_stage (stage),
|
||||||
parent_node, priv->theme,
|
parent_node, priv->theme,
|
||||||
G_OBJECT_TYPE (widget),
|
G_OBJECT_TYPE (widget),
|
||||||
clutter_actor_get_name (CLUTTER_ACTOR (widget)),
|
clutter_actor_get_name (CLUTTER_ACTOR (widget)),
|
||||||
priv->style_class,
|
priv->style_class,
|
||||||
priv->pseudo_class,
|
pseudo_class,
|
||||||
priv->inline_style);
|
priv->inline_style);
|
||||||
|
|
||||||
|
if (pseudo_class != direction_pseudo_class)
|
||||||
|
g_free (pseudo_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
return priv->theme_node;
|
return priv->theme_node;
|
||||||
@ -670,6 +690,21 @@ st_widget_key_focus_out (ClutterActor *actor)
|
|||||||
st_widget_remove_style_pseudo_class (widget, "focus");
|
st_widget_remove_style_pseudo_class (widget, "focus");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
st_widget_key_press_event (ClutterActor *actor,
|
||||||
|
ClutterKeyEvent *event)
|
||||||
|
{
|
||||||
|
if (event->keyval == CLUTTER_KEY_Menu ||
|
||||||
|
(event->keyval == CLUTTER_KEY_F10 &&
|
||||||
|
(event->modifier_state & CLUTTER_SHIFT_MASK)))
|
||||||
|
{
|
||||||
|
g_signal_emit (actor, signals[POPUP_MENU], 0);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_widget_hide (ClutterActor *actor)
|
st_widget_hide (ClutterActor *actor)
|
||||||
{
|
{
|
||||||
@ -744,6 +779,7 @@ st_widget_class_init (StWidgetClass *klass)
|
|||||||
actor_class->leave_event = st_widget_leave;
|
actor_class->leave_event = st_widget_leave;
|
||||||
actor_class->key_focus_in = st_widget_key_focus_in;
|
actor_class->key_focus_in = st_widget_key_focus_in;
|
||||||
actor_class->key_focus_out = st_widget_key_focus_out;
|
actor_class->key_focus_out = st_widget_key_focus_out;
|
||||||
|
actor_class->key_press_event = st_widget_key_press_event;
|
||||||
actor_class->hide = st_widget_hide;
|
actor_class->hide = st_widget_hide;
|
||||||
|
|
||||||
actor_class->get_accessible = st_widget_get_accessible;
|
actor_class->get_accessible = st_widget_get_accessible;
|
||||||
@ -899,6 +935,7 @@ st_widget_class_init (StWidgetClass *klass)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* StWidget::style-changed:
|
* StWidget::style-changed:
|
||||||
|
* @widget: the #StWidget
|
||||||
*
|
*
|
||||||
* Emitted when the style information that the widget derives from the
|
* Emitted when the style information that the widget derives from the
|
||||||
* theme changes
|
* theme changes
|
||||||
@ -911,6 +948,22 @@ st_widget_class_init (StWidgetClass *klass)
|
|||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
_st_marshal_VOID__VOID,
|
_st_marshal_VOID__VOID,
|
||||||
G_TYPE_NONE, 0);
|
G_TYPE_NONE, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* StWidget::popup-menu:
|
||||||
|
* @widget: the #StWidget
|
||||||
|
*
|
||||||
|
* Emitted when the user has requested a context menu (eg, via a
|
||||||
|
* keybinding)
|
||||||
|
*/
|
||||||
|
signals[POPUP_MENU] =
|
||||||
|
g_signal_new ("popup-menu",
|
||||||
|
G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
G_STRUCT_OFFSET (StWidgetClass, popup_menu),
|
||||||
|
NULL, NULL,
|
||||||
|
_st_marshal_VOID__VOID,
|
||||||
|
G_TYPE_NONE, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1438,8 +1491,15 @@ st_widget_get_direction (StWidget *self)
|
|||||||
void
|
void
|
||||||
st_widget_set_direction (StWidget *self, StTextDirection dir)
|
st_widget_set_direction (StWidget *self, StTextDirection dir)
|
||||||
{
|
{
|
||||||
|
StTextDirection old_direction;
|
||||||
|
|
||||||
g_return_if_fail (ST_IS_WIDGET (self));
|
g_return_if_fail (ST_IS_WIDGET (self));
|
||||||
|
|
||||||
|
old_direction = st_widget_get_direction (self);
|
||||||
self->priv->direction = dir;
|
self->priv->direction = dir;
|
||||||
|
|
||||||
|
if (old_direction != st_widget_get_direction (self))
|
||||||
|
st_widget_style_changed (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -77,13 +77,15 @@ struct _StWidgetClass
|
|||||||
/*< private >*/
|
/*< private >*/
|
||||||
ClutterActorClass parent_class;
|
ClutterActorClass parent_class;
|
||||||
|
|
||||||
/* vfuncs */
|
/* signals */
|
||||||
void (* style_changed) (StWidget *self);
|
void (* style_changed) (StWidget *self);
|
||||||
|
void (* popup_menu) (StWidget *self);
|
||||||
|
|
||||||
|
/* vfuncs */
|
||||||
gboolean (* navigate_focus) (StWidget *self,
|
gboolean (* navigate_focus) (StWidget *self,
|
||||||
ClutterActor *from,
|
ClutterActor *from,
|
||||||
GtkDirectionType direction);
|
GtkDirectionType direction);
|
||||||
|
GType (* get_accessible_type) (void);
|
||||||
GType (*get_accessible_type) (void);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GType st_widget_get_type (void) G_GNUC_CONST;
|
GType st_widget_get_type (void) G_GNUC_CONST;
|
||||||
|
@ -27,7 +27,7 @@ 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|@MUTTER_LIB_DIR[@]|$(MUTTER_LIB_DIR)|" \
|
-e "s|@MUTTER_TYPELIB_DIR[@]|$(MUTTER_TYPELIB_DIR)|" \
|
||||||
-e "s|@srcdir[@]|$(srcdir)|" \
|
-e "s|@srcdir[@]|$(srcdir)|" \
|
||||||
$< > $@ && chmod a+x $@
|
$< > $@ && chmod a+x $@
|
||||||
|
|
||||||
|
2
tests/run-test.sh.in
Normal file → Executable file
@ -30,7 +30,7 @@ builddir=`cd $builddir && pwd`
|
|||||||
srcdir=$builddir/@srcdir@
|
srcdir=$builddir/@srcdir@
|
||||||
srcdir=`cd $srcdir && pwd`
|
srcdir=`cd $srcdir && pwd`
|
||||||
|
|
||||||
GI_TYPELIB_PATH="@MUTTER_LIB_DIR@/mutter:$builddir/../src"
|
GI_TYPELIB_PATH="@MUTTER_TYPELIB_DIR@:$builddir/../src"
|
||||||
GJS_PATH="$srcdir:$srcdir/../js"
|
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"
|
||||||
|
@ -53,13 +53,13 @@ fi
|
|||||||
# binutils, curl, gcc, make, git
|
# binutils, curl, gcc, make, git
|
||||||
#
|
#
|
||||||
# General build stuff:
|
# General build stuff:
|
||||||
# automake, bison, flex, gettext, gnome-common, gtk-doc, intltool,
|
# automake, bison, flex, gettext, gnome-common, gperf, gtk-doc, intltool,
|
||||||
# libtool, pkgconfig, cvs
|
# libtool, pkgconfig, cvs
|
||||||
#
|
#
|
||||||
# Devel packages needed by gnome-shell and its deps:
|
# Devel packages needed by gnome-shell and its deps:
|
||||||
# dbus-glib, expat, GL, gnome-menus, gstreamer, libffi,
|
# dbus-glib, expat, GL, gnome-menus, gstreamer, libffi,
|
||||||
# libjasper, libjpeg, libpng, libpulse, libtiff, libwnck,
|
# libjasper, libjpeg, libpng, libpulse, libtiff, libwnck,
|
||||||
# iso-codes, libxml2, ORBit2, pam, python, readline,
|
# iso-codes, libical, 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, libgnome-keyring, libgtop, cups,
|
# libgcrypt, libtasn1, libgnome-keyring, libgtop, cups,
|
||||||
@ -73,10 +73,10 @@ fi
|
|||||||
if test "x$system" = xUbuntu -o "x$system" = xDebian -o "x$system" = xLinuxMint ; then
|
if test "x$system" = xUbuntu -o "x$system" = xDebian -o "x$system" = xLinuxMint ; then
|
||||||
reqd="
|
reqd="
|
||||||
build-essential curl
|
build-essential curl
|
||||||
automake bison flex gettext git-core cvs gnome-common gtk-doc-tools
|
automake bison flex gettext git-core gperf cvs gnome-common gtk-doc-tools
|
||||||
gvfs gvfs-backends icon-naming-utils
|
gvfs gvfs-backends icon-naming-utils
|
||||||
libdbus-glib-1-dev libexpat-dev libffi-dev libgnome-menu-dev libgnome-desktop-dev libgtop2-dev
|
libdbus-glib-1-dev libexpat-dev libffi-dev libgnome-menu-dev libgnome-desktop-dev libgtop2-dev
|
||||||
libjasper-dev libjpeg-dev libpng-dev libstartup-notification0-dev libtiff-dev
|
libical-dev libjasper-dev libjpeg-dev libpng-dev libstartup-notification0-dev libtiff-dev
|
||||||
libwnck-dev libgl1-mesa-dev liborbit2-dev libpulse-dev libreadline5-dev libxml2-dev
|
libwnck-dev libgl1-mesa-dev liborbit2-dev libpulse-dev libreadline5-dev libxml2-dev
|
||||||
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 libcroco3-dev
|
xulrunner-dev libcroco3-dev
|
||||||
@ -111,9 +111,9 @@ fi
|
|||||||
if test "x$system" = xFedora ; then
|
if test "x$system" = xFedora ; then
|
||||||
reqd="
|
reqd="
|
||||||
binutils curl gcc gcc-c++ make cvs
|
binutils curl gcc gcc-c++ make cvs
|
||||||
automake bison flex gettext git gnome-common gnome-doc-utils gvfs intltool
|
automake bison flex gettext git gnome-common gnome-doc-utils gperf gvfs intltool
|
||||||
libtool pkgconfig dbus-glib-devel gnome-desktop-devel gnome-menus-devel
|
libtool pkgconfig dbus-glib-devel gnome-desktop-devel gnome-menus-devel
|
||||||
gnome-python2-gconf jasper-devel libffi-devel libjpeg-devel libpng-devel
|
gnome-python2-gconf jasper-devel libffi-devel libical-devel libjpeg-devel libpng-devel
|
||||||
libtiff-devel libwnck-devel mesa-libGL-devel ORBit2-devel pam-devel
|
libtiff-devel libwnck-devel mesa-libGL-devel ORBit2-devel pam-devel
|
||||||
pulseaudio-libs-devel python-devel pygobject2 readline-devel xulrunner-devel
|
pulseaudio-libs-devel python-devel pygobject2 readline-devel xulrunner-devel
|
||||||
libXdamage-devel libcroco-devel libxml2-devel gstreamer-devel
|
libXdamage-devel libcroco-devel libxml2-devel gstreamer-devel
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
<repository type="cvs" name="libxklavier.freedesktop.org"
|
<repository type="cvs" name="libxklavier.freedesktop.org"
|
||||||
cvsroot=":pserver:anoncvs@anoncvs.freedesktop.org:/cvs/xklavier"
|
cvsroot=":pserver:anoncvs@anoncvs.freedesktop.org:/cvs/xklavier"
|
||||||
password=""/>
|
password=""/>
|
||||||
<repository type="git" name="git.collabora.co.uk"
|
<repository type="git" name="git.freedesktop.org"
|
||||||
href="git://git.collabora.co.uk/git/"/>
|
href="git://anongit.freedesktop.org"/>
|
||||||
|
|
||||||
<autotools id="gobject-introspection">
|
<autotools id="gobject-introspection">
|
||||||
<branch repo="git.gnome.org" module="gobject-introspection"/>
|
<branch repo="git.gnome.org" module="gobject-introspection"/>
|
||||||
@ -251,7 +251,7 @@
|
|||||||
</autotools>
|
</autotools>
|
||||||
|
|
||||||
<autotools id="telepathy-glib" autogenargs="--disable-Werror" >
|
<autotools id="telepathy-glib" autogenargs="--disable-Werror" >
|
||||||
<branch repo="git.collabora.co.uk" module="telepathy-glib" />
|
<branch repo="git.freedesktop.org" module="telepathy/telepathy-glib" />
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dep package="gobject-introspection"/>
|
<dep package="gobject-introspection"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# This is a simple script that we use to check for files in git
|
# This is a simple script that we use to check for files in git
|
||||||
# and not in the distribution. It was previously written in shell
|
# and not in the distribution. It was previously written in shell
|
||||||
# and inlined in the Makefile.am, but 'git ls-files --exclude=<pattern>'
|
# and inlined in the Makefile.am, but 'git ls-files --exclude=<pattern>'
|
||||||
# was changed to no longer due anything useful, which made that
|
# was changed to no longer do anything useful, which made that
|
||||||
# too challenging to be worthwhile.
|
# too challenging to be worthwhile.
|
||||||
|
|
||||||
import fnmatch, os, subprocess, sys
|
import fnmatch, os, subprocess, sys
|
||||||
|