Compare commits

..

27 Commits
3.7.4 ... 3.7.5

Author SHA1 Message Date
Giovanni Campagna
edefa7b674 Bump version to 3.7.5
To go along GNOME Shell 3.7.5
2013-02-06 12:04:21 +01:00
Piotr Drąg
5392a50e98 Updated Polish translation 2013-02-06 02:07:40 +01:00
Piotr Drąg
fc5c7c8fda Updated POTFILES.in 2013-02-06 02:06:09 +01:00
Piotr Drąg
3c0d84469a Updated Polish translation 2013-02-06 02:03:41 +01:00
Florian Müllner
01542c3dc7 build: Fix distcheck 2013-02-05 20:21:20 +01:00
Florian Müllner
0aaa37c30f data: Add missing file
Commit 9b05c80f81 left out the actual stylesheet :(
2013-02-05 20:17:06 +01:00
Florian Müllner
a1c938d3d9 window-list: Add classic mode styling
Classic mode uses a distinct visual style, support this by shipping
a dedicated stylesheet.

https://bugzilla.gnome.org/show_bug.cgi?id=693171
2013-02-05 20:09:16 +01:00
Florian Müllner
f23197e09e window-list: Add a small preference UI
https://bugzilla.gnome.org/show_bug.cgi?id=693171
2013-02-05 20:09:11 +01:00
Florian Müllner
a4fe08d53d window-list: Add option for grouping windows by application
https://bugzilla.gnome.org/show_bug.cgi?id=693171
2013-02-05 20:09:00 +01:00
Florian Müllner
7e3b48da9d window-list: Factor out WindowTitle
https://bugzilla.gnome.org/show_bug.cgi?id=693171
2013-02-05 20:08:46 +01:00
Florian Müllner
b843058c18 window-list: New extension
https://bugzilla.gnome.org/show_bug.cgi?id=693171
2013-02-05 20:06:53 +01:00
Florian Müllner
9b05c80f81 Use different styling in classic mode
Classic mode should be visually distinct from the normal session,
so provide a mode-specific stylesheet which looks closer to the
familiar GNOME2 default theme.

https://bugzilla.gnome.org/show_bug.cgi?id=693169
2013-02-05 20:06:53 +01:00
Florian Müllner
3805054b25 apps-menu: Update to Shell API change 2013-02-05 18:32:49 +01:00
Giovanni Campagna
348f0faf22 windowsNavigator: fix a warning in disable() 2013-02-04 23:58:33 +01:00
Giovanni Campagna
b907e44fdf windowsNavigator: update for gnome-shell changes
Update for the new way to layout window overlays
2013-02-04 23:52:17 +01:00
Giovanni Campagna
032233cf9d native-window-placement: update for gnome-shell changes
Update to the new way to layout window overlays, which requires
setting a slot on the clone, and update to the new padding setting
for the window picker, including a custom style to avoid placing titles
outside the clip area.
2013-02-04 23:52:17 +01:00
Florian Müllner
443837e09d alternate-tab: Update to Shell API change
Main.KeybindingMode is now Shell.KeyBindingMode ...
2013-02-04 17:05:36 +01:00
Daniel Mustieles
7f1904a97c Updated Spanish translation 2013-02-01 10:48:51 +01:00
Marek Černocký
caaa544fd6 Updated Czech translation 2013-01-31 20:10:24 +01:00
Piotr Drąg
179b14ea4b Updated Polish translation 2013-01-31 18:05:29 +01:00
Debarshi Ray
9211fa4409 apps-menu: Replace it with a new version based on AxeMenu
This is a severely toned down version of the original AxeMenu:
 - the column on the left has been removed, because it duplicates
   functionality provided by the places-menu and the user menu
 - the application search functionality has been removed because it
   is already provided by vanilla gnome-shell
 - the "All" category ended up being too crowded and has been replaced
   by "Favorites", so there is no separate page for it any more

https://bugzilla.gnome.org/show_bug.cgi?id=692527
2013-01-30 16:15:32 +01:00
OKANO Takayoshi
edb8a65c78 [l10n] Update Japanese translation 2013-01-27 22:11:13 +09:00
Marek Černocký
fdd2fa09d7 Updated Czech translation 2013-01-22 09:35:59 +01:00
Florian Müllner
5d37b39ce5 places-menu: Design update
After review from the design team, the following changes were requested:
 - use a "Places" label instead of a symbolic icon in the top bar
   (as in GNOME 2)
 - move places icons in front of the name (as in Nautilus)
 - use menu separators between sections instead of section titles

https://bugzilla.gnome.org/show_bug.cgi?id=692027
2013-01-19 00:08:27 +01:00
Gabriel Rossetti
b673e1624a launch-new-instance: New extension
https://bugzilla.gnome.org/show_bug.cgi?id=692030
2013-01-18 23:36:29 +01:00
Florian Müllner
2b81d125cb classic: Move dateMenu to the right
With new items being added on the left, the top bar gets a little
crowded with the dateMenu at the center, so move it to its "classic"
position on the right.

https://bugzilla.gnome.org/show_bug.cgi?id=692016
2013-01-18 18:07:15 +01:00
Giovanni Campagna
31128e0dae Revert "Remove places-menu from the classic extensions"
This reverts commit f53d251a46.
Designs changed, and places-menu is back.
2013-01-18 18:04:35 +01:00
32 changed files with 3021 additions and 518 deletions

15
NEWS
View File

@@ -1,3 +1,18 @@
3.7.5
=====
* places-menu is back in the classic extensions, with
a new old GNOME-2 look
* classic mode moved the date menu to right, where we
all know it rightly belongs
* apps-menu received a face-lift, with the inclusion
of a reduced form of AxeMenu
* new extension in the classic set: launch-new-instance,
which modifies the behavior of clicking in the dash
and app launcher
* alternate-tab, native-window-placement and windowsNavigator
updated for gnome-shell changes
* translation updates (es, cz, pl)
3.7.4
=====
* a separate configure switch has been added to enable

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell-extensions],[3.7.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions])
AC_INIT([gnome-shell-extensions],[3.7.5],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([config])
@@ -27,8 +27,8 @@ fi
AC_SUBST([SHELL_VERSION])
dnl keep this in alphabetic order
CLASSIC_EXTENSIONS="apps-menu alternate-tab default-min-max static-workspaces"
DEFAULT_EXTENSIONS="$CLASSIC_EXTENSIONS alternative-status-menu drive-menu places-menu windowsNavigator workspace-indicator"
CLASSIC_EXTENSIONS="apps-menu places-menu alternate-tab default-min-max launch-new-instance static-workspaces window-list"
DEFAULT_EXTENSIONS="$CLASSIC_EXTENSIONS alternative-status-menu drive-menu windowsNavigator workspace-indicator"
ALL_EXTENSIONS="$DEFAULT_EXTENSIONS auto-move-windows example native-window-placement systemMonitor user-theme xrandr-indicator"
AC_SUBST(CLASSIC_EXTENSIONS, [$CLASSIC_EXTENSIONS])
AC_SUBST(ALL_EXTENSIONS, [$ALL_EXTENSIONS])
@@ -71,7 +71,7 @@ for e in $enable_extensions; do
[AC_MSG_WARN([gnome-desktop-3.0 not found, disabling xrandr-indicator])])
;;
dnl keep this in alphabetic order
alternate-tab|alternative-status-menu|apps-menu|auto-move-windows|default-min-max|drive-menu|example|native-window-placement|places-menu|static-workspaces|user-theme|windowsNavigator|workspace-indicator)
alternate-tab|alternative-status-menu|apps-menu|auto-move-windows|default-min-max|drive-menu|example|launch-new-instance|native-window-placement|places-menu|static-workspaces|user-theme|window-list|windowsNavigator|workspace-indicator)
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
;;
*)
@@ -91,11 +91,13 @@ AC_CONFIG_FILES([
extensions/default-min-max/Makefile
extensions/drive-menu/Makefile
extensions/example/Makefile
extensions/launch-new-instance/Makefile
extensions/native-window-placement/Makefile
extensions/places-menu/Makefile
extensions/static-workspaces/Makefile
extensions/systemMonitor/Makefile
extensions/user-theme/Makefile
extensions/window-list/Makefile
extensions/windowsNavigator/Makefile
extensions/workspace-indicator/Makefile
extensions/xrandr-indicator/Makefile

View File

@@ -18,6 +18,15 @@ modedir = $(datadir)/gnome-shell/modes
mode_in_files = classic.json.in
mode_DATA = $(mode_in_files:.json.in=.json)
themedir = $(datadir)/gnome-shell/theme
theme_DATA = \
$(srcdir)/classic-toggle-off-intl.svg \
$(srcdir)/classic-toggle-off-us.svg \
$(srcdir)/classic-toggle-on-intl.svg \
$(srcdir)/classic-toggle-on-us.svg \
$(srcdir)/gnome-classic.css \
$(NULL)
%.desktop.in:%.desktop.in.in
$(AM_V_GEN) sed \
-e "s|\@libexecdir\@|$(libexecdir)|" \

View File

@@ -0,0 +1,250 @@
<?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"
width="65"
height="22"
id="svg10865"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="toggle-off-us.svg">
<defs
id="defs10867">
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62852-6-5"
id="linearGradient62981-1-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.85639946,0,0,0.81059641,27.810405,92.069729)"
x1="740"
y1="486.10501"
x2="740"
y2="505.3204" />
<linearGradient
id="linearGradient62852-6-5">
<stop
id="stop62854-6-7"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0" />
<stop
id="stop62860-5-3"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
is_visible="true"
id="path-effect62989-8-0"
effect="spiro" />
<linearGradient
id="linearGradient62821-5-8">
<stop
id="stop62823-2-4"
offset="0"
style="stop-color:#d1d3d1;stop-opacity:1;" />
<stop
id="stop62825-3-8"
offset="1"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient62852-6-5-3">
<stop
id="stop62854-6-7-6"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0-3" />
<stop
id="stop62860-5-3-9"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
effect="spiro"
id="path-effect62829-6-8-0"
is_visible="true" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62821-5-8-1"
id="linearGradient62864-0-3-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3066667,0,0,1,-197.64667,0)"
x1="702.58966"
y1="484.49405"
x2="702.58966"
y2="507.42715" />
<linearGradient
id="linearGradient62821-5-8-1">
<stop
id="stop62823-2-4-2"
offset="0"
style="stop-color:#d1d3d1;stop-opacity:1;" />
<stop
id="stop62825-3-8-9"
offset="1"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
y2="507.42715"
x2="702.58966"
y1="484.49405"
x1="702.58966"
gradientTransform="matrix(1.3066667,0,0,1,-841.64667,-483)"
gradientUnits="userSpaceOnUse"
id="linearGradient11647"
xlink:href="#linearGradient62821-5-8-1"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-133.20351"
inkscape:cy="20.84411"
inkscape:document-units="px"
inkscape:current-layer="g62929"
showgrid="false"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:snap-others="false"
inkscape:window-width="2560"
inkscape:window-height="1380"
inkscape:window-x="1600"
inkscape:window-y="28"
inkscape:window-maximized="1"
showborder="false">
<inkscape:grid
type="xygrid"
id="grid11512" />
</sodipodi:namedview>
<metadata
id="metadata10870">
<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
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1030.3622)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
style="display:inline"
id="g62929"
transform="translate(-643.91421,517.29894)">
<g
transform="translate(0,30)"
id="g62931">
<rect
style="fill:url(#linearGradient62864-0-3-1);fill-opacity:1;stroke:#a6a8a6;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill-rule:nonzero;stroke-linejoin:miter;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero"
id="rect62935"
width="63.856125"
height="21.093594"
x="644.5"
y="483.5"
rx="2"
ry="2" />
<rect
style="fill:url(#linearGradient62981-1-1);fill-opacity:1;stroke:#777b7a;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
id="rect62937"
width="29.97398"
height="17.022524"
x="646.55896"
y="485.61429"
rx="1"
ry="1" />
<g
transform="translate(-38.048674,-1.9445437)"
id="g62939">
<rect
ry="1"
rx="1"
y="492"
x="695"
height="8"
width="2"
id="rect62941"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="699"
height="8"
width="2"
id="rect62943"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="703"
height="8"
width="2"
id="rect62945"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
</g>
<path
inkscape:connector-curvature="0"
inkscape:original-d="m 647.78624,486.57192 27.94632,0"
inkscape:path-effect="#path-effect62989-8-0"
id="path62947"
d="m 647.78624,486.57192 27.94632,0"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g11665"
transform="matrix(0.78906097,0,0,0.78906097,178.78814,111.57844)" />
<path
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
transform="translate(642.41421,514.02037)"
d="m 55,11.875 a 4.625,4.625 0 1 1 -9.25,0 4.625,4.625 0 1 1 9.25,0 z"
sodipodi:ry="4.625"
sodipodi:rx="4.625"
sodipodi:cy="11.875"
sodipodi:cx="50.375"
id="path3786"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
id="path3016"
sodipodi:cx="50.375"
sodipodi:cy="11.875"
sodipodi:rx="4.625"
sodipodi:ry="4.625"
d="m 55,11.875 a 4.625,4.625 0 1 1 -9.25,0 4.625,4.625 0 1 1 9.25,0 z"
transform="translate(642.41421,512.02037)"
style="fill:none;stroke:#555753;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@@ -0,0 +1,255 @@
<?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"
width="65"
height="22"
id="svg10865"
version="1.1"
inkscape:version="0.48+devel r12050"
sodipodi:docname="toggle-off-us.svg">
<defs
id="defs10867">
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62852-6-5"
id="linearGradient62981-1-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.85639946,0,0,0.81059641,27.810405,92.069729)"
x1="740"
y1="486.10501"
x2="740"
y2="505.3204" />
<linearGradient
id="linearGradient62852-6-5">
<stop
id="stop62854-6-7"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0" />
<stop
id="stop62860-5-3"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
is_visible="true"
id="path-effect62989-8-0"
effect="spiro" />
<linearGradient
id="linearGradient62821-5-8">
<stop
id="stop62823-2-4"
offset="0"
style="stop-color:#d1d3d1;stop-opacity:1;" />
<stop
id="stop62825-3-8"
offset="1"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient62852-6-5-3">
<stop
id="stop62854-6-7-6"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0-3" />
<stop
id="stop62860-5-3-9"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
effect="spiro"
id="path-effect62829-6-8-0"
is_visible="true" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62821-5-8-1"
id="linearGradient62864-0-3-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3066667,0,0,1,-197.64667,0)"
x1="702.58966"
y1="484.49405"
x2="702.58966"
y2="507.42715" />
<linearGradient
id="linearGradient62821-5-8-1">
<stop
id="stop62823-2-4-2"
offset="0"
style="stop-color:#d1d3d1;stop-opacity:1;" />
<stop
id="stop62825-3-8-9"
offset="1"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
y2="507.42715"
x2="702.58966"
y1="484.49405"
x1="702.58966"
gradientTransform="matrix(1.3066667,0,0,1,-841.64667,-483)"
gradientUnits="userSpaceOnUse"
id="linearGradient11647"
xlink:href="#linearGradient62821-5-8-1"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="50.925774"
inkscape:cy="11.296867"
inkscape:document-units="px"
inkscape:current-layer="g62929"
showgrid="false"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:snap-others="false"
inkscape:window-width="2560"
inkscape:window-height="1375"
inkscape:window-x="1600"
inkscape:window-y="28"
inkscape:window-maximized="1"
showborder="false">
<inkscape:grid
type="xygrid"
id="grid11512" />
</sodipodi:namedview>
<metadata
id="metadata10870">
<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
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1030.3622)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
style="display:inline"
id="g62929"
transform="translate(-643.91421,517.29894)">
<g
transform="translate(0,30)"
id="g62931">
<rect
style="fill:url(#linearGradient62864-0-3-1);fill-opacity:1;stroke:#a6a8a6;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill-rule:nonzero;stroke-linejoin:miter;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero"
id="rect62935"
width="63.856125"
height="21.093594"
x="644.5"
y="483.5"
rx="2"
ry="2" />
<rect
style="fill:url(#linearGradient62981-1-1);fill-opacity:1;stroke:#777b7a;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
id="rect62937"
width="29.97398"
height="17.022524"
x="646.55896"
y="485.61429"
rx="1"
ry="1" />
<g
transform="translate(-38.048674,-1.9445437)"
id="g62939">
<rect
ry="1"
rx="1"
y="492"
x="695"
height="8"
width="2"
id="rect62941"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="699"
height="8"
width="2"
id="rect62943"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="703"
height="8"
width="2"
id="rect62945"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
</g>
<path
inkscape:connector-curvature="0"
inkscape:original-d="m 647.78624,486.57192 27.94632,0"
inkscape:path-effect="#path-effect62989-8-0"
id="path62947"
d="m 647.78624,486.57192 27.94632,0"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g11665"
transform="matrix(0.78906097,0,0,0.78906097,167.78814,111.57844)">
<text
xml:space="preserve"
style="font-size:13.14816952px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
x="644.02277"
y="534.94739"
id="text62949-7"
sodipodi:linespacing="125%"
transform="scale(1.0113976,0.98873084)"><tspan
sodipodi:role="line"
id="tspan62951-7"
x="644.02277"
y="534.94739">OFF</tspan></text>
<text
xml:space="preserve"
style="font-size:12.69556618px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
x="644.46393"
y="533.87158"
id="text62949"
sodipodi:linespacing="125%"
transform="scale(1.0113976,0.98873084)"><tspan
sodipodi:role="line"
id="tspan62951"
x="644.46393"
y="533.87158">OFF</tspan></text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@@ -0,0 +1,199 @@
<?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"
width="65"
height="22"
id="svg10865"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="toggle-on-us.svg">
<defs
id="defs10867">
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62991-9-6"
id="linearGradient62979-8-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3066667,0,0,1,-197.64667,0)"
x1="702.58966"
y1="484.49405"
x2="702.58966"
y2="507.42715" />
<linearGradient
inkscape:collect="always"
id="linearGradient62991-9-6">
<stop
style="stop-color:#589fe9;stop-opacity:1"
offset="0"
id="stop62993-6-9" />
<stop
style="stop-color:#a3cefe;stop-opacity:1"
offset="1"
id="stop62995-1-6" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62852-6-5"
id="linearGradient62981-1-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.85639946,0,0,0.81059641,57.747905,92.132229)"
x1="740"
y1="486.10501"
x2="740"
y2="505.3204" />
<linearGradient
id="linearGradient62852-6-5">
<stop
id="stop62854-6-7"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0" />
<stop
id="stop62860-5-3"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
is_visible="true"
id="path-effect62989-8-0"
effect="spiro" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="14.199007"
inkscape:cy="11.127758"
inkscape:document-units="px"
inkscape:current-layer="g62929"
showgrid="false"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:snap-others="false"
inkscape:window-width="2560"
inkscape:window-height="1380"
inkscape:window-x="1600"
inkscape:window-y="28"
inkscape:window-maximized="1"
showborder="false">
<inkscape:grid
type="xygrid"
id="grid11512" />
</sodipodi:namedview>
<metadata
id="metadata10870">
<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
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1030.3622)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
style="display:inline"
id="g62929"
transform="translate(-643.91421,517.29894)">
<g
transform="translate(0,30)"
id="g62931">
<rect
style="fill:url(#linearGradient62979-8-1);fill-opacity:1;stroke:#1a71cc;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect62935"
width="63.856125"
height="21.093594"
x="644.5"
y="483.5"
rx="2"
ry="2" />
<rect
style="fill:url(#linearGradient62981-1-1);fill-opacity:1;stroke:#777b7a;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
id="rect62937"
width="29.97398"
height="17.022524"
x="676.49646"
y="485.67679"
rx="1"
ry="1" />
<g
transform="translate(-7.9861743,-1.9445437)"
id="g62939">
<rect
ry="1"
rx="1"
y="492"
x="695"
height="8"
width="2"
id="rect62941"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="699"
height="8"
width="2"
id="rect62943"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="703"
height="8"
width="2"
id="rect62945"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
</g>
<path
inkscape:connector-curvature="0"
inkscape:original-d="m 677.59874,486.57192 27.94632,0"
inkscape:path-effect="#path-effect62989-8-0"
id="path62947"
d="m 677.59874,486.57192 27.94632,0"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
inkscape:connector-curvature="0"
id="path4444"
d="m 661.91421,522.09451 0,7"
style="fill:none;stroke:#1a71cc;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;color:#000000;fill-opacity:1;fill-rule:nonzero;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<path
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 18,7.96875 0,7"
id="path3922"
inkscape:connector-curvature="0"
transform="translate(643.91421,513.06326)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -0,0 +1,212 @@
<?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"
width="65"
height="22"
id="svg10865"
version="1.1"
inkscape:version="0.48+devel r12050"
sodipodi:docname="toggle-on-us.svg">
<defs
id="defs10867">
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62991-9-6"
id="linearGradient62979-8-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3066667,0,0,1,-197.64667,0)"
x1="702.58966"
y1="484.49405"
x2="702.58966"
y2="507.42715" />
<linearGradient
inkscape:collect="always"
id="linearGradient62991-9-6">
<stop
style="stop-color:#589fe9;stop-opacity:1"
offset="0"
id="stop62993-6-9" />
<stop
style="stop-color:#a3cefe;stop-opacity:1"
offset="1"
id="stop62995-1-6" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62852-6-5"
id="linearGradient62981-1-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.85639946,0,0,0.81059641,57.747905,92.132229)"
x1="740"
y1="486.10501"
x2="740"
y2="505.3204" />
<linearGradient
id="linearGradient62852-6-5">
<stop
id="stop62854-6-7"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0" />
<stop
id="stop62860-5-3"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
is_visible="true"
id="path-effect62989-8-0"
effect="spiro" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="8.2018252"
inkscape:cy="8.0650495"
inkscape:document-units="px"
inkscape:current-layer="g62929"
showgrid="false"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:snap-others="false"
inkscape:window-width="2560"
inkscape:window-height="1375"
inkscape:window-x="1600"
inkscape:window-y="28"
inkscape:window-maximized="1"
showborder="false">
<inkscape:grid
type="xygrid"
id="grid11512" />
</sodipodi:namedview>
<metadata
id="metadata10870">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1030.3622)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
style="display:inline"
id="g62929"
transform="translate(-643.91421,517.29894)">
<g
transform="translate(0,30)"
id="g62931">
<rect
style="fill:url(#linearGradient62979-8-1);fill-opacity:1;stroke:#1a71cc;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect62935"
width="63.856125"
height="21.093594"
x="644.5"
y="483.5"
rx="2"
ry="2" />
<rect
style="fill:url(#linearGradient62981-1-1);fill-opacity:1;stroke:#777b7a;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
id="rect62937"
width="29.97398"
height="17.022524"
x="676.49646"
y="485.67679"
rx="1"
ry="1" />
<g
transform="translate(-7.9861743,-1.9445437)"
id="g62939">
<rect
ry="1"
rx="1"
y="492"
x="695"
height="8"
width="2"
id="rect62941"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="699"
height="8"
width="2"
id="rect62943"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="703"
height="8"
width="2"
id="rect62945"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
</g>
<path
inkscape:connector-curvature="0"
inkscape:original-d="m 677.59874,486.57192 27.94632,0"
inkscape:path-effect="#path-effect62989-8-0"
id="path62947"
d="m 677.59874,486.57192 27.94632,0"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
transform="scale(1.0113976,0.98873084)"
sodipodi:linespacing="125%"
id="text62949-7"
y="534.96918"
x="646.71399"
style="font-size:10.01104736px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#1a71cc;fill-opacity:1;stroke:none;display:inline;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
xml:space="preserve"><tspan
y="534.96918"
x="646.71399"
id="tspan62951-7"
sodipodi:role="line">ON</tspan></text>
<text
transform="scale(1.0113976,0.98873084)"
sodipodi:linespacing="125%"
id="text62949"
y="533.94482"
x="646.71399"
style="font-size:10.01104736px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
xml:space="preserve"><tspan
y="533.94482"
x="646.71399"
id="tspan62951"
sodipodi:role="line">ON</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -1,4 +1,10 @@
{
"parentMode": "user",
"enabledExtensions": [@CLASSIC_EXTENSIONS@]
"stylesheetName": "gnome-classic.css",
"enabledExtensions": [@CLASSIC_EXTENSIONS@],
"panel": { "left": ["activities", "appMenu"],
"center": [],
"right": ["a11y", "keyboard", "volume", "bluetooth",
"network", "battery", "dateMenu", "userMenu"]
}
}

196
data/gnome-classic.css Normal file
View File

@@ -0,0 +1,196 @@
@import url("gnome-shell.css");
/* FIXME:
- white edge highlight with text-shadow and icon-shadow for panel-button
- better shading of the panel (dark 5%) - impossible without multipoint gradients, image-bg is a hack
- bubble menus: separators
- submenus (network, ...)
- startup notification spinner
*/
#panel {
background-color: #e9e9e9 !important;
background-gradient-direction: vertical;
background-gradient-end: #d0d0d0;
border-top-color: #666; /* we don't support non-uniform border-colors and
use the top border color for any border, so we
need to set it even if all we want is a bottom
border */
border-bottom: 1px solid #666;
app-icon-bottom-clip: 0px;
/* hrm, still no multipoint gradients
background-image: linear-gradient(left, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 50%, rgba(255, 255, 255, 0)) !important;*/
}
#panel:overview {
background-color: #000 !important;
background-gradient-end: #000 !important;
border-top-color: #000;
border-bottom: 1px solid #000 !important;
}
/* TOP BAR */
.panel-corner,
.panel-corner:active,
.panel-corner:overview,
.panel-corner:focus {
-panel-corner-radius: 0 !important;
}
.panel-button {
color: #555 !important;
-natural-hpadding: 6px !important;
-minimum-hpadding: 3px !important;
}
#panel:overview .panel-button {
color: #ccc !important;
}
.panel-button:hover {
color: #000 !important;
}
#panel:overview .panel-button:hover,
#panel:overview .panel-button:active {
color: white !important;
}
.panel-button > .system-status-icon {
icon-shadow: #fff 0 1px 0 !important; /* FIXME */
}
.panel-button:hover,
.panel-button:active,
.panel-button:overview,
.panel-button:focus {
text-shadow: 0 0 0 transparent !important; /* FIXME: why can't I do none ? */
}
.panel-button:active,
.panel-button:overview,
.panel-button:focus {
background-color: #4a90d9 !important; /* FIXME */
color: #fff !important;
border: none !important;
border-image: none !important;
background-image: none !important;
}
#panelUserMenu {
padding: 0 10px 0 10px !important;
}
#appMenu {
text-shadow: 0 0 0 transparent !important;
}
/* used for the app menu header only */
.label-shadow {
color: rgba(0,0,0,0.5);
}
.label-shadow {
color: rgba(255,255,255,.5) !important;
}
.panel-button:active .label-shadow,
.panel-button:focus .label-shadow {
color: rgba(0,0,0,.5) !important;
}
.popup-menu-boxpointer {
-arrow-background-color: #e9e9e9 !important;
-arrow-border-width: 1px !important;
-arrow-border-color: #aaa !important;
-arrow-border-radius: 3px !important;
color: #000 !important;
-arrow-base: 11px !important;
-arrow-rise: 5px !important;
}
.popup-combo-menu {
background-color: #e9e9e9 !important;
border: 1px solid #aaa !important;
color: #000 !important;
}
.popup-menu-item:active {
background-color: #4a90d9 !important;
color: #fff !important;
}
.popup-menu-item:insensitive {
color: #888;
}
.popup-subtitle-menu-item, .popup-subtitle-menu-item:insensitive {
color: #000;
}
/* CALENDAR */
.calendar {}
.calendar-month-label {
color: #333 !important;
}
.datemenu-date-label,
.events-day-header {
color: #666 !important;
}
.calendar-day-base:active {
color: #fff !important;
background-color: #4a90d9 !important;
background-image: none !important;
border-image: none !important;
}
.calendar-today {
background-color: #4a90d9 !important;
background-image: none !important;
border-image: none !important;
}
.calendar-day-base {
color: #666 !important;
}
.calendar-day-base:hover {
background-color: #666 !important;
color: #fff !important;
}
.calendar-nonwork-day {
color: #999 !important;
}
.events-day-dayname,
.events-day-time {
color: #666 !important;
}
/* VOLUME SLIDER */
.popup-slider-menu-item {
-slider-background-color: #e9e9e9;
-slider-border-color: #999;
-slider-active-background-color: #76b0ec;
-slider-active-border-color: #1f6dbc;
}
/* ON OFF switch */
.toggle-switch-us {
background-image: url("classic-toggle-off-us.svg");
background-size: contain;
}
.toggle-switch-us:checked {
background-image: url("classic-toggle-on-us.svg");
background-size: contain;
}
.toggle-switch-intl {
background-image: url("classic-toggle-off-intl.svg");
background-size: contain;
}
.toggle-switch-intl:checked {
background-image: url("classic-toggle-on-intl.svg");
background-size: contain;
}

View File

@@ -3,6 +3,7 @@
const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const AltTab = imports.ui.altTab;
const Main = imports.ui.main;
@@ -13,7 +14,7 @@ function init(metadata) {
}
function setKeybinding(name, func) {
Main.wm.setCustomKeybindingHandler(name, Main.KeybindingMode.NORMAL, func);
Main.wm.setCustomKeybindingHandler(name, Shell.KeyBindingMode.NORMAL, func);
}
function enable() {

View File

@@ -1,111 +1,557 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Atk = imports.gi.Atk;
const GMenu = imports.gi.GMenu;
const Lang = imports.lang;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Clutter = imports.gi.Clutter;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Gtk = imports.gi.Gtk;
const GLib = imports.gi.GLib;
const Signals = imports.signals;
const Layout = imports.ui.layout;
const Pango = imports.gi.Pango;
const ICON_SIZE = 28;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const AppMenuItem = new Lang.Class({
Name: 'AppsMenu.AppMenuItem',
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const appSys = Shell.AppSystem.get_default();
const APPLICATION_ICON_SIZE = 32;
const MENU_HEIGHT_OFFSET = 132;
function fixMarkup(text, allowMarkup) {
if (allowMarkup) {
let _text = text.replace(/&(?!amp;|quot;|apos;|lt;|gt;)/g, '&amp;');
_text = _text.replace(/<(?!\/?[biu]>)/g, '&lt;');
try {
Pango.parse_markup(_text, -1, '');
return _text;
} catch (e) {
}
}
return GLib.markup_escape_text(text, -1);
}
const ActivitiesMenuItem = new Lang.Class({
Name: 'ActivitiesMenuItem',
Extends: PopupMenu.PopupBaseMenuItem,
_init: function (app, params) {
this.parent(params);
this._app = app;
this.label = new St.Label({ text: app.get_name() });
this.addActor(this.label);
this._icon = app.create_icon_texture(ICON_SIZE);
this.addActor(this._icon, { expand: false });
_init: function(button) {
this.parent();
this._button = button;
this.addActor(new St.Label({ text: _("Activities Overview") }));
},
activate: function (event) {
this._app.activate_full(-1, event.get_time());
this.parent(event);
}
activate: function(event) {
this._button.menu.toggle();
Main.overview.toggle();
this.parent(event);
},
});
const ApplicationsButton = new Lang.Class({
Name: 'AppsMenu.ApplicationsButton',
Extends: PanelMenu.SystemStatusButton,
const ApplicationMenuItem = new Lang.Class({
Name: 'ApplicationMenuItem',
Extends: PopupMenu.PopupBaseMenuItem,
_init: function() {
this.parent('start-here-symbolic');
_init: function(button, app) {
this.parent();
this._app = app;
this._button = button;
this._appSys = Shell.AppSystem.get_default();
this._installedChangedId = this._appSys.connect('installed-changed', Lang.bind(this, this._refresh));
let icon = this._app.create_icon_texture(APPLICATION_ICON_SIZE);
this.addActor(icon);
this._display();
let appName = fixMarkup(this._app.get_name());
this.addActor(new St.Label({ text: appName }));
},
destroy: function() {
this._appSys.disconnect(this._installedChangedId);
activate: function(event) {
this._app.open_new_window(event.get_time());
this._button.selectCategory(null, null);
this._button.menu.toggle();
this.parent(event);
},
setActive: function(active, params) {
if (active)
this._button.scrollToButton(this);
this.parent(active, params);
}
});
const CategoryMenuItem = new Lang.Class({
Name: 'CategoryMenuItem',
Extends: PopupMenu.PopupBaseMenuItem,
_init: function(button, category) {
this.parent();
this._category = category;
this._button = button;
let name;
if (this._category)
name = this._category.get_name();
else
name = _("Favorites");
this.addActor(new St.Label({ text: name }));
},
activate: function(event) {
this._button.selectCategory(this._category, this);
this._button.scrollToCatButton(this);
this.parent(event);
},
setActive: function(active, params) {
if (active) {
this._button.selectCategory(this._category, this);
this._button.scrollToCatButton(this);
}
this.parent(active, params);
}
});
const HotCorner = new Lang.Class({
Name: 'HotCorner',
Extends: Layout.HotCorner,
_init : function() {
this.parent();
},
_refresh: function() {
this._clearAll();
_onCornerEntered : function() {
if (!this._entered) {
this._entered = true;
if (!Main.overview.animationInProgress) {
this._activationTime = Date.now() / 1000;
this.rippleAnimation();
Main.overview.toggle();
}
}
return false;
}
});
const ApplicationsMenu = new Lang.Class({
Name: 'ApplicationsMenu',
Extends: PopupMenu.PopupMenu,
_init: function(sourceActor, arrowAlignment, arrowSide, button, hotCorner) {
this.parent(sourceActor, arrowAlignment, arrowSide);
this._button = button;
this._hotCorner = hotCorner;
},
open: function(animate) {
this._hotCorner.actor.hide();
this.parent(animate);
},
close: function(animate) {
this._hotCorner.actor.show();
this.parent(animate);
},
toggle: function() {
if (this.isOpen) {
this._button.selectCategory(null, null);
} else {
if (Main.overview.visible)
Main.overview.hide();
}
this.parent();
}
});
const ApplicationsButton = new Lang.Class({
Name: 'ApplicationsButton',
Extends: PanelMenu.Button,
_init: function() {
this.parent(1.0, null, false);
this._hotCorner = new HotCorner();
this.setMenu(new ApplicationsMenu(this.actor, 1.0, St.Side.TOP, this, this._hotCorner));
Main.panel.menuManager.addMenu(this.menu);
// At this moment applications menu is not keyboard navigable at
// all (so not accessible), so it doesn't make sense to set as
// role ATK_ROLE_MENU like other elements of the panel.
this.actor.accessible_role = Atk.Role.LABEL;
let container = new Shell.GenericContainer();
container.connect('get-preferred-width', Lang.bind(this, this._containerGetPreferredWidth));
container.connect('get-preferred-height', Lang.bind(this, this._containerGetPreferredHeight));
container.connect('allocate', Lang.bind(this, this._containerAllocate));
this.actor.add_actor(container);
this.actor.name = 'panelApplications';
this._label = new St.Label({ text: _("Applications") });
container.add_actor(this._label);
this.actor.label_actor = this._label;
container.add_actor(this._hotCorner.actor);
Main.messageTray._grabHelper.addActor(this._hotCorner.actor);
this.actor.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
_showingId = Main.overview.connect('showing', Lang.bind(this, function() {
this.actor.add_accessible_state (Atk.StateType.CHECKED);
}));
_hidingId = Main.overview.connect('hiding', Lang.bind(this, function() {
this.actor.remove_accessible_state (Atk.StateType.CHECKED);
}));
this.reloadFlag = false;
this._createLayout();
this._display();
_installedChangedId = appSys.connect('installed-changed', Lang.bind(this, function() {
if (this.menu.isOpen) {
this._redisplay();
this.mainBox.show();
} else {
this.reloadFlag = true;
}
}));
// Since the hot corner uses stage coordinates, Clutter won't
// queue relayouts for us when the panel moves. Queue a relayout
// when that happens.
_panelBoxChangedId = Main.layoutManager.connect('panel-box-changed', Lang.bind(this, function() {
container.queue_relayout();
}));
},
_containerGetPreferredWidth: function(actor, forHeight, alloc) {
[alloc.min_size, alloc.natural_size] = this._label.get_preferred_width(forHeight);
},
_containerGetPreferredHeight: function(actor, forWidth, alloc) {
[alloc.min_size, alloc.natural_size] = this._label.get_preferred_height(forWidth);
},
_containerAllocate: function(actor, box, flags) {
this._label.allocate(box, flags);
// The hot corner needs to be outside any padding/alignment
// that has been imposed on us
let primary = Main.layoutManager.primaryMonitor;
let hotBox = new Clutter.ActorBox();
let ok, x, y;
if (actor.get_text_direction() == Clutter.TextDirection.LTR) {
[ok, x, y] = actor.transform_stage_point(primary.x, primary.y);
} else {
[ok, x, y] = actor.transform_stage_point(primary.x + primary.width, primary.y);
// hotCorner.actor has northeast gravity, so we don't need
// to adjust x for its width
}
hotBox.x1 = Math.round(x);
hotBox.x2 = hotBox.x1 + this._hotCorner.actor.width;
hotBox.y1 = Math.round(y);
hotBox.y2 = hotBox.y1 + this._hotCorner.actor.height;
this._hotCorner.actor.allocate(hotBox, flags);
},
_createVertSeparator: function() {
let separator = new St.DrawingArea({ style_class: 'calendar-vertical-separator',
pseudo_class: 'highlighted' });
separator.connect('repaint', Lang.bind(this, this._onVertSepRepaint));
return separator;
},
_onCapturedEvent: function(actor, event) {
if (event.type() == Clutter.EventType.BUTTON_PRESS) {
if (!this._hotCorner.shouldToggleOverviewOnClick())
return true;
}
return false;
},
_onVertSepRepaint: function(area) {
let cr = area.get_context();
let themeNode = area.get_theme_node();
let [width, height] = area.get_surface_size();
let stippleColor = themeNode.get_color('-stipple-color');
let stippleWidth = themeNode.get_length('-stipple-width');
let x = Math.floor(width/2) + 0.5;
cr.moveTo(x, 0);
cr.lineTo(x, height);
Clutter.cairo_set_source_color(cr, stippleColor);
cr.setDash([1, 3], 1); // Hard-code for now
cr.setLineWidth(stippleWidth);
cr.stroke();
},
_onOpenStateChanged: function(menu, open) {
if (open) {
if (this.reloadFlag) {
this._redisplay();
this.reloadFlag = false;
}
this.mainBox.show();
}
this.parent(menu, open);
},
_redisplay: function() {
this.applicationsBox.destroy_all_children();
this.categoriesBox.destroy_all_children();
this._display();
},
_clearAll: function() {
this.menu.removeAll();
},
// Recursively load a GMenuTreeDirectory; we could put this in ShellAppSystem too
// (taken from js/ui/appDisplay.js in core shell)
_loadCategory: function(dir, menu) {
var iter = dir.iter();
var nextType;
_loadCategory: function(dir) {
let iter = dir.iter();
let nextType;
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
if (nextType == GMenu.TreeItemType.ENTRY) {
var entry = iter.get_entry();
var app = this._appSys.lookup_app_by_tree_entry(entry);
if (!entry.get_app_info().get_nodisplay())
menu.addMenuItem(new AppMenuItem(app));
let entry = iter.get_entry();
if (!entry.get_app_info().get_nodisplay()) {
let app = appSys.lookup_app_by_tree_entry(entry);
let menu_id = dir.get_menu_id();
if (!this.applicationsByCategory[menu_id])
this.applicationsByCategory[menu_id] = new Array();
this.applicationsByCategory[menu_id].push(app);
}
} else if (nextType == GMenu.TreeItemType.DIRECTORY) {
this._loadCategory(iter.get_directory(), menu);
let subdir = iter.get_directory();
if (subdir.get_is_nodisplay())
continue;
let menu_id = subdir.get_menu_id();
this.applicationsByCategory[menu_id] = new Array();
this._loadCategory(subdir);
if (this.applicationsByCategory[menu_id].length > 0) {
let categoryMenuItem = new CategoryMenuItem(this, subdir);
this.categoriesBox.add_actor(categoryMenuItem.actor);
}
}
}
},
_display : function() {
let tree = this._appSys.get_tree();
let root = tree.get_root_directory();
scrollToButton: function(button) {
let appsScrollBoxAdj = this.applicationsScrollBox.get_vscroll_bar().get_adjustment();
let appsScrollBoxAlloc = this.applicationsScrollBox.get_allocation_box();
let currentScrollValue = appsScrollBoxAdj.get_value();
let boxHeight = appsScrollBoxAlloc.y2 - appsScrollBoxAlloc.y1;
let buttonAlloc = button.actor.get_allocation_box();
let newScrollValue = currentScrollValue;
if (currentScrollValue > buttonAlloc.y1 - 10)
newScrollValue = buttonAlloc.y1 - 10;
if (boxHeight + currentScrollValue < buttonAlloc.y2 + 10)
newScrollValue = buttonAlloc.y2 - boxHeight + 10;
if (newScrollValue != currentScrollValue)
appsScrollBoxAdj.set_value(newScrollValue);
},
scrollToCatButton: function(button) {
let catsScrollBoxAdj = this.categoriesScrollBox.get_vscroll_bar().get_adjustment();
let catsScrollBoxAlloc = this.categoriesScrollBox.get_allocation_box();
let currentScrollValue = catsScrollBoxAdj.get_value();
let boxHeight = catsScrollBoxAlloc.y2 - catsScrollBoxAlloc.y1;
let buttonAlloc = button.actor.get_allocation_box();
let newScrollValue = currentScrollValue;
if (currentScrollValue > buttonAlloc.y1 - 10)
newScrollValue = buttonAlloc.y1 - 10;
if (boxHeight + currentScrollValue < buttonAlloc.y2 + 10)
newScrollValue = buttonAlloc.y2 - boxHeight + 10;
if (newScrollValue != currentScrollValue)
catsScrollBoxAdj.set_value(newScrollValue);
},
_createLayout: function() {
let section = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(section);
this.mainBox = new St.BoxLayout({ vertical: false });
this.leftBox = new St.BoxLayout({ vertical: true });
this.applicationsScrollBox = new St.ScrollView({ x_fill: true, y_fill: false,
y_align: St.Align.START,
style_class: 'vfade' });
this.applicationsScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
let vscroll = this.applicationsScrollBox.get_vscroll_bar();
vscroll.connect('scroll-start', Lang.bind(this, function() {
this.menu.passEvents = true;
}));
vscroll.connect('scroll-stop', Lang.bind(this, function() {
this.menu.passEvents = false;
}));
this.categoriesScrollBox = new St.ScrollView({ x_fill: true, y_fill: false,
y_align: St.Align.START,
style_class: 'vfade' });
this.categoriesScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
vscroll = this.categoriesScrollBox.get_vscroll_bar();
vscroll.connect('scroll-start', Lang.bind(this, function() {
this.menu.passEvents = true;
}));
vscroll.connect('scroll-stop', Lang.bind(this, function() {
this.menu.passEvents = false;
}));
this.leftBox.add(this.categoriesScrollBox, { expand: true,
x_fill: true, y_fill: true,
y_align: St.Align.START });
let activities = new ActivitiesMenuItem(this);
this.leftBox.add(activities.actor, { expand: false,
x_fill: true, y_fill: false,
y_align: St.Align.START });
this.applicationsBox = new St.BoxLayout({ vertical: true });
this.applicationsScrollBox.add_actor(this.applicationsBox);
this.categoriesBox = new St.BoxLayout({ vertical: true });
this.categoriesScrollBox.add_actor(this.categoriesBox, { expand: true, x_fill: false });
this.mainBox.add(this.leftBox);
this.mainBox.add(this._createVertSeparator(), { expand: false, x_fill: false, y_fill: true});
this.mainBox.add(this.applicationsScrollBox, { expand: true, x_fill: true, y_fill: true });
section.actor.add_actor(this.mainBox);
},
_display: function() {
this._applicationsButtons = new Array();
this.mainBox.style=('width: 640px;');
this.mainBox.hide();
//Load categories
this.applicationsByCategory = {};
let tree = appSys.get_tree();
let root = tree.get_root_directory();
let categoryMenuItem = new CategoryMenuItem(this, null);
this.categoriesBox.add_actor(categoryMenuItem.actor);
let iter = root.iter();
let nextType;
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
if (nextType == GMenu.TreeItemType.DIRECTORY) {
let dir = iter.get_directory();
let item = new PopupMenu.PopupSubMenuMenuItem(dir.get_name());
this._loadCategory(dir, item.menu);
this.menu.addMenuItem(item);
if (dir.get_is_nodisplay())
continue;
let menu_id = dir.get_menu_id();
this.applicationsByCategory[menu_id] = new Array();
this._loadCategory(dir);
if (this.applicationsByCategory[menu_id].length > 0) {
let categoryMenuItem = new CategoryMenuItem(this, dir);
this.categoriesBox.add_actor(categoryMenuItem.actor);
}
}
}
//Load applications
this._displayButtons(this._listApplications(null));
let height = this.categoriesBox.height + MENU_HEIGHT_OFFSET + 'px';
this.mainBox.style+=('height: ' + height);
},
_clearApplicationsBox: function(selectedActor) {
let actors = this.applicationsBox.get_children();
for (let i = 0; i < actors.length; i++) {
let actor = actors[i];
this.applicationsBox.remove_actor(actor);
}
},
selectCategory: function(dir, categoryMenuItem) {
if (categoryMenuItem)
this._clearApplicationsBox(categoryMenuItem.actor);
else
this._clearApplicationsBox(null);
if (dir)
this._displayButtons(this._listApplications(dir.get_menu_id()));
else
this._displayButtons(this._listApplications(null));
},
_displayButtons: function(apps) {
if (apps) {
for (let i = 0; i < apps.length; i++) {
let app = apps[i];
if (!this._applicationsButtons[app]) {
let applicationMenuItem = new ApplicationMenuItem(this, app);
this._applicationsButtons[app] = applicationMenuItem;
}
if (!this._applicationsButtons[app].actor.get_parent())
this.applicationsBox.add_actor(this._applicationsButtons[app].actor);
}
}
},
_listApplications: function(category_menu_id) {
let applist;
if (category_menu_id) {
applist = this.applicationsByCategory[category_menu_id];
} else {
applist = new Array();
let favorites = global.settings.get_strv('favorite-apps');
for (let i = 0; i < favorites.length; i++) {
let app = appSys.lookup_app(favorites[i]);
if (app)
applist.push(app);
}
}
applist.sort(function(a,b) {
return a.get_name().toLowerCase() > b.get_name().toLowerCase();
});
return applist;
},
destroy: function() {
this.menu.actor.get_children().forEach(function(c) { c.destroy() });
this.parent();
}
});
let appsMenuButton;
let activitiesButton;
let _hidingId;
let _installedChangedId;
let _panelBoxChangedId;
let _showingId;
function enable() {
activitiesButton = Main.panel.statusArea['activities'];
activitiesButton.hotCorner.actor.hide();
activitiesButton.container.hide();
appsMenuButton = new ApplicationsButton();
Main.panel.addToStatusArea('apps-menu', appsMenuButton, 1, 'left');
Main.wm.setCustomKeybindingHandler('panel-main-menu',
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW,
function() {
appsMenuButton.menu.toggle();
});
}
function disable() {
Main.panel.menuManager.removeMenu(appsMenuButton.menu);
appSys.disconnect(_installedChangedId);
Main.layoutManager.disconnect(_panelBoxChangedId);
Main.overview.disconnect(_hidingId);
Main.overview.disconnect(_showingId);
appsMenuButton.destroy();
activitiesButton.container.show();
activitiesButton.hotCorner.actor.show();
Main.wm.setCustomKeybindingHandler('panel-main-menu',
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW,
Main.sessionMode.hasOverview ?
Lang.bind(Main.overview, Main.overview.toggle) :
null);
}
function init() {
/* do nothing */
function init(metadata) {
Convenience.initTranslations();
}

View File

@@ -1,10 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Applications Menu",
"description": "Add a gnome 2.x style menu for applications",
"original-authors": [ "e2002@bk.ru", "debarshir@gnome.org" ],
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -0,0 +1,3 @@
EXTENSION_ID = launch-new-instance
include ../../extension.mk

View File

@@ -0,0 +1,37 @@
const Main = imports.ui.main;
const AppDisplay = imports.ui.appDisplay;
var _onActivateOriginal = null;
var _activateResultOriginal = null;
function _onActivate(event) {
this.emit('launching');
if (this._onActivateOverride) {
this._onActivateOverride(event);
} else {
this.app.open_new_window(-1);
}
Main.overview.hide();
}
function _activateResult(app) {
app.open_new_window(-1);
}
function init() {
}
function enable() {
_onActivateOriginal = AppDisplay.AppWellIcon.prototype._onActivate;
AppDisplay.AppWellIcon.prototype._onActivate = _onActivate;
_activateResultOriginal = AppDisplay.AppSearchProvider.prototype.activateResult;
AppDisplay.AppSearchProvider.prototype.activateResult = _activateResult;
}
function disable() {
AppDisplay.AppWellIcon.prototype._onActivate = _onActivateOriginal;
AppDisplay.AppSearchProvider.prototype.activateResult = _activateResultOriginal;
}

View File

@@ -0,0 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Launch new instance",
"description": "Always launch a new instance",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -0,0 +1 @@
/* This extensions requires no special styling */

View File

@@ -145,17 +145,41 @@ function enable() {
return win2.metaWindow.get_stable_sequence() - win1.metaWindow.get_stable_sequence();
});
// Put a gap on the right edge of the workspace to separe it from the workspace selector
let ratio = this._width / this._height;
let x_gap = Math.max(WORKSPACE_BORDER_GAP, WINDOW_AREA_TOP_GAP * ratio);
let y_gap = Math.max(WORKSPACE_BORDER_GAP / ratio, WINDOW_AREA_TOP_GAP);
let bottom_padding = 0;
let node = this.actor.get_theme_node();
let columnSpacing = node.get_length('-horizontal-spacing');
let rowSpacing = node.get_length('-vertical-spacing');
let padding = {
left: node.get_padding(St.Side.LEFT),
top: node.get_padding(St.Side.TOP),
bottom: node.get_padding(St.Side.BOTTOM),
right: node.get_padding(St.Side.RIGHT),
};
let closeButtonHeight, captionHeight;
let leftBorder, rightBorder;
// If the window captions are below the window, put an additional gap to account for them
if (!windowCaptionsOnTop && this._windowOverlays.length)
bottom_padding += this._windowOverlays[0].chromeHeights()[1];
if (!windowCaptionsOnTop && this._windowOverlays.length) {
// All of the overlays have the same chrome sizes,
// so just pick the first one.
let overlay = this._windowOverlays[0];
[closeButtonHeight, captionHeight] = overlay.chromeHeights();
[leftBorder, rightBorder] = overlay.chromeWidths();
} else {
[closeButtonHeight, captionHeight] = [0, 0];
[leftBorder, rightBorder] = [0, 0];
}
let area = new Rect(this._x + x_gap/2, this._y + y_gap, this._width - x_gap, this._height - y_gap - bottom_padding);
rowSpacing += captionHeight;
columnSpacing += (rightBorder + leftBorder) / 2;
padding.top += closeButtonHeight;
padding.bottom += captionHeight;
padding.left += leftBorder;
padding.right += rightBorder;
let area = new Rect(this._x + padding.left,
this._y + padding.top,
this._width - padding.left - padding.right,
this._height - padding.top - padding.bottom);
let bounds = area.copy();
@@ -342,14 +366,18 @@ function enable() {
let metaWindow = clone.metaWindow;
let mainIndex = this._lookupIndex(metaWindow);
let overlay = this._windowOverlays[mainIndex];
clone.slotId = i;
// Positioning a window currently being dragged must be avoided;
// we'll just leave a blank spot in the layout for it.
if (clone.inDrag)
continue;
clone.slot = [x, y, clone.actor.width * scale, clone.actor.height * scale];
if (overlay && initialPositioning)
overlay.hide();
overlay.hide(initialPositioning);
if (animate && isOnCurrentWorkspace) {
if (!metaWindow.showing_on_its_workspace()) {
/* Hidden windows should fade in and grow
@@ -375,7 +403,7 @@ function enable() {
} else {
clone.actor.set_position(x, y);
clone.actor.set_scale(scale, scale);
this._updateWindowOverlayPositions(clone, overlay, x, y, scale, false);
clone.overlay.relayout(false);
this._showWindowOverlay(clone, overlay, isOnCurrentWorkspace);
}
}

View File

@@ -1,3 +1,9 @@
.window-caption {
-shell-caption-spacing: 13px; /* current caption height is 26px => set it to half of it. TODO: better solution needed */
}
.window-picker {
-horizontal-spacing: 32px;
-vertical-spacing: 32px;
padding: 64px 32px;
}

View File

@@ -24,15 +24,15 @@ const PLACE_ICON_SIZE = 16;
const PlaceMenuItem = new Lang.Class({
Name: 'PlaceMenuItem',
Extends: PopupMenu.PopupMenuItem,
Extends: PopupMenu.PopupBaseMenuItem,
_init: function(info) {
this.parent(info.name);
this.parent();
this._info = info;
this.addActor(new St.Icon({ gicon: info.icon,
icon_size: PLACE_ICON_SIZE }),
{ align: St.Align.END, span: -1 });
icon_size: PLACE_ICON_SIZE }));
this.addActor(new St.Label({ text: info.name }));
},
activate: function(event) {
@@ -42,33 +42,36 @@ const PlaceMenuItem = new Lang.Class({
},
});
const SECTIONS = {
'special': N_("Places"),
'devices': N_("Devices"),
'bookmarks': N_("Bookmarks"),
'network': N_("Network")
}
const SECTIONS = [
'special',
'devices',
'bookmarks',
'network'
]
const PlacesMenu = new Lang.Class({
Name: 'PlacesMenu.PlacesMenu',
Extends: PanelMenu.SystemStatusButton,
Extends: PanelMenu.Button,
_init: function() {
this.parent('folder-symbolic');
let label = new St.Label({ text: _("Places") });
this.parent(0.0, label.text);
this.actor.add_actor(label);
this.placesManager = new PlaceDisplay.PlacesManager();
this._sections = { };
for (let foo in SECTIONS) {
let id = foo; // stupid JS closure semantics...
this._sections[id] = { section: new PopupMenu.PopupMenuSection(),
title: Gettext.gettext(SECTIONS[id]) };
for (let i=0; i < SECTIONS.length; i++) {
let id = SECTIONS[i];
this._sections[id] = new PopupMenu.PopupMenuSection();
this.placesManager.connect(id + '-updated', Lang.bind(this, function() {
this._redisplay(id);
}));
this._create(id);
this.menu.addMenuItem(this._sections[id].section);
this.menu.addMenuItem(this._sections[id]);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
}
},
@@ -79,22 +82,17 @@ const PlacesMenu = new Lang.Class({
},
_redisplay: function(id) {
this._sections[id].section.removeAll();
this._sections[id].removeAll();
this._create(id);
},
_create: function(id) {
let title = new PopupMenu.PopupMenuItem(this._sections[id].title,
{ reactive: false,
style_class: 'popup-subtitle-menu-item' });
this._sections[id].section.addMenuItem(title);
let places = this.placesManager.get(id);
for (let i = 0; i < places.length; i++)
this._sections[id].section.addMenuItem(new PlaceMenuItem(places[i]));
this._sections[id].addMenuItem(new PlaceMenuItem(places[i]));
this._sections[id].section.actor.visible = places.length > 0;
this._sections[id].actor.visible = places.length > 0;
}
});

View File

@@ -0,0 +1,10 @@
EXTENSION_ID = window-list
EXTRA_MODULES = prefs.js
if CLASSIC_MODE
EXTRA_MODULES += classic.css
endif
include ../../extension.mk
include ../../settings.mk

View File

@@ -0,0 +1,42 @@
@import url("stylesheet.css");
#panel.bottom-panel {
border-top-width: 1px;
border-bottom-width: 0px;
}
.bottom-panel .window-button > StWidget {
background-color: #e9e9e9 !important;
background-gradient-direction: vertical;
background-gradient-end: #d0d0d0;
color: #555 !important;
border-radius: 2px !important;
text-shadow: 0 0 transparent;
box-shadow: inset -1px -1px 1px rgba(0,0,0,0.5) !important;
}
.bottom-panel .window-button:hover > StWidget {
background-color: #f9f9f9 !important;
background-gradient-end: #e0e0e0;
}
.bottom-panel .window-button:active > StWidget {
box-shadow: inset 1px 1px 2px rgba(0,0,0,0.5) !important;
}
.bottom-panel .window-button.focused > StWidget {
background-color: #a9a9a9 !important;
background-gradient-end: #b0b0b0;
box-shadow: inset 1px 1px 2px rgba(0,0,0,0.5) !important;
}
.bottom-panel .window-button.focused:hover > StWidget {
background-color: #b9b9b9 !important;
background-gradient-end: #c0c0c0;
}
.bottom-panel .window-button.minimized > StWidget {
color: #888 !important;
box-shadow: inset -1px -1px 1px rgba(0,0,0,0.4) !important;
}

View File

@@ -0,0 +1,647 @@
const Clutter = imports.gi.Clutter;
const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Hash = imports.misc.hash;
const Lang = imports.lang;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
const PopupMenu = imports.ui.popupMenu;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const GroupingMode = {
NEVER: 0,
ALWAYS: 1
};
function _minimizeOrActivateWindow(window) {
let focusWindow = global.display.focus_window;
if (focusWindow == window ||
focusWindow && focusWindow.get_transient_for() == window)
window.minimize();
else
window.activate(global.get_current_time());
}
const WindowTitle = new Lang.Class({
Name: 'WindowTitle',
_init: function(metaWindow) {
this._metaWindow = metaWindow;
this.actor = new St.BoxLayout();
let textureCache = St.TextureCache.get_default();
let icon = textureCache.bind_pixbuf_property(this._metaWindow, "icon");
this._icon = new St.Bin({ style_class: 'window-button-icon',
child: icon });
this.actor.add(this._icon);
this._label = new St.Label();
this.actor.add(this._label);
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._notifyTitleId =
this._metaWindow.connect('notify::title',
Lang.bind(this, this._updateTitle));
this._notifyMinimizedId =
this._metaWindow.connect('notify::minimized',
Lang.bind(this, this._minimizedChanged));
this._minimizedChanged();
},
_minimizedChanged: function() {
this._icon.opacity = this._metaWindow.minimized ? 128 : 255;
this._updateTitle();
},
_updateTitle: function() {
if (this._metaWindow.minimized)
this._label.text = '[%s]'.format(this._metaWindow.title);
else
this._label.text = this._metaWindow.title;
},
_onDestroy: function() {
this._metaWindow.disconnect(this._notifyTitleId);
this._metaWindow.disconnect(this._notifyMinimizedId);
}
});
const WindowButton = new Lang.Class({
Name: 'WindowButton',
_init: function(metaWindow) {
this.metaWindow = metaWindow;
this._windowTitle = new WindowTitle(this.metaWindow);
this.actor = new St.Button({ style_class: 'window-button',
x_fill: true,
can_focus: true,
child: this._windowTitle.actor });
this.actor._delegate = this;
this.actor.connect('allocation-changed',
Lang.bind(this, this._updateIconGeometry));
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._switchWorkspaceId =
global.window_manager.connect('switch-workspace',
Lang.bind(this, this._updateVisibility));
this._updateVisibility();
this._notifyFocusId =
global.display.connect('notify::focus-window',
Lang.bind(this, this._updateStyle));
this._updateStyle();
},
_onClicked: function() {
_minimizeOrActivateWindow(this.metaWindow);
},
_updateStyle: function() {
if (this.metaWindow.minimized)
this.actor.add_style_class_name('minimized');
else
this.actor.remove_style_class_name('minimized');
if (global.display.focus_window == this.metaWindow)
this.actor.add_style_class_name('focused');
else
this.actor.remove_style_class_name('focused');
},
_updateVisibility: function() {
let workspace = global.screen.get_active_workspace();
this.actor.visible = this.metaWindow.located_on_workspace(workspace);
},
_updateIconGeometry: function() {
let rect = new Meta.Rectangle();
[rect.x, rect.y] = this.actor.get_transformed_position();
[rect.width, rect.height] = this.actor.get_transformed_size();
this.metaWindow.set_icon_geometry(rect);
},
_onDestroy: function() {
global.window_manager.disconnect(this._switchWorkspaceId);
global.display.disconnect(this._notifyFocusId);
}
});
const AppButton = new Lang.Class({
Name: 'AppButton',
_init: function(app) {
this.app = app;
let stack = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this.actor = new St.Button({ style_class: 'window-button',
x_fill: true,
can_focus: true,
child: stack });
this.actor._delegate = this;
this.actor.connect('allocation-changed',
Lang.bind(this, this._updateIconGeometry));
this._singleWindowTitle = new St.Bin({ x_expand: true,
x_align: St.Align.START });
stack.add_actor(this._singleWindowTitle);
this._multiWindowTitle = new St.BoxLayout({ x_expand: true });
stack.add_actor(this._multiWindowTitle);
let icon = new St.Bin({ style_class: 'window-button-icon',
child: app.create_icon_texture(24) });
this._multiWindowTitle.add(icon);
this._multiWindowTitle.add(new St.Label({ text: app.get_name() }));
this._menuManager = new PopupMenu.PopupMenuManager(this);
this._menu = new PopupMenu.PopupMenu(this.actor, 0.5, St.Side.BOTTOM);
this._menu.actor.hide();
this._menu.connect('activate', Lang.bind(this, this._onMenuActivate));
this._menuManager.addMenu(this._menu);
Main.uiGroup.add_actor(this._menu.actor);
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._switchWorkspaceId =
global.window_manager.connect('switch-workspace',
Lang.bind(this, this._updateVisibility));
this._updateVisibility();
this._windowsChangedId =
this.app.connect('windows-changed',
Lang.bind(this, this._windowsChanged));
this._windowsChanged();
this._windowTracker = Shell.WindowTracker.get_default();
this._notifyFocusId =
this._windowTracker.connect('notify::focus-app',
Lang.bind(this, this._updateStyle));
this._updateStyle();
},
_updateVisibility: function() {
let workspace = global.screen.get_active_workspace();
this.actor.visible = this.app.is_on_workspace(workspace);
},
_updateStyle: function() {
if (this._windowTracker.focus_app == this.app)
this.actor.add_style_class_name('focused');
else
this.actor.remove_style_class_name('focused');
},
_updateIconGeometry: function() {
let rect = new Meta.Rectangle();
[rect.x, rect.y] = this.actor.get_transformed_position();
[rect.width, rect.height] = this.actor.get_transformed_size();
let windows = this.app.get_windows();
windows.forEach(function(w) {
w.set_icon_geometry(rect);
});
},
_getWindowList: function() {
let workspace = global.screen.get_active_workspace();
return this.app.get_windows().filter(function(win) {
return win.located_on_workspace(workspace);
});
},
_windowsChanged: function() {
let windows = this._getWindowList();
this._singleWindowTitle.visible = windows.length == 1;
this._multiWindowTitle.visible = !this._singleWindowTitle.visible;
if (this._singleWindowTitle.visible) {
if (!this._windowTitle) {
this._windowTitle = new WindowTitle(windows[0]);
this._singleWindowTitle.child = this._windowTitle.actor;
}
} else {
if (this._windowTitle) {
this._singleWindowTitle.child = null;
this._windowTitle = null;
}
}
},
_onClicked: function() {
if (this._menu.isOpen) {
this._menu.close();
return;
}
let windows = this._getWindowList();
if (windows.length == 1) {
_minimizeOrActivateWindow(windows[0]);
} else {
this._menu.removeAll();
for (let i = 0; i < windows.length; i++) {
let windowTitle = new WindowTitle(windows[i]);
let item = new PopupMenu.PopupBaseMenuItem();
item.addActor(windowTitle.actor);
item._window = windows[i];
this._menu.addMenuItem(item);
}
this._menu.open();
let event = Clutter.get_current_event();
if (event && event.type() == Clutter.EventType.KEY_RELEASE)
this._menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
}
},
_onMenuActivate: function(menu, child) {
child._window.activate(global.get_current_time());
},
_onDestroy: function() {
global.window_manager.disconnect(this._switchWorkspaceId);
this._windowTracker.disconnect(this._notifyFocusId);
this.app.disconnect(this._windowsChangedId);
this._menu.actor.destroy();
}
});
const TrayButton = new Lang.Class({
Name: 'TrayButton',
_init: function() {
this._counterLabel = new St.Label({ x_align: Clutter.ActorAlign.CENTER,
x_expand: true,
y_align: Clutter.ActorAlign.CENTER,
y_expand: true });
this.actor = new St.Button({ style_class: 'summary-source-counter',
child: this._counterLabel,
layoutManager: new Clutter.BinLayout() });
this.actor.set_x_align(Clutter.ActorAlign.END);
this.actor.set_x_expand(true);
this.actor.set_y_expand(true);
this.actor.connect('clicked', Lang.bind(this,
function() {
if (Main.messageTray._trayState == MessageTray.State.HIDDEN)
Main.messageTray.toggle();
}));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._trayItemCount = 0;
Main.messageTray.getSources().forEach(Lang.bind(this,
function(source) {
this._sourceAdded(Main.messageTray, source);
}));
this._sourceAddedId =
Main.messageTray.connect('source-added',
Lang.bind(this, this._sourceAdded));
this._sourceRemovedId =
Main.messageTray.connect('source-removed',
Lang.bind(this, this._sourceRemoved));
this._updateVisibility();
},
_sourceAdded: function(tray, source) {
this._trayItemCount++;
this._updateVisibility();
},
_sourceRemoved: function(source) {
this._trayItemCount--;
this.actor.checked = false;
this._updateVisibility();
},
_updateVisibility: function() {
this._counterLabel.text = this._trayItemCount.toString();
this.actor.visible = this._trayItemCount > 0;
},
_onDestroy: function() {
Main.messageTray.getSources().forEach(Lang.bind(this,
function(source) {
if (!source._windowListDestroyId)
return;
source.disconnect(source._windowListDestroyId)
delete source._windowListDestroyId;
}));
Main.messageTray.disconnect(this._sourceAddedId);
Main.messageTray.disconnect(this._sourceRemovedId);
}
});
const WindowList = new Lang.Class({
Name: 'WindowList',
_init: function() {
this.actor = new St.Widget({ name: 'panel',
style_class: 'bottom-panel',
reactive: true,
track_hover: true,
layout_manager: new Clutter.BinLayout()});
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
let box = new St.BoxLayout({ x_expand: true, y_expand: true });
this.actor.add_actor(box);
let layout = new Clutter.BoxLayout({ homogeneous: true });
this._windowList = new St.Widget({ style_class: 'window-list',
layout_manager: layout,
x_align: Clutter.ActorAlign.START,
x_expand: true,
y_expand: true });
box.add(this._windowList, { expand: true });
this._windowList.connect('style-changed', Lang.bind(this,
function() {
let node = this._windowList.get_theme_node();
let spacing = node.get_length('spacing');
this._windowList.layout_manager.spacing = spacing;
}));
this._trayButton = new TrayButton();
box.add(this._trayButton.actor);
Main.layoutManager.addChrome(this.actor, { affectsStruts: true,
trackFullscreen: true });
Main.ctrlAltTabManager.addGroup(this.actor, _('Window List'), 'start-here-symbolic');
this._appSystem = Shell.AppSystem.get_default();
this._appStateChangedId =
this._appSystem.connect('app-state-changed',
Lang.bind(this, this._onAppStateChanged));
this._monitorsChangedId =
Main.layoutManager.connect('monitors-changed',
Lang.bind(this, this._updatePosition));
this._updatePosition();
this._keyboardVisiblechangedId =
Main.layoutManager.connect('keyboard-visible-changed',
Lang.bind(this, function(o, state) {
Main.layoutManager.keyboardBox.visible = state;
Main.uiGroup.set_child_above_sibling(windowList.actor,
Main.layoutManager.keyboardBox);
this._updateKeyboardAnchor();
}));
this._workspaceSignals = new Hash.Map();
this._nWorkspacesChangedId =
global.screen.connect('notify::n-workspaces',
Lang.bind(this, this._onWorkspacesChanged));
this._onWorkspacesChanged();
this._overviewShowingId =
Main.overview.connect('showing', Lang.bind(this, function() {
this.actor.hide();
this._updateKeyboardAnchor();
}));
this._overviewHidingId =
Main.overview.connect('hiding', Lang.bind(this, function() {
this.actor.show();
this._updateKeyboardAnchor();
}));
this._settings = Convenience.getSettings();
this._groupingModeChangedId =
this._settings.connect('changed::grouping-mode',
Lang.bind(this, this._groupingModeChanged));
this._groupingModeChanged();
},
_groupingModeChanged: function() {
this._groupingMode = this._settings.get_enum('grouping-mode');
this._populateWindowList();
},
_populateWindowList: function() {
this._windowList.destroy_all_children();
if (this._groupingMode == GroupingMode.NEVER) {
let windows = Meta.get_window_actors(global.screen);
for (let i = 0; i < windows.length; i++)
this._onWindowAdded(null, windows[i].metaWindow);
} else {
let apps = this._appSystem.get_running();
for (let i = 0; i < apps.length; i++)
this._addApp(apps[i]);
}
},
_updatePosition: function() {
let monitor = Main.layoutManager.primaryMonitor;
this.actor.width = monitor.width;
this.actor.set_position(monitor.x, monitor.y + monitor.height - this.actor.height);
},
_updateKeyboardAnchor: function() {
if (!Main.keyboard.actor)
return;
let anchorY = Main.overview.visible ? 0 : this.actor.height;
Main.keyboard.actor.anchor_y = anchorY;
},
_onAppStateChanged: function(appSys, app) {
if (this._groupingMode != GroupingMode.ALWAYS)
return;
if (app.state == Shell.AppState.RUNNING)
this._addApp(app);
else if (app.state == Shell.AppState.STOPPED)
this._removeApp(app);
},
_addApp: function(app) {
let button = new AppButton(app);
this._windowList.layout_manager.pack(button.actor,
true, true, true,
Clutter.BoxAlignment.START,
Clutter.BoxAlignment.START);
},
_removeApp: function(app) {
let children = this._windowList.get_children();
for (let i = 0; i < children.length; i++) {
if (children[i]._delegate.app == app) {
children[i].destroy();
return;
}
}
},
_onWindowAdded: function(ws, win) {
if (!Shell.WindowTracker.get_default().is_window_interesting(win))
return;
if (this._groupingMode != GroupingMode.NEVER)
return;
let button = new WindowButton(win);
this._windowList.layout_manager.pack(button.actor,
true, true, true,
Clutter.BoxAlignment.START,
Clutter.BoxAlignment.START);
},
_onWindowRemoved: function(ws, win) {
if (this._groupingMode != GroupingMode.NEVER)
return;
let children = this._windowList.get_children();
for (let i = 0; i < children.length; i++) {
if (children[i]._delegate.metaWindow == win) {
children[i].destroy();
return;
}
}
},
_onWorkspacesChanged: function() {
let numWorkspaces = global.screen.n_workspaces;
for (let i = 0; i < numWorkspaces; i++) {
let workspace = global.screen.get_workspace_by_index(i);
if (this._workspaceSignals.has(workspace))
continue;
let signals = { windowAddedId: 0, windowRemovedId: 0 };
signals._windowAddedId =
workspace.connect('window-added',
Lang.bind(this, this._onWindowAdded));
signals._windowRemovedId =
workspace.connect('window-removed',
Lang.bind(this, this._onWindowRemoved));
this._workspaceSignals.set(workspace, signals);
}
},
_disconnectWorkspaceSignals: function() {
let numWorkspaces = global.screen.n_workspaces;
for (let i = 0; i < numWorkspaces; i++) {
let workspace = global.screen.get_workspace_by_index(i);
let signals = this._workspaceSignals.delete(workspace)[1];
workspace.disconnect(signals._windowAddedId);
workspace.disconnect(signals._windowRemovedId);
}
},
_onDestroy: function() {
Main.ctrlAltTabManager.removeGroup(this.actor);
this._appSystem.disconnect(this._appStateChangedId);
this._appStateChangedId = 0;
Main.layoutManager.disconnect(this._monitorsChangedId);
this._monitorsChangedId = 0;
Main.layoutManager.disconnect(this._keyboardVisiblechangedId);
this._keyboardVisiblechangedId = 0;
Main.layoutManager.hideKeyboard();
this._disconnectWorkspaceSignals();
global.screen.disconnect(this._nWorkspacesChangedId);
this._nWorkspacesChangedId = 0;
Main.overview.disconnect(this._overviewShowingId);
Main.overview.disconnect(this._overviewHidingId);
this._settings.disconnect(this._groupingModeChangedId);
let windows = Meta.get_window_actors(global.screen);
for (let i = 0; i < windows.length; i++)
windows[i].metaWindow.set_icon_geometry(null);
}
});
let windowList;
let injections = {};
let notificationParent;
function init() {
}
function enable() {
windowList = new WindowList();
windowList.actor.connect('notify::hover', Lang.bind(Main.messageTray,
function() {
this._pointerInTray = windowList.actor.hover;
this._updateState();
}));
injections['_trayDwellTimeout'] = MessageTray.MessageTray.prototype._trayDwellTimeout;
MessageTray.MessageTray.prototype._trayDwellTimeout = function() {
return false;
};
injections['_tween'] = MessageTray.MessageTray.prototype._tween;
MessageTray.MessageTray.prototype._tween = function(actor, statevar, value, params) {
if (!Main.overview.visible) {
let anchorY;
if (statevar == '_trayState')
anchorY = windowList.actor.height;
else if (statevar == '_notificationState')
anchorY = -windowList.actor.height;
else
anchorY = 0;
actor.anchor_y = anchorY;
}
injections['_tween'].call(Main.messageTray, actor, statevar, value, params);
};
injections['_onTrayHidden'] = MessageTray.MessageTray.prototype._onTrayHidden;
MessageTray.MessageTray.prototype._onTrayHidden = function() {
this.actor.anchor_y = 0;
injections['_onTrayHidden'].call(Main.messageTray);
};
notificationParent = Main.messageTray._notificationWidget.get_parent();
Main.messageTray._notificationWidget.hide();
Main.messageTray._notificationWidget.reparent(windowList.actor);
Main.messageTray._notificationWidget.show();
}
function disable() {
if (!windowList)
return;
windowList.actor.hide();
if (notificationParent) {
Main.messageTray._notificationWidget.reparent(notificationParent);
notificationParent = null;
}
windowList.actor.destroy();
windowList = null;
for (prop in injections)
MessageTray.MessageTray.prototype[prop] = injections[prop];
Main.messageTray._notificationWidget.set_anchor_point(0, 0);
Main.messageTray.actor.set_anchor_point(0, 0);
}

View File

@@ -0,0 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Window List",
"description": "Display a window list at the bottom of the screen",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -0,0 +1,18 @@
<schemalist gettext-domain="gnome-shell-extensions">
<enum id="org.gnome.shell.extensions.window-list.GroupingMode">
<value value="0" nick="never"/>
<value value="1" nick="always"/>
</enum>
<schema id="org.gnome.shell.extensions.window-list"
path="/org/gnome/shell/extensions/window-list/">
<key name="grouping-mode"
enum="org.gnome.shell.extensions.window-list.GroupingMode">
<default>'never'</default>
<_summary>When to group windows</_summary>
<_description>
Decides when to group windows from the same application on the
window list. Possible values are "never" and "always".
</_description>
</key>
</schema>
</schemalist>

View File

@@ -0,0 +1,80 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
function init() {
Convenience.initTranslations();
}
const WindowListPrefsWidget = new GObject.Class({
Name: 'WindowList.Prefs.Widget',
GTypeName: 'WindowListPrefsWidget',
Extends: Gtk.Frame,
_init: function(params) {
this.parent(params);
this.shadow_type = Gtk.ShadowType.NONE;
this.margin = 24;
let title = '<b>' + _("Window Grouping") + '</b>';
let titleLabel = new Gtk.Label({ use_markup: true, label: title });
this.set_label_widget(titleLabel);
let align = new Gtk.Alignment({ left_padding: 12 });
this.add(align);
let grid = new Gtk.Grid({ orientation: Gtk.Orientation.VERTICAL,
row_spacing: 6,
column_spacing: 6,
margin_top: 6 });
align.add(grid);
this._settings = Convenience.getSettings();
let currentMode = this._settings.get_string('grouping-mode');
let range = this._settings.get_range('grouping-mode');
let modes = range.deep_unpack()[1].deep_unpack();
let modeLabels = {
'never': _("Never group windows"),
'always': _("Always group windows")
};
let radio = null;
for (let i = 0; i < modes.length; i++) {
let mode = modes[i];
let label = modeLabels[mode];
if (!label) {
log('Unhandled option "%s" for grouping-mode'.format(mode));
continue;
}
radio = new Gtk.RadioButton({ group: radio,
label: label,
active: currentMode == mode });
grid.add(radio);
radio.connect('toggled', Lang.bind(this, function(button) {
if (button.active)
this._settings.set_string('grouping-mode', mode);
}));
}
}
});
function buildPrefsWidget() {
let widget = new WindowListPrefsWidget();
widget.show_all();
return widget;
}

View File

@@ -0,0 +1,67 @@
.bottom-panel {
/* .window-button-icon height +
.window-button vertical padding +
.window-button > StWidget vertical padding) */
height: 30px;
}
.window-list {
spacing: 2px;
font-size: 10pt;
}
.window-button {
padding: 1px;
}
.window-button:first-child:ltr {
padding-left: 2px;
}
.window-button:last-child:rtl {
padding-right: 2px;
}
.window-button > StWidget {
max-width: 250px;
color: #bbb;
background-color: black;
border-radius: 4px;
padding: 3px 6px 1px;
box-shadow: inset 1px 1px 4px rgba(255,255,255,0.5);
text-shadow: 1px 1px 4px rgba(0,0,0,0.8);
spacing: 4px;
}
.window-button:hover > StWidget {
color: white;
background-color: #1f1f1f;
}
.window-button:active > StWidget,
.window-button:focus > StWidget {
box-shadow: inset 2px 2px 4px rgba(255,255,255,0.5);
}
.window-button.focused > StWidget {
color: white;
box-shadow: inset 1px 1px 4px rgba(255,255,255,0.7);
}
.window-button.focused:active > StWidget {
box-shadow: inset 2px 2px 4px rgba(255,255,255,0.7);
}
.window-button.minimized > StWidget {
color: #666;
box-shadow: inset -1px -1px 4px rgba(255,255,255,0.5);
}
.window-button.minimized:active > StWidget {
box-shadow: inset -2px -2px 4px rgba(255,255,255,0.5);
}
.window-button-icon {
width: 24px;
height: 24px;
}

View File

@@ -206,7 +206,9 @@ function enable() {
parentActor.add_actor(this._text);
});
winInjections['updatePositions'] = injectToFunction(Workspace.WindowOverlay.prototype, 'updatePositions', function(cloneX, cloneY, cloneWidth, cloneHeight) {
winInjections['relayout'] = injectToFunction(Workspace.WindowOverlay.prototype, 'relayout', function(animate) {
let [cloneX, cloneY, cloneWidth, cloneHeight] = this._windowClone.slot;
let textX = cloneX - 2;
let textY = cloneY - 2;
this._text.set_position(Math.floor(textX) + 5, Math.floor(textY) + 5);
@@ -251,6 +253,8 @@ function removeInjection(object, injection, name) {
}
function disable() {
let i;
for (i in workspaceInjections)
removeInjection(Workspace.Workspace.prototype, workspaceInjections, i);
for (i in winInjections)

View File

@@ -19,6 +19,8 @@ extensions/places-menu/placeDisplay.js
extensions/systemMonitor/extension.js
extensions/user-theme/extension.js
extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in
extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in
extensions/window-list/prefs.js
extensions/windowsNavigator/extension.js
extensions/workspace-indicator/extension.js
extensions/workspace-indicator/prefs.js

176
po/cs.po
View File

@@ -2,15 +2,15 @@
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package.
#
# Marek Černocký <marek@manet.cz>, 2011, 2012.
# Marek Černocký <marek@manet.cz>, 2011, 2012, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2012-10-08 17:42+0000\n"
"PO-Revision-Date: 2012-10-08 22:39+0200\n"
"POT-Creation-Date: 2013-01-30 16:54+0000\n"
"PO-Revision-Date: 2013-01-31 20:08+0100\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
@@ -18,51 +18,55 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Gtranslator 2.91.6\n"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "The application icon mode."
msgstr "Režim ikony aplikace."
#: ../data/gnome-classic.desktop.in.h:1
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic"
msgstr "GNOME klasik"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'."
msgstr ""
"Nastavuje, jak jsou okna zobrazována v přepínači. Platné možnosti jsou "
"„thumbnail-only“ (zobrazuje náhled okna), „app-icon-only“ (zobrazuje pouze "
"ikonu aplikace) nebo „both“ (zobrazuje obojí)."
#: ../data/gnome-classic.desktop.in.h:2
msgid "This session logs you into GNOME Classic"
msgstr "Toto sezení vás přihlásí do GNOME klasik"
#: ../extensions/alternate-tab/prefs.js:26
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr "GNOME Shell klasik"
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Správa oken a spouštění aplikací"
#: ../extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Pouze náhled"
#: ../extensions/alternate-tab/prefs.js:27
#: ../extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Pouze ikona aplikace"
#: ../extensions/alternate-tab/prefs.js:28
#: ../extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Náhled a ikona aplikace"
#: ../extensions/alternate-tab/prefs.js:43
#: ../extensions/alternate-tab/prefs.js:37
msgid "Present windows as"
msgstr "Představovat okna jako"
#: ../extensions/alternate-tab/prefs.js:68
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "Zobrazovat pouze okna z aktuální pracovní plochy"
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:86
#: ../extensions/alternative-status-menu/extension.js:144
msgid "Suspend"
msgstr "Uspat do paměti"
#: ../extensions/alternative-status-menu/extension.js:91
#: ../extensions/alternative-status-menu/extension.js:147
msgid "Hibernate"
msgstr "Uspat na disk"
#: ../extensions/alternative-status-menu/extension.js:96
#: ../extensions/alternative-status-menu/extension.js:150
msgid "Power Off"
msgstr "Vypnout"
@@ -82,6 +86,18 @@ msgstr "Povolit uspávání na disk"
msgid "Control the visibility of the Hibernate menu item"
msgstr "Řídí viditelnost položky „Uspat na disk“ v nabídce"
#: ../extensions/apps-menu/extension.js:50
msgid "Activities Overview"
msgstr "Přehled činností"
#: ../extensions/apps-menu/extension.js:103
msgid "Favorites"
msgstr "Oblíbené"
#: ../extensions/apps-menu/extension.js:197
msgid "Applications"
msgstr "Aplikace"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr "Seznam aplikací a pracovních ploch"
@@ -115,82 +131,6 @@ msgstr "Vytvoření nového srovnávacího pravidla"
msgid "Add"
msgstr "Přidat"
#: ../extensions/dock/extension.js:600
msgid "Drag here to add favorites"
msgstr "Přetažením sem přidáte do oblíbených"
#: ../extensions/dock/extension.js:926
msgid "New Window"
msgstr "Nové okno"
#: ../extensions/dock/extension.js:928
msgid "Quit Application"
msgstr "Ukončit aplikaci"
#: ../extensions/dock/extension.js:933
msgid "Remove from Favorites"
msgstr "Odebrat z oblíbených"
#: ../extensions/dock/extension.js:934
msgid "Add to Favorites"
msgstr "Přidat do oblíbených"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Position of the dock"
msgstr "Poloha doku"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"Nastavuje polohu doku na obrazovce. Povolené hodnoty jsou „right“ (vpravo) "
"nebo „left“ (vlevo)."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Icon size"
msgstr "Velikost ikony"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Sets icon size of the dock."
msgstr "Nastavuje velikost ikon v doku."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Enable/disable autohide"
msgstr "Zapnout/vypnout automatické skrývání"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Autohide effect"
msgstr "Efekt automatického skrývání"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
"'move'"
msgstr ""
"Nastavuje efekt skrývání doku. Povolené hodnoty jsou „resize“ (změna "
"velikosti), „rescale“ (změna měřítka) a „move“ (přesun)."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid "Autohide duration"
msgstr "Čas automatického skrývání"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "Nastavuje čas trvání efektu automatického skrývání."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:10
msgid "Monitor"
msgstr "Monitor"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:11
msgid ""
"Sets monitor to display dock in. The default value (-1) is the primary "
"monitor."
msgstr ""
"Nastavuje monitor, na kterém se má zobrazovat dok. Výchozí hodnotou (-1) je "
"hlavní monitor."
#: ../extensions/drive-menu/extension.js:72
#, c-format
msgid "Ejecting drive '%s' failed:"
@@ -235,26 +175,6 @@ msgstr ""
msgid "Message:"
msgstr "Zpráva:"
#: ../extensions/gajim/extension.js:226
#, c-format
msgid "%s is away."
msgstr "%s je pryč."
#: ../extensions/gajim/extension.js:229
#, c-format
msgid "%s is offline."
msgstr "%s je odpojen."
#: ../extensions/gajim/extension.js:232
#, c-format
msgid "%s is online."
msgstr "%s je připojen."
#: ../extensions/gajim/extension.js:235
#, c-format
msgid "%s is busy."
msgstr "%s je zaneprázdněn."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid "Use more screen for windows"
msgstr "Použít větší část obrazovky pro okna"
@@ -283,22 +203,10 @@ msgstr ""
"přepíše výchozí chování shellu, který jej umisťuje dolů. Změna tohoto "
"nastavení vyžaduje restart shellu, aby se projevila."
#: ../extensions/places-menu/extension.js:46
#: ../extensions/places-menu/extension.js:57
msgid "Places"
msgstr "Místa"
#: ../extensions/places-menu/extension.js:47
msgid "Devices"
msgstr "Zařízení"
#: ../extensions/places-menu/extension.js:48
msgid "Bookmarks"
msgstr "Záložky"
#: ../extensions/places-menu/extension.js:49
msgid "Network"
msgstr "Síť"
#: ../extensions/places-menu/placeDisplay.js:48
#, c-format
msgid "Failed to launch \"%s\""
@@ -308,11 +216,11 @@ msgstr "Selhalo spuštění „%s“"
msgid "Home"
msgstr "Domů"
#: ../extensions/places-menu/placeDisplay.js:184
#: ../extensions/places-menu/placeDisplay.js:195
msgid "File System"
msgstr "Systém souborů"
#: ../extensions/places-menu/placeDisplay.js:188
#: ../extensions/places-menu/placeDisplay.js:199
msgid "Browse network"
msgstr "Procházet síť"

View File

@@ -4,22 +4,22 @@
# Jorge González <jorgegonz@svn.gnome.org>, 2011.
# Nicolás Satragno <nsatragno@gmail.com>, 2011.
#
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012.
, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2012-12-05 14:20+0000\n"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2013-01-30 16:54+0000\n"
"PO-Revision-Date: 2013-02-01 10:05+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Gtranslator 2.91.5\n"
@@ -36,42 +36,26 @@ msgid "GNOME Shell Classic"
msgid "GNOME Shell Classic"
msgstr "GNOME Shell clásico"
#: ../data/gnome-shell-classic.desktop.in.in.h:2
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Gestión de ventanas e inicio de aplicaciones"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "The application icon mode."
msgstr "El modo de icono de la aplicación."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'."
msgstr ""
"Configura cómo se muestran las ventanas en el intercambiador. Las opciones "
"posibles son «thumbnail-only» (muestra una miniatura de la ventana, «app-"
"icon-only» (sólo muestra el icono de la aplicación) o «both» (se muestran "
"ambas cosas)."
#: ../extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Sólo miniaturas"
#: ../extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Sólo icono de la aplicación"
#: ../extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Miniatura e icono de la aplicación"
#: ../extensions/alternate-tab/prefs.js:37
msgid "Present windows as"
msgstr "Presentar ventanas como"
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "Mostrar ventanas solamente en el área de trabajo actual"
@@ -104,6 +88,20 @@ msgstr "Activar la hibernación"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr "Controla la visibilidad del elemento de menú «Hibernar»"
#: ../extensions/apps-menu/extension.js:50
msgid "Activities Overview"
msgstr "Vista de actividades"
#: ../extensions/apps-menu/extension.js:103
#| msgid "Add to Favorites"
msgid "Favorites"
msgstr "Favoritos"
#: ../extensions/apps-menu/extension.js:197
#| msgid "Application"
msgid "Applications"
msgstr "Aplicaciones"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
@@ -212,22 +210,10 @@ msgstr ""
"correspondientes, cambiando el comportamiento predeterminado de shell, que "
"los sitúa por debajo. Cambiar esta configuración requiere reiniciar la shell "
"para que tenga efecto."
#: ../extensions/places-menu/extension.js:57
msgid "Places"
msgstr "Lugares"
#: ../extensions/places-menu/extension.js:47
msgid "Devices"
msgstr "Dispositivos"
#: ../extensions/places-menu/extension.js:48
msgid "Bookmarks"
msgstr "Marcadores"
#: ../extensions/places-menu/extension.js:49
msgid "Network"
msgstr "Red"
#: ../extensions/places-menu/placeDisplay.js:48
#, c-format
@@ -302,6 +288,28 @@ msgstr "Pantalla"
#: ../extensions/xrandr-indicator/extension.js:80
msgid "Display Settings"
msgstr "Configuración de pantalla"
#~ msgid "The application icon mode."
#~ msgstr "El modo de icono de la aplicación."
#~ msgid ""
#~ "Configures how the windows are shown in the switcher. Valid possibilities "
#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
#~ "only' (shows only the application icon) or 'both'."
#~ msgstr ""
#~ "Configura cómo se muestran las ventanas en el intercambiador. Las "
#~ "opciones posibles son «thumbnail-only» (muestra una miniatura de la "
#~ "ventana, «app-icon-only» (sólo muestra el icono de la aplicación) o "
#~ "«both» (se muestran ambas cosas)."
#~ msgid "Devices"
#~ msgstr "Dispositivos"
#~ msgid "Bookmarks"
#~ msgstr "Marcadores"
#~ msgid "Network"
#~ msgstr "Red"
#~ msgid "Drag here to add favorites"
#~ msgstr "Arrastrar aquí para añadir a favoritos"
@@ -314,9 +322,6 @@ msgstr "Configuración de pantalla"
#~ msgid "Remove from Favorites"
#~ msgstr "Quitar de favoritos"
#~ msgid "Add to Favorites"
#~ msgstr "Añadir a favoritos"
#~ msgid "Position of the dock"
#~ msgstr "Posición del tablero"

448
po/ja.po
View File

@@ -7,285 +7,311 @@
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2011-09-25 12:13+0000\n"
"PO-Revision-Date: 2011-09-26 11:43+0900\n"
"Last-Translator: Jiro Matsuzawa <jmatsuzawa@src.gnome.org>\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2013-01-22 08:36+0000\n"
"PO-Revision-Date: 2013-01-26 00:21+0900\n"
"Last-Translator: OKANO Takayoshi <kano@na.rim.or.jp>\n"
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ja\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Notifications"
msgstr "メッセージ通知"
#: ../data/gnome-classic.desktop.in.h:1
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic"
msgstr ""
#: ../extensions/alternative-status-menu/extension.js:52
msgid "Online Accounts"
msgstr "オンラインアカウント"
#: ../data/gnome-classic.desktop.in.h:2
msgid "This session logs you into GNOME Classic"
msgstr ""
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "システム設定"
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr ""
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "画面のロック"
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr ""
#: ../extensions/alternative-status-menu/extension.js:68
msgid "Switch User"
msgstr "ユーザーの切り替え"
#: ../extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr ""
#: ../extensions/alternative-status-menu/extension.js:73
msgid "Log Out..."
msgstr "ログアウト..."
#: ../extensions/alternate-tab/prefs.js:21
#, fuzzy
#| msgid "Application and workspace list"
msgid "Application icon only"
msgstr "アプリケーションとワークスペースのリスト"
#: ../extensions/alternative-status-menu/extension.js:81
#: ../extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr ""
#: ../extensions/alternate-tab/prefs.js:37
msgid "Present windows as"
msgstr ""
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr ""
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:144
msgid "Suspend"
msgstr "サスペンド"
#: ../extensions/alternative-status-menu/extension.js:87
#: ../extensions/alternative-status-menu/extension.js:147
msgid "Hibernate"
msgstr "ハイバーネート"
#: ../extensions/alternative-status-menu/extension.js:93
msgid "Power Off..."
#: ../extensions/alternative-status-menu/extension.js:150
#, fuzzy
#| msgid "Power Off..."
msgid "Power Off"
msgstr "電源オフ..."
#: ../extensions/alternate-tab/extension.js:44
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"Native:\n"
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
" native switches the Alternate Tab extension off. \n"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr ""
#: ../extensions/alternate-tab/extension.js:269
msgid "Alt Tab Behaviour"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr ""
#: ../extensions/alternate-tab/extension.js:285
msgid "All & Thumbnails"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr ""
#: ../extensions/alternate-tab/extension.js:292
msgid "Workspace & Icons"
msgstr ""
#: ../extensions/alternate-tab/extension.js:299
msgid "Native"
msgstr ""
#: ../extensions/alternate-tab/extension.js:306
msgid "Cancel"
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr ""
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"アプリケーションの識別子 (.desktop ファイル名) とコロンの後にワークスペース番"
"号を付与した文字列を要素とするリストです"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "アプリケーションとワークスペースのリスト"
#: ../extensions/dock/extension.js:486
msgid "Drag here to add favorites"
msgstr "ドラッグでお気に入りに追加"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "A list of strings, each containing an application id (desktop file name), followed by a colon and the workspace number"
msgstr "アプリケーションの識別子 (.desktop ファイル名) とコロンの後にワークスペース番号を付与した文字列を要素とするリストです"
#: ../extensions/dock/extension.js:820
msgid "New Window"
msgstr "新しいウィンドウで開く"
#: ../extensions/dock/extension.js:822
msgid "Quit Application"
#: ../extensions/auto-move-windows/prefs.js:55
#, fuzzy
#| msgid "Quit Application"
msgid "Application"
msgstr "アプリケーションを終了"
#: ../extensions/dock/extension.js:827
msgid "Remove from Favorites"
msgstr "お気に入りから削除"
#: ../extensions/dock/extension.js:828
msgid "Add to Favorites"
msgstr "お気に入りに追加"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr "アイコンのサイズ"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr "ドックの位置"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr "ドックに表示するアイコンの大きさを指定します。"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
#, fuzzy
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
msgstr ""
"ドックをデスクトップに表示する位置を指定します。指定可能な値: 'right'、'left'"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"ドックをデスクトップに表示する位置を指定します。指定可能な値: 'right'、'left'"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr ""
#: ../extensions/example/extension.js:11
#: ../extensions/drive-menu/extension.js:72
#, c-format
msgid "Ejecting drive '%s' failed:"
msgstr ""
#: ../extensions/drive-menu/extension.js:89
msgid "Removable devices"
msgstr ""
#: ../extensions/drive-menu/extension.js:106
msgid "Open File"
msgstr ""
#: ../extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Hello, world!"
#: ../extensions/gajim/extension.js:227
#, c-format
msgid "%s is away."
msgstr "%s さんは離席中です。"
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr ""
#: ../extensions/gajim/extension.js:230
#, c-format
msgid "%s is offline."
msgstr "%s さんはオフラインです。"
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2
msgid "If not empty, it contains the text that will be shown when clicking on the panel."
msgstr ""
#: ../extensions/gajim/extension.js:233
#, c-format
msgid "%s is online."
msgstr "%s さんはオンラインです。"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and as such it has little functionality on its own.\n"
"Nevertheless it's possible to customize the greeting message."
msgstr ""
#: ../extensions/gajim/extension.js:236
#, c-format
msgid "%s is busy."
msgstr "%s さんは取り込み中です。"
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr ""
"TRUE にすると、ウィンドウのサムネイルの上端にそのウィンドウのタイトルバーを表"
"示します (これは、サムネイルの下端にタイトルバーを表示する GNOME シェルのデ"
"フォルト値よりも優先されます)。この設定を適用する際は GNOME シェルを再起動し"
"て下さい。"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "ウィンドウのタイトルバーを上端に表示するかどうか"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
"オーバービュー・モードでウィンドウのサムネイルを配置する際のアルゴリズムで"
"す。指定可能な値: 'grid' (原則的に格子状に配置していくアルゴリズ"
"ム)、'natural' (ウィンドウの実際の位置や大きさを考慮して配置していくアルゴリ"
"ズム)"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
"ウィンドウのサムネイルを複数配置する際に、画面のアスペクト比に合わせて、境界"
"部分を減らすことにより、ウィンドウを統合しすることで、さらにたくさんの画面を"
"使用できるようにするかどうかです。この設定は 'natural' の配置アルゴリズムを採"
"用している場合にのみ適用されます。"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr "ウィンドウにたくさんの画面を使うかどうか"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr "ウィンドウを配置するアルゴリズム"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Try to use more screen for placing window thumbnails by adapting to screen aspect ratio, and consolidating them further to reduce the bounding box. This setting applies only with the natural placement strategy."
msgstr "ウィンドウのサムネイルを複数配置する際に、画面のアスペクト比に合わせて、境界部分を減らすことにより、ウィンドウを統合することで、さらにたくさんの画面を使用できるようにするかどうかです。この設定は 'natural' の配置アルゴリズムを採用している場合にのみ適用されます。"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr "ウィンドウのタイトルバーを上端に表示するかどうか"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid "If true, place window captions on top the respective thumbnail, overriding shell default of placing it at the bottom. Changing this setting requires restarting the shell to have any effect."
msgstr "TRUE にすると、ウィンドウのサムネイルの上端にそのウィンドウのタイトルバーを表示します (これは、サムネイルの下端にタイトルバーを表示する GNOME シェルのデフォルト値よりも優先されます)。この設定を適用する際は GNOME シェルを再起動して下さい。"
#: ../extensions/places-menu/extension.js:57
msgid "Places"
msgstr ""
#: ../extensions/places-menu/placeDisplay.js:48
#, c-format
msgid "Failed to launch \"%s\""
msgstr ""
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Home"
msgstr ""
#: ../extensions/places-menu/placeDisplay.js:195
msgid "File System"
msgstr ""
#: ../extensions/places-menu/placeDisplay.js:199
msgid "Browse network"
msgstr ""
#: ../extensions/systemMonitor/extension.js:213
msgid "CPU"
msgstr ""
#: ../extensions/systemMonitor/extension.js:266
msgid "Memory"
msgstr ""
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "テーマの名前です (~/.themes/name/gnome-shell 配下に格納します)"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "テーマの名前"
#: ../extensions/xrandr-indicator/extension.js:26
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "テーマの名前です (~/.themes/name/gnome-shell 配下に格納します)"
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr ""
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr ""
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr ""
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr ""
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "標準"
#: ../extensions/xrandr-indicator/extension.js:27
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "左回り"
#: ../extensions/xrandr-indicator/extension.js:28
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "右回り"
#: ../extensions/xrandr-indicator/extension.js:29
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "逆さま"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "ディスプレイの設定..."
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr ""
#: ../extensions/xrandr-indicator/extension.js:80
#, fuzzy
#| msgid "System Settings"
msgid "Display Settings"
msgstr "システム設定"
#~ msgid "Notifications"
#~ msgstr "メッセージ通知"
#~ msgid "Online Accounts"
#~ msgstr "オンラインアカウント"
#~ msgid "Lock Screen"
#~ msgstr "画面のロック"
#~ msgid "Switch User"
#~ msgstr "ユーザーの切り替え"
#~ msgid "Log Out..."
#~ msgstr "ログアウト..."
#~ msgid "Drag here to add favorites"
#~ msgstr "ドラッグでお気に入りに追加"
#~ msgid "New Window"
#~ msgstr "新しいウィンドウで開く"
#~ msgid "Remove from Favorites"
#~ msgstr "お気に入りから削除"
#~ msgid "Add to Favorites"
#~ msgstr "お気に入りに追加"
#~ msgid "Icon size"
#~ msgstr "アイコンのサイズ"
#~ msgid "Position of the dock"
#~ msgstr "ドックの位置"
#~ msgid "Sets icon size of the dock."
#~ msgstr "ドックに表示するアイコンの大きさを指定します。"
#, fuzzy
#~ msgid "Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
#~ msgstr "ドックをデスクトップに表示する位置を指定します。指定可能な値: 'right'、'left'"
#~ msgid "Sets the position of the dock in the screen. Allowed values are 'right' or 'left'"
#~ msgstr "ドックをデスクトップに表示する位置を指定します。指定可能な値: 'right'、'left'"
#~ msgid "%s is away."
#~ msgstr "%s さんは離席中です。"
#~ msgid "%s is offline."
#~ msgstr "%s さんはオフラインです。"
#~ msgid "%s is online."
#~ msgstr "%s さんはオンラインです。"
#~ msgid "%s is busy."
#~ msgstr "%s さんは取り込み中です。"
#~ msgid "The algorithm used to layout thumbnails in the overview. 'grid' to use the default grid based algorithm, 'natural' to use another one that reflects more the position and size of the actual window"
#~ msgstr "オーバービュー・モードでウィンドウのサムネイルを配置する際のアルゴリズムです。指定可能な値: 'grid' (原則的に格子状に配置していくアルゴリズム)、'natural' (ウィンドウの実際の位置や大きさを考慮して配置していくアルゴリズム)"
#~ msgid "Window placement strategy"
#~ msgstr "ウィンドウを配置するアルゴリズム"
#~ msgid "Configure display settings..."
#~ msgstr "ディスプレイの設定..."

View File

@@ -4,14 +4,14 @@
# pomóc w jego rozwijaniu i pielęgnowaniu, napisz do nas:
# gnomepl@aviary.pl
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Piotr Drąg <piotrdrag@gmail.com>, 2011-2012.
# Aviary.pl <gnomepl@aviary.pl>, 2011-2012.
# Piotr Drąg <piotrdrag@gmail.com>, 2011-2013.
# Aviary.pl <gnomepl@aviary.pl>, 2011-2013.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-12-06 22:34+0100\n"
"PO-Revision-Date: 2012-12-06 22:35+0100\n"
"POT-Creation-Date: 2013-02-06 02:06+0100\n"
"PO-Revision-Date: 2013-02-06 02:07+0100\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <gnomepl@aviary.pl>\n"
"Language: pl\n"
@@ -40,37 +40,23 @@ msgstr "Klasyczna powłoka GNOME"
msgid "Window management and application launching"
msgstr "Zarządzanie oknami i uruchamianie programów"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "The application icon mode."
msgstr "Tryb ikon programów."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'."
msgstr ""
"Konfiguruje, jak wyświetlać okna w przełączniku. Prawidłowe możliwości to "
"\"thumbnail-only\" (wyświetla miniaturę okna), \"app-icon-only\" (wyświetla "
"tylko ikonę programu) lub \"both\" (wyświetla oba)."
#: ../extensions/alternate-tab/prefs.js:26
#: ../extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Tylko miniatury"
#: ../extensions/alternate-tab/prefs.js:27
#: ../extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Tylko ikony programów"
#: ../extensions/alternate-tab/prefs.js:28
#: ../extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Miniatura i ikona programu"
#: ../extensions/alternate-tab/prefs.js:43
#: ../extensions/alternate-tab/prefs.js:37
msgid "Present windows as"
msgstr "Wyświetlanie okien jako"
#: ../extensions/alternate-tab/prefs.js:68
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "Wyświetlanie tylko okien w bieżącym obszarze roboczym"
@@ -103,6 +89,18 @@ msgstr "Włączenie hibernacji"
msgid "Control the visibility of the Hibernate menu item"
msgstr "Kontrola widoczności pozycji \"Hibernuj\" menu"
#: ../extensions/apps-menu/extension.js:50
msgid "Activities Overview"
msgstr "Ekran podglądu"
#: ../extensions/apps-menu/extension.js:103
msgid "Favorites"
msgstr "Ulubione"
#: ../extensions/apps-menu/extension.js:197
msgid "Applications"
msgstr "Programy"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr "Lista programów i obszarów roboczych"
@@ -209,22 +207,10 @@ msgstr ""
"powłokę. Zmiana tego ustawienia wymaga ponownego uruchomienia powłoki, aby "
"uwzględnić zmiany."
#: ../extensions/places-menu/extension.js:46
#: ../extensions/places-menu/extension.js:57
msgid "Places"
msgstr "Miejsca"
#: ../extensions/places-menu/extension.js:47
msgid "Devices"
msgstr "Urządzenia"
#: ../extensions/places-menu/extension.js:48
msgid "Bookmarks"
msgstr "Zakładki"
#: ../extensions/places-menu/extension.js:49
msgid "Network"
msgstr "Sieć"
#: ../extensions/places-menu/placeDisplay.js:48
#, c-format
msgid "Failed to launch \"%s\""
@@ -258,6 +244,30 @@ msgstr "Nazwa motywu"
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Nazwa motywu do wczytania z katalogu ~/.themes/name/gnome-shell"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1
msgid "When to group windows"
msgstr "Kiedy grupować okna"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are \"never\" and \"always\"."
msgstr ""
"Określa, kiedy grupować okna tego samego programu na liście okien. Możliwe "
"wartości to \"never\" i \"always\"."
#: ../extensions/window-list/prefs.js:30
msgid "Window Grouping"
msgstr "Grupowanie okien"
#: ../extensions/window-list/prefs.js:49
msgid "Never group windows"
msgstr "Bez grupowania okien"
#: ../extensions/window-list/prefs.js:50
msgid "Always group windows"
msgstr "Zawsze grupowanie okien"
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Wskaźnik obszaru roboczego"