pax_global_header00006660000000000000000000000064132604752330014517gustar00rootroot0000000000000052 comment=651234d42d1c94240b4aa528dfddf6f890d2f8a7 dash-to-dock-extensions.gnome.org-v63/000077500000000000000000000000001326047523300200435ustar00rootroot00000000000000dash-to-dock-extensions.gnome.org-v63/.gitignore000066400000000000000000000001211326047523300220250ustar00rootroot00000000000000.~ *~ gschemas.compiled dash-to-dock@micxgx.gmail.com.zip *.mo po/dashtodock.pot dash-to-dock-extensions.gnome.org-v63/COPYING000066400000000000000000000431111326047523300210760ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. dash-to-dock-extensions.gnome.org-v63/Makefile000066400000000000000000000057361326047523300215160ustar00rootroot00000000000000# Basic Makefile UUID = dash-to-dock@micxgx.gmail.com BASE_MODULES = extension.js stylesheet.css metadata.json COPYING README.md EXTRA_MODULES = convenience.js dash.js docking.js appIcons.js appIconIndicators.js launcherAPI.js windowPreview.js intellihide.js prefs.js theming.js utils.js Settings.ui EXTRA_MEDIA = logo.svg glossy.svg highlight_stacked_bg.svg highlight_stacked_bg_h.svg TOLOCALIZE = prefs.js appIcons.js MSGSRC = $(wildcard po/*.po) ifeq ($(strip $(DESTDIR)),) INSTALLTYPE = local INSTALLBASE = $(HOME)/.local/share/gnome-shell/extensions else INSTALLTYPE = system SHARE_PREFIX = $(DESTDIR)/usr/share INSTALLBASE = $(SHARE_PREFIX)/gnome-shell/extensions endif INSTALLNAME = dash-to-dock@micxgx.gmail.com # The command line passed variable VERSION is used to set the version string # in the metadata and in the generated zip-file. If no VERSION is passed, the # current commit SHA1 is used as version number in the metadata while the # generated zip file has no string attached. ifdef VERSION VSTRING = _v$(VERSION) else VERSION = $(shell git rev-parse HEAD) VSTRING = endif all: extension clean: rm -f ./schemas/gschemas.compiled extension: ./schemas/gschemas.compiled $(MSGSRC:.po=.mo) ./schemas/gschemas.compiled: ./schemas/org.gnome.shell.extensions.dash-to-dock.gschema.xml glib-compile-schemas ./schemas/ potfile: ./po/dashtodock.pot mergepo: potfile for l in $(MSGSRC); do \ msgmerge -U $$l ./po/dashtodock.pot; \ done; ./po/dashtodock.pot: $(TOLOCALIZE) Settings.ui mkdir -p po xgettext -k --keyword=__ --keyword=N__ --add-comments='Translators:' -o po/dashtodock.pot --package-name "Dash to Dock" $(TOLOCALIZE) intltool-extract --type=gettext/glade Settings.ui xgettext -k --keyword=_ --keyword=N_ --join-existing -o po/dashtodock.pot Settings.ui.h ./po/%.mo: ./po/%.po msgfmt -c $< -o $@ install: install-local install-local: _build rm -rf $(INSTALLBASE)/$(INSTALLNAME) mkdir -p $(INSTALLBASE)/$(INSTALLNAME) cp -r ./_build/* $(INSTALLBASE)/$(INSTALLNAME)/ ifeq ($(INSTALLTYPE),system) # system-wide settings and locale files rm -r $(INSTALLBASE)/$(INSTALLNAME)/schemas $(INSTALLBASE)/$(INSTALLNAME)/locale mkdir -p $(SHARE_PREFIX)/glib-2.0/schemas $(SHARE_PREFIX)/locale cp -r ./schemas/*gschema.* $(SHARE_PREFIX)/glib-2.0/schemas cp -r ./_build/locale/* $(SHARE_PREFIX)/locale endif -rm -fR _build echo done zip-file: _build cd _build ; \ zip -qr "$(UUID)$(VSTRING).zip" . mv _build/$(UUID)$(VSTRING).zip ./ -rm -fR _build _build: all -rm -fR ./_build mkdir -p _build cp $(BASE_MODULES) $(EXTRA_MODULES) _build mkdir -p _build/media cd media ; cp $(EXTRA_MEDIA) ../_build/media/ mkdir -p _build/schemas cp schemas/*.xml _build/schemas/ cp schemas/gschemas.compiled _build/schemas/ mkdir -p _build/locale for l in $(MSGSRC:.po=.mo) ; do \ lf=_build/locale/`basename $$l .mo`; \ mkdir -p $$lf; \ mkdir -p $$lf/LC_MESSAGES; \ cp $$l $$lf/LC_MESSAGES/dashtodock.mo; \ done; sed -i 's/"version": -1/"version": "$(VERSION)"/' _build/metadata.json; dash-to-dock-extensions.gnome.org-v63/README.md000066400000000000000000000034721326047523300213300ustar00rootroot00000000000000# Dash to Dock ![screenshot](https://github.com/micheleg/dash-to-dock/raw/master/media/screenshot.jpg) ## A dock for the GNOME Shell This extension enhances the dash moving it out of the overview and transforming it in a dock for an easier launching of applications and a faster switching between windows and desktops without having to leave the desktop view. For installation instructions and more information visit [https://micheleg.github.io/dash-to-dock/](https://micheleg.github.io/dash-to-dock/). ## Installation from source The extension can be installed directly from source, either for the convenience of using git or to test the latest development version. Clone the desired branch with git
git clone https://github.com/micheleg/dash-to-dock.git
or download the branch from github. A simple Makefile is included. Then run
make
make install
to install the extension in your home directory. A Shell reload is required Alt+F2 r Enter and the extension has to be enabled with *gnome-tweak-tool* or with *dconf*. ## Bug Reporting Bugs should be reported to the Github bug tracker [https://github.com/micheleg/dash-to-dock/issues](https://github.com/micheleg/dash-to-dock/issues). ## License Dash to Dock Gnome Shell extension is distributed under the terms of the GNU General Public License, version 2 or later. See the COPYING file for details. ## Donations You can Flattr this or PayPal — The safer, easier way to pay online. dash-to-dock-extensions.gnome.org-v63/Settings.ui000066400000000000000000005401501326047523300222070ustar00rootroot00000000000000 1 0.050000000000000003 0.25 True False 12 12 12 12 vertical True False 0 in True False none 100 80 True True True False 12 12 12 12 32 True False True When set to minimize, double clicking minimizes all the windows of the application. True 40 0 0 1 True False True Shift+Click action 0 0 0 True False center Raise window Minimize window Launch new instance Cycle through windows Minimize or overview Show window previews Minimize or show previews Quit 1 0 2 100 80 True True True False 12 12 12 12 32 True False True Behavior for Middle-Click. True 40 0 0 1 True False True Middle-Click action 0 0 0 True False center Raise window Minimize window Launch new instance Cycle through windows Minimize or overview Show window previews Minimize or show previews Quit 1 0 2 100 80 True True True False 12 12 12 12 32 True False True Behavior for Shift+Middle-Click. True 40 0 0 1 True False True Shift+Middle-Click action 0 0 0 True False center Raise window Minimize window Launch new instance Cycle through windows Minimize or overview Show window previews Minimize or show previews Quit 1 0 2 False True 0 1 0.01 0.10000000000000001 0.33000000000000002 1 0.01 0.10000000000000001 10 1 5 True False 12 12 12 12 vertical True False 0 in True False none 100 80 True True True False 12 12 12 12 vertical 12 True False 32 True False center Enable Unity7 like glossy backlit items 0 True True 0 True True center False True 1 False True 0 True False True False start Use dominant color True True 0 True True False True 1 False True 1 True False 32 True True 1 0 True False True Customize indicator style fill 0 0 0 False True 2 True False 1 vertical 12 True False 32 True False Color 0 True True 0 True True True False True 1 False True 0 True False 32 True False Border color 0 True True 0 True True True False True 1 False True 1 True False 32 True False Border width 0 True True 0 True True dot_border_width_adjustment False True 1 False True 2 False True 3 False True 0 1 0.050000000000000003 0.25 16 128 1 10 True True 6 6 6 6 True False 24 24 24 24 vertical 24 True False 0 in True False none True True True False 12 12 12 12 32 True False True Show the dock on 0 0 0 True False center 1 0 Show on all monitors. True True False 12 0 True 0 2 2 100 True True True False 12 12 12 12 32 True False True Position on screen 0 False True 0 True False 32 Left True True False end center 0 True False True 0 Bottom True True False center 0 True position_left_button False True 1 Top True True False center 0 bottom True position_left_button False True 2 Right True True False center 0 True position_left_button False True 3 False True 1 False True 0 True False 0 in True False none 100 80 True True True False 12 12 12 12 32 True False True Hide the dock when it obstructs a window of the current application. More refined settings are available. True 0 0 1 True False True Intelligent autohide 0 0 0 True False 6 True True True center center 0.46000000834465027 True False emblem-system-symbolic False True 0 True True end center False True 1 1 0 2 False True 1 True False 0 in True False none 100 80 True True True False 12 12 12 12 32 True False Dock size limit 0 0 0 True True baseline True dock_size_adjustment 0 2 right 1 0 Panel mode: extend to the screen edge True True False 12 0 True 0 1 2 True True True False 12 12 12 12 32 True False Icon size limit 0 0 0 True True baseline True icon_size_adjustment 1 0 right 1 0 Fixed icon size: scroll to reveal other icons True True False 12 0 True 0 1 2 False True 2 True False Position and size False True False 24 24 24 24 vertical 24 True False 0 in True False none True True True False 12 12 12 12 32 True True end center 1 0 True False True Show favorite applications 0 0 0 True True True False 12 12 12 12 32 True True end center 1 0 True False True Show running applications 0 0 0 Isolate workspaces. True True False 12 0 True 0 2 2 Isolate monitors. True True False 12 0 True 0 3 2 True True False 3 0 True True False Show open windows previews. True 0 1 2 True True True False 12 12 12 12 32 True True end center 1 0 2 True False True If disabled, these settings are accessible from gnome-tweak-tool or the extension website. True 0 0 1 True False True Show <i>Applications</i> icon True 0 0 0 Move the applications button at the beginning of the dock. True True False 12 0 True 0 2 2 True True False 3 0 0.43000000715255737 True True False Animate <i>Show Applications</i>. True 0 3 2 False True 0 1 True False Launchers 1 False True False 24 24 24 24 vertical 24 True False 0 in True False none True True True False 12 12 12 12 32 True False True Enable Super+(0-9) as shortcuts to activate apps. It can also be used together with Shift and Ctrl. True True 0 0 1 True False True Use keyboard shortcuts to activate apps 0 0 0 True False 6 True True True center center 0.46000000834465027 True False emblem-system-symbolic False True 0 True True end center False True 1 1 0 2 False True 1 True False 0 in True False none True True True False 12 12 12 12 32 True False True Behaviour when clicking on the icon of a running application. True 0 0 1 True False True Click action 0 0 0 True False 6 True True True center True False emblem-system-symbolic False True 0 True False center Raise window Minimize Launch new instance Cycle through windows Minimize or overview Show window previews Minimize or show previews False True 1 1 0 2 False True 2 True False 0 in True False none True True True False 12 12 12 12 32 True False True Behaviour when scrolling on the icon of an application. True 0 0 1 True False True Scroll action 0 0 0 True False 6 True False center Do nothing Cycle through windows Switch workspace False True 1 1 0 2 False True 3 2 True False Behavior 2 False True False 24 24 24 24 vertical 24 True False 0 in True True none True True True False 12 12 12 12 32 True False True Few customizations meant to integrate the dock with the default GNOME theme. Alternatively, specific options can be enabled below. True 0 0 1 True False True Use built-in theme 0 0 0 True True end center 1 0 2 False True 0 True False 0 in True False none True True True False 12 12 12 12 32 True True end center 1 0 2 True False True Save space reducing padding and border radius. 0 0 1 True False True Shrink the dash 0 0 0 True True True False 12 12 12 12 32 True False True Customize windows counter indicators 0 0 0 True False 6 True True True center center 0.46000000834465027 True False emblem-system-symbolic False True 0 True False Default Dots Squares Dashes Segmented Solid Ciliora Metro False True 1 1 0 2 True True True False 12 12 12 12 32 True False True Set the background color for the dash. True 0 0 1 True False True Customize the dash color 0 0 0 True False 6 True True True center center 0.46000000834465027 False True 1 True True end center False True 1 1 0 2 True True True False vertical True False 12 12 12 12 32 True False True Tune the dash background opacity. 0 0 1 True False True Customize opacity 0 0 0 True False 6 True True True center center True False emblem-system-symbolic False True 0 True False center Default Fixed Adaptive Dynamic False True 1 1 0 2 False True 0 True False 12 12 12 12 32 True False Opacity False True 0 True True custom_opacity_adjustement on False 0 0 2 right True True 1 False True 1 100 80 True True True False 32 True False center 12 Force straight corner 0 True True 0 True True center 3 False True 12 1 False True 1 3 True False Appearance 3 False False 24 24 True True vertical 5 False True 10 0 True False <b>Dash to Dock</b> True False True 1 True False center True False end version: False True 0 True False start ... False True 1 False True 2 True False Moves the dash out of the overview transforming it in a dock center True False True 3 True False center 5 True False Created by False True 0 True True Michele (<a href="mailto:micxgx@gmail.com">micxgx@gmail.com</a>) True False True 1 False True 4 Webpage True True True center none https://micheleg.github.io/dash-to-dock/ False True 5 True True end <span size="small">This program comes with ABSOLUTELY NO WARRANTY. See the <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, version 2 or later</a> for details.</span> True center True True True 6 4 True False About 4 False 1 0.01 0.10000000000000001 1 0.01 0.10000000000000001 True False 12 12 12 12 vertical True False 0 in True False none 100 80 True True True False 12 12 12 12 vertical 12 True False 32 True True 1 0 True False True Customize minimum and maximum opacity values fill 0 0 0 False True 0 True False 12 12 12 12 32 True False Minimum opacity False True 0 True True min_opacity_adjustement on False 0 0 2 right True True 1 False True 1 True False 12 12 12 12 32 True False Maximum opacity False True 0 True True max_opacity_adjustement on False 0 0 2 right True True 1 False True 1 False True 0 1000 50 250 10 0.25 1 True False 12 12 12 12 vertical True False 0 in True False none 100 80 True True True False 12 12 12 12 32 True True end center 1 0 2 True False True Number overlay 0 0 0 True False Temporarily show the application numbers over the icons, corresponding to the shortcut. True 40 0 0 1 100 80 True True True False 12 12 12 12 32 True True end center 1 0 2 True False True Show the dock if it is hidden 0 0 0 True False If using autohide, the dock will appear for a short time when triggering the shortcut. True 40 0 0 1 100 80 True True True False 12 12 12 12 32 False center 12 1 0 True False True Shortcut for the options above 0 0 0 True False Syntax: <Shift>, <Ctrl>, <Alt>, <Super> True 40 0 0 1 True True True False 12 12 12 12 True 6 32 True True end shortcut_time_adjustment 3 1 0 True False True Hide timeout (s) 0 0 0 False True 0 1 0.050000000000000003 0.25 True False 12 12 12 12 vertical True False 0 in True False none True True True False 12 12 12 12 32 True False True Show the dock by mouse hover on the screen edge. True 0 0 1 True False True Autohide 0 0 0 True True end center 1 0 2 Push to show: require pressure to show the dock True True False 0 True 0 3 2 Enable in fullscreen mode True True False 12 0 True 0 2 2 True True True False 12 12 12 12 32 True False True Show the dock when it doesn't obstruct application windows. True 0 0 1 True False True Dodge windows 0 0 0 True True end center 1 0 2 True False vertical All windows True True False 12 0 True True False True 0 Only focused application's windows True True False 0 True True all_windows_radio_button False True 1 Only maximized windows True True False 0 True True all_windows_radio_button False True 2 0 2 2 True True True False 12 12 12 12 True 6 32 True True end animation_time_adjustment 3 1 0 True False True Animation duration (s) 0 0 0 True True end hide_timeout_adjustment 3 1 1 True True end show_timeout_adjustment 3 1 2 True True 0.000 pressure_threshold_adjustment 1 3 True False True Hide timeout (s) 0 0 1 True False True Show timeout (s) 0 0 2 True False True Pressure threshold 0 0 3 False True 0 dash-to-dock-extensions.gnome.org-v63/appIconIndicators.js000066400000000000000000001137241326047523300240220ustar00rootroot00000000000000const Cogl = imports.gi.Cogl; const Cairo = imports.cairo; const Clutter = imports.gi.Clutter; const GdkPixbuf = imports.gi.GdkPixbuf const Gio = imports.gi.Gio; const Gtk = imports.gi.Gtk; const Lang = imports.lang; const Pango = imports.gi.Pango; const Shell = imports.gi.Shell; const St = imports.gi.St; const Util = imports.misc.util; const Me = imports.misc.extensionUtils.getCurrentExtension(); const Utils = Me.imports.utils; let tracker = Shell.WindowTracker.get_default(); const RunningIndicatorStyle = { DEFAULT: 0, DOTS: 1, SQUARES: 2, DASHES: 3, SEGMENTED: 4, SOLID: 5, CILIORA: 6, METRO: 7 }; const MAX_WINDOWS_CLASSES = 4; /* * This is the main indicator class to be used. The desired bahviour is * obtained by composing the desired classes below based on the settings. * */ var AppIconIndicator = new Lang.Class({ Name: 'DashToDock.AppIconIndicator', _init: function(source, settings) { this._indicators = []; // Unity indicators always enabled for now let unityIndicator = new UnityIndicator(source, settings); this._indicators.push(unityIndicator); // Choose the style for the running indicators let runningIndicator = null; let runningIndicatorStyle; if (settings.get_boolean('apply-custom-theme' )) { runningIndicatorStyle = RunningIndicatorStyle.DOTS; } else { runningIndicatorStyle = settings.get_enum('running-indicator-style'); } switch (runningIndicatorStyle) { case RunningIndicatorStyle.DEFAULT: runningIndicator = new RunningIndicatorBase(source, settings); break; case RunningIndicatorStyle.DOTS: runningIndicator = new RunningIndicatorDots(source, settings); break; case RunningIndicatorStyle.SQUARES: runningIndicator = new RunningIndicatorSquares(source, settings); break; case RunningIndicatorStyle.DASHES: runningIndicator = new RunningIndicatorDashes(source, settings); break; case RunningIndicatorStyle.SEGMENTED: runningIndicator = new RunningIndicatorSegmented(source, settings); break; case RunningIndicatorStyle.SOLID: runningIndicator = new RunningIndicatorSolid(source, settings); break; case RunningIndicatorStyle.CILIORA: runningIndicator = new RunningIndicatorCiliora(source, settings); break; case RunningIndicatorStyle.METRO: runningIndicator = new RunningIndicatorMetro(source, settings); break; default: runningIndicator = new RunningIndicatorBase(source, settings); } this._indicators.push(runningIndicator); }, update: function() { for (let i=0; i 0) this._isFocused = true; else this._isFocused = false; // In the case of workspace isolation, we need to hide the dots of apps with // no windows in the current workspace if (this._source.app.state != Shell.AppState.STOPPED && this._nWindows > 0) this._isRunning = true; else this._isRunning = false; this._updateCounterClass(); this._updateFocusClass(); this._updateDefaultDot(); }, _updateCounterClass: function() { for (let i = 1; i <= MAX_WINDOWS_CLASSES; i++) { let className = 'running' + i; if (i != this._nWindows) this._source.actor.remove_style_class_name(className); else this._source.actor.add_style_class_name(className); } }, _updateFocusClass: function() { if (this._isFocused) this._source.actor.add_style_class_name('focused'); else this._source.actor.remove_style_class_name('focused'); }, _updateDefaultDot: function() { if (this._isRunning) this._source._dot.show(); else this._source._dot.hide(); }, _hideDefaultDot: function() { // I use opacity to hide the default dot because the show/hide function // are used by the parent class. this._source._dot.opacity = 0; }, _restoreDefaultDot: function() { this._source._dot.opacity = 255; }, _enableBacklight: function() { let colorPalette = this._dominantColorExtractor._getColorPalette(); // Fallback if (colorPalette === null) { this._source._iconContainer.set_style( 'border-radius: 5px;' + 'background-gradient-direction: vertical;' + 'background-gradient-start: #e0e0e0;' + 'background-gradient-end: darkgray;' ); return; } this._source._iconContainer.set_style( 'border-radius: 5px;' + 'background-gradient-direction: vertical;' + 'background-gradient-start: ' + colorPalette.original + ';' + 'background-gradient-end: ' + colorPalette.darker + ';' ); }, _disableBacklight: function() { this._source._iconContainer.set_style(null); }, destroy: function() { this.parent(); this._disableBacklight(); // Remove glossy background if the children still exists if (this._source._iconContainer.get_children().length > 1) this._source._iconContainer.get_children()[1].set_style(null); this._restoreDefaultDot(); } }); const RunningIndicatorDots = new Lang.Class({ Name: 'DashToDock.RunningIndicatorDots', Extends: RunningIndicatorBase, _init: function(source, settings) { this.parent(source, settings) this._hideDefaultDot(); this._area = new St.DrawingArea({x_expand: true, y_expand: true}); // We draw for the bottom case and rotate the canvas for other placements //set center of rotatoins to the center this._area.set_pivot_point(0.5, 0.5); // prepare transformation matrix let m = new Cogl.Matrix(); m.init_identity(); switch (this._side) { case St.Side.TOP: m.xx = -1; m.rotate(180, 0, 0, 1); break case St.Side.BOTTOM: // nothing break; case St.Side.LEFT: m.yy = -1; m.rotate(90, 0, 0, 1); break; case St.Side.RIGHT: m.rotate(-90, 0, 0, 1); break } this._area.set_transform(m); this._area.connect('repaint', Lang.bind(this, this._updateIndicator)); this._source._iconContainer.add_child(this._area); let keys = ['custom-theme-running-dots-color', 'custom-theme-running-dots-border-color', 'custom-theme-running-dots-border-width', 'custom-theme-customize-running-dots', 'unity-backlit-items', 'running-indicator-dominant-color']; keys.forEach(function(key) { this._signalsHandler.add([ this._settings, 'changed::' + key, Lang.bind(this, this.update) ]); }, this); // Apply glossy background // TODO: move to enable/disableBacklit to apply itonly to the running apps? // TODO: move to css class for theming support let path = imports.misc.extensionUtils.getCurrentExtension().path; this._glossyBackgroundStyle = 'background-image: url(\'' + path + '/media/glossy.svg\');' + 'background-size: contain;'; }, update: function() { this.parent(); // Enable / Disable the backlight of running apps if (!this._settings.get_boolean('apply-custom-theme') && this._settings.get_boolean('unity-backlit-items')) { this._source._iconContainer.get_children()[1].set_style(this._glossyBackgroundStyle); if (this._isRunning) this._enableBacklight(); else this._disableBacklight(); } else { this._disableBacklight(); this._source._iconContainer.get_children()[1].set_style(null); } if (this._area) this._area.queue_repaint(); }, _computeStyle: function() { let [width, height] = this._area.get_surface_size(); this._width = height; this._height = width; // By defaut re-use the style - background color, and border width and color - // of the default dot let themeNode = this._source._dot.get_theme_node(); this._borderColor = themeNode.get_border_color(this._side); this._borderWidth = themeNode.get_border_width(this._side); this._bodyColor = themeNode.get_background_color(); if (!this._settings.get_boolean('apply-custom-theme')) { // Adjust for the backlit case if (this._settings.get_boolean('unity-backlit-items')) { // Use dominant color for dots too if the backlit is enables let colorPalette = this._dominantColorExtractor._getColorPalette(); // Slightly adjust the styling this._borderWidth = 2; if (colorPalette !== null) { this._borderColor = Clutter.color_from_string(colorPalette.lighter)[1] ; this._bodyColor = Clutter.color_from_string(colorPalette.darker)[1]; } else { // Fallback this._borderColor = Clutter.color_from_string('white')[1]; this._bodyColor = Clutter.color_from_string('gray')[1]; } } // Apply dominant color if requested if (this._settings.get_boolean('running-indicator-dominant-color')) { let colorPalette = this._dominantColorExtractor._getColorPalette(); if (colorPalette !== null) { this._bodyColor = Clutter.color_from_string(colorPalette.original)[1]; } } // Finally, use customize style if requested if (this._settings.get_boolean('custom-theme-customize-running-dots')) { this._borderColor = Clutter.color_from_string(this._settings.get_string('custom-theme-running-dots-border-color'))[1]; this._borderWidth = this._settings.get_int('custom-theme-running-dots-border-width'); this._bodyColor = Clutter.color_from_string(this._settings.get_string('custom-theme-running-dots-color'))[1]; } } // Define the radius as an arbitrary size, but keep large enough to account // for the drawing of the border. this._radius = Math.max(this._width/22, this._borderWidth/2); this._padding = 0; // distance from the margin this._spacing = this._radius + this._borderWidth; // separation between the dots }, _updateIndicator: function() { let area = this._area; let cr = this._area.get_context(); this._computeStyle(); this._drawIndicator(cr); cr.$dispose(); }, _drawIndicator: function(cr) { // Draw the required numbers of dots let n = this._nWindows; cr.setLineWidth(this._borderWidth); Clutter.cairo_set_source_color(cr, this._borderColor); // draw for the bottom case: cr.translate((this._width - (2*n)*this._radius - (n-1)*this._spacing)/2, this._height - this._padding); for (let i = 0; i < n; i++) { cr.newSubPath(); cr.arc((2*i+1)*this._radius + i*this._spacing, -this._radius - this._borderWidth/2, this._radius, 0, 2*Math.PI); } cr.strokePreserve(); Clutter.cairo_set_source_color(cr, this._bodyColor); cr.fill(); }, destroy: function() { this.parent(); this._area.destroy(); } }); // Adapted from dash-to-panel by Jason DeRose // https://github.com/jderose9/dash-to-panel const RunningIndicatorCiliora = new Lang.Class({ Name: 'DashToDock.RunningIndicatorCiliora', Extends: RunningIndicatorDots, _drawIndicator: function(cr) { if (this._isRunning) { let size = Math.max(this._width/20, this._borderWidth); let spacing = size; // separation between the dots let lineLength = this._width - (size*(this._nWindows-1)) - (spacing*(this._nWindows-1)); let padding = this._borderWidth; // For the backlit case here we don't want the outer border visible if (this._settings.get_boolean('unity-backlit-items') && !this._settings.get_boolean('custom-theme-customize-running-dots')) padding = 0; let yOffset = this._height - padding - size; cr.setLineWidth(this._borderWidth); Clutter.cairo_set_source_color(cr, this._borderColor); cr.translate(0, yOffset); cr.newSubPath(); cr.rectangle(0, 0, lineLength, size); for (let i = 1; i < this._nWindows; i++) { cr.newSubPath(); cr.rectangle(lineLength + (i*spacing) + ((i-1)*size), 0, size, size); } cr.strokePreserve(); Clutter.cairo_set_source_color(cr, this._bodyColor); cr.fill(); } } }); // Adapted from dash-to-panel by Jason DeRose // https://github.com/jderose9/dash-to-panel const RunningIndicatorSegmented = new Lang.Class({ Name: 'DashToDock.RunningIndicatorSegmented', Extends: RunningIndicatorDots, _drawIndicator: function(cr) { if (this._isRunning) { let size = Math.max(this._width/20, this._borderWidth); let spacing = Math.ceil(this._width/18); // separation between the dots let dashLength = Math.ceil((this._width - ((this._nWindows-1)*spacing))/this._nWindows); let lineLength = this._width - (size*(this._nWindows-1)) - (spacing*(this._nWindows-1)); let padding = this._borderWidth; // For the backlit case here we don't want the outer border visible if (this._settings.get_boolean('unity-backlit-items') && !this._settings.get_boolean('custom-theme-customize-running-dots')) padding = 0; let yOffset = this._height - padding - size; cr.setLineWidth(this._borderWidth); Clutter.cairo_set_source_color(cr, this._borderColor); cr.translate(0, yOffset); for (let i = 0; i < this._nWindows; i++) { cr.newSubPath(); cr.rectangle(i*dashLength + i*spacing, 0, dashLength, size); } cr.strokePreserve(); Clutter.cairo_set_source_color(cr, this._bodyColor); cr.fill() } } }); // Adapted from dash-to-panel by Jason DeRose // https://github.com/jderose9/dash-to-panel const RunningIndicatorSolid = new Lang.Class({ Name: 'DashToDock.RunningIndicatorSolid', Extends: RunningIndicatorDots, _drawIndicator: function(cr) { if (this._isRunning) { let size = Math.max(this._width/20, this._borderWidth); let padding = this._borderWidth; // For the backlit case here we don't want the outer border visible if (this._settings.get_boolean('unity-backlit-items') && !this._settings.get_boolean('custom-theme-customize-running-dots')) padding = 0; let yOffset = this._height - padding - size; cr.setLineWidth(this._borderWidth); Clutter.cairo_set_source_color(cr, this._borderColor); cr.translate(0, yOffset); cr.newSubPath(); cr.rectangle(0, 0, this._width, size); cr.strokePreserve(); Clutter.cairo_set_source_color(cr, this._bodyColor); cr.fill(); } } }); // Adapted from dash-to-panel by Jason DeRose // https://github.com/jderose9/dash-to-panel const RunningIndicatorSquares = new Lang.Class({ Name: 'DashToDock.RunningIndicatorSquares', Extends: RunningIndicatorDots, _drawIndicator: function(cr) { if (this._isRunning) { let size = Math.max(this._width/11, this._borderWidth); let padding = this._borderWidth; let spacing = Math.ceil(this._width/18); // separation between the dots let yOffset = this._height - padding - size; cr.setLineWidth(this._borderWidth); Clutter.cairo_set_source_color(cr, this._borderColor); cr.translate(Math.floor((this._width - this._nWindows*size - (this._nWindows-1)*spacing)/2), yOffset); for (let i = 0; i < this._nWindows; i++) { cr.newSubPath(); cr.rectangle(i*size + i*spacing, 0, size, size); } cr.strokePreserve(); Clutter.cairo_set_source_color(cr, this._bodyColor); cr.fill(); } } }); // Adapted from dash-to-panel by Jason DeRose // https://github.com/jderose9/dash-to-panel const RunningIndicatorDashes = new Lang.Class({ Name: 'DashToDock.RunningIndicatorDashes', Extends: RunningIndicatorDots, _drawIndicator: function(cr) { if (this._isRunning) { let size = Math.max(this._width/20, this._borderWidth); let padding = this._borderWidth; let spacing = Math.ceil(this._width/18); // separation between the dots let dashLength = Math.floor(this._width/4) - spacing; let yOffset = this._height - padding - size; cr.setLineWidth(this._borderWidth); Clutter.cairo_set_source_color(cr, this._borderColor); cr.translate(Math.floor((this._width - this._nWindows*dashLength - (this._nWindows-1)*spacing)/2), yOffset); for (let i = 0; i < this._nWindows; i++) { cr.newSubPath(); cr.rectangle(i*dashLength + i*spacing, 0, dashLength, size); } cr.strokePreserve(); Clutter.cairo_set_source_color(cr, this._bodyColor); cr.fill(); } } }); // Adapted from dash-to-panel by Jason DeRose // https://github.com/jderose9/dash-to-panel const RunningIndicatorMetro = new Lang.Class({ Name: 'DashToDock.RunningIndicatorMetro', Extends: RunningIndicatorDots, _init: function(source, settings) { this.parent(source, settings); this._source.actor.add_style_class_name('metro'); }, _drawIndicator: function(cr) { if (this._isRunning) { let size = Math.max(this._width/20, this._borderWidth); let padding = 0; // For the backlit case here we don't want the outer border visible if (this._settings.get_boolean('unity-backlit-items') && !this._settings.get_boolean('custom-theme-customize-running-dots')) padding = 0; let yOffset = this._height - padding - size; let n = this._nWindows; if(n <= 1) { cr.translate(0, yOffset); Clutter.cairo_set_source_color(cr, this._bodyColor); cr.newSubPath(); cr.rectangle(0, 0, this._width, size); cr.fill(); } else { let blackenedLength = (1/48)*this._width; // need to scale with the SVG for the stacked highlight let darkenedLength = this._isFocused ? (2/48)*this._width : (10/48)*this._width; let blackenedColor = this._bodyColor.shade(.3); let darkenedColor = this._bodyColor.shade(.7); cr.translate(0, yOffset); Clutter.cairo_set_source_color(cr, this._bodyColor); cr.newSubPath(); cr.rectangle(0, 0, this._width - darkenedLength - blackenedLength, size); cr.fill(); Clutter.cairo_set_source_color(cr, blackenedColor); cr.newSubPath(); cr.rectangle(this._width - darkenedLength - blackenedLength, 0, 1, size); cr.fill(); Clutter.cairo_set_source_color(cr, darkenedColor); cr.newSubPath(); cr.rectangle(this._width - darkenedLength, 0, darkenedLength, size); cr.fill(); } } }, destroy: function() { this.parent(); this._source.actor.remove_style_class_name('metro'); } }); /* * Unity like notification and progress indicators */ const UnityIndicator = new Lang.Class({ Name: 'DashToDock.UnityIndicator', Extends: IndicatorBase, _init: function(source, settings) { this.parent(source, settings); this._notificationBadgeLabel = new St.Label(); this._notificationBadgeBin = new St.Bin({ child: this._notificationBadgeLabel, x_align: St.Align.END, y_align: St.Align.START, x_expand: true, y_expand: true }); this._notificationBadgeLabel.add_style_class_name('notification-badge'); this._notificationBadgeCount = 0; this._notificationBadgeBin.hide(); this._source._iconContainer.add_child(this._notificationBadgeBin); this._source._iconContainer.connect('allocation-changed', Lang.bind(this, this.updateNotificationBadge)); this._remoteEntries = []; this._source.remoteModel.lookupById(this._source.app.id).forEach( Lang.bind(this, function(entry) { this.insertEntryRemote(entry); }) ); this._signalsHandler.add([ this._source.remoteModel, 'entry-added', Lang.bind(this, this._onLauncherEntryRemoteAdded) ], [ this._source.remoteModel, 'entry-removed', Lang.bind(this, this._onLauncherEntryRemoteRemoved) ]) }, _onLauncherEntryRemoteAdded: function(remoteModel, entry) { if (!entry || !entry.appId()) return; if (this._source && this._source.app && this._source.app.id == entry.appId()) { this.insertEntryRemote(entry); } }, _onLauncherEntryRemoteRemoved: function(remoteModel, entry) { if (!entry || !entry.appId()) return; if (this._source && this._source.app && this._source.app.id == entry.appId()) { this.removeEntryRemote(entry); } }, updateNotificationBadge: function() { let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; let [minWidth, natWidth] = this._source._iconContainer.get_preferred_width(-1); let logicalNatWidth = natWidth / scaleFactor; let font_size = Math.max(10, Math.round(logicalNatWidth / 5)); let margin_left = Math.round(logicalNatWidth / 4); this._notificationBadgeLabel.set_style( 'font-size: ' + font_size + 'px;' + 'margin-left: ' + margin_left + 'px;' ); this._notificationBadgeBin.width = Math.round(logicalNatWidth - margin_left); this._notificationBadgeLabel.clutter_text.ellipsize = Pango.EllipsizeMode.MIDDLE; }, _notificationBadgeCountToText: function(count) { if (count <= 9999) { return count.toString(); } else if (count < 1e5) { let thousands = count / 1e3; return thousands.toFixed(1).toString() + "k"; } else if (count < 1e6) { let thousands = count / 1e3; return thousands.toFixed(0).toString() + "k"; } else if (count < 1e8) { let millions = count / 1e6; return millions.toFixed(1).toString() + "M"; } else if (count < 1e9) { let millions = count / 1e6; return millions.toFixed(0).toString() + "M"; } else { let billions = count / 1e9; return billions.toFixed(1).toString() + "B"; } }, setNotificationBadge: function(count) { this._notificationBadgeCount = count; let text = this._notificationBadgeCountToText(count); this._notificationBadgeLabel.set_text(text); }, toggleNotificationBadge: function(activate) { if (activate && this._notificationBadgeCount > 0) { this.updateNotificationBadge(); this._notificationBadgeBin.show(); } else this._notificationBadgeBin.hide(); }, _showProgressOverlay: function() { if (this._progressOverlayArea) { this._updateProgressOverlay(); return; } this._progressOverlayArea = new St.DrawingArea({x_expand: true, y_expand: true}); this._progressOverlayArea.connect('repaint', Lang.bind(this, function() { this._drawProgressOverlay(this._progressOverlayArea); })); this._source._iconContainer.add_child(this._progressOverlayArea); this._updateProgressOverlay(); }, _hideProgressOverlay: function() { if (this._progressOverlayArea) this._progressOverlayArea.destroy(); this._progressOverlayArea = null; }, _updateProgressOverlay: function() { if (this._progressOverlayArea) this._progressOverlayArea.queue_repaint(); }, _drawProgressOverlay: function(area) { let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; let [surfaceWidth, surfaceHeight] = area.get_surface_size(); let cr = area.get_context(); let iconSize = this._source.icon.iconSize * scaleFactor; let x = Math.floor((surfaceWidth - iconSize) / 2); let y = Math.floor((surfaceHeight - iconSize) / 2); let lineWidth = Math.floor(1.0 * scaleFactor); let padding = Math.floor(iconSize * 0.05); let width = iconSize - 2.0*padding; let height = Math.floor(Math.min(18.0*scaleFactor, 0.20*iconSize)); x += padding; y += iconSize - height - padding; cr.setLineWidth(lineWidth); // Draw the outer stroke let stroke = new Cairo.LinearGradient(0, y, 0, y + height); let fill = null; stroke.addColorStopRGBA(0.5, 0.5, 0.5, 0.5, 0.1); stroke.addColorStopRGBA(0.9, 0.8, 0.8, 0.8, 0.4); Utils.drawRoundedLine(cr, x + lineWidth/2.0, y + lineWidth/2.0, width, height, true, true, stroke, fill); // Draw the background x += lineWidth; y += lineWidth; width -= 2.0*lineWidth; height -= 2.0*lineWidth; stroke = Cairo.SolidPattern.createRGBA(0.20, 0.20, 0.20, 0.9); fill = new Cairo.LinearGradient(0, y, 0, y + height); fill.addColorStopRGBA(0.4, 0.25, 0.25, 0.25, 1.0); fill.addColorStopRGBA(0.9, 0.35, 0.35, 0.35, 1.0); Utils.drawRoundedLine(cr, x + lineWidth/2.0, y + lineWidth/2.0, width, height, true, true, stroke, fill); // Draw the finished bar x += lineWidth; y += lineWidth; width -= 2.0*lineWidth; height -= 2.0*lineWidth; let finishedWidth = Math.ceil(this._progress * width); stroke = Cairo.SolidPattern.createRGBA(0.8, 0.8, 0.8, 1.0); fill = Cairo.SolidPattern.createRGBA(0.9, 0.9, 0.9, 1.0); if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) Utils.drawRoundedLine(cr, x + lineWidth/2.0 + width - finishedWidth, y + lineWidth/2.0, finishedWidth, height, true, true, stroke, fill); else Utils.drawRoundedLine(cr, x + lineWidth/2.0, y + lineWidth/2.0, finishedWidth, height, true, true, stroke, fill); cr.$dispose(); }, setProgress: function(progress) { this._progress = Math.min(Math.max(progress, 0.0), 1.0); this._updateProgressOverlay(); }, toggleProgressOverlay: function(activate) { if (activate) { this._showProgressOverlay(); } else { this._hideProgressOverlay(); } }, insertEntryRemote: function(remote) { if (!remote || this._remoteEntries.indexOf(remote) !== -1) return; this._remoteEntries.push(remote); this._selectEntryRemote(remote); }, removeEntryRemote: function(remote) { if (!remote || this._remoteEntries.indexOf(remote) == -1) return; this._remoteEntries.splice(this._remoteEntries.indexOf(remote), 1); if (this._remoteEntries.length > 0) { this._selectEntryRemote(this._remoteEntries[this._remoteEntries.length-1]); } else { this.setNotificationBadge(0); this.toggleNotificationBadge(false); this.setProgress(0); this.toggleProgressOverlay(false); } }, _selectEntryRemote: function(remote) { if (!remote) return; this._signalsHandler.removeWithLabel('entry-remotes'); this._signalsHandler.addWithLabel('entry-remotes', [ remote, 'count-changed', Lang.bind(this, (remote, value) => { this.setNotificationBadge(value); }) ], [ remote, 'count-visible-changed', Lang.bind(this, (remote, value) => { this.toggleNotificationBadge(value); }) ], [ remote, 'progress-changed', Lang.bind(this, (remote, value) => { this.setProgress(value); }) ], [ remote, 'progress-visible-changed', Lang.bind(this, (remote, value) => { this.toggleProgressOverlay(value); }) ]); this.setNotificationBadge(remote.count()); this.toggleNotificationBadge(remote.countVisible()); this.setProgress(remote.progress()); this.toggleProgressOverlay(remote.progressVisible()); } }); // We need an icons theme object, this is the only way I managed to get // pixel buffers that can be used for calculating the backlight color let themeLoader = null; // Global icon cache. Used for Unity7 styling. let iconCacheMap = new Map(); // Max number of items to store // We don't expect to ever reach this number, but let's put an hard limit to avoid // even the remote possibility of the cached items to grow indefinitely. const MAX_CACHED_ITEMS = 1000; // When the size exceed it, the oldest 'n' ones are deleted const BATCH_SIZE_TO_DELETE = 50; // The icon size used to extract the dominant color const DOMINANT_COLOR_ICON_SIZE = 64; // Compute dominant color frim the app icon. // The color is cached for efficiency. const DominantColorExtractor = new Lang.Class({ Name: 'DashToDock.DominantColorExtractor', _init: function(app) { this._app = app; }, /** * Try to get the pixel buffer for the current icon, if not fail gracefully */ _getIconPixBuf: function() { let iconTexture = this._app.create_icon_texture(16); if (themeLoader === null) { let ifaceSettings = new Gio.Settings({ schema: "org.gnome.desktop.interface" }); themeLoader = new Gtk.IconTheme(), themeLoader.set_custom_theme(ifaceSettings.get_string('icon-theme')); // Make sure the correct theme is loaded } // Unable to load the icon texture, use fallback if (iconTexture instanceof St.Icon === false) { return null; } iconTexture = iconTexture.get_gicon(); // Unable to load the icon texture, use fallback if (iconTexture === null) { return null; } if (iconTexture instanceof Gio.FileIcon) { // Use GdkPixBuf to load the pixel buffer from the provided file path return GdkPixbuf.Pixbuf.new_from_file(iconTexture.get_file().get_path()); } // Get the pixel buffer from the icon theme let icon_info = themeLoader.lookup_icon(iconTexture.get_names()[0], DOMINANT_COLOR_ICON_SIZE, 0); if (icon_info !== null) return icon_info.load_icon(); else return null; }, /** * The backlight color choosing algorithm was mostly ported to javascript from the * Unity7 C++ source of Canonicals: * https://bazaar.launchpad.net/~unity-team/unity/trunk/view/head:/launcher/LauncherIcon.cpp * so it more or less works the same way. */ _getColorPalette: function() { if (iconCacheMap.get(this._app.get_id())) { // We already know the answer return iconCacheMap.get(this._app.get_id()); } let pixBuf = this._getIconPixBuf(); if (pixBuf == null) return null; let pixels = pixBuf.get_pixels(), offset = 0; let total = 0, rTotal = 0, gTotal = 0, bTotal = 0; let resample_y = 1, resample_x = 1; // Resampling of large icons // We resample icons larger than twice the desired size, as the resampling // to a size s // DOMINANT_COLOR_ICON_SIZE < s < 2*DOMINANT_COLOR_ICON_SIZE, // most of the case exactly DOMINANT_COLOR_ICON_SIZE as the icon size is tipycally // a multiple of it. let width = pixBuf.get_width(); let height = pixBuf.get_height(); // Resample if (height >= 2* DOMINANT_COLOR_ICON_SIZE) resample_y = Math.floor(height/DOMINANT_COLOR_ICON_SIZE); if (width >= 2* DOMINANT_COLOR_ICON_SIZE) resample_x = Math.floor(width/DOMINANT_COLOR_ICON_SIZE); if (resample_x !==1 || resample_y !== 1) pixels = this._resamplePixels(pixels, resample_x, resample_y); // computing the limit outside the for (where it would be repeated at each iteration) // for performance reasons let limit = pixels.length; for (let offset = 0; offset < limit; offset+=4) { let r = pixels[offset], g = pixels[offset + 1], b = pixels[offset + 2], a = pixels[offset + 3]; let saturation = (Math.max(r,g, b) - Math.min(r,g, b)); let relevance = 0.1 * 255 * 255 + 0.9 * a * saturation; rTotal += r * relevance; gTotal += g * relevance; bTotal += b * relevance; total += relevance; } total = total * 255; let r = rTotal / total, g = gTotal / total, b = bTotal / total; let hsv = Utils.ColorUtils.RGBtoHSV(r * 255, g * 255, b * 255); if (hsv.s > 0.15) hsv.s = 0.65; hsv.v = 0.90; let rgb = Utils.ColorUtils.HSVtoRGB(hsv.h, hsv.s, hsv.v); // Cache the result. let backgroundColor = { lighter: Utils.ColorUtils.ColorLuminance(rgb.r, rgb.g, rgb.b, 0.2), original: Utils.ColorUtils.ColorLuminance(rgb.r, rgb.g, rgb.b, 0), darker: Utils.ColorUtils.ColorLuminance(rgb.r, rgb.g, rgb.b, -0.5) }; if (iconCacheMap.size >= MAX_CACHED_ITEMS) { //delete oldest cached values (which are in order of insertions) let ctr=0; for (let key of iconCacheMap.keys()) { if (++ctr > BATCH_SIZE_TO_DELETE) break; iconCacheMap.delete(key); } } iconCacheMap.set(this._app.get_id(), backgroundColor); return backgroundColor; }, /** * Downsample large icons before scanning for the backlight color to * improve performance. * * @param pixBuf * @param pixels * @param resampleX * @param resampleY * * @return []; */ _resamplePixels: function (pixels, resampleX, resampleY) { let resampledPixels = []; // computing the limit outside the for (where it would be repeated at each iteration) // for performance reasons let limit = pixels.length / (resampleX * resampleY) / 4; for (let i = 0; i < limit; i++) { let pixel = i * resampleX * resampleY; resampledPixels.push(pixels[pixel * 4]); resampledPixels.push(pixels[pixel * 4 + 1]); resampledPixels.push(pixels[pixel * 4 + 2]); resampledPixels.push(pixels[pixel * 4 + 3]); } return resampledPixels; }, })dash-to-dock-extensions.gnome.org-v63/appIcons.js000066400000000000000000001317361326047523300221700ustar00rootroot00000000000000// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; const GdkPixbuf = imports.gi.GdkPixbuf const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; const Signals = imports.signals; const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const St = imports.gi.St; const Mainloop = imports.mainloop; // Use __ () and N__() for the extension gettext domain, and reuse // the shell domain with the default _() and N_() const Gettext = imports.gettext.domain('dashtodock'); const __ = Gettext.gettext; const N__ = function(e) { return e }; const AppDisplay = imports.ui.appDisplay; const AppFavorites = imports.ui.appFavorites; const Dash = imports.ui.dash; const DND = imports.ui.dnd; const IconGrid = imports.ui.iconGrid; const Main = imports.ui.main; const PopupMenu = imports.ui.popupMenu; const Tweener = imports.ui.tweener; const Util = imports.misc.util; const Workspace = imports.ui.workspace; const Me = imports.misc.extensionUtils.getCurrentExtension(); const Utils = Me.imports.utils; const WindowPreview = Me.imports.windowPreview; const AppIconIndicators = Me.imports.appIconIndicators; let tracker = Shell.WindowTracker.get_default(); let DASH_ITEM_LABEL_SHOW_TIME = Dash.DASH_ITEM_LABEL_SHOW_TIME; const clickAction = { SKIP: 0, MINIMIZE: 1, LAUNCH: 2, CYCLE_WINDOWS: 3, MINIMIZE_OR_OVERVIEW: 4, PREVIEWS: 5, MINIMIZE_OR_PREVIEWS: 6, QUIT: 7 }; const scrollAction = { DO_NOTHING: 0, CYCLE_WINDOWS: 1, SWITCH_WORKSPACE: 2 }; let recentlyClickedAppLoopId = 0; let recentlyClickedApp = null; let recentlyClickedAppWindows = null; let recentlyClickedAppIndex = 0; let recentlyClickedAppMonitor = -1; /** * Extend AppIcon * * - Pass settings to the constructor and bind settings changes * - Apply a css class based on the number of windows of each application (#N); * - Customized indicators for running applications in place of the default "dot" style which is hidden (#N); * a class of the form "running#N" is applied to the AppWellIcon actor. * like the original .running one. * - Add a .focused style to the focused app * - Customize click actions. * - Update minimization animation target * - Update menu if open on windows change */ var MyAppIcon = new Lang.Class({ Name: 'DashToDock.AppIcon', Extends: AppDisplay.AppIcon, // settings are required inside. _init: function(settings, remoteModel, app, monitorIndex, iconParams) { // a prefix is required to avoid conflicting with the parent class variable this._dtdSettings = settings; this.monitorIndex = monitorIndex; this._signalsHandler = new Utils.GlobalSignalsHandler(); this.remoteModel = remoteModel; this._indicator = null; this.parent(app, iconParams); this._updateIndicatorStyle(); // Monitor windows-changes instead of app state. // Keep using the same Id and function callback (that is extended) if (this._stateChangedId > 0) { this.app.disconnect(this._stateChangedId); this._stateChangedId = 0; } this._windowsChangedId = this.app.connect('windows-changed', Lang.bind(this, this.onWindowsChanged)); this._focusAppChangeId = tracker.connect('notify::focus-app', Lang.bind(this, this._onFocusAppChanged)); // In Wayland sessions, this signal is needed to track the state of windows dragged // from one monitor to another. As this is triggered quite often (whenever a new winow // of any application opened or moved to a different desktop), // we restrict this signal to the case when 'isolate-monitors' is true, // and if there are at least 2 monitors. if (this._dtdSettings.get_boolean('isolate-monitors') && Main.layoutManager.monitors.length > 1) { this._signalsHandler.removeWithLabel('isolate-monitors'); this._signalsHandler.addWithLabel('isolate-monitors', [ global.screen, 'window-entered-monitor', Lang.bind(this, this._onWindowEntered) ]); } this._progressOverlayArea = null; this._progress = 0; let keys = ['apply-custom-theme', 'running-indicator-style', ]; keys.forEach(function(key) { this._signalsHandler.add([ this._dtdSettings, 'changed::' + key, Lang.bind(this, this._updateIndicatorStyle) ]); }, this); this._dtdSettings.connect('changed::scroll-action', Lang.bind(this, function() { this._optionalScrollCycleWindows(); })); this._optionalScrollCycleWindows(); this._numberOverlay(); this._previewMenuManager = null; this._previewMenu = null; }, _onDestroy: function() { this.parent(); // This is necessary due to an upstream bug // https://bugzilla.gnome.org/show_bug.cgi?id=757556 // It can be safely removed once it get solved upstrea. if (this._menu) this._menu.close(false); // Disconect global signals if (this._windowsChangedId > 0) this.app.disconnect(this._windowsChangedId); this._windowsChangedId = 0; if (this._focusAppChangeId > 0) { tracker.disconnect(this._focusAppChangeId); this._focusAppChangeId = 0; } this._signalsHandler.destroy(); if (this._scrollEventHandler) this.actor.disconnect(this._scrollEventHandler); }, // TOOD Rename this function _updateIndicatorStyle: function() { if (this._indicator !== null) { this._indicator.destroy(); this._indicator = null; } this._indicator = new AppIconIndicators.AppIconIndicator(this, this._dtdSettings); this._indicator.update(); }, _onWindowEntered: function(metaScreen, monitorIndex, metaWin) { let app = Shell.WindowTracker.get_default().get_window_app(metaWin); if (app && app.get_id() == this.app.get_id()) this.onWindowsChanged(); }, _optionalScrollCycleWindows: function() { if (this._scrollEventHandler) { this.actor.disconnect(this._scrollEventHandler); this._scrollEventHandler = 0; } let isEnabled = this._dtdSettings.get_enum('scroll-action') === scrollAction.CYCLE_WINDOWS; if (!isEnabled) return; this._scrollEventHandler = this.actor.connect('scroll-event', Lang.bind(this, this.onScrollEvent)); }, onScrollEvent: function(actor, event) { // We only activate windows of running applications, i.e. we never open new windows // We check if the app is running, and that the # of windows is > 0 in // case we use workspace isolation, let appIsRunning = this.app.state == Shell.AppState.RUNNING && this.getInterestingWindows().length > 0; if (!appIsRunning) return false if (this._optionalScrollCycleWindowsDeadTimeId > 0) return false; else this._optionalScrollCycleWindowsDeadTimeId = Mainloop.timeout_add(250, Lang.bind(this, function() { this._optionalScrollCycleWindowsDeadTimeId = 0; })); let direction = null; switch (event.get_scroll_direction()) { case Clutter.ScrollDirection.UP: direction = Meta.MotionDirection.UP; break; case Clutter.ScrollDirection.DOWN: direction = Meta.MotionDirection.DOWN; break; case Clutter.ScrollDirection.SMOOTH: let [dx, dy] = event.get_scroll_delta(); if (dy < 0) direction = Meta.MotionDirection.UP; else if (dy > 0) direction = Meta.MotionDirection.DOWN; break; } let focusedApp = tracker.focus_app; if (!Main.overview._shown) { let reversed = direction === Meta.MotionDirection.UP; if (this.app == focusedApp) this._cycleThroughWindows(reversed); else { // Activate the first window let windows = this.getInterestingWindows(); if (windows.length > 0) { let w = windows[0]; Main.activateWindow(w); } } } else this.app.activate(); return true; }, onWindowsChanged: function() { if (this._menu && this._menu.isOpen) this._menu.update(); this._indicator.update(); this.updateIconGeometry(); }, /** * Update taraget for minimization animation */ updateIconGeometry: function() { // If (for unknown reason) the actor is not on the stage the reported size // and position are random values, which might exceeds the integer range // resulting in an error when assigned to the a rect. This is a more like // a workaround to prevent flooding the system with errors. if (this.actor.get_stage() == null) return; 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(); if (this._dtdSettings.get_boolean('multi-monitor')){ let monitorIndex = this.monitorIndex; windows = windows.filter(function(w) { return w.get_monitor() == monitorIndex; }); } windows.forEach(function(w) { w.set_icon_geometry(rect); }); }, _updateRunningStyle: function() { // The logic originally in this function has been moved to // AppIconIndicatorBase._updateDefaultDot(). However it cannot be removed as // it called by the parent constructor. }, popupMenu: function() { this._removeMenuTimeout(); this.actor.fake_release(); this._draggable.fakeRelease(); if (!this._menu) { this._menu = new MyAppIconMenu(this, this._dtdSettings); this._menu.connect('activate-window', Lang.bind(this, function(menu, window) { this.activateWindow(window); })); this._menu.connect('open-state-changed', Lang.bind(this, function(menu, isPoppedUp) { if (!isPoppedUp) this._onMenuPoppedDown(); else { // Setting the max-height is s useful if part of the menu is // scrollable so the minimum height is smaller than the natural height. let monitor_index = Main.layoutManager.findIndexForActor(this.actor); let workArea = Main.layoutManager.getWorkAreaForMonitor(monitor_index); let position = Utils.getPosition(this._dtdSettings); this._isHorizontal = ( position == St.Side.TOP || position == St.Side.BOTTOM); // If horizontal also remove the height of the dash let additional_margin = this._isHorizontal && !this._dtdSettings.get_boolean('dock-fixed') ? Main.overview._dash.actor.height : 0; let verticalMargins = this._menu.actor.margin_top + this._menu.actor.margin_bottom; // Also set a max width to the menu, so long labels (long windows title) get truncated this._menu.actor.style = ('max-height: ' + Math.round(workArea.height - additional_margin - verticalMargins) + 'px;' + 'max-width: 400px'); } })); let id = Main.overview.connect('hiding', Lang.bind(this, function() { this._menu.close(); })); this._menu.actor.connect('destroy', function() { Main.overview.disconnect(id); }); this._menuManager.addMenu(this._menu); } this.emit('menu-state-changed', true); this.actor.set_hover(true); this._menu.popup(); this._menuManager.ignoreRelease(); this.emit('sync-tooltip'); return false; }, _onFocusAppChanged: function() { this._indicator.update(); }, activate: function(button) { let event = Clutter.get_current_event(); let modifiers = event ? event.get_state() : 0; let focusedApp = tracker.focus_app; // Only consider SHIFT and CONTROL as modifiers (exclude SUPER, CAPS-LOCK, etc.) modifiers = modifiers & (Clutter.ModifierType.SHIFT_MASK | Clutter.ModifierType.CONTROL_MASK); // We don't change the CTRL-click behaviour: in such case we just chain // up the parent method and return. if (modifiers & Clutter.ModifierType.CONTROL_MASK) { // Keep default behaviour: launch new window // By calling the parent method I make it compatible // with other extensions tweaking ctrl + click this.parent(button); return; } // We check what type of click we have and if the modifier SHIFT is // being used. We then define what buttonAction should be for this // event. let buttonAction = 0; if (button && button == 2 ) { if (modifiers & Clutter.ModifierType.SHIFT_MASK) buttonAction = this._dtdSettings.get_enum('shift-middle-click-action'); else buttonAction = this._dtdSettings.get_enum('middle-click-action'); } else if (button && button == 1) { if (modifiers & Clutter.ModifierType.SHIFT_MASK) buttonAction = this._dtdSettings.get_enum('shift-click-action'); else buttonAction = this._dtdSettings.get_enum('click-action'); } // We check if the app is running, and that the # of windows is > 0 in // case we use workspace isolation. let windows = this.getInterestingWindows(); let appIsRunning = this.app.state == Shell.AppState.RUNNING && windows.length > 0; // Some action modes (e.g. MINIMIZE_OR_OVERVIEW) require overview to remain open // This variable keeps track of this let shouldHideOverview = true; // We customize the action only when the application is already running if (appIsRunning) { switch (buttonAction) { case clickAction.MINIMIZE: // In overview just activate the app, unless the acion is explicitely // requested with a keyboard modifier if (!Main.overview._shown || modifiers){ // If we have button=2 or a modifier, allow minimization even if // the app is not focused if (this.app == focusedApp || button == 2 || modifiers & Clutter.ModifierType.SHIFT_MASK) { // minimize all windows on double click and always in the case of primary click without // additional modifiers let click_count = 0; if (Clutter.EventType.CLUTTER_BUTTON_PRESS) click_count = event.get_click_count(); let all_windows = (button == 1 && ! modifiers) || click_count > 1; this._minimizeWindow(all_windows); } else this._activateAllWindows(); } else { let w = windows[0]; Main.activateWindow(w); } break; case clickAction.MINIMIZE_OR_OVERVIEW: // When a single window is present, toggle minimization // If only one windows is present toggle minimization, but only when trigggered with the // simple click action (no modifiers, no middle click). if (windows.length == 1 && !modifiers && button == 1) { let w = windows[0]; if (this.app == focusedApp) { // Window is raised, minimize it this._minimizeWindow(w); } else { // Window is minimized, raise it Main.activateWindow(w); } // Launch overview when multiple windows are present // TODO: only show current app windows when gnome shell API will allow it } else { shouldHideOverview = false; Main.overview.toggle(); } break; case clickAction.CYCLE_WINDOWS: if (!Main.overview._shown){ if (this.app == focusedApp) this._cycleThroughWindows(); else { // Activate the first window let w = windows[0]; Main.activateWindow(w); } } else this.app.activate(); break; case clickAction.LAUNCH: this.launchNewWindow(); break; case clickAction.PREVIEWS: if (!Main.overview._shown) { // If only one windows is present just switch to it, but only when trigggered with the // simple click action (no modifiers, no middle click). if (windows.length == 1 && !modifiers && button == 1) { let w = windows[0]; Main.activateWindow(w); } else this._windowPreviews(); } else { this.app.activate(); } break; case clickAction.MINIMIZE_OR_PREVIEWS: // When a single window is present, toggle minimization // If only one windows is present toggle minimization, but only when trigggered with the // simple click action (no modifiers, no middle click). if (!Main.overview._shown){ if (windows.length == 1 && !modifiers && button == 1) { let w = windows[0]; if (this.app == focusedApp) { // Window is raised, minimize it this._minimizeWindow(w); } else { // Window is minimized, raise it Main.activateWindow(w); } } else { // Launch previews when multiple windows are present this._windowPreviews(); } } else { this.app.activate(); } break; case clickAction.QUIT: this.closeAllWindows(); break; case clickAction.SKIP: let w = windows[0]; Main.activateWindow(w); break; } } else { this.launchNewWindow(); } // Hide overview except when action mode requires it if(shouldHideOverview) { Main.overview.hide(); } }, shouldShowTooltip: function() { return this.actor.hover && (!this._menu || !this._menu.isOpen) && (!this._previewMenu || !this._previewMenu.isOpen); }, _windowPreviews: function() { if (!this._previewMenu) { this._previewMenuManager = new PopupMenu.PopupMenuManager(this); this._previewMenu = new WindowPreview.WindowPreviewMenu(this, this._dtdSettings); this._previewMenuManager.addMenu(this._previewMenu); this._previewMenu.connect('open-state-changed', Lang.bind(this, function(menu, isPoppedUp) { if (!isPoppedUp) this._onMenuPoppedDown(); })); let id = Main.overview.connect('hiding', Lang.bind(this, function() { this._previewMenu.close(); })); this._previewMenu.actor.connect('destroy', function() { Main.overview.disconnect(id); }); } if (this._previewMenu.isOpen) this._previewMenu.close(); else this._previewMenu.popup(); return false; }, // Try to do the right thing when attempting to launch a new window of an app. In // particular, if the application doens't allow to launch a new window, activate // the existing window instead. launchNewWindow: function(p) { let appInfo = this.app.get_app_info(); let actions = appInfo.list_actions(); if (this.app.can_open_new_window()) { this.animateLaunch(); // This is used as a workaround for a bug resulting in no new windows being opened // for certain running applications when calling open_new_window(). // // https://bugzilla.gnome.org/show_bug.cgi?id=756844 // // Similar to what done when generating the popupMenu entries, if the application provides // a "New Window" action, use it instead of directly requesting a new window with // open_new_window(), which fails for certain application, notably Nautilus. if (actions.indexOf('new-window') == -1) { this.app.open_new_window(-1); } else { let i = actions.indexOf('new-window'); if (i !== -1) this.app.launch_action(actions[i], global.get_current_time(), -1); } } else { // Try to manually activate the first window. Otherwise, when the app is activated by // switching to a different workspace, a launch spinning icon is shown and disappers only // after a timeout. let windows = this.app.get_windows(); if (windows.length > 0) Main.activateWindow(windows[0]) else this.app.activate(); } }, _numberOverlay: function() { // Add label for a Hot-Key visual aid this._numberOverlayLabel = new St.Label(); this._numberOverlayBin = new St.Bin({ child: this._numberOverlayLabel, x_align: St.Align.START, y_align: St.Align.START, x_expand: true, y_expand: true }); this._numberOverlayLabel.add_style_class_name('number-overlay'); this._numberOverlayOrder = -1; this._numberOverlayBin.hide(); this._iconContainer.add_child(this._numberOverlayBin); }, updateNumberOverlay: function() { // We apply an overall scale factor that might come from a HiDPI monitor. // Clutter dimensions are in physical pixels, but CSS measures are in logical // pixels, so make sure to consider the scale. let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; // Set the font size to something smaller than the whole icon so it is // still visible. The border radius is large to make the shape circular let [minWidth, natWidth] = this._iconContainer.get_preferred_width(-1); let font_size = Math.round(Math.max(12, 0.3*natWidth) / scaleFactor); let size = Math.round(font_size*1.2); this._numberOverlayLabel.set_style( 'font-size: ' + font_size + 'px;' + 'border-radius: ' + this.icon.iconSize + 'px;' + 'width: ' + size + 'px; height: ' + size +'px;' ); }, setNumberOverlay: function(number) { this._numberOverlayOrder = number; this._numberOverlayLabel.set_text(number.toString()); }, toggleNumberOverlay: function(activate) { if (activate && this._numberOverlayOrder > -1) { this.updateNumberOverlay(); this._numberOverlayBin.show(); } else this._numberOverlayBin.hide(); }, _minimizeWindow: function(param) { // Param true make all app windows minimize let windows = this.getInterestingWindows(); let current_workspace = global.screen.get_active_workspace(); for (let i = 0; i < windows.length; i++) { let w = windows[i]; if (w.get_workspace() == current_workspace && w.showing_on_its_workspace()) { w.minimize(); // Just minimize one window. By specification it should be the // focused window on the current workspace. if(!param) break; } } }, // By default only non minimized windows are activated. // This activates all windows in the current workspace. _activateAllWindows: function() { // First activate first window so workspace is switched if needed. // We don't do this if isolation is on! if (!this._dtdSettings.get_boolean('isolate-workspaces') && !this._dtdSettings.get_boolean('isolate-monitors')) this.app.activate(); // then activate all other app windows in the current workspace let windows = this.getInterestingWindows(); let activeWorkspace = global.screen.get_active_workspace_index(); if (windows.length <= 0) return; let activatedWindows = 0; for (let i = windows.length - 1; i >= 0; i--) { if (windows[i].get_workspace().index() == activeWorkspace) { Main.activateWindow(windows[i]); activatedWindows++; } } }, //This closes all windows of the app. closeAllWindows: function() { let windows = this.getInterestingWindows(); for (let i = 0; i < windows.length; i++) windows[i].delete(global.get_current_time()); }, _cycleThroughWindows: function(reversed) { // Store for a little amount of time last clicked app and its windows // since the order changes upon window interaction let MEMORY_TIME=3000; let app_windows = this.getInterestingWindows(); if (app_windows.length <1) return if (recentlyClickedAppLoopId > 0) Mainloop.source_remove(recentlyClickedAppLoopId); recentlyClickedAppLoopId = Mainloop.timeout_add(MEMORY_TIME, this._resetRecentlyClickedApp); // If there isn't already a list of windows for the current app, // or the stored list is outdated, use the current windows list. let monitorIsolation = this._dtdSettings.get_boolean('isolate-monitors'); if (!recentlyClickedApp || recentlyClickedApp.get_id() != this.app.get_id() || recentlyClickedAppWindows.length != app_windows.length || (recentlyClickedAppMonitor != this.monitorIndex && monitorIsolation)) { recentlyClickedApp = this.app; recentlyClickedAppWindows = app_windows; recentlyClickedAppMonitor = this.monitorIndex; recentlyClickedAppIndex = 0; } if (reversed) { recentlyClickedAppIndex--; if (recentlyClickedAppIndex < 0) recentlyClickedAppIndex = recentlyClickedAppWindows.length - 1; } else { recentlyClickedAppIndex++; } let index = recentlyClickedAppIndex % recentlyClickedAppWindows.length; let window = recentlyClickedAppWindows[index]; Main.activateWindow(window); }, _resetRecentlyClickedApp: function() { if (recentlyClickedAppLoopId > 0) Mainloop.source_remove(recentlyClickedAppLoopId); recentlyClickedAppLoopId=0; recentlyClickedApp =null; recentlyClickedAppWindows = null; recentlyClickedAppIndex = 0; recentlyClickedAppMonitor = -1; return false; }, // Filter out unnecessary windows, for instance // nautilus desktop window. getInterestingWindows: function() { return getInterestingWindows(this.app, this._dtdSettings, this.monitorIndex); } }); /** * Extend AppIconMenu * * - Pass settings to the constructor * - set popup arrow side based on dash orientation * - Add close windows option based on quitfromdash extension * (https://github.com/deuill/shell-extension-quitfromdash) * - Add open windows thumbnails instead of list * - update menu when application windows change */ const MyAppIconMenu = new Lang.Class({ Name: 'DashToDock.MyAppIconMenu', Extends: AppDisplay.AppIconMenu, _init: function(source, settings) { let side = Utils.getPosition(settings); // Damm it, there has to be a proper way of doing this... // As I can't call the parent parent constructor (?) passing the side // parameter, I overwite what I need later this.parent(source); // Change the initialized side where required. this._arrowSide = side; this._boxPointer._arrowSide = side; this._boxPointer._userArrowSide = side; this._dtdSettings = settings; }, _redisplay: function() { this.removeAll(); if (this._dtdSettings.get_boolean('show-windows-preview')) { // Display the app windows menu items and the separator between windows // of the current desktop and other windows. this._allWindowsMenuItem = new PopupMenu.PopupSubMenuMenuItem(__('All Windows'), false); this._allWindowsMenuItem.actor.hide(); this.addMenuItem(this._allWindowsMenuItem); if (!this._source.app.is_window_backed()) { this._appendSeparator(); let appInfo = this._source.app.get_app_info(); let actions = appInfo.list_actions(); if (this._source.app.can_open_new_window() && actions.indexOf('new-window') == -1) { this._newWindowMenuItem = this._appendMenuItem(_("New Window")); this._newWindowMenuItem.connect('activate', Lang.bind(this, function() { if (this._source.app.state == Shell.AppState.STOPPED) this._source.animateLaunch(); this._source.app.open_new_window(-1); this.emit('activate-window', null); })); this._appendSeparator(); } if (AppDisplay.discreteGpuAvailable && this._source.app.state == Shell.AppState.STOPPED && actions.indexOf('activate-discrete-gpu') == -1) { this._onDiscreteGpuMenuItem = this._appendMenuItem(_("Launch using Dedicated Graphics Card")); this._onDiscreteGpuMenuItem.connect('activate', Lang.bind(this, function() { if (this._source.app.state == Shell.AppState.STOPPED) this._source.animateLaunch(); this._source.app.launch(0, -1, true); this.emit('activate-window', null); })); } for (let i = 0; i < actions.length; i++) { let action = actions[i]; let item = this._appendMenuItem(appInfo.get_action_name(action)); item.connect('activate', Lang.bind(this, function(emitter, event) { this._source.app.launch_action(action, event.get_time(), -1); this.emit('activate-window', null); })); } let canFavorite = global.settings.is_writable('favorite-apps'); if (canFavorite) { this._appendSeparator(); let isFavorite = AppFavorites.getAppFavorites().isFavorite(this._source.app.get_id()); if (isFavorite) { let item = this._appendMenuItem(_("Remove from Favorites")); item.connect('activate', Lang.bind(this, function() { let favs = AppFavorites.getAppFavorites(); favs.removeFavorite(this._source.app.get_id()); })); } else { let item = this._appendMenuItem(_("Add to Favorites")); item.connect('activate', Lang.bind(this, function() { let favs = AppFavorites.getAppFavorites(); favs.addFavorite(this._source.app.get_id()); })); } } if (Shell.AppSystem.get_default().lookup_app('org.gnome.Software.desktop')) { this._appendSeparator(); let item = this._appendMenuItem(_("Show Details")); item.connect('activate', Lang.bind(this, function() { let id = this._source.app.get_id(); let args = GLib.Variant.new('(ss)', [id, '']); Gio.DBus.get(Gio.BusType.SESSION, null, function(o, res) { let bus = Gio.DBus.get_finish(res); bus.call('org.gnome.Software', '/org/gnome/Software', 'org.gtk.Actions', 'Activate', GLib.Variant.new('(sava{sv})', ['details', [args], null]), null, 0, -1, null, null); Main.overview.hide(); }); })); } } } else { this.parent(); } // quit menu this._appendSeparator(); this._quitfromDashMenuItem = this._appendMenuItem(_("Quit")); this._quitfromDashMenuItem.connect('activate', Lang.bind(this, function() { this._source.closeAllWindows(); })); this.update(); }, // update menu content when application windows change. This is desirable as actions // acting on windows (closing) are performed while the menu is shown. update: function() { if(this._dtdSettings.get_boolean('show-windows-preview')){ let windows = this._source.getInterestingWindows(); // update, show or hide the quit menu if ( windows.length > 0) { let quitFromDashMenuText = ""; if (windows.length == 1) this._quitfromDashMenuItem.label.set_text(_("Quit")); else this._quitfromDashMenuItem.label.set_text(_("Quit") + ' ' + windows.length + ' ' + _("Windows")); this._quitfromDashMenuItem.actor.show(); } else { this._quitfromDashMenuItem.actor.hide(); } // update, show, or hide the allWindows menu // Check if there are new windows not already displayed. In such case, repopulate the allWindows // menu. Windows removal is already handled by each preview being connected to the destroy signal let old_windows = this._allWindowsMenuItem.menu._getMenuItems().map(function(item){ return item._window; }); let new_windows = windows.filter(function(w) {return old_windows.indexOf(w) < 0;}); if (new_windows.length > 0) { this._populateAllWindowMenu(windows); // Try to set the width to that of the submenu. // TODO: can't get the actual size, getting a bit less. // Temporary workaround: add 15px to compensate this._allWindowsMenuItem.actor.width = this._allWindowsMenuItem.menu.actor.width + 15; } // The menu is created hidden and never hidded after being shown. Instead, a singlal // connected to its items destroy will set is insensitive if no more windows preview are shown. if (windows.length > 0){ this._allWindowsMenuItem.actor.show(); this._allWindowsMenuItem.setSensitive(true); } // Update separators this._getMenuItems().forEach(Lang.bind(this, this._updateSeparatorVisibility)); } }, _populateAllWindowMenu: function(windows) { this._allWindowsMenuItem.menu.removeAll(); if (windows.length > 0) { let activeWorkspace = global.screen.get_active_workspace(); let separatorShown = windows[0].get_workspace() != activeWorkspace; for (let i = 0; i < windows.length; i++) { let window = windows[i]; if (!separatorShown && window.get_workspace() != activeWorkspace) { this._allWindowsMenuItem.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); separatorShown = true; } let item = new WindowPreview.WindowPreviewMenuItem(window); this._allWindowsMenuItem.menu.addMenuItem(item); item.connect('activate', Lang.bind(this, function() { this.emit('activate-window', window); })); // This is to achieve a more gracefull transition when the last windows is closed. item.connect('destroy', Lang.bind(this, function() { if(this._allWindowsMenuItem.menu._getMenuItems().length == 1) // It's still counting the item just going to be destroyed this._allWindowsMenuItem.setSensitive(false); })); } } }, }); Signals.addSignalMethods(MyAppIconMenu.prototype); // Filter out unnecessary windows, for instance // nautilus desktop window. function getInterestingWindows(app, settings, monitorIndex) { let windows = app.get_windows().filter(function(w) { return !w.skip_taskbar; }); // When using workspace isolation, we filter out windows // that are not in the current workspace if (settings.get_boolean('isolate-workspaces')) windows = windows.filter(function(w) { return w.get_workspace().index() == global.screen.get_active_workspace_index(); }); if (settings.get_boolean('isolate-monitors')) windows = windows.filter(function(w) { return w.get_monitor() == monitorIndex; }); return windows; } /** * A wrapper class around the ShowAppsIcon class. * * - Pass settings to the constructor * - set label position based on dash orientation (Note, I am reusing most machinery of the appIcon class) * - implement a popupMenu based on the AppIcon code (Note, I am reusing most machinery of the appIcon class) * * I can't subclass the original object because of this: https://bugzilla.gnome.org/show_bug.cgi?id=688973. * thus use this pattern where the real showAppsIcon object is encaptulated, and a reference to it will be properly wired upon * use of this class in place of the original showAppsButton. * */ var ShowAppsIconWrapper = new Lang.Class({ Name: 'DashToDock.ShowAppsIconWrapper', _init: function(settings) { this._dtdSettings = settings; this.realShowAppsIcon = new Dash.ShowAppsIcon(); /* the variable equivalent to toggleButton has a different name in the appIcon class (actor): duplicate reference to easily reuse appIcon methods */ this.actor = this.realShowAppsIcon.toggleButton; // Re-use appIcon methods this._removeMenuTimeout = AppDisplay.AppIcon.prototype._removeMenuTimeout; this._setPopupTimeout = AppDisplay.AppIcon.prototype._setPopupTimeout; this._onButtonPress = AppDisplay.AppIcon.prototype._onButtonPress; this._onKeyboardPopupMenu = AppDisplay.AppIcon.prototype._onKeyboardPopupMenu; this._onLeaveEvent = AppDisplay.AppIcon.prototype._onLeaveEvent; this._onTouchEvent = AppDisplay.AppIcon.prototype._onTouchEvent; this._onMenuPoppedDown = AppDisplay.AppIcon.prototype._onMenuPoppedDown; // No action on clicked (showing of the appsview is controlled elsewhere) this._onClicked = Lang.bind(this, function(actor, button) { this._removeMenuTimeout(); }); this.actor.connect('leave-event', Lang.bind(this, this._onLeaveEvent)); this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress)); this.actor.connect('touch-event', Lang.bind(this, this._onTouchEvent)); this.actor.connect('clicked', Lang.bind(this, this._onClicked)); this.actor.connect('popup-menu', Lang.bind(this, this._onKeyboardPopupMenu)); this._menu = null; this._menuManager = new PopupMenu.PopupMenuManager(this); this._menuTimeoutId = 0; this.showLabel = itemShowLabel; }, popupMenu: function() { this._removeMenuTimeout(); this.actor.fake_release(); if (!this._menu) { this._menu = new MyShowAppsIconMenu(this, this._dtdSettings); this._menu.connect('open-state-changed', Lang.bind(this, function(menu, isPoppedUp) { if (!isPoppedUp) this._onMenuPoppedDown(); })); let id = Main.overview.connect('hiding', Lang.bind(this, function() { this._menu.close(); })); this._menu.actor.connect('destroy', function() { Main.overview.disconnect(id); }); this._menuManager.addMenu(this._menu); } //this.emit('menu-state-changed', true); this.actor.set_hover(true); this._menu.popup(); this._menuManager.ignoreRelease(); this.emit('sync-tooltip'); return false; } }); Signals.addSignalMethods(ShowAppsIconWrapper.prototype); /** * A menu for the showAppsIcon */ const MyShowAppsIconMenu = new Lang.Class({ Name: 'DashToDock.ShowAppsIconMenu', Extends: MyAppIconMenu, _redisplay: function() { this.removeAll(); /* Translators: %s is "Settings", which is automatically translated. You can also translate the full message if this fits better your language. */ let name = __('Dash to Dock %s').format(_('Settings')) let item = this._appendMenuItem(name); item.connect('activate', function () { Util.spawn(["gnome-shell-extension-prefs", Me.metadata.uuid]); }); } }); /** * This function is used for both extendShowAppsIcon and extendDashItemContainer */ function itemShowLabel() { // Check if the label is still present at all. When switching workpaces, the // item might have been destroyed in between. if (!this._labelText || this.label.get_stage() == null) return; this.label.set_text(this._labelText); this.label.opacity = 0; this.label.show(); let [stageX, stageY] = this.get_transformed_position(); let node = this.label.get_theme_node(); let itemWidth = this.allocation.x2 - this.allocation.x1; let itemHeight = this.allocation.y2 - this.allocation.y1; let labelWidth = this.label.get_width(); let labelHeight = this.label.get_height(); let x, y, xOffset, yOffset; let position = Utils.getPosition(this._dtdSettings); this._isHorizontal = ((position == St.Side.TOP) || (position == St.Side.BOTTOM)); let labelOffset = node.get_length('-x-offset'); switch (position) { case St.Side.LEFT: yOffset = Math.floor((itemHeight - labelHeight) / 2); y = stageY + yOffset; xOffset = labelOffset; x = stageX + this.get_width() + xOffset; break; case St.Side.RIGHT: yOffset = Math.floor((itemHeight - labelHeight) / 2); y = stageY + yOffset; xOffset = labelOffset; x = Math.round(stageX) - labelWidth - xOffset; break; case St.Side.TOP: y = stageY + labelOffset + itemHeight; xOffset = Math.floor((itemWidth - labelWidth) / 2); x = stageX + xOffset; break; case St.Side.BOTTOM: yOffset = labelOffset; y = stageY - labelHeight - yOffset; xOffset = Math.floor((itemWidth - labelWidth) / 2); x = stageX + xOffset; break; } // keep the label inside the screen border // Only needed fot the x coordinate. // Leave a few pixel gap let gap = 5; let monitor = Main.layoutManager.findMonitorForActor(this); if (x - monitor.x < gap) x += monitor.x - x + labelOffset; else if (x + labelWidth > monitor.x + monitor.width - gap) x -= x + labelWidth - (monitor.x + monitor.width) + gap; this.label.set_position(x, y); Tweener.addTween(this.label, { opacity: 255, time: DASH_ITEM_LABEL_SHOW_TIME, transition: 'easeOutQuad', }); } dash-to-dock-extensions.gnome.org-v63/convenience.js000066400000000000000000000050441326047523300227000ustar00rootroot00000000000000/* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */ /* * Part of this file comes from gnome-shell-extensions: * https://gitlab.gnome.org/GNOME/gnome-shell-extensions/ */ const Gettext = imports.gettext; const Gio = imports.gi.Gio; const Config = imports.misc.config; const ExtensionUtils = imports.misc.extensionUtils; /** * initTranslations: * @domain: (optional): the gettext domain to use * * Initialize Gettext to load translations from extensionsdir/locale. * If @domain is not provided, it will be taken from metadata['gettext-domain'] */ function initTranslations(domain) { let extension = ExtensionUtils.getCurrentExtension(); domain = domain || extension.metadata['gettext-domain']; // Check if this extension was built with "make zip-file", and thus // has the locale files in a subfolder // otherwise assume that extension has been installed in the // same prefix as gnome-shell let localeDir = extension.dir.get_child('locale'); if (localeDir.query_exists(null)) Gettext.bindtextdomain(domain, localeDir.get_path()); else Gettext.bindtextdomain(domain, Config.LOCALEDIR); } /** * getSettings: * @schema: (optional): the GSettings schema id * * Builds and return a GSettings schema for @schema, using schema files * in extensionsdir/schemas. If @schema is not provided, it is taken from * metadata['settings-schema']. */ function getSettings(schema) { let extension = ExtensionUtils.getCurrentExtension(); schema = schema || extension.metadata['settings-schema']; const GioSSS = Gio.SettingsSchemaSource; // Check if this extension was built with "make zip-file", and thus // has the schema files in a subfolder // otherwise assume that extension has been installed in the // same prefix as gnome-shell (and therefore schemas are available // in the standard folders) let schemaDir = extension.dir.get_child('schemas'); let schemaSource; if (schemaDir.query_exists(null)) schemaSource = GioSSS.new_from_directory(schemaDir.get_path(), GioSSS.get_default(), false); else schemaSource = GioSSS.get_default(); let schemaObj = schemaSource.lookup(schema, true); if (!schemaObj) throw new Error('Schema ' + schema + ' could not be found for extension ' + extension.metadata.uuid + '. Please check your installation.'); return new Gio.Settings({ settings_schema: schemaObj }); } dash-to-dock-extensions.gnome.org-v63/dash.js000066400000000000000000001251731326047523300213310ustar00rootroot00000000000000// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; const Signals = imports.signals; const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const St = imports.gi.St; const Mainloop = imports.mainloop; const AppDisplay = imports.ui.appDisplay; const AppFavorites = imports.ui.appFavorites; const Dash = imports.ui.dash; const DND = imports.ui.dnd; const IconGrid = imports.ui.iconGrid; const Main = imports.ui.main; const PopupMenu = imports.ui.popupMenu; const Tweener = imports.ui.tweener; const Util = imports.misc.util; const Workspace = imports.ui.workspace; const Me = imports.misc.extensionUtils.getCurrentExtension(); const Utils = Me.imports.utils; const AppIcons = Me.imports.appIcons; let DASH_ANIMATION_TIME = Dash.DASH_ANIMATION_TIME; let DASH_ITEM_LABEL_HIDE_TIME = Dash.DASH_ITEM_LABEL_HIDE_TIME; let DASH_ITEM_HOVER_TIMEOUT = Dash.DASH_ITEM_HOVER_TIMEOUT; /** * Extend DashItemContainer * * - Pass settings to the constructor * - set label position based on dash orientation * * I can't subclass the original object because of this: https://bugzilla.gnome.org/show_bug.cgi?id=688973. * thus use this ugly pattern. */ function extendDashItemContainer(dashItemContainer, settings) { dashItemContainer._dtdSettings = settings; dashItemContainer.showLabel = AppIcons.itemShowLabel; } /** * This class is a fork of the upstream DashActor class (ui.dash.js) * * Summary of changes: * - passed settings to class as parameter * - modified chldBox calculations for when 'show-apps-at-top' option is checked * - handle horizontal dash */ const MyDashActor = new Lang.Class({ Name: 'DashToDock.MyDashActor', _init: function(settings) { // a prefix is required to avoid conflicting with the parent class variable this._dtdSettings = settings; this._rtl = (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL); this._position = Utils.getPosition(settings); this._isHorizontal = ((this._position == St.Side.TOP) || (this._position == St.Side.BOTTOM)); let layout = new Clutter.BoxLayout({ orientation: this._isHorizontal ? Clutter.Orientation.HORIZONTAL : Clutter.Orientation.VERTICAL }); this.actor = new Shell.GenericContainer({ name: 'dash', layout_manager: layout, clip_to_allocation: true }); this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth)); this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight)); this.actor.connect('allocate', Lang.bind(this, this._allocate)); this.actor._delegate = this; }, _allocate: function(actor, box, flags) { let contentBox = box; let availWidth = contentBox.x2 - contentBox.x1; let availHeight = contentBox.y2 - contentBox.y1; let [appIcons, showAppsButton] = actor.get_children(); let [showAppsMinHeight, showAppsNatHeight] = showAppsButton.get_preferred_height(availWidth); let [showAppsMinWidth, showAppsNatWidth] = showAppsButton.get_preferred_width(availHeight); let offset_x = this._isHorizontal?showAppsNatWidth:0; let offset_y = this._isHorizontal?0:showAppsNatHeight; let childBox = new Clutter.ActorBox(); if ((this._dtdSettings.get_boolean('show-apps-at-top') && !this._isHorizontal) || (this._dtdSettings.get_boolean('show-apps-at-top') && !this._rtl) || (!this._dtdSettings.get_boolean('show-apps-at-top') && this._isHorizontal && this._rtl)) { childBox.x1 = contentBox.x1 + offset_x; childBox.y1 = contentBox.y1 + offset_y; childBox.x2 = contentBox.x2; childBox.y2 = contentBox.y2; appIcons.allocate(childBox, flags); childBox.y1 = contentBox.y1; childBox.x1 = contentBox.x1; childBox.x2 = contentBox.x1 + showAppsNatWidth; childBox.y2 = contentBox.y1 + showAppsNatHeight; showAppsButton.allocate(childBox, flags); } else { childBox.x1 = contentBox.x1; childBox.y1 = contentBox.y1; childBox.x2 = contentBox.x2 - offset_x; childBox.y2 = contentBox.y2 - offset_y; appIcons.allocate(childBox, flags); childBox.x2 = contentBox.x2; childBox.y2 = contentBox.y2; childBox.x1 = contentBox.x2 - showAppsNatWidth; childBox.y1 = contentBox.y2 - showAppsNatHeight; showAppsButton.allocate(childBox, flags); } }, _getPreferredWidth: function(actor, forHeight, alloc) { // We want to request the natural height of all our children // as our natural height, so we chain up to StWidget (which // then calls BoxLayout), but we only request the showApps // button as the minimum size let [, natWidth] = this.actor.layout_manager.get_preferred_width(this.actor, forHeight); let themeNode = this.actor.get_theme_node(); let [, showAppsButton] = this.actor.get_children(); let [minWidth, ] = showAppsButton.get_preferred_height(forHeight); alloc.min_size = minWidth; alloc.natural_size = natWidth; }, _getPreferredHeight: function(actor, forWidth, alloc) { // We want to request the natural height of all our children // as our natural height, so we chain up to StWidget (which // then calls BoxLayout), but we only request the showApps // button as the minimum size let [, natHeight] = this.actor.layout_manager.get_preferred_height(this.actor, forWidth); let themeNode = this.actor.get_theme_node(); let [, showAppsButton] = this.actor.get_children(); let [minHeight, ] = showAppsButton.get_preferred_height(forWidth); alloc.min_size = minHeight; alloc.natural_size = natHeight; } }); const baseIconSizes = [16, 22, 24, 32, 48, 64, 96, 128]; /** * This class is a fork of the upstream dash class (ui.dash.js) * * Summary of changes: * - disconnect global signals adding a destroy method; * - play animations even when not in overview mode * - set a maximum icon size * - show running and/or favorite applications * - emit a custom signal when an app icon is added * - hide showApps label when the custom menu is shown. * - add scrollview * ensure actor is visible on keyfocus inseid the scrollview * - add 128px icon size, might be usefull for hidpi display * - sync minimization application target position. * - keep running apps ordered. */ var MyDash = new Lang.Class({ Name: 'DashToDock.MyDash', _init: function(settings, remoteModel, monitorIndex) { this._dtdSettings = settings; // Initialize icon variables and size this._maxHeight = -1; this.iconSize = this._dtdSettings.get_int('dash-max-icon-size'); this._availableIconSizes = baseIconSizes; this._shownInitially = false; this._initializeIconSize(this.iconSize); this._remoteModel = remoteModel; this._monitorIndex = monitorIndex; this._position = Utils.getPosition(settings); this._isHorizontal = ((this._position == St.Side.TOP) || (this._position == St.Side.BOTTOM)); this._signalsHandler = new Utils.GlobalSignalsHandler(); this._dragPlaceholder = null; this._dragPlaceholderPos = -1; this._animatingPlaceholdersCount = 0; this._showLabelTimeoutId = 0; this._resetHoverTimeoutId = 0; this._ensureAppIconVisibilityTimeoutId = 0; this._labelShowing = false; this._containerObject = new MyDashActor(settings); this._container = this._containerObject.actor; this._scrollView = new St.ScrollView({ name: 'dashtodockDashScrollview', hscrollbar_policy: Gtk.PolicyType.NEVER, vscrollbar_policy: Gtk.PolicyType.NEVER, enable_mouse_scrolling: false }); this._scrollView.connect('scroll-event', Lang.bind(this, this._onScrollEvent)); this._box = new St.BoxLayout({ vertical: !this._isHorizontal, clip_to_allocation: false, x_align: Clutter.ActorAlign.START, y_align: Clutter.ActorAlign.START }); this._box._delegate = this; this._container.add_actor(this._scrollView); this._scrollView.add_actor(this._box); // Create a wrapper around the real showAppsIcon in order to add a popupMenu. let showAppsIconWrapper = new AppIcons.ShowAppsIconWrapper(this._dtdSettings); showAppsIconWrapper.connect('menu-state-changed', Lang.bind(this, function(showAppsIconWrapper, opened) { this._itemMenuStateChanged(showAppsIconWrapper, opened); })); // an instance of the showAppsIcon class is encapsulated in the wrapper this._showAppsIcon = showAppsIconWrapper.realShowAppsIcon; this._showAppsIcon.childScale = 1; this._showAppsIcon.childOpacity = 255; this._showAppsIcon.icon.setIconSize(this.iconSize); this._hookUpLabel(this._showAppsIcon); this.showAppsButton = this._showAppsIcon.toggleButton; this._container.add_actor(this._showAppsIcon); let rtl = Clutter.get_default_text_direction() == Clutter.TextDirection.RTL; this.actor = new St.Bin({ child: this._container, y_align: St.Align.START, x_align: rtl ? St.Align.END : St.Align.START }); if (this._isHorizontal) { this.actor.connect('notify::width', Lang.bind(this, function() { if (this._maxHeight != this.actor.width) this._queueRedisplay(); this._maxHeight = this.actor.width; })); } else { this.actor.connect('notify::height', Lang.bind(this, function() { if (this._maxHeight != this.actor.height) this._queueRedisplay(); this._maxHeight = this.actor.height; })); } // Update minimization animation target position on allocation of the // container and on scrollview change. this._box.connect('notify::allocation', Lang.bind(this, this._updateAppsIconGeometry)); let scrollViewAdjustment = this._isHorizontal ? this._scrollView.hscroll.adjustment : this._scrollView.vscroll.adjustment; scrollViewAdjustment.connect('notify::value', Lang.bind(this, this._updateAppsIconGeometry)); this._workId = Main.initializeDeferredWork(this._box, Lang.bind(this, this._redisplay)); this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' }); this._appSystem = Shell.AppSystem.get_default(); this._signalsHandler.add([ this._appSystem, 'installed-changed', Lang.bind(this, function() { AppFavorites.getAppFavorites().reload(); this._queueRedisplay(); }) ], [ AppFavorites.getAppFavorites(), 'changed', Lang.bind(this, this._queueRedisplay) ], [ this._appSystem, 'app-state-changed', Lang.bind(this, this._queueRedisplay) ], [ Main.overview, 'item-drag-begin', Lang.bind(this, this._onDragBegin) ], [ Main.overview, 'item-drag-end', Lang.bind(this, this._onDragEnd) ], [ Main.overview, 'item-drag-cancelled', Lang.bind(this, this._onDragCancelled) ]); }, destroy: function() { this._signalsHandler.destroy(); }, _onScrollEvent: function(actor, event) { // If scroll is not used because the icon is resized, let the scroll event propagate. if (!this._dtdSettings.get_boolean('icon-size-fixed')) return Clutter.EVENT_PROPAGATE; // reset timeout to avid conflicts with the mousehover event if (this._ensureAppIconVisibilityTimeoutId > 0) { Mainloop.source_remove(this._ensureAppIconVisibilityTimeoutId); this._ensureAppIconVisibilityTimeoutId = 0; } // Skip to avoid double events mouse if (event.is_pointer_emulated()) return Clutter.EVENT_STOP; let adjustment, delta; if (this._isHorizontal) adjustment = this._scrollView.get_hscroll_bar().get_adjustment(); else adjustment = this._scrollView.get_vscroll_bar().get_adjustment(); let increment = adjustment.step_increment; switch (event.get_scroll_direction()) { case Clutter.ScrollDirection.UP: delta = -increment; break; case Clutter.ScrollDirection.DOWN: delta = +increment; break; case Clutter.ScrollDirection.SMOOTH: let [dx, dy] = event.get_scroll_delta(); delta = dy * increment; // Also consider horizontal component, for instance touchpad if (this._isHorizontal) delta += dx * increment; break; } adjustment.set_value(adjustment.get_value() + delta); return Clutter.EVENT_STOP; }, _onDragBegin: function() { this._dragCancelled = false; this._dragMonitor = { dragMotion: Lang.bind(this, this._onDragMotion) }; DND.addDragMonitor(this._dragMonitor); if (this._box.get_n_children() == 0) { this._emptyDropTarget = new Dash.EmptyDropTargetItem(); this._box.insert_child_at_index(this._emptyDropTarget, 0); this._emptyDropTarget.show(true); } }, _onDragCancelled: function() { this._dragCancelled = true; this._endDrag(); }, _onDragEnd: function() { if (this._dragCancelled) return; this._endDrag(); }, _endDrag: function() { this._clearDragPlaceholder(); this._clearEmptyDropTarget(); this._showAppsIcon.setDragApp(null); DND.removeDragMonitor(this._dragMonitor); }, _onDragMotion: function(dragEvent) { let app = Dash.getAppFromSource(dragEvent.source); if (app == null) return DND.DragMotionResult.CONTINUE; let showAppsHovered = this._showAppsIcon.contains(dragEvent.targetActor); if (!this._box.contains(dragEvent.targetActor) || showAppsHovered) this._clearDragPlaceholder(); if (showAppsHovered) this._showAppsIcon.setDragApp(app); else this._showAppsIcon.setDragApp(null); return DND.DragMotionResult.CONTINUE; }, _appIdListToHash: function(apps) { let ids = {}; for (let i = 0; i < apps.length; i++) ids[apps[i].get_id()] = apps[i]; return ids; }, _queueRedisplay: function() { Main.queueDeferredWork(this._workId); }, _hookUpLabel: function(item, appIcon) { item.child.connect('notify::hover', Lang.bind(this, function() { this._syncLabel(item, appIcon); })); let id = Main.overview.connect('hiding', Lang.bind(this, function() { this._labelShowing = false; item.hideLabel(); })); item.child.connect('destroy', function() { Main.overview.disconnect(id); }); if (appIcon) { appIcon.connect('sync-tooltip', Lang.bind(this, function() { this._syncLabel(item, appIcon); })); } }, _createAppItem: function(app) { let appIcon = new AppIcons.MyAppIcon(this._dtdSettings, this._remoteModel, app, this._monitorIndex, { setSizeManually: true, showLabel: false }); if (appIcon._draggable) { appIcon._draggable.connect('drag-begin', Lang.bind(this, function() { appIcon.actor.opacity = 50; })); appIcon._draggable.connect('drag-end', Lang.bind(this, function() { appIcon.actor.opacity = 255; })); } appIcon.connect('menu-state-changed', Lang.bind(this, function(appIcon, opened) { this._itemMenuStateChanged(item, opened); })); let item = new Dash.DashItemContainer(); extendDashItemContainer(item, this._dtdSettings); item.setChild(appIcon.actor); appIcon.actor.connect('notify::hover', Lang.bind(this, function() { if (appIcon.actor.hover) { this._ensureAppIconVisibilityTimeoutId = Mainloop.timeout_add(100, Lang.bind(this, function() { ensureActorVisibleInScrollView(this._scrollView, appIcon.actor); this._ensureAppIconVisibilityTimeoutId = 0; return GLib.SOURCE_REMOVE; })); } else { if (this._ensureAppIconVisibilityTimeoutId > 0) { Mainloop.source_remove(this._ensureAppIconVisibilityTimeoutId); this._ensureAppIconVisibilityTimeoutId = 0; } } })); appIcon.actor.connect('clicked', Lang.bind(this, function(actor) { ensureActorVisibleInScrollView(this._scrollView, actor); })); appIcon.actor.connect('key-focus-in', Lang.bind(this, function(actor) { let [x_shift, y_shift] = ensureActorVisibleInScrollView(this._scrollView, actor); // This signal is triggered also by mouse click. The popup menu is opened at the original // coordinates. Thus correct for the shift which is going to be applied to the scrollview. if (appIcon._menu) { appIcon._menu._boxPointer.xOffset = -x_shift; appIcon._menu._boxPointer.yOffset = -y_shift; } })); // Override default AppIcon label_actor, now the // accessible_name is set at DashItemContainer.setLabelText appIcon.actor.label_actor = null; item.setLabelText(app.get_name()); appIcon.icon.setIconSize(this.iconSize); this._hookUpLabel(item, appIcon); return item; }, /** * Return an array with the "proper" appIcons currently in the dash */ getAppIcons: function() { // Only consider children which are "proper" // icons (i.e. ignoring drag placeholders) and which are not // animating out (which means they will be destroyed at the end of // the animation) let iconChildren = this._box.get_children().filter(function(actor) { return actor.child && actor.child._delegate && actor.child._delegate.icon && !actor.animatingOut; }); let appIcons = iconChildren.map(function(actor) { return actor.child._delegate; }); return appIcons; }, _updateAppsIconGeometry: function() { let appIcons = this.getAppIcons(); appIcons.forEach(function(icon) { icon.updateIconGeometry(); }); }, _itemMenuStateChanged: function(item, opened) { // When the menu closes, it calls sync_hover, which means // that the notify::hover handler does everything we need to. if (opened) { if (this._showLabelTimeoutId > 0) { Mainloop.source_remove(this._showLabelTimeoutId); this._showLabelTimeoutId = 0; } item.hideLabel(); } else { // I want to listen from outside when a menu is closed. I used to // add a custom signal to the appIcon, since gnome 3.8 the signal // calling this callback was added upstream. this.emit('menu-closed'); } }, _syncLabel: function(item, appIcon) { let shouldShow = appIcon ? appIcon.shouldShowTooltip() : item.child.get_hover(); if (shouldShow) { if (this._showLabelTimeoutId == 0) { let timeout = this._labelShowing ? 0 : DASH_ITEM_HOVER_TIMEOUT; this._showLabelTimeoutId = Mainloop.timeout_add(timeout, Lang.bind(this, function() { this._labelShowing = true; item.showLabel(); this._showLabelTimeoutId = 0; return GLib.SOURCE_REMOVE; })); GLib.Source.set_name_by_id(this._showLabelTimeoutId, '[gnome-shell] item.showLabel'); if (this._resetHoverTimeoutId > 0) { Mainloop.source_remove(this._resetHoverTimeoutId); this._resetHoverTimeoutId = 0; } } } else { if (this._showLabelTimeoutId > 0) Mainloop.source_remove(this._showLabelTimeoutId); this._showLabelTimeoutId = 0; item.hideLabel(); if (this._labelShowing) { this._resetHoverTimeoutId = Mainloop.timeout_add(DASH_ITEM_HOVER_TIMEOUT, Lang.bind(this, function() { this._labelShowing = false; this._resetHoverTimeoutId = 0; return GLib.SOURCE_REMOVE; })); GLib.Source.set_name_by_id(this._resetHoverTimeoutId, '[gnome-shell] this._labelShowing'); } } }, _adjustIconSize: function() { // For the icon size, we only consider children which are "proper" // icons (i.e. ignoring drag placeholders) and which are not // animating out (which means they will be destroyed at the end of // the animation) let iconChildren = this._box.get_children().filter(function(actor) { return actor.child && actor.child._delegate && actor.child._delegate.icon && !actor.animatingOut; }); iconChildren.push(this._showAppsIcon); if (this._maxHeight == -1) return; // Check if the container is present in the stage. This avoids critical // errors when unlocking the screen if (!this._container.get_stage()) return; let themeNode = this._container.get_theme_node(); let maxAllocation = new Clutter.ActorBox({ x1: 0, y1: 0, x2: this._isHorizontal ? this._maxHeight : 42 /* whatever */, y2: this._isHorizontal ? 42 : this._maxHeight }); let maxContent = themeNode.get_content_box(maxAllocation); let availHeight; if (this._isHorizontal) availHeight = maxContent.x2 - maxContent.x1; else availHeight = maxContent.y2 - maxContent.y1; let spacing = themeNode.get_length('spacing'); let firstButton = iconChildren[0].child; let firstIcon = firstButton._delegate.icon; let minHeight, natHeight, minWidth, natWidth; // Enforce the current icon size during the size request firstIcon.setIconSize(this.iconSize); [minHeight, natHeight] = firstButton.get_preferred_height(-1); [minWidth, natWidth] = firstButton.get_preferred_width(-1); let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; let iconSizes = this._availableIconSizes.map(function(s) { return s * scaleFactor; }); // Subtract icon padding and box spacing from the available height if (this._isHorizontal) availHeight -= iconChildren.length * (natWidth - this.iconSize * scaleFactor) + (iconChildren.length - 1) * spacing; else availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) + (iconChildren.length - 1) * spacing; let availSize = availHeight / iconChildren.length; let newIconSize = this._availableIconSizes[0]; for (let i = 0; i < iconSizes.length; i++) { if (iconSizes[i] < availSize) newIconSize = this._availableIconSizes[i]; } if (newIconSize == this.iconSize) return; let oldIconSize = this.iconSize; this.iconSize = newIconSize; this.emit('icon-size-changed'); let scale = oldIconSize / newIconSize; for (let i = 0; i < iconChildren.length; i++) { let icon = iconChildren[i].child._delegate.icon; // Set the new size immediately, to keep the icons' sizes // in sync with this.iconSize icon.setIconSize(this.iconSize); // Don't animate the icon size change when the overview // is transitioning, or when initially filling // the dash if (Main.overview.animationInProgress || !this._shownInitially) continue; let [targetWidth, targetHeight] = icon.icon.get_size(); // Scale the icon's texture to the previous size and // tween to the new size icon.icon.set_size(icon.icon.width * scale, icon.icon.height * scale); Tweener.addTween(icon.icon, { width: targetWidth, height: targetHeight, time: DASH_ANIMATION_TIME, transition: 'easeOutQuad', }); } }, _redisplay: function() { let favorites = AppFavorites.getAppFavorites().getFavoriteMap(); let running = this._appSystem.get_running(); if (this._dtdSettings.get_boolean('isolate-workspaces') || this._dtdSettings.get_boolean('isolate-monitors')) { // When using isolation, we filter out apps that have no windows in // the current workspace let settings = this._dtdSettings; let monitorIndex = this._monitorIndex; running = running.filter(function(_app) { return AppIcons.getInterestingWindows(_app, settings, monitorIndex).length != 0; }); } let children = this._box.get_children().filter(function(actor) { return actor.child && actor.child._delegate && actor.child._delegate.app; }); // Apps currently in the dash let oldApps = children.map(function(actor) { return actor.child._delegate.app; }); // Apps supposed to be in the dash let newApps = []; if (this._dtdSettings.get_boolean('show-favorites')) { for (let id in favorites) newApps.push(favorites[id]); } // We reorder the running apps so that they don't change position on the // dash with every redisplay() call if (this._dtdSettings.get_boolean('show-running')) { // First: add the apps from the oldApps list that are still running for (let i = 0; i < oldApps.length; i++) { let index = running.indexOf(oldApps[i]); if (index > -1) { let app = running.splice(index, 1)[0]; if (this._dtdSettings.get_boolean('show-favorites') && (app.get_id() in favorites)) continue; newApps.push(app); } } // Second: add the new apps for (let i = 0; i < running.length; i++) { let app = running[i]; if (this._dtdSettings.get_boolean('show-favorites') && (app.get_id() in favorites)) continue; newApps.push(app); } } // Figure out the actual changes to the list of items; we iterate // over both the list of items currently in the dash and the list // of items expected there, and collect additions and removals. // Moves are both an addition and a removal, where the order of // the operations depends on whether we encounter the position // where the item has been added first or the one from where it // was removed. // There is an assumption that only one item is moved at a given // time; when moving several items at once, everything will still // end up at the right position, but there might be additional // additions/removals (e.g. it might remove all the launchers // and add them back in the new order even if a smaller set of // additions and removals is possible). // If above assumptions turns out to be a problem, we might need // to use a more sophisticated algorithm, e.g. Longest Common // Subsequence as used by diff. let addedItems = []; let removedActors = []; let newIndex = 0; let oldIndex = 0; while ((newIndex < newApps.length) || (oldIndex < oldApps.length)) { // No change at oldIndex/newIndex if (oldApps[oldIndex] && oldApps[oldIndex] == newApps[newIndex]) { oldIndex++; newIndex++; continue; } // App removed at oldIndex if (oldApps[oldIndex] && (newApps.indexOf(oldApps[oldIndex]) == -1)) { removedActors.push(children[oldIndex]); oldIndex++; continue; } // App added at newIndex if (newApps[newIndex] && (oldApps.indexOf(newApps[newIndex]) == -1)) { let newItem = this._createAppItem(newApps[newIndex]); addedItems.push({ app: newApps[newIndex], item: newItem, pos: newIndex }); newIndex++; continue; } // App moved let insertHere = newApps[newIndex + 1] && (newApps[newIndex + 1] == oldApps[oldIndex]); let alreadyRemoved = removedActors.reduce(function(result, actor) { let removedApp = actor.child._delegate.app; return result || removedApp == newApps[newIndex]; }, false); if (insertHere || alreadyRemoved) { let newItem = this._createAppItem(newApps[newIndex]); addedItems.push({ app: newApps[newIndex], item: newItem, pos: newIndex + removedActors.length }); newIndex++; } else { removedActors.push(children[oldIndex]); oldIndex++; } } for (let i = 0; i < addedItems.length; i++) this._box.insert_child_at_index(addedItems[i].item, addedItems[i].pos); for (let i = 0; i < removedActors.length; i++) { let item = removedActors[i]; // Don't animate item removal when the overview is transitioning if (!Main.overview.animationInProgress) item.animateOutAndDestroy(); else item.destroy(); } this._adjustIconSize(); for (let i = 0; i < addedItems.length; i++) // Emit a custom signal notifying that a new item has been added this.emit('item-added', addedItems[i]); // Skip animations on first run when adding the initial set // of items, to avoid all items zooming in at once let animate = this._shownInitially && !Main.overview.animationInProgress; if (!this._shownInitially) this._shownInitially = true; for (let i = 0; i < addedItems.length; i++) addedItems[i].item.show(animate); // Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=692744 // Without it, StBoxLayout may use a stale size cache this._box.queue_relayout(); // This is required for icon reordering when the scrollview is used. this._updateAppsIconGeometry(); // This will update the size, and the corresponding number for each icon this._updateNumberOverlay(); }, _updateNumberOverlay: function() { let appIcons = this.getAppIcons(); let counter = 1; appIcons.forEach(function(icon) { if (counter < 10){ icon.setNumberOverlay(counter); counter++; } else if (counter == 10) { icon.setNumberOverlay(0); counter++; } else { // No overlay after 10 icon.setNumberOverlay(-1); } icon.updateNumberOverlay(); }); }, toggleNumberOverlay: function(activate) { let appIcons = this.getAppIcons(); appIcons.forEach(function(icon) { icon.toggleNumberOverlay(activate); }); }, _initializeIconSize: function(max_size) { let max_allowed = baseIconSizes[baseIconSizes.length-1]; max_size = Math.min(max_size, max_allowed); if (this._dtdSettings.get_boolean('icon-size-fixed')) this._availableIconSizes = [max_size]; else { this._availableIconSizes = baseIconSizes.filter(function(val) { return (val numChildren) pos = numChildren; } else pos = 0; // always insert at the top when dash is empty // Take into account childredn position in rtl if (this._isHorizontal && (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)) pos = numChildren - pos; if ((pos != this._dragPlaceholderPos) && (pos <= numFavorites) && (this._animatingPlaceholdersCount == 0)) { this._dragPlaceholderPos = pos; // Don't allow positioning before or after self if ((favPos != -1) && (pos == favPos || pos == favPos + 1)) { this._clearDragPlaceholder(); return DND.DragMotionResult.CONTINUE; } // If the placeholder already exists, we just move // it, but if we are adding it, expand its size in // an animation let fadeIn; if (this._dragPlaceholder) { this._dragPlaceholder.destroy(); fadeIn = false; } else fadeIn = true; this._dragPlaceholder = new Dash.DragPlaceholderItem(); this._dragPlaceholder.child.set_width (this.iconSize); this._dragPlaceholder.child.set_height (this.iconSize / 2); this._box.insert_child_at_index(this._dragPlaceholder, this._dragPlaceholderPos); this._dragPlaceholder.show(fadeIn); // Ensure the next and previous icon are visible when moving the placeholder // (I assume there's room for both of them) if (this._dragPlaceholderPos > 1) ensureActorVisibleInScrollView(this._scrollView, this._box.get_children()[this._dragPlaceholderPos-1]); if (this._dragPlaceholderPos < this._box.get_children().length-1) ensureActorVisibleInScrollView(this._scrollView, this._box.get_children()[this._dragPlaceholderPos+1]); } // Remove the drag placeholder if we are not in the // "favorites zone" if (pos > numFavorites) this._clearDragPlaceholder(); if (!this._dragPlaceholder) return DND.DragMotionResult.NO_DROP; let srcIsFavorite = (favPos != -1); if (srcIsFavorite) return DND.DragMotionResult.MOVE_DROP; return DND.DragMotionResult.COPY_DROP; }, /** * Draggable target interface */ acceptDrop: function(source, actor, x, y, time) { let app = Dash.getAppFromSource(source); // Don't allow favoriting of transient apps if (app == null || app.is_window_backed()) return false; if (!this._settings.is_writable('favorite-apps') || !this._dtdSettings.get_boolean('show-favorites')) return false; let id = app.get_id(); let favorites = AppFavorites.getAppFavorites().getFavoriteMap(); let srcIsFavorite = (id in favorites); let favPos = 0; let children = this._box.get_children(); for (let i = 0; i < this._dragPlaceholderPos; i++) { if (this._dragPlaceholder && (children[i] == this._dragPlaceholder)) continue; let childId = children[i].child._delegate.app.get_id(); if (childId == id) continue; if (childId in favorites) favPos++; } // No drag placeholder means we don't wan't to favorite the app // and we are dragging it to its original position if (!this._dragPlaceholder) return true; Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() { let appFavorites = AppFavorites.getAppFavorites(); if (srcIsFavorite) appFavorites.moveFavoriteToPos(id, favPos); else appFavorites.addFavoriteAtPos(id, favPos); return false; })); return true; }, showShowAppsButton: function() { this.showAppsButton.visible = true this.showAppsButton.set_width(-1) this.showAppsButton.set_height(-1) }, hideShowAppsButton: function() { this.showAppsButton.hide() this.showAppsButton.set_width(0) this.showAppsButton.set_height(0) } }); Signals.addSignalMethods(MyDash.prototype); /** * This is a copy of the same function in utils.js, but also adjust horizontal scrolling * and perform few further cheks on the current value to avoid changing the values when * it would be clamp to the current one in any case. * Return the amount of shift applied */ function ensureActorVisibleInScrollView(scrollView, actor) { let adjust_v = true; let adjust_h = true; let vadjustment = scrollView.vscroll.adjustment; let hadjustment = scrollView.hscroll.adjustment; let [vvalue, vlower, vupper, vstepIncrement, vpageIncrement, vpageSize] = vadjustment.get_values(); let [hvalue, hlower, hupper, hstepIncrement, hpageIncrement, hpageSize] = hadjustment.get_values(); let [hvalue0, vvalue0] = [hvalue, vvalue]; let voffset = 0; let hoffset = 0; let fade = scrollView.get_effect('fade'); if (fade) { voffset = fade.vfade_offset; hoffset = fade.hfade_offset; } let box = actor.get_allocation_box(); let y1 = box.y1, y2 = box.y2, x1 = box.x1, x2 = box.x2; let parent = actor.get_parent(); while (parent != scrollView) { if (!parent) throw new Error('Actor not in scroll view'); let box = parent.get_allocation_box(); y1 += box.y1; y2 += box.y1; x1 += box.x1; x2 += box.x1; parent = parent.get_parent(); } if (y1 < vvalue + voffset) vvalue = Math.max(0, y1 - voffset); else if (vvalue < vupper - vpageSize && y2 > vvalue + vpageSize - voffset) vvalue = Math.min(vupper -vpageSize, y2 + voffset - vpageSize); if (x1 < hvalue + hoffset) hvalue = Math.max(0, x1 - hoffset); else if (hvalue < hupper - hpageSize && x2 > hvalue + hpageSize - hoffset) hvalue = Math.min(hupper - hpageSize, x2 + hoffset - hpageSize); if (vvalue !== vvalue0) { Tweener.addTween(vadjustment, { value: vvalue, time: Util.SCROLL_TIME, transition: 'easeOutQuad' }); } if (hvalue !== hvalue0) { Tweener.addTween(hadjustment, { value: hvalue, time: Util.SCROLL_TIME, transition: 'easeOutQuad' }); } return [hvalue- hvalue0, vvalue - vvalue0]; } dash-to-dock-extensions.gnome.org-v63/docking.js000066400000000000000000002215751326047523300220330ustar00rootroot00000000000000// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const St = imports.gi.St; const Mainloop = imports.mainloop; const Params = imports.misc.params; const Main = imports.ui.main; const Dash = imports.ui.dash; const IconGrid = imports.ui.iconGrid; const Overview = imports.ui.overview; const OverviewControls = imports.ui.overviewControls; const PointerWatcher = imports.ui.pointerWatcher; const Tweener = imports.ui.tweener; const Signals = imports.signals; const ViewSelector = imports.ui.viewSelector; const WorkspaceSwitcherPopup= imports.ui.workspaceSwitcherPopup; const Layout = imports.ui.layout; const LayoutManager = imports.ui.main.layoutManager; const Me = imports.misc.extensionUtils.getCurrentExtension(); const Convenience = Me.imports.convenience; const Utils = Me.imports.utils; const Intellihide = Me.imports.intellihide; const Theming = Me.imports.theming; const MyDash = Me.imports.dash; const LauncherAPI = Me.imports.launcherAPI; const DOCK_DWELL_CHECK_INTERVAL = 100; var State = { HIDDEN: 0, SHOWING: 1, SHOWN: 2, HIDING: 3 }; const scrollAction = { DO_NOTHING: 0, CYCLE_WINDOWS: 1, SWITCH_WORKSPACE: 2 }; /** * A simple St.Widget with one child whose allocation takes into account the * slide out of its child via the _slidex parameter ([0:1]). * * Required since I want to track the input region of this container which is * based on its allocation even if the child overlows the parent actor. By doing * this the region of the dash that is slideout is not steling anymore the input * regions making the extesion usable when the primary monitor is the right one. * * The slidex parameter can be used to directly animate the sliding. The parent * must have a WEST (SOUTH) anchor_point to achieve the sliding to the RIGHT (BOTTOM) * side. * * It can't be an extended object because of this: https://bugzilla.gnome.org/show_bug.cgi?id=688973. * thus use the Shell.GenericContainer pattern. */ const DashSlideContainer = new Lang.Class({ Name: 'DashToDock.DashSlideContainer', _init: function(params) { // Default local params let localDefaults = { side: St.Side.LEFT, initialSlideValue: 1 } let localParams = Params.parse(params, localDefaults, true); if (params) { // Remove local params before passing the params to the parent // constructor to avoid errors. let prop; for (prop in localDefaults) { if ((prop in params)) delete params[prop]; } } this.actor = new Shell.GenericContainer(params); this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth)); this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight)); this.actor.connect('allocate', Lang.bind(this, this._allocate)); this.actor._delegate = this; this._child = null; // slide parameter: 1 = visible, 0 = hidden. this._slidex = localParams.initialSlideValue; this._side = localParams.side; this._slideoutSize = 0; // minimum size when slided out }, _allocate: function(actor, box, flags) { if (this._child == null) return; let availWidth = box.x2 - box.x1; let availHeight = box.y2 - box.y1; let [minChildWidth, minChildHeight, natChildWidth, natChildHeight] = this._child.get_preferred_size(); let childWidth = natChildWidth; let childHeight = natChildHeight; let childBox = new Clutter.ActorBox(); let slideoutSize = this._slideoutSize; if (this._side == St.Side.LEFT) { childBox.x1 = (this._slidex -1) * (childWidth - slideoutSize); childBox.x2 = slideoutSize + this._slidex*(childWidth - slideoutSize); childBox.y1 = 0; childBox.y2 = childBox.y1 + childHeight; } else if ((this._side == St.Side.RIGHT) || (this._side == St.Side.BOTTOM)) { childBox.x1 = 0; childBox.x2 = childWidth; childBox.y1 = 0; childBox.y2 = childBox.y1 + childHeight; } else if (this._side == St.Side.TOP) { childBox.x1 = 0; childBox.x2 = childWidth; childBox.y1 = (this._slidex -1) * (childHeight - slideoutSize); childBox.y2 = slideoutSize + this._slidex * (childHeight - slideoutSize); } this._child.allocate(childBox, flags); this._child.set_clip(-childBox.x1, -childBox.y1, -childBox.x1+availWidth, -childBox.y1 + availHeight); }, /** * Just the child width but taking into account the slided out part */ _getPreferredWidth: function(actor, forHeight, alloc) { let [minWidth, natWidth] = this._child.get_preferred_width(forHeight); if ((this._side == St.Side.LEFT) || (this._side == St.Side.RIGHT)) { minWidth = (minWidth - this._slideoutSize) * this._slidex + this._slideoutSize; natWidth = (natWidth - this._slideoutSize) * this._slidex + this._slideoutSize; } alloc.min_size = minWidth; alloc.natural_size = natWidth; }, /** * Just the child height but taking into account the slided out part */ _getPreferredHeight: function(actor, forWidth, alloc) { let [minHeight, natHeight] = this._child.get_preferred_height(forWidth); if ((this._side == St.Side.TOP) || (this._side == St.Side.BOTTOM)) { minHeight = (minHeight - this._slideoutSize) * this._slidex + this._slideoutSize; natHeight = (natHeight - this._slideoutSize) * this._slidex + this._slideoutSize; } alloc.min_size = minHeight; alloc.natural_size = natHeight; }, /** * I was expecting it to be a virtual function... stil I don't understand * how things work. */ add_child: function(actor) { // I'm supposed to have only on child if (this._child !== null) this.actor.remove_child(actor); this._child = actor; this.actor.add_child(actor); }, set slidex(value) { this._slidex = value; this._child.queue_relayout(); }, get slidex() { return this._slidex; } }); const DockedDash = new Lang.Class({ Name: 'DashToDock.DockedDash', _init: function(settings, remoteModel, monitorIndex) { this._rtl = (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL); // Load settings this._settings = settings; this._remoteModel = remoteModel; this._monitorIndex = monitorIndex; // Connect global signals this._signalsHandler = new Utils.GlobalSignalsHandler(); this._bindSettingsChanges(); this._position = Utils.getPosition(settings); this._isHorizontal = ((this._position == St.Side.TOP) || (this._position == St.Side.BOTTOM)); // Temporary ignore hover events linked to autohide for whatever reason this._ignoreHover = false; this._oldignoreHover = null; // This variables are linked to the settings regardles of autohide or intellihide // being temporary disable. Get set by _updateVisibilityMode; this._autohideIsEnabled = null; this._intellihideIsEnabled = null; this._fixedIsEnabled = null; // Create intellihide object to monitor windows overlapping this._intellihide = new Intellihide.Intellihide(this._settings, this._monitorIndex); // initialize dock state this._dockState = State.HIDDEN; // Put dock on the required monitor this._monitor = Main.layoutManager.monitors[this._monitorIndex]; // this store size and the position where the dash is shown; // used by intellihide module to check window overlap. this.staticBox = new Clutter.ActorBox(); // Initialize pressure barrier variables this._canUsePressure = false; this._pressureBarrier = null; this._barrier = null; this._removeBarrierTimeoutId = 0; // Initialize dwelling system variables this._dockDwelling = false; this._dockWatch = null; this._dockDwellUserTime = 0; this._dockDwellTimeoutId = 0 // Create a new dash object this.dash = new MyDash.MyDash(this._settings, this._remoteModel, this._monitorIndex); if (!this._settings.get_boolean('show-show-apps-button')) this.dash.hideShowAppsButton(); // Create the main actor and the containers for sliding in and out and // centering, turn on track hover let positionStyleClass = ['top', 'right', 'bottom', 'left']; // This is the centering actor this.actor = new St.Bin({ name: 'dashtodockContainer', reactive: false, style_class: positionStyleClass[this._position], x_align: this._isHorizontal?St.Align.MIDDLE:St.Align.START, y_align: this._isHorizontal?St.Align.START:St.Align.MIDDLE }); this.actor._delegate = this; // This is the sliding actor whose allocation is to be tracked for input regions this._slider = new DashSlideContainer({ side: this._position, initialSlideValue: 0 }); // This is the actor whose hover status us tracked for autohide this._box = new St.BoxLayout({ name: 'dashtodockBox', reactive: true, track_hover: true }); this._box.connect('notify::hover', Lang.bind(this, this._hoverChanged)); // Create and apply height constraint to the dash. It's controlled by this.actor height this.constrainSize = new Clutter.BindConstraint({ source: this.actor, coordinate: this._isHorizontal?Clutter.BindCoordinate.WIDTH:Clutter.BindCoordinate.HEIGHT }); this.dash.actor.add_constraint(this.constrainSize); this._signalsHandler.add([ Main.overview, 'item-drag-begin', Lang.bind(this, this._onDragStart) ], [ Main.overview, 'item-drag-end', Lang.bind(this, this._onDragEnd) ], [ Main.overview, 'item-drag-cancelled', Lang.bind(this, this._onDragEnd) ], [ // update when workarea changes, for instance if other extensions modify the struts //(like moving th panel at the bottom) global.screen, 'workareas-changed', Lang.bind(this, this._resetPosition) ], [ Main.overview, 'showing', Lang.bind(this, this._onOverviewShowing) ], [ Main.overview, 'hiding', Lang.bind(this, this._onOverviewHiding) ], [ // Hide on appview Main.overview.viewSelector, 'page-changed', Lang.bind(this, this._pageChanged) ], [ Main.overview.viewSelector, 'page-empty', Lang.bind(this, this._onPageEmpty) ], [ // Ensure the ShowAppsButton status is kept in sync Main.overview.viewSelector._showAppsButton, 'notify::checked', Lang.bind(this, this._syncShowAppsButtonToggled) ], [ global.screen, 'in-fullscreen-changed', Lang.bind(this, this._updateBarrier) ], [ // Monitor windows overlapping this._intellihide, 'status-changed', Lang.bind(this, this._updateDashVisibility) ], [ // Keep dragged icon consistent in size with this dash this.dash, 'icon-size-changed', Lang.bind(this, function() { Main.overview.dashIconSize = this.dash.iconSize; }) ], [ // This duplicate the similar signal which is in owerview.js. // Being connected and thus executed later this effectively // overwrite any attempt to use the size of the default dash //which given the customization is usually much smaller. // I can't easily disconnect the original signal Main.overview._controls.dash, 'icon-size-changed', Lang.bind(this, function() { Main.overview.dashIconSize = this.dash.iconSize; }) ]); this._injectionsHandler = new Utils.InjectionsHandler(); this._themeManager = new Theming.ThemeManager(this._settings, this); // Since the actor is not a topLevel child and its parent is now not added to the Chrome, // the allocation change of the parent container (slide in and slideout) doesn't trigger // anymore an update of the input regions. Force the update manually. this.actor.connect('notify::allocation', Lang.bind(Main.layoutManager, Main.layoutManager._queueUpdateRegions)); this.dash._container.connect('allocation-changed', Lang.bind(this, this._updateStaticBox)); this._slider.actor.connect(this._isHorizontal ? 'notify::x' : 'notify::y', Lang.bind(this, this._updateStaticBox)); // sync hover after a popupmenu is closed this.dash.connect('menu-closed', Lang.bind(this, function() { this._box.sync_hover(); })); // Load optional features that need to be activated for one dock only if (this._monitorIndex == this._settings.get_int('preferred-monitor')) this._enableExtraFeatures(); // Load optional features that need to be activated once per dock this._optionalScrollWorkspaceSwitch(); // Delay operations that require the shell to be fully loaded and with // user theme applied. this._paintId = this.actor.connect('paint', Lang.bind(this, this._initialize)); // Manage the which is used to reserve space in the overview for the dock // Add and additional dashSpacer positioned according to the dash positioning. // It gets restored on extension unload. this._dashSpacer = new OverviewControls.DashSpacer(); this._dashSpacer.setDashActor(this._box); if (this._position == St.Side.LEFT) Main.overview._controls._group.insert_child_at_index(this._dashSpacer, this._rtl ? -1 : 0); // insert on first else if (this._position == St.Side.RIGHT) Main.overview._controls._group.insert_child_at_index(this._dashSpacer, this._rtl ? 0 : -1); // insert on last else if (this._position == St.Side.TOP) Main.overview._overview.insert_child_at_index(this._dashSpacer, 0); else if (this._position == St.Side.BOTTOM) Main.overview._overview.insert_child_at_index(this._dashSpacer, -1); // Add dash container actor and the container to the Chrome. this.actor.set_child(this._slider.actor); this._slider.add_child(this._box); this._box.add_actor(this.dash.actor); // Add aligning container without tracking it for input region Main.uiGroup.add_child(this.actor); if (this._settings.get_boolean('dock-fixed')) { // Note: tracking the fullscreen directly on the slider actor causes some hiccups when fullscreening // windows of certain applications Main.layoutManager._trackActor(this.actor, {affectsInputRegion: false, trackFullscreen: true}); Main.layoutManager._trackActor(this._slider.actor, {affectsStruts: true}); } else Main.layoutManager._trackActor(this._slider.actor); // Set initial position this._resetDepth(); this._resetPosition(); }, _initialize: function() { if (this._paintId > 0) { this.actor.disconnect(this._paintId); this._paintId=0; } // Apply custome css class according to the settings this._themeManager.updateCustomTheme(); // Since Gnome 3.8 dragging an app without having opened the overview before cause the attemp to //animate a null target since some variables are not initialized when the viewSelector is created if (Main.overview.viewSelector._activePage == null) Main.overview.viewSelector._activePage = Main.overview.viewSelector._workspacesPage; this._updateVisibilityMode(); // In case we are already inside the overview when the extension is loaded, // for instance on unlocking the screen if it was locked with the overview open. if (Main.overview.visibleTarget) { this._onOverviewShowing(); this._pageChanged(); } // Setup pressure barrier (GS38+ only) this._updatePressureBarrier(); this._updateBarrier(); // setup dwelling system if pressure barriers are not available this._setupDockDwellIfNeeded(); }, destroy: function() { // Disconnect global signals this._signalsHandler.destroy(); // The dash, intellihide and themeManager have global signals as well internally this.dash.destroy(); this._intellihide.destroy(); this._themeManager.destroy(); this._injectionsHandler.destroy(); // Destroy main clutter actor: this should be sufficient removing it and // destroying all its children this.actor.destroy(); // Remove barrier timeout if (this._removeBarrierTimeoutId > 0) Mainloop.source_remove(this._removeBarrierTimeoutId); // Remove existing barrier this._removeBarrier(); // Remove pointer watcher if (this._dockWatch) { PointerWatcher.getPointerWatcher()._removeWatch(this._dockWatch); this._dockWatch = null; } // Remove the dashSpacer this._dashSpacer.destroy(); // Restore legacyTray position this._resetLegacyTray(); }, _bindSettingsChanges: function() { this._signalsHandler.add([ this._settings, 'changed::scroll-action', Lang.bind(this, function() { this._optionalScrollWorkspaceSwitch(); }) ], [ this._settings, 'changed::dash-max-icon-size', Lang.bind(this, function() { this.dash.setIconSize(this._settings.get_int('dash-max-icon-size')); }) ], [ this._settings, 'changed::icon-size-fixed', Lang.bind(this, function() { this.dash.setIconSize(this._settings.get_int('dash-max-icon-size')); }) ], [ this._settings, 'changed::show-favorites', Lang.bind(this, function() { this.dash.resetAppIcons(); }) ], [ this._settings, 'changed::show-running', Lang.bind(this, function() { this.dash.resetAppIcons(); }) ], [ this._settings, 'changed::show-apps-at-top', Lang.bind(this, function() { this.dash.resetAppIcons(); }) ], [ this._settings, 'changed::show-show-apps-button', Lang.bind(this, function() { if (this._settings.get_boolean('show-show-apps-button')) this.dash.showShowAppsButton(); else this.dash.hideShowAppsButton(); }) ], [ this._settings, 'changed::dock-fixed', Lang.bind(this, function() { if (this._settings.get_boolean('dock-fixed')) { Main.layoutManager._untrackActor(this.actor); Main.layoutManager._trackActor(this.actor, {affectsInputRegion: false, trackFullscreen: true}); Main.layoutManager._untrackActor(this._slider.actor); Main.layoutManager._trackActor(this._slider.actor, {affectsStruts: true}); } else { Main.layoutManager._untrackActor(this.actor); Main.layoutManager._untrackActor(this._slider.actor); Main.layoutManager._trackActor(this._slider.actor); } this._resetPosition(); // Add or remove barrier depending on if dock-fixed this._updateBarrier(); this._updateVisibilityMode(); }) ], [ this._settings, 'changed::intellihide', Lang.bind(this, this._updateVisibilityMode) ], [ this._settings, 'changed::intellihide-mode', Lang.bind(this, function() { this._intellihide.forceUpdate(); }) ], [ this._settings, 'changed::autohide', Lang.bind(this, function() { this._updateVisibilityMode(); this._updateBarrier(); }) ], [ this._settings, 'changed::autohide-in-fullscreen', Lang.bind(this, this._updateBarrier) ], [ this._settings, 'changed::extend-height', Lang.bind(this, this._resetPosition) ], [ this._settings, 'changed::height-fraction', Lang.bind(this, this._resetPosition) ], [ this._settings, 'changed::require-pressure-to-show', Lang.bind(this, function() { // Remove pointer watcher if (this._dockWatch) { PointerWatcher.getPointerWatcher()._removeWatch(this._dockWatch); this._dockWatch = null; } this._setupDockDwellIfNeeded(); this._updateBarrier(); }) ], [ this._settings, 'changed::pressure-threshold', Lang.bind(this, function() { this._updatePressureBarrier(); this._updateBarrier(); }) ]); }, /** * This is call when visibility settings change */ _updateVisibilityMode: function() { if (this._settings.get_boolean('dock-fixed')) { this._fixedIsEnabled = true; this._autohideIsEnabled = false; this._intellihideIsEnabled = false; } else { this._fixedIsEnabled = false; this._autohideIsEnabled = this._settings.get_boolean('autohide') this._intellihideIsEnabled = this._settings.get_boolean('intellihide') } if (this._intellihideIsEnabled) this._intellihide.enable(); else this._intellihide.disable(); this._updateDashVisibility(); }, /** * Show/hide dash based on, in order of priority: * overview visibility * fixed mode * intellihide * autohide * overview visibility */ _updateDashVisibility: function() { if (Main.overview.visibleTarget) return; if (this._fixedIsEnabled) { this._removeAnimations(); this._animateIn(this._settings.get_double('animation-time'), 0); } else if (this._intellihideIsEnabled) { if (this._intellihide.getOverlapStatus()) { this._ignoreHover = false; // Do not hide if autohide is enabled and mouse is hover if (!this._box.hover || !this._autohideIsEnabled) this._animateOut(this._settings.get_double('animation-time'), 0); } else { this._ignoreHover = true; this._removeAnimations(); this._animateIn(this._settings.get_double('animation-time'), 0); } } else { if (this._autohideIsEnabled) { this._ignoreHover = false; global.sync_pointer(); if (this._box.hover) this._animateIn(this._settings.get_double('animation-time'), 0); else this._animateOut(this._settings.get_double('animation-time'), 0); } else this._animateOut(this._settings.get_double('animation-time'), 0); } }, _onOverviewShowing: function() { this._ignoreHover = true; this._intellihide.disable(); this._removeAnimations(); this._animateIn(this._settings.get_double('animation-time'), 0); }, _onOverviewHiding: function() { this._ignoreHover = false; this._intellihide.enable(); this._updateDashVisibility(); }, _hoverChanged: function() { if (!this._ignoreHover) { // Skip if dock is not in autohide mode for instance because it is shown // by intellihide. if (this._autohideIsEnabled) { if (this._box.hover) this._show(); else this._hide(); } } }, getDockState: function() { return this._dockState; }, _show: function() { if ((this._dockState == State.HIDDEN) || (this._dockState == State.HIDING)) { if (this._dockState == State.HIDING) // suppress all potential queued hiding animations - i.e. added to Tweener but not started, // always give priority to show this._removeAnimations(); this.emit('showing'); this._animateIn(this._settings.get_double('animation-time'), 0); } }, _hide: function() { // If no hiding animation is running or queued if ((this._dockState == State.SHOWN) || (this._dockState == State.SHOWING)) { let delay; if (this._dockState == State.SHOWING) //if a show already started, let it finish; queue hide without removing the show. // to obtain this I increase the delay to avoid the overlap and interference // between the animations delay = this._settings.get_double('hide-delay') + this._settings.get_double('animation-time'); else delay = this._settings.get_double('hide-delay'); this.emit('hiding'); this._animateOut(this._settings.get_double('animation-time'), delay); } }, _animateIn: function(time, delay) { this._dockState = State.SHOWING; Tweener.addTween(this._slider, { slidex: 1, time: time, delay: delay, transition: 'easeOutQuad', onComplete: Lang.bind(this, function() { this._dockState = State.SHOWN; // Remove barrier so that mouse pointer is released and can access monitors on other side of dock // NOTE: Delay needed to keep mouse from moving past dock and re-hiding dock immediately. This // gives users an opportunity to hover over the dock if (this._removeBarrierTimeoutId > 0) Mainloop.source_remove(this._removeBarrierTimeoutId); this._removeBarrierTimeoutId = Mainloop.timeout_add(100, Lang.bind(this, this._removeBarrier)); }) }); }, _animateOut: function(time, delay) { this._dockState = State.HIDING; Tweener.addTween(this._slider, { slidex: 0, time: time, delay: delay , transition: 'easeOutQuad', onComplete: Lang.bind(this, function() { this._dockState = State.HIDDEN; // Remove queued barried removal if any if (this._removeBarrierTimeoutId > 0) Mainloop.source_remove(this._removeBarrierTimeoutId); this._updateBarrier(); }) }); }, /** * Dwelling system based on the GNOME Shell 3.14 messageTray code. */ _setupDockDwellIfNeeded: function() { // If we don't have extended barrier features, then we need // to support the old tray dwelling mechanism. if (!global.display.supports_extended_barriers() || !this._settings.get_boolean('require-pressure-to-show')) { let pointerWatcher = PointerWatcher.getPointerWatcher(); this._dockWatch = pointerWatcher.addWatch(DOCK_DWELL_CHECK_INTERVAL, Lang.bind(this, this._checkDockDwell)); this._dockDwelling = false; this._dockDwellUserTime = 0; } }, _checkDockDwell: function(x, y) { let workArea = Main.layoutManager.getWorkAreaForMonitor(this._monitor.index) let shouldDwell; // Check for the correct screen edge, extending the sensitive area to the whole workarea, // minus 1 px to avoid conflicting with other active corners. if (this._position == St.Side.LEFT) shouldDwell = (x == this._monitor.x) && (y > workArea.y) && (y < workArea.y + workArea.height); else if (this._position == St.Side.RIGHT) shouldDwell = (x == this._monitor.x + this._monitor.width - 1) && (y > workArea.y) && (y < workArea.y + workArea.height); else if (this._position == St.Side.TOP) shouldDwell = (y == this._monitor.y) && (x > workArea.x) && (x < workArea.x + workArea.width); else if (this._position == St.Side.BOTTOM) shouldDwell = (y == this._monitor.y + this._monitor.height - 1) && (x > workArea.x) && (x < workArea.x + workArea.width); if (shouldDwell) { // We only set up dwell timeout when the user is not hovering over the dock // already (!this._box.hover). // The _dockDwelling variable is used so that we only try to // fire off one dock dwell - if it fails (because, say, the user has the mouse down), // we don't try again until the user moves the mouse up and down again. if (!this._dockDwelling && !this._box.hover && (this._dockDwellTimeoutId == 0)) { // Save the interaction timestamp so we can detect user input let focusWindow = global.display.focus_window; this._dockDwellUserTime = focusWindow ? focusWindow.user_time : 0; this._dockDwellTimeoutId = Mainloop.timeout_add(this._settings.get_double('show-delay') * 1000, Lang.bind(this, this._dockDwellTimeout)); GLib.Source.set_name_by_id(this._dockDwellTimeoutId, '[dash-to-dock] this._dockDwellTimeout'); } this._dockDwelling = true; } else { this._cancelDockDwell(); this._dockDwelling = false; } }, _cancelDockDwell: function() { if (this._dockDwellTimeoutId != 0) { Mainloop.source_remove(this._dockDwellTimeoutId); this._dockDwellTimeoutId = 0; } }, _dockDwellTimeout: function() { this._dockDwellTimeoutId = 0; if (!this._settings.get_boolean('autohide-in-fullscreen') && this._monitor.inFullscreen) return GLib.SOURCE_REMOVE; // We don't want to open the tray when a modal dialog // is up, so we check the modal count for that. When we are in the // overview we have to take the overview's modal push into account if (Main.modalCount > (Main.overview.visible ? 1 : 0)) return GLib.SOURCE_REMOVE; // If the user interacted with the focus window since we started the tray // dwell (by clicking or typing), don't activate the message tray let focusWindow = global.display.focus_window; let currentUserTime = focusWindow ? focusWindow.user_time : 0; if (currentUserTime != this._dockDwellUserTime) return GLib.SOURCE_REMOVE; // Reuse the pressure version function, the logic is the same this._onPressureSensed(); return GLib.SOURCE_REMOVE; }, _updatePressureBarrier: function() { this._canUsePressure = global.display.supports_extended_barriers(); let pressureThreshold = this._settings.get_double('pressure-threshold'); // Remove existing pressure barrier if (this._pressureBarrier) { this._pressureBarrier.destroy(); this._pressureBarrier = null; } if (this._barrier) { this._barrier.destroy(); this._barrier = null; } // Create new pressure barrier based on pressure threshold setting if (this._canUsePressure) { this._pressureBarrier = new Layout.PressureBarrier(pressureThreshold, this._settings.get_double('show-delay')*1000, Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW); this._pressureBarrier.connect('trigger', Lang.bind(this, function(barrier) { if (!this._settings.get_boolean('autohide-in-fullscreen') && this._monitor.inFullscreen) return; this._onPressureSensed(); })); } }, /** * handler for mouse pressure sensed */ _onPressureSensed: function() { if (Main.overview.visibleTarget) return; // In case the mouse move away from the dock area before hovering it, in such case the leave event // would never be triggered and the dock would stay visible forever. let triggerTimeoutId = Mainloop.timeout_add(250, Lang.bind(this, function() { triggerTimeoutId = 0; let [x, y, mods] = global.get_pointer(); let shouldHide = true; switch (this._position) { case St.Side.LEFT: if (x <= this.staticBox.x2 && x >= this._monitor.x && y >= this._monitor.y && y <= this._monitor.y + this._monitor.height) { shouldHide = false; } break; case St.Side.RIGHT: if (x >= this.staticBox.x1 && x <= this._monitor.x + this._monitor.width && y >= this._monitor.y && y <= this._monitor.y + this._monitor.height) { shouldHide = false; } break; case St.Side.TOP: if (x >= this._monitor.x && x <= this._monitor.x + this._monitor.width && y <= this.staticBox.y2 && y >= this._monitor.y) { shouldHide = false; } break; case St.Side.BOTTOM: if (x >= this._monitor.x && x <= this._monitor.x + this._monitor.width && y >= this.staticBox.y1 && y <= this._monitor.y + this._monitor.height) { shouldHide = false; } } if (shouldHide) { this._hoverChanged(); return GLib.SOURCE_REMOVE; } else { return GLib.SOURCE_CONTINUE; } })); this._show(); }, /** * Remove pressure barrier */ _removeBarrier: function() { if (this._barrier) { if (this._pressureBarrier) this._pressureBarrier.removeBarrier(this._barrier); this._barrier.destroy(); this._barrier = null; } this._removeBarrierTimeoutId = 0; return false; }, /** * Update pressure barrier size */ _updateBarrier: function() { // Remove existing barrier this._removeBarrier(); // The barrier needs to be removed in fullscreen with autohide disabled, otherwise the mouse can // get trapped on monitor. if (this._monitor.inFullscreen && !this._settings.get_boolean('autohide-in-fullscreen')) return // Manually reset pressure barrier // This is necessary because we remove the pressure barrier when it is triggered to show the dock if (this._pressureBarrier) { this._pressureBarrier._reset(); this._pressureBarrier._isTriggered = false; } // Create new barrier // The barrier extends to the whole workarea, minus 1 px to avoid conflicting with other active corners // Note: dash in fixed position doesn't use pressure barrier. if (this._canUsePressure && this._autohideIsEnabled && this._settings.get_boolean('require-pressure-to-show')) { let x1, x2, y1, y2, direction; let workArea = Main.layoutManager.getWorkAreaForMonitor(this._monitor.index) if (this._position == St.Side.LEFT) { x1 = this._monitor.x + 1; x2 = x1; y1 = workArea.y + 1; y2 = workArea.y + workArea.height - 1; direction = Meta.BarrierDirection.POSITIVE_X; } else if (this._position == St.Side.RIGHT) { x1 = this._monitor.x + this._monitor.width - 1; x2 = x1; y1 = workArea.y + 1; y2 = workArea.y + workArea.height - 1; direction = Meta.BarrierDirection.NEGATIVE_X; } else if (this._position == St.Side.TOP) { x1 = workArea.x + 1; x2 = workArea.x + workArea.width - 1; y1 = this._monitor.y; y2 = y1; direction = Meta.BarrierDirection.POSITIVE_Y; } else if (this._position == St.Side.BOTTOM) { x1 = workArea.x + 1; x2 = workArea.x + workArea.width - 1; y1 = this._monitor.y + this._monitor.height; y2 = y1; direction = Meta.BarrierDirection.NEGATIVE_Y; } this._barrier = new Meta.Barrier({ display: global.display, x1: x1, x2: x2, y1: y1, y2: y2, directions: direction }); if (this._pressureBarrier) this._pressureBarrier.addBarrier(this._barrier); } }, _isPrimaryMonitor: function() { return (this._monitorIndex == Main.layoutManager.primaryIndex); }, _resetPosition: function() { // Ensure variables linked to settings are updated. this._updateVisibilityMode(); let extendHeight = this._settings.get_boolean('extend-height'); // Note: do not use the workarea coordinates in the direction on which the dock is placed, // to avoid a loop [position change -> workArea change -> position change] with // fixed dock. let workArea = Main.layoutManager.getWorkAreaForMonitor(this._monitorIndex); // Reserve space for the dash on the overview // if the dock is on the primary monitor if (this._isPrimaryMonitor()) this._dashSpacer.show(); else // No space is required in the overview of the dash this._dashSpacer.hide(); let fraction = this._settings.get_double('height-fraction'); if (extendHeight) fraction = 1; else if ((fraction < 0) || (fraction > 1)) fraction = 0.95; let anchor_point; if (this._isHorizontal) { this.actor.width = Math.round( fraction * workArea.width); let pos_y; if (this._position == St.Side.BOTTOM) { pos_y = this._monitor.y + this._monitor.height; anchor_point = Clutter.Gravity.SOUTH_WEST; } else { pos_y = this._monitor.y; anchor_point = Clutter.Gravity.NORTH_WEST; } this.actor.move_anchor_point_from_gravity(anchor_point); this.actor.x = workArea.x + Math.round((1 - fraction) / 2 * workArea.width); this.actor.y = pos_y; if (extendHeight) { this.dash._container.set_width(this.actor.width); this.actor.add_style_class_name('extended'); } else { this.dash._container.set_width(-1); this.actor.remove_style_class_name('extended'); } } else { this.actor.height = Math.round(fraction * workArea.height); let pos_x; if (this._position == St.Side.RIGHT) { pos_x = this._monitor.x + this._monitor.width; anchor_point = Clutter.Gravity.NORTH_EAST; } else { pos_x = this._monitor.x; anchor_point = Clutter.Gravity.NORTH_WEST; } this.actor.move_anchor_point_from_gravity(anchor_point); this.actor.x = pos_x; this.actor.y = workArea.y + Math.round((1 - fraction) / 2 * workArea.height); if (extendHeight) { this.dash._container.set_height(this.actor.height); this.actor.add_style_class_name('extended'); } else { this.dash._container.set_height(-1); this.actor.remove_style_class_name('extended'); } } this._y0 = this.actor.y; this._adjustLegacyTray(); }, // Set the dash at the correct depth in z _resetDepth: function() { // Keep the dash below the modalDialogGroup and the legacyTray if (Main.legacyTray && Main.legacyTray.actor) Main.layoutManager.uiGroup.set_child_below_sibling(this.actor, Main.legacyTray.actor); else Main.layoutManager.uiGroup.set_child_below_sibling(this.actor, Main.layoutManager.modalDialogGroup); }, _adjustLegacyTray: function() { // The legacyTray has been removed in GNOME Shell 3.26. // Once we drop support for previous releases this fuction can be dropped too. if (!Main.legacyTray) return; let use_work_area = true; if (this._fixedIsEnabled && !this._settings.get_boolean('extend-height') && this._isPrimaryMonitor() && ((this._position == St.Side.BOTTOM) || (this._position == St.Side.LEFT))) use_work_area = false; Main.legacyTray.actor.clear_constraints(); let constraint = new Layout.MonitorConstraint({ primary: true, work_area: use_work_area }); Main.legacyTray.actor.add_constraint(constraint); }, _resetLegacyTray: function() { // The legacyTray has been removed in GNOME Shell 3.26. // Once we drop support for previous releases this fuction can be dropped too. if (!Main.legacyTray) return; Main.legacyTray.actor.clear_constraints(); let constraint = new Layout.MonitorConstraint({ primary: true, work_area: true }); Main.legacyTray.actor.add_constraint(constraint); }, _updateStaticBox: function() { this.staticBox.init_rect( this.actor.x + this._slider.actor.x - (this._position == St.Side.RIGHT ? this._box.width : 0), this.actor.y + this._slider.actor.y - (this._position == St.Side.BOTTOM ? this._box.height : 0), this._box.width, this._box.height ); this._intellihide.updateTargetBox(this.staticBox); }, _removeAnimations: function() { Tweener.removeTweens(this._slider); }, _onDragStart: function() { // The dash need to be above the top_window_group, otherwise it doesn't // accept dnd of app icons when not in overiew mode. Main.layoutManager.uiGroup.set_child_above_sibling(this.actor, global.top_window_group); this._oldignoreHover = this._ignoreHover; this._ignoreHover = true; this._animateIn(this._settings.get_double('animation-time'), 0); }, _onDragEnd: function() { // Restore drag default dash stack order this._resetDepth(); if (this._oldignoreHover !== null) this._ignoreHover = this._oldignoreHover; this._oldignoreHover = null; this._box.sync_hover(); if (Main.overview._shown) this._pageChanged(); }, _pageChanged: function() { let activePage = Main.overview.viewSelector.getActivePage(); let dashVisible = (activePage == ViewSelector.ViewPage.WINDOWS || activePage == ViewSelector.ViewPage.APPS); if (dashVisible) this._animateIn(this._settings.get_double('animation-time'), 0); else this._animateOut(this._settings.get_double('animation-time'), 0); }, _onPageEmpty: function() { /* The dash spacer is required only in the WINDOWS view if in the default position. * The 'page-empty' signal is emitted in between a change of view, * signalling the spacer can be added and removed without visible effect, * as it's done for the upstream dashSpacer. * * Moreover, hiding the spacer ensure the appGrid allocaton is triggered. * This matter as the appview spring animation is triggered by to first reallocaton of the appGrid, * (See appDisplay.js, line 202 on GNOME Shell 3.14: * this._grid.actor.connect('notify::allocation', ...) * which in turn seems to be triggered by changes in the other actors in the overview. * Normally, as far as I could understand, either the dashSpacer being hidden or the workspacesThumbnails * sliding out would trigger the allocation. However, with no stock dash * and no thumbnails, which happen if the user configured only 1 and static workspace, * the animation out of icons is not played. */ let activePage = Main.overview.viewSelector.getActivePage(); this._dashSpacer.visible = (this._isHorizontal || activePage == ViewSelector.ViewPage.WINDOWS); }, /** * Show dock and give key focus to it */ _onAccessibilityFocus: function() { this._box.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); this._animateIn(this._settings.get_double('animation-time'), 0); }, /** * Keep ShowAppsButton status in sync with the overview status */ _syncShowAppsButtonToggled: function() { let status = Main.overview.viewSelector._showAppsButton.checked; if (this.dash.showAppsButton.checked !== status) this.dash.showAppsButton.checked = status; }, // Optional features to be enabled only for the main Dock _enableExtraFeatures: function() { // Restore dash accessibility Main.ctrlAltTabManager.addGroup( this.dash.actor, _('Dash'), 'user-bookmarks-symbolic', {focusCallback: Lang.bind(this, this._onAccessibilityFocus)}); }, /** * Switch workspace by scrolling over the dock */ _optionalScrollWorkspaceSwitch: function() { let label = 'optionalScrollWorkspaceSwitch'; function isEnabled() { return this._settings.get_enum('scroll-action') === scrollAction.SWITCH_WORKSPACE; } this._settings.connect('changed::scroll-action', Lang.bind(this, function() { if (Lang.bind(this, isEnabled)()) Lang.bind(this, enable)(); else Lang.bind(this, disable)(); })); if (Lang.bind(this, isEnabled)()) Lang.bind(this, enable)(); function enable() { this._signalsHandler.removeWithLabel(label); this._signalsHandler.addWithLabel(label, [ this._box, 'scroll-event', Lang.bind(this, onScrollEvent) ]); this._optionalScrollWorkspaceSwitchDeadTimeId = 0; } function disable() { this._signalsHandler.removeWithLabel(label); if (this._optionalScrollWorkspaceSwitchDeadTimeId > 0) { Mainloop.source_remove(this._optionalScrollWorkspaceSwitchDeadTimeId); this._optionalScrollWorkspaceSwitchDeadTimeId = 0; } } // This was inspired to desktop-scroller@obsidien.github.com function onScrollEvent(actor, event) { // When in overview change workscape only in windows view if (Main.overview.visible && Main.overview.viewSelector.getActivePage() !== ViewSelector.ViewPage.WINDOWS) return false; let activeWs = global.screen.get_active_workspace(); let direction = null; switch (event.get_scroll_direction()) { case Clutter.ScrollDirection.UP: direction = Meta.MotionDirection.UP; break; case Clutter.ScrollDirection.DOWN: direction = Meta.MotionDirection.DOWN; break; case Clutter.ScrollDirection.SMOOTH: let [dx, dy] = event.get_scroll_delta(); if (dy < 0) direction = Meta.MotionDirection.UP; else if (dy > 0) direction = Meta.MotionDirection.DOWN; break; } if (direction !== null) { // Prevent scroll events from triggering too many workspace switches // by adding a 250ms deadtime between each scroll event. // Usefull on laptops when using a touchpad. // During the deadtime do nothing if (this._optionalScrollWorkspaceSwitchDeadTimeId > 0) return false; else this._optionalScrollWorkspaceSwitchDeadTimeId = Mainloop.timeout_add(250, Lang.bind(this, function() { this._optionalScrollWorkspaceSwitchDeadTimeId = 0; })); let ws; ws = activeWs.get_neighbor(direction) if (Main.wm._workspaceSwitcherPopup == null) Main.wm._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup(); // Set the actor non reactive, so that it doesn't prevent the // clicks events from reaching the dash actor. I can't see a reason // why it should be reactive. Main.wm._workspaceSwitcherPopup.actor.reactive = false; Main.wm._workspaceSwitcherPopup.connect('destroy', function() { Main.wm._workspaceSwitcherPopup = null; }); // Do not show wokspaceSwithcer in overview if (!Main.overview.visible) Main.wm._workspaceSwitcherPopup.display(direction, ws.index()); Main.wm.actionMoveWorkspace(ws); return true; } else return false; } }, _activateApp: function(appIndex) { let children = this.dash._box.get_children().filter(function(actor) { return actor.child && actor.child._delegate && actor.child._delegate.app; }); // Apps currently in the dash let apps = children.map(function(actor) { return actor.child._delegate; }); // Activate with button = 1, i.e. same as left click let button = 1; if (appIndex < apps.length) apps[appIndex].activate(button); } }); Signals.addSignalMethods(DockedDash.prototype); /* * Handle keybaord shortcuts */ const KeyboardShortcuts = new Lang.Class({ Name: 'DashToDock.KeyboardShortcuts', _numHotkeys: 10, _init: function(settings, allDocks){ this._settings = settings; this._allDocks = allDocks; this._signalsHandler = new Utils.GlobalSignalsHandler(); this._hotKeysEnabled = false; if (this._settings.get_boolean('hot-keys')) this._enableHotKeys(); this._signalsHandler.add([ this._settings, 'changed::hot-keys', Lang.bind(this, function() { if (this._settings.get_boolean('hot-keys')) Lang.bind(this, this._enableHotKeys)(); else Lang.bind(this, this._disableHotKeys)(); }) ]); this._optionalNumberOverlay(); }, destroy: function (){ // Remove keybindings this._disableHotKeys(); this._disableExtraShortcut(); this._signalsHandler.destroy(); }, _enableHotKeys: function() { if (this._hotKeysEnabled) return; // Setup keyboard bindings for dash elements let keys = ['app-hotkey-', 'app-shift-hotkey-', 'app-ctrl-hotkey-']; keys.forEach( function(key) { for (let i = 0; i < this._numHotkeys; i++) { let appNum = i; Main.wm.addKeybinding(key + (i + 1), this._settings, Meta.KeyBindingFlags.NONE, Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW, Lang.bind(this, function() { this._allDocks[0]._activateApp(appNum); this._showOverlay(); })); } }, this); this._hotKeysEnabled = true; }, _disableHotKeys: function() { if (!this._hotKeysEnabled) return; let keys = ['app-hotkey-', 'app-shift-hotkey-', 'app-ctrl-hotkey-']; keys.forEach( function(key) { for (let i = 0; i < this._numHotkeys; i++) Main.wm.removeKeybinding(key + (i + 1)); }, this); this._hotKeysEnabled = false; }, _optionalNumberOverlay: function() { this._shortcutIsSet = false; // Enable extra shortcut if either 'overlay' or 'show-dock' are true if (this._settings.get_boolean('hot-keys') && (this._settings.get_boolean('hotkeys-overlay') || this._settings.get_boolean('hotkeys-show-dock'))) this._enableExtraShortcut(); this._signalsHandler.add([ this._settings, 'changed::hot-keys', Lang.bind(this, this._checkHotkeysOptions) ], [ this._settings, 'changed::hotkeys-overlay', Lang.bind(this, this._checkHotkeysOptions) ], [ this._settings, 'changed::hotkeys-show-dock', Lang.bind(this, this._checkHotkeysOptions) ]); }, _checkHotkeysOptions: function() { if (this._settings.get_boolean('hot-keys') && (this._settings.get_boolean('hotkeys-overlay') || this._settings.get_boolean('hotkeys-show-dock'))) this._enableExtraShortcut(); else this._disableExtraShortcut(); }, _enableExtraShortcut: function() { if (!this._shortcutIsSet) { Main.wm.addKeybinding('shortcut', this._settings, Meta.KeyBindingFlags.NONE, Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW, Lang.bind(this, this._showOverlay)); this._shortcutIsSet = true; } }, _disableExtraShortcut: function() { if (this._shortcutIsSet) { Main.wm.removeKeybinding('shortcut'); this._shortcutIsSet = false; } }, _showOverlay: function() { for (let i = 0; i < this._allDocks.length; i++) { let dock = this._allDocks[i]; if (dock._settings.get_boolean('hotkeys-overlay')) dock.dash.toggleNumberOverlay(true); // Restart the counting if the shortcut is pressed again if (dock._numberOverlayTimeoutId) { Mainloop.source_remove(dock._numberOverlayTimeoutId); dock._numberOverlayTimeoutId = 0; } // Hide the overlay/dock after the timeout let timeout = dock._settings.get_double('shortcut-timeout') * 1000; dock._numberOverlayTimeoutId = Mainloop.timeout_add(timeout, Lang.bind(dock, function() { dock._numberOverlayTimeoutId = 0; dock.dash.toggleNumberOverlay(false); // Hide the dock again if necessary dock._updateDashVisibility(); })); // Show the dock if it is hidden if (dock._settings.get_boolean('hotkeys-show-dock')) { let showDock = (dock._intellihideIsEnabled || dock._autohideIsEnabled); if (showDock) dock._show(); } } } }); /** * Isolate overview to open new windows for inactive apps * Note: the future implementaion is not fully contained here. Some bits are around in other methods of other classes. * This class just take care of enabling/disabling the option. */ const WorkspaceIsolation = new Lang.Class({ Name: 'DashToDock.WorkspaceIsolation', _init: function(settings, allDocks) { this._settings = settings; this._allDocks = allDocks; this._signalsHandler = new Utils.GlobalSignalsHandler(); this._injectionsHandler = new Utils.InjectionsHandler(); this._signalsHandler.add([ this._settings, 'changed::isolate-workspaces', Lang.bind(this, function() { this._allDocks.forEach(function(dock) { dock.dash.resetAppIcons(); }); if (this._settings.get_boolean('isolate-workspaces') || this._settings.get_boolean('isolate-monitors')) Lang.bind(this, this._enable)(); else Lang.bind(this, this._disable)(); }) ],[ this._settings, 'changed::isolate-monitors', Lang.bind(this, function() { this._allDocks.forEach(function(dock) { dock.dash.resetAppIcons(); }); if (this._settings.get_boolean('isolate-workspaces') || this._settings.get_boolean('isolate-monitors')) Lang.bind(this, this._enable)(); else Lang.bind(this, this._disable)(); }) ]); if (this._settings.get_boolean('isolate-workspaces') || this._settings.get_boolean('isolate-monitors')) this._enable(); }, _enable: function() { // ensure I never double-register/inject // although it should never happen this._disable(); this._allDocks.forEach(function(dock) { this._signalsHandler.addWithLabel('isolation', [ global.screen, 'restacked', Lang.bind(dock.dash, dock.dash._queueRedisplay) ], [ global.window_manager, 'switch-workspace', Lang.bind(dock.dash, dock.dash._queueRedisplay) ]); // This last signal is only needed for monitor isolation, as windows // might migrate from one monitor to another without triggering 'restacked' if (this._settings.get_boolean('isolate-monitors')) this._signalsHandler.addWithLabel('isolation', [ global.screen, 'window-entered-monitor', Lang.bind(dock.dash, dock.dash._queueRedisplay) ]); }, this); // here this is the Shell.App function IsolatedOverview() { // These lines take care of Nautilus for icons on Desktop let windows = this.get_windows().filter(function(w) { return w.get_workspace().index() == global.screen.get_active_workspace_index(); }); if (windows.length == 1) if (windows[0].skip_taskbar) return this.open_new_window(-1); if (this.is_on_workspace(global.screen.get_active_workspace())) return Main.activateWindow(windows[0]); return this.open_new_window(-1); } this._injectionsHandler.addWithLabel('isolation', [ Shell.App.prototype, 'activate', IsolatedOverview ]); }, _disable: function () { this._signalsHandler.removeWithLabel('isolation'); this._injectionsHandler.removeWithLabel('isolation'); }, destroy: function() { this._signalsHandler.destroy(); this._injectionsHandler.destroy(); } }); var DockManager = new Lang.Class({ Name: 'DashToDock.DockManager', _init: function() { this._remoteModel = new LauncherAPI.LauncherEntryRemoteModel(); this._settings = Convenience.getSettings('org.gnome.shell.extensions.dash-to-dock'); this._oldDash = Main.overview._dash; /* Array of all the docks created */ this._allDocks = []; this._createDocks(); // status variable: true when the overview is shown through the dash // applications button. this._forcedOverview = false; // Connect relevant signals to the toggling function this._bindSettingsChanges(); }, _toggle: function() { this._deleteDocks(); this._createDocks(); this.emit('toggled'); }, _bindSettingsChanges: function() { // Connect relevant signals to the toggling function this._signalsHandler = new Utils.GlobalSignalsHandler(); this._signalsHandler.add([ global.screen, 'monitors-changed', Lang.bind(this, this._toggle) ], [ this._settings, 'changed::multi-monitor', Lang.bind(this, this._toggle) ], [ this._settings, 'changed::preferred-monitor', Lang.bind(this, this._toggle) ], [ this._settings, 'changed::dock-position', Lang.bind(this, this._toggle) ], [ this._settings, 'changed::extend-height', Lang.bind(this, this._adjustPanelCorners) ], [ this._settings, 'changed::dock-fixed', Lang.bind(this, this._adjustPanelCorners) ]); }, _createDocks: function() { this._preferredMonitorIndex = this._settings.get_int('preferred-monitor'); // In case of multi-monitor, we consider the dock on the primary monitor to be the preferred (main) one // regardless of the settings // The dock goes on the primary monitor also if the settings are incosistent (e.g. desired monitor not connected). if (this._settings.get_boolean('multi-monitor') || this._preferredMonitorIndex < 0 || this._preferredMonitorIndex > Main.layoutManager.monitors.length - 1 ) { this._preferredMonitorIndex = Main.layoutManager.primaryIndex; } else { // Gdk and shell monitors numbering differ at least under wayland: // While the primary monitor appears to be always index 0 in Gdk, // the shell can assign a different number (Main.layoutManager.primaryMonitor) // This ensure the indexing in the settings (Gdk) and in the shell are matched, // i.e. that we start counting from the primaryMonitorIndex this._preferredMonitorIndex = (Main.layoutManager.primaryIndex + this._preferredMonitorIndex) % Main.layoutManager.monitors.length ; } // First we create the main Dock, to get the extra features to bind to this one let dock = new DockedDash(this._settings, this._remoteModel, this._preferredMonitorIndex); this._mainShowAppsButton = dock.dash.showAppsButton; this._allDocks.push(dock); // connect app icon into the view selector dock.dash.showAppsButton.connect('notify::checked', Lang.bind(this, this._onShowAppsButtonToggled)); // Make the necessary changes to Main.overview._dash this._prepareMainDash(); // Adjust corners if necessary this._adjustPanelCorners(); if (this._settings.get_boolean('multi-monitor')) { let nMon = Main.layoutManager.monitors.length; for (let iMon = 0; iMon < nMon; iMon++) { if (iMon == this._preferredMonitorIndex) continue; let dock = new DockedDash(this._settings, this._remoteModel, iMon); this._allDocks.push(dock); // connect app icon into the view selector dock.dash.showAppsButton.connect('notify::checked', Lang.bind(this, this._onShowAppsButtonToggled)); } } // Load optional features. We load *after* the docks are created, since // we need to connect the signals to all dock instances. this._workspaceIsolation = new WorkspaceIsolation(this._settings, this._allDocks); this._keyboardShortcuts = new KeyboardShortcuts(this._settings, this._allDocks); }, _prepareMainDash: function() { // Pretend I'm the dash: meant to make appgrd swarm animation come from the // right position of the appShowButton. Main.overview._dash = this._allDocks[0].dash; // set stored icon size to the new dash Main.overview.dashIconSize = this._allDocks[0].dash.iconSize; // Hide usual Dash Main.overview._controls.dash.actor.hide(); // Also set dash width to 1, so it's almost not taken into account by code // calculaing the reserved space in the overview. The reason to keep it at 1 is // to allow its visibility change to trigger an allocaion of the appGrid which // in turn is triggergin the appsIcon spring animation, required when no other // actors has this effect, i.e in horizontal mode and without the workspaceThumnails // 1 static workspace only) Main.overview._controls.dash.actor.set_width(1); }, _deleteDocks: function() { // Remove extra features this._workspaceIsolation.destroy(); this._keyboardShortcuts.destroy(); // Delete all docks let nDocks = this._allDocks.length; for (let i = nDocks-1; i >= 0; i--) { this._allDocks[i].destroy(); this._allDocks.pop(); } }, _restoreDash: function() { Main.overview._controls.dash.actor.show(); Main.overview._controls.dash.actor.set_width(-1); //reset default dash size // This force the recalculation of the icon size Main.overview._controls.dash._maxHeight = -1; // reset stored icon size to the default dash Main.overview.dashIconSize = Main.overview._controls.dash.iconSize; Main.overview._dash = this._oldDash; }, _onShowAppsButtonToggled: function(button) { // Sync the status of the default appButtons. Only if the two statuses are // different, that means the user interacted with the extension provided // application button, cutomize the behaviour. Otherwise the shell has changed the // status (due to the _syncShowAppsButtonToggled function below) and it // has already performed the desired action. let animate = this._settings.get_boolean('animate-show-apps'); let selector = Main.overview.viewSelector; if (selector._showAppsButton.checked !== button.checked) { // find visible view let visibleView; Main.overview.viewSelector.appDisplay._views.every(function(v, index) { if (v.view.actor.visible) { visibleView = index; return false; } else return true; }); if (button.checked) { // force spring animation triggering.By default the animation only // runs if we are already inside the overview. if (!Main.overview._shown) { this._forcedOverview = true; let view = Main.overview.viewSelector.appDisplay._views[visibleView].view; let grid = view._grid; if (animate) { // Animate in the the appview, hide the appGrid to avoiud flashing // Go to the appView before entering the overview, skipping the workspaces. // Do this manually avoiding opacity in transitions so that the setting of the opacity // to 0 doesn't get overwritten. Main.overview.viewSelector._activePage.opacity = 0; Main.overview.viewSelector._activePage.hide(); Main.overview.viewSelector._activePage = Main.overview.viewSelector._appsPage; Main.overview.viewSelector._activePage.show(); grid.actor.opacity = 0; // The animation has to be trigered manually because the AppDisplay.animate // method is waiting for an allocation not happening, as we skip the workspace view // and the appgrid could already be allocated from previous shown. // It has to be triggered after the overview is shown as wrong coordinates are obtained // otherwise. let overviewShownId = Main.overview.connect('shown', Lang.bind(this, function() { Main.overview.disconnect(overviewShownId); Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() { grid.actor.opacity = 255; grid.animateSpring(IconGrid.AnimationDirection.IN, this._allDocks[0].dash.showAppsButton); })); })); } else { Main.overview.viewSelector._activePage = Main.overview.viewSelector._appsPage; Main.overview.viewSelector._activePage.show(); grid.actor.opacity = 255; } } // Finally show the overview selector._showAppsButton.checked = true; Main.overview.show(); } else { if (this._forcedOverview) { // force exiting overview if needed if (animate) { // Manually trigger springout animation without activating the // workspaceView to avoid the zoomout animation. Hide the appPage // onComplete to avoid ugly flashing of original icons. let view = Main.overview.viewSelector.appDisplay._views[visibleView].view; let grid = view._grid; view.animate(IconGrid.AnimationDirection.OUT, Lang.bind(this, function() { Main.overview.viewSelector._appsPage.hide(); Main.overview.hide(); selector._showAppsButton.checked = false; this._forcedOverview = false; })); } else { Main.overview.hide(); this._forcedOverview = false; } } else { selector._showAppsButton.checked = false; this._forcedOverview = false; } } } // whenever the button is unactivated even if not by the user still reset the // forcedOverview flag if (button.checked == false) this._forcedOverview = false; }, destroy: function() { this._signalsHandler.destroy(); this._deleteDocks(); this._revertPanelCorners(); this._restoreDash(); this._remoteModel.destroy(); }, /** * Adjust Panel corners */ _adjustPanelCorners: function() { let position = Utils.getPosition(this._settings); let isHorizontal = ((position == St.Side.TOP) || (position == St.Side.BOTTOM)); let extendHeight = this._settings.get_boolean('extend-height'); let fixedIsEnabled = this._settings.get_boolean('dock-fixed'); let dockOnPrimary = this._settings.get_boolean('multi-monitor') || this._preferredMonitorIndex == Main.layoutManager.primaryIndex; if (!isHorizontal && dockOnPrimary && extendHeight && fixedIsEnabled) { Main.panel._rightCorner.actor.hide(); Main.panel._leftCorner.actor.hide(); } else this._revertPanelCorners(); }, _revertPanelCorners: function() { Main.panel._leftCorner.actor.show(); Main.panel._rightCorner.actor.show(); } }); Signals.addSignalMethods(DockManager.prototype); dash-to-dock-extensions.gnome.org-v63/extension.js000066400000000000000000000010351326047523300224140ustar00rootroot00000000000000// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Me = imports.misc.extensionUtils.getCurrentExtension(); const Docking = Me.imports.docking; const Convenience = Me.imports.convenience; // We declare this with var so it can be accessed by other extensions in // GNOME Shell 3.26+ (mozjs52+). var dockManager; function init() { Convenience.initTranslations('dashtodock'); } function enable() { dockManager = new Docking.DockManager(); } function disable() { dockManager.destroy(); dockManager=null; } dash-to-dock-extensions.gnome.org-v63/intellihide.js000066400000000000000000000254021326047523300226760ustar00rootroot00000000000000// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const GLib = imports.gi.GLib; const Lang = imports.lang; const Mainloop = imports.mainloop; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const Main = imports.ui.main; const Signals = imports.signals; const Me = imports.misc.extensionUtils.getCurrentExtension(); const Utils = Me.imports.utils; // A good compromise between reactivity and efficiency; to be tuned. const INTELLIHIDE_CHECK_INTERVAL = 100; const OverlapStatus = { UNDEFINED: -1, FALSE: 0, TRUE: 1 }; const IntellihideMode = { ALL_WINDOWS: 0, FOCUS_APPLICATION_WINDOWS: 1, MAXIMIZED_WINDOWS : 2 }; // List of windows type taken into account. Order is important (keep the original // enum order). const handledWindowTypes = [ Meta.WindowType.NORMAL, Meta.WindowType.DOCK, Meta.WindowType.DIALOG, Meta.WindowType.MODAL_DIALOG, Meta.WindowType.TOOLBAR, Meta.WindowType.MENU, Meta.WindowType.UTILITY, Meta.WindowType.SPLASHSCREEN ]; /** * A rough and ugly implementation of the intellihide behaviour. * Intallihide object: emit 'status-changed' signal when the overlap of windows * with the provided targetBoxClutter.ActorBox changes; */ var Intellihide = new Lang.Class({ Name: 'DashToDock.Intellihide', _init: function(settings, monitorIndex) { // Load settings this._settings = settings; this._monitorIndex = monitorIndex; this._signalsHandler = new Utils.GlobalSignalsHandler(); this._tracker = Shell.WindowTracker.get_default(); this._focusApp = null; // The application whose window is focused. this._topApp = null; // The application whose window is on top on the monitor with the dock. this._isEnabled = false; this.status = OverlapStatus.UNDEFINED; this._targetBox = null; this._checkOverlapTimeoutContinue = false; this._checkOverlapTimeoutId = 0; this._trackedWindows = new Map(); // Connect global signals this._signalsHandler.add([ // Add signals on windows created from now on global.display, 'window-created', Lang.bind(this, this._windowCreated) ], [ // triggered for instance when the window list order changes, // included when the workspace is switched global.screen, 'restacked', Lang.bind(this, this._checkOverlap) ], [ // when windows are alwasy on top, the focus window can change // without the windows being restacked. Thus monitor window focus change. this._tracker, 'notify::focus-app', Lang.bind(this, this._checkOverlap) ], [ // update wne monitor changes, for instance in multimonitor when monitor are attached global.screen, 'monitors-changed', Lang.bind(this, this._checkOverlap ) ]); }, destroy: function() { // Disconnect global signals this._signalsHandler.destroy(); // Remove residual windows signals this.disable(); }, enable: function() { this._isEnabled = true; this._status = OverlapStatus.UNDEFINED; global.get_window_actors().forEach(function(wa) { this._addWindowSignals(wa); }, this); this._doCheckOverlap(); }, disable: function() { this._isEnabled = false; for (let wa of this._trackedWindows.keys()) { this._removeWindowSignals(wa); } this._trackedWindows.clear(); if (this._checkOverlapTimeoutId > 0) { Mainloop.source_remove(this._checkOverlapTimeoutId); this._checkOverlapTimeoutId = 0; } }, _windowCreated: function(display, metaWindow) { this._addWindowSignals(metaWindow.get_compositor_private()); }, _addWindowSignals: function(wa) { if (!this._handledWindow(wa)) return; let signalId = wa.connect('allocation-changed', Lang.bind(this, this._checkOverlap, wa.get_meta_window())); this._trackedWindows.set(wa, signalId); wa.connect('destroy', Lang.bind(this, this._removeWindowSignals)); }, _removeWindowSignals: function(wa) { if (this._trackedWindows.get(wa)) { wa.disconnect(this._trackedWindows.get(wa)); this._trackedWindows.delete(wa); } }, updateTargetBox: function(box) { this._targetBox = box; this._checkOverlap(); }, forceUpdate: function() { this._status = OverlapStatus.UNDEFINED; this._doCheckOverlap(); }, getOverlapStatus: function() { return (this._status == OverlapStatus.TRUE); }, _checkOverlap: function() { if (!this._isEnabled || (this._targetBox == null)) return; /* Limit the number of calls to the doCheckOverlap function */ if (this._checkOverlapTimeoutId) { this._checkOverlapTimeoutContinue = true; return } this._doCheckOverlap(); this._checkOverlapTimeoutId = Mainloop.timeout_add(INTELLIHIDE_CHECK_INTERVAL, Lang.bind(this, function() { this._doCheckOverlap(); if (this._checkOverlapTimeoutContinue) { this._checkOverlapTimeoutContinue = false; return GLib.SOURCE_CONTINUE; } else { this._checkOverlapTimeoutId = 0; return GLib.SOURCE_REMOVE; } })); }, _doCheckOverlap: function() { if (!this._isEnabled || (this._targetBox == null)) return; let overlaps = OverlapStatus.FALSE; let windows = global.get_window_actors(); if (windows.length > 0) { /* * Get the top window on the monitor where the dock is placed. * The idea is that we dont want to overlap with the windows of the topmost application, * event is it's not the focused app -- for instance because in multimonitor the user * select a window in the secondary monitor. */ let topWindow = null; for (let i = windows.length - 1; i >= 0; i--) { let meta_win = windows[i].get_meta_window(); if (this._handledWindow(windows[i]) && (meta_win.get_monitor() == this._monitorIndex)) { topWindow = meta_win; break; } } if (topWindow !== null) { this._topApp = this._tracker.get_window_app(topWindow); // If there isn't a focused app, use that of the window on top this._focusApp = this._tracker.focus_app || this._topApp windows = windows.filter(this._intellihideFilterInteresting, this); for (let i = 0; i < windows.length; i++) { let win = windows[i].get_meta_window(); if (win) { let rect = win.get_frame_rect(); let test = (rect.x < this._targetBox.x2) && (rect.x + rect.width > this._targetBox.x1) && (rect.y < this._targetBox.y2) && (rect.y + rect.height > this._targetBox.y1); if (test) { overlaps = OverlapStatus.TRUE; break; } } } } } if (this._status !== overlaps) { this._status = overlaps; this.emit('status-changed', this._status); } }, // Filter interesting windows to be considered for intellihide. // Consider all windows visible on the current workspace. // Optionally skip windows of other applications _intellihideFilterInteresting: function(wa) { let meta_win = wa.get_meta_window(); if (!this._handledWindow(wa)) return false; let currentWorkspace = global.screen.get_active_workspace_index(); let wksp = meta_win.get_workspace(); let wksp_index = wksp.index(); // Depending on the intellihide mode, exclude non-relevent windows switch (this._settings.get_enum('intellihide-mode')) { case IntellihideMode.ALL_WINDOWS: // Do nothing break; case IntellihideMode.FOCUS_APPLICATION_WINDOWS: // Skip windows of other apps if (this._focusApp) { // The DropDownTerminal extension is not an application per se // so we match its window by wm class instead if (meta_win.get_wm_class() == 'DropDownTerminalWindow') return true; let currentApp = this._tracker.get_window_app(meta_win); let focusWindow = global.display.get_focus_window() // Consider half maximized windows side by side // and windows which are alwayson top if((currentApp != this._focusApp) && (currentApp != this._topApp) && !((focusWindow && focusWindow.maximized_vertically && !focusWindow.maximized_horizontally) && (meta_win.maximized_vertically && !meta_win.maximized_horizontally) && meta_win.get_monitor() == focusWindow.get_monitor()) && !meta_win.is_above()) return false; } break; case IntellihideMode.MAXIMIZED_WINDOWS: // Skip unmaximized windows if (!meta_win.maximized_vertically && !meta_win.maximized_horizontally) return false; break; } if ( wksp_index == currentWorkspace && meta_win.showing_on_its_workspace() ) return true; else return false; }, // Filter windows by type // inspired by Opacify@gnome-shell.localdomain.pl _handledWindow: function(wa) { let metaWindow = wa.get_meta_window(); if (!metaWindow) return false; // The DropDownTerminal extension uses the POPUP_MENU window type hint // so we match its window by wm class instead if (metaWindow.get_wm_class() == 'DropDownTerminalWindow') return true; let wtype = metaWindow.get_window_type(); for (let i = 0; i < handledWindowTypes.length; i++) { var hwtype = handledWindowTypes[i]; if (hwtype == wtype) return true; else if (hwtype > wtype) return false; } return false; } }); Signals.addSignalMethods(Intellihide.prototype); dash-to-dock-extensions.gnome.org-v63/launcherAPI.js000066400000000000000000000165041326047523300225420ustar00rootroot00000000000000// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Gio = imports.gi.Gio; const Lang = imports.lang; const Signals = imports.signals; var LauncherEntryRemoteModel = new Lang.Class({ Name: 'DashToDock.LauncherEntryRemoteModel', _init: function () { this._entriesByDBusName = {}; this._launcher_entry_dbus_signal_id = Gio.DBus.session.signal_subscribe(null, // sender 'com.canonical.Unity.LauncherEntry', // iface null, // member null, // path null, // arg0 Gio.DBusSignalFlags.NONE, Lang.bind(this, this._onEntrySignalReceived)); this._dbus_name_owner_changed_signal_id = Gio.DBus.session.signal_subscribe('org.freedesktop.DBus', // sender 'org.freedesktop.DBus', // interface 'NameOwnerChanged', // member '/org/freedesktop/DBus', // path null, // arg0 Gio.DBusSignalFlags.NONE, Lang.bind(this, this._onDBusNameOwnerChanged)); this._acquireUnityDBus(); }, destroy: function () { if (this._launcher_entry_dbus_signal_id) { Gio.DBus.session.signal_unsubscribe(this._launcher_entry_dbus_signal_id); } if (this._dbus_name_owner_changed_signal_id) { Gio.DBus.session.signal_unsubscribe(this._dbus_name_owner_changed_signal_id); } this._releaseUnityDBus(); }, size: function () { return Object.keys(this._entriesByDBusName).length; }, lookupByDBusName: function (dbusName) { return this._entriesByDBusName.hasOwnProperty(dbusName) ? this._entriesByDBusName[dbusName] : null; }, lookupById: function (appId) { let ret = []; for (let dbusName in this._entriesByDBusName) { let entry = this._entriesByDBusName[dbusName]; if (entry && entry.appId() == appId) { ret.push(entry); } } return ret; }, addEntry: function (entry) { let existingEntry = this.lookupByDBusName(entry.dbusName()); if (existingEntry) { existingEntry.update(entry); } else { this._entriesByDBusName[entry.dbusName()] = entry; this.emit('entry-added', entry); } }, removeEntry: function (entry) { delete this._entriesByDBusName[entry.dbusName()] this.emit('entry-removed', entry); }, _acquireUnityDBus: function () { if (!this._unity_bus_id) { Gio.DBus.session.own_name('com.canonical.Unity', Gio.BusNameOwnerFlags.ALLOW_REPLACEMENT, null, null); } }, _releaseUnityDBus: function () { if (this._unity_bus_id) { Gio.DBus.session.unown_name(this._unity_bus_id); this._unity_bus_id = 0; } }, _onEntrySignalReceived: function (connection, sender_name, object_path, interface_name, signal_name, parameters, user_data) { if (!parameters || !signal_name) return; if (signal_name == 'Update') { if (!sender_name) { return; } this._handleUpdateRequest(sender_name, parameters); } }, _onDBusNameOwnerChanged: function (connection, sender_name, object_path, interface_name, signal_name, parameters, user_data) { if (!parameters || !this.size()) return; let [name, before, after] = parameters.deep_unpack(); if (!after) { if (this._entriesByDBusName.hasOwnProperty(before)) { this.removeEntry(this._entriesByDBusName[before]); } } }, _handleUpdateRequest: function (senderName, parameters) { if (!senderName || !parameters) { return; } let [appUri, properties] = parameters.deep_unpack(); let appId = appUri.replace(/(^\w+:|^)\/\//, ''); let entry = this.lookupByDBusName(senderName); if (entry) { entry.setDBusName(senderName); entry.update(properties); } else { let entry = new LauncherEntryRemote(senderName, appId, properties); this.addEntry(entry); } }, }); Signals.addSignalMethods(LauncherEntryRemoteModel.prototype); var LauncherEntryRemote = new Lang.Class({ Name: 'DashToDock.LauncherEntryRemote', _init: function (dbusName, appId, properties) { this._dbusName = dbusName; this._appId = appId; this._count = 0; this._countVisible = false; this._progress = 0.0; this._progressVisible = false; this.update(properties); }, appId: function () { return this._appId; }, dbusName: function () { return this._dbusName; }, count: function () { return this._count; }, setCount: function (count) { if (this._count != count) { this._count = count; this.emit('count-changed', this._count); } }, countVisible: function () { return this._countVisible; }, setCountVisible: function (countVisible) { if (this._countVisible != countVisible) { this._countVisible = countVisible; this.emit('count-visible-changed', this._countVisible); } }, progress: function () { return this._progress; }, setProgress: function (progress) { if (this._progress != progress) { this._progress = progress; this.emit('progress-changed', this._progress); } }, progressVisible: function () { return this._progressVisible; }, setProgressVisible: function (progressVisible) { if (this._progressVisible != progressVisible) { this._progressVisible = progressVisible; this.emit('progress-visible-changed', this._progressVisible); } }, setDBusName: function (dbusName) { if (this._dbusName != dbusName) { let oldName = this._dbusName; this._dbusName = dbusName; this.emit('dbus-name-changed', oldName); } }, update: function (other) { if (other instanceof LauncherEntryRemote) { this.setDBusName(other.dbusName()) this.setCount(other.count()); this.setCountVisible(other.countVisible()); this.setProgress(other.progress()); this.setProgressVisible(other.progressVisible()) } else { for (let property in other) { if (other.hasOwnProperty(property)) { if (property == 'count') { this.setCount(other[property].get_int64()); } else if (property == 'count-visible') { this.setCountVisible(other[property].get_boolean()); } if (property == 'progress') { this.setProgress(other[property].get_double()); } else if (property == 'progress-visible') { this.setProgressVisible(other[property].get_boolean()); } else { // Not implemented yet } } } } }, }); Signals.addSignalMethods(LauncherEntryRemote.prototype); dash-to-dock-extensions.gnome.org-v63/media/000077500000000000000000000000001326047523300211225ustar00rootroot00000000000000dash-to-dock-extensions.gnome.org-v63/media/glossy.svg000066400000000000000000000104161326047523300231650ustar00rootroot00000000000000 image/svg+xml dash-to-dock-extensions.gnome.org-v63/media/highlight_stacked_bg.svg000066400000000000000000000041431326047523300257620ustar00rootroot00000000000000 image/svg+xml dash-to-dock-extensions.gnome.org-v63/media/highlight_stacked_bg_h.svg000066400000000000000000000041521326047523300262710ustar00rootroot00000000000000 image/svg+xml dash-to-dock-extensions.gnome.org-v63/media/logo.svg000066400000000000000000000641311326047523300226100ustar00rootroot00000000000000 image/svg+xml Dash to Dock Michele dash-to-dock-extensions.gnome.org-v63/media/screenshot.jpg000066400000000000000000004423631326047523300240150ustar00rootroot00000000000000JFIFHHC     C   V T#y 9Tc@P}ax&폝9Ϛ>xc揢>y,>5~~fz!|qQi 7j=S1>|:OT#O"뎞2P &F Ly$Ǡ΍qJ 9dz~5|aD!MǣNk{:㫧?,)I|oɮ"~49nx&T5MŕHMhvk2ǣ|(|zhd["-!Mw<kXT9O*>z cg.Cu*mz P\*%S"IF;cs\`7^f49gG, 3s1PS[1۳Ҕ.\utNgױ?1k*O"4gYPRyU ̾= |z7k`) w:5E֠UugɺUYgɪYD[/>2RU", cJ &Ξh͝7Gq cs~y5z4Ɔ Bg%6띹4ϣє)H\ LD oɮDy~ 9Y56M׮YkF v}3}faxZ7<) -7yxƠP>yI@:u(]w:ߨBdXP-|jSZdqκ*$c2T[bXDq7;JTYVT/c=P-绿@,JPQ%R j%vg_SIˎ)Iy9uȅ)!Nt#@v|YҀ ==u\|o3)tgb"Ѓ7L;rZH> XT+{馷R@y<<z2AeU ByYBR oˣXXg7͞&R!buDbl^D)6Y/= 39zc0ƾ9БB :fgP() z|y>gg:3ugpP \%o*L.{LHRED?JHRb ko_&qxѓ4)vz6Y%2;{z>VۮesF{hDQ(rN?)ز3@ɣ##7ŋ0v5y''2@FIPPCfRSUz/ϣ#$S"W)K* dL7|ۮ`@e7]h@E(Ȇ+=qQ@ln?@p14܃ C%z?uy"xEsgM3|۾ ~gp2^uȫgjp盢 e먉Z踬du$>+R51ED!LV/RacM$(O>t%23^ۮ`@ ,]R.iX%F@l\Ԅ4ܐe/fQdh9bfgP(=<Ƃ~g] @]{]|9\ָ4 ތR L!z.- NR_lk|)rRFvT7-VĖP23o@ ͺP".71AyFi`Rd"<Ez} "hdn@_$;ym~(2S) S|ӈ\X#BI= )bՖom-AvԐ4*og+Dy`@d%Ů75pђdk\Pv#;S^)\sx.6 AƴNy6!SM…׹܂pum}D@| 9(YCfW5輀R\ Fga#ZNVk]EXS rY} RvMtMExj1ǧ+)Û(ҙȰf\  =,ۮ`d,īώ@ŭ3 3nB-3C6-dzO72@H"9`(5MNپ:>gqP,֕(w3gpoTՆz3tԠUN~( X˱X_W*q.RXV%P|v&s5 .ѝ X\M荄 MG@?k&),$P T:rΞ_+Uеi=|&5 Cӟ::RB BL0;$Iߝqw:x }]|\-Ubdv{ 6&sb@E]k4ْP|Y.HZ&]z$Yf~?ҀQ=: AM3nO|=7(T R:qAB@ 3<Ը Hb=L$b.+o_o ѝ<>?V E[Znf!jKfy=,@(؝78@ERE?_o@z7@ }<Jb%R %x]w>UBXd\XBM{obD- &zxuo~?SV=2)lS#n\Ԩ h"?7[ )6 T:iX@y8}AHnH>EhyS?C@|^R)l딱ADR3}NNOGX bPTMd^ؐygOJ pk@09{gpb$.:(!}-pHc4\lrg$-hRy =x9TPs%.uk^D ) ~m dBO3E-}<,^Ihn.O5Ȁ[׉߫:",%ծe .6ys[dB@BLdծ@̽) 4ͽzx>~?'5d{]|KRhC} Н;5@8D Ϭ(qc,KŒ5V5hT@*V}9A`瞽X -̽_++6ʔ&Gvqx?U%u. ;x8n4M}_@@3?i @tc@ <;F}` _?8tsz\Y\VKw!HS ]|>|ƋJW=Μnh,)"KW;i-{S++J;u6x<(iթ@M}:x6Ni@cָ}<|_(/F:엾 <7V=1qK+꾇@1:qEc\\(!L& ǟ΋œ{zp@l.z+C"ОO_ìL3n2Nr\?;xA U0g\!P65PkNlztMG[/pċbIqkF@c4W=Ia ΋*Wfz%ŭXd4=pǤ*t/?~̮jmLLSPpc6/VT[i˯8lj_o8ϏF>ͺQ։Ho; 'JXt`)fRZE,֬Y ?S?"< H8R\M(!T1?לx\@CSMJUٞ 7-fF3\xQ4"+Ӟ/F\7:P=@K<fuӏW%tkʁ@(h c p!YeL:!c[J2βj!i ']|d*7\sY͞qY-߫Q` _o1)͏F>?-fJ1盄1 ?NxLX8ِ(;uy~n,sYC Ϟ0 Utߌu^h!@A S ply@pXs'J)5~k5٫dj%ayOg1Rf:Yܙkv:l#vV,3ˮcU }:xHNlz4N|ܵ@-sMs~/N:4f vY2Xc}O_@Po>^_A5ABP)ʄ!@$gO7E[ ,#Y켩nj[*T*IӿJJʕ-TqB IO&l|X(u|Y!(g P׮X" ;fX3W>( j2<վgј01cFa%-Ip]kpk~P@(HЅ$2ZRn'ޓDIʢ 3זt< znE{o[U*'NcAξ{x{N% Ş("X@qg5:4 )ONj1bܬĐXκPItOd&1H1ė(K.+KZZ5Ǘ  H@P@c5 |^)d5F?qjKư=uK?M젨 ( &;gO.iͳ3.~rQUBwLtR@ּ䛳|g4(ۯ;T6zEdF<-{X{38yIƉsas ͎5:H(}o&E)jBg2~7M f=iD V%p5}r.+pk fgRE0mߗ;+9Yy{0WO&@"PgӯXkysۚ/I/2!Y|;yAEVGO:Rq9B.kyΠP,{.| wMcbLs }76s 2jLl}#P.XM`xB (:vs2Ljee)=UAB s߇  Myy@*UX=XFz((J*~>-=~@YR۬ ~,V\al\b]#g/^7سp"(Jı٭7(ػuc5~O} A:&k@P^zwZBML&t.|KDjk+W,w22D4 D=ڵy>Ek)q+]YgA@((ծ9S2\fThPVrYN+>~{}_-sNԚ(.ƶQ_9JD@:fcU dּq׬B&ߌʋ=5B_<$K[&ۜZ^vΝ>_f Ђ(1 RxVJ(-e.783X5Ӟz Pͧ\g=L"\gI&Rr(fyy>>{P7뗱&Y؅\f5ή%\c漟RD@DrmhX//'Z\PBZK 9|oEZm.&~Oj`XNwe1Z_W=@(Bqa9س&r2%@L'MХa^+JϏgL2M) ֩`6[q_~ɚdD77/v֌^zP1 X\޹Ss)^PE(7m)Y0.āYٞ`BWB,"qjzsQ@J T\s%J R&3[52 3ڠog3.ҁ5FybߏnIboy{My( ޽Z4^^NbtQhkx $w?\XIbx=)Y?G6n+-βrH@$]Y鉋W:ٞBBIWMsӞޞzҀT|v\lYmŌXLsמo&W !Ӯy|~=i 6^ϯqfJJ#Zeػ X,1>sO?$3@) on~Z^y; :k\׍x"y"gg,w|j͈ebLE=1VuW<$јJ>d,1kq\fC~z Prtc5͜Rk [@Pg$-Z志g חoϔZBHW}I7tdPPt^~;'sYu5μ(m$5?oFzzofX ;AFz3f{YK|_!dqŮ.% ǏV;qiRҦKǯ3YZ -pR%"vs'@!@N&PlZQ|^}d))kU9y@DQ /G/~2EXq TY(딼 %r@JygY,#PPz.;׏N߮;3g+5 GAHPN^_?fN㛀7r;z@ so J W|.N>KD^?.+q nνl̄XE59@+F{e6bwlX#@o@(׮;nf䔶S]F=\t~<) tp{x6z>IA 3PDK==z:qNy{k4ɯg:k^l :c.\~~*QYoƱ\WWoln,x8 <\`\DY.Ϸ|h(s 㱜\tcѓ-*mǯѩgɣ%&~z)7{??z~%(uY]3^oY2kv΃_?LM߿6V@S63@1k<~|XcX5n-C7 "$X7-JX'P\ SքXog|P //ѝ۞p\LPk9efˣ>5Gˀ7cԦ $ .~۞U gM[~O?VB.ӎt>ݔȠ׳m 5>:fˀQ@.~|plXK7 "q`-Jy/8P@h".s`@ SXY(&`xlz2M;n;5++Pk6PKώYJMqnǯѨ)?G!Hܽ=h:&@YS`kzQs!uNS`@>J wN!us~=g„W5+5!@H)4-!V^p!tAW)@ Y%W=aAZG//>}3MYkJ jƜz*Z:=\[y8}+w/mZ T\ߓՄu\}|FrS#5}V^yw^rvc.+y3X,5X T$X X% ]r^p4ΰ lpw ,P7'MR˜sg25^kPVl1!T&h|yp6ԠՆ~۞#nz?[) 3' W_(dQ,ӞssrXؾ?t^'p=3F m8͆Y Hw}O?}|8M⻳W=EJQ@T!PR.KΊў ́pw`SW=aΦ{4cjeflfL띸2.,qޖI\.6TgDۖz蚥!ADOgtǧ z}=@LǝÇ96g^/~) =~O>~/!^xMB]g-YO>I^/Wvk^7kvwXB,XRs"@TB7y3((\ W=v39QL̙;q4"e.v&h|}tq4(=&\}ɲםXOS~ETu~S,#Pŀ RAW2Z娀R "5ZLJ-\ MqkETPS%PAW>,P$}@ ]s}W(,B>2J?/O'8{~8M25pX%`3%\`I X&6DKeJYzy7€T-Zpt Roqox@(]<~?Z N9eujOGד;5 |{9z!@$=<^o/woAu|zwoֶMn"(=s1RE) fĀ JnjJXK"T f]<2R~:@orǯnzmj@P ~]:\qQu,ۚE@|_lg+x>L\W-rq?#-s1{". a5 g7gX 9bHRC2UB5kJ( R % U@1)l<=@2!P;T-@)lM)ӿ.rx?M'1Myo!{qy g7ߞbs39B P fĐAMd q%KJ3@-e#YݞȠUPJ ~x=7g"P ;!OOߵl9S@?#~"ߥ/x&3|g>\`yGX=k-#}~3O3`}o{>4y7/nX5k u55g΀ @ f[&qcqS%ȠzyL*v:eYHR ˟۞@4ͯ\G??>n;~~5pVbppߚwoϣ~gf4OwuG}~^^SZ;ڬ !.y d"&q$S"܀j؆hRUKM~|B+nwv(ӮTo1r} Ϻ亀L~W}~y}O^03O}~Y,1;C韥gWoKl= ^g>Mo |o/~o~wX'Pc>~G?qrL ! l\a 2-jbf)S7 ڽ<v; poɒ3 7vQ~mz?,qLkLj=@??/?>σ{cZ?ߗV~K?kjymkd} iboxj8˙~Wg=S3l}/?Û} :cXkfzg:\@@IljbdaQ..O~F\ ʸPK=~]~|@SdPR.o #Qx|u }2Kk 5:RȠĠS z` g‰>^{#@McWUK}o=4Oo8f^u;~Kw϶_Æ7ؼ>Q@\,"(H+z\EH?5 012!@A3B"P4#56`&pP&ՖTşfZNt$ZI˔ݗVX.ұzn>eZ]3FzM]GFڳ ɌR90oYuufc1b+zB/>&ЈL\mbY!_F7 ҄=OCЩ8Æ'(!{WravŵӶc0tKeơLu}gvSX?dAhVUwT5oDP ا#XIV*.ն^GleNMqQQw+ֻ2v Zּi\Rީr rϳ,pvԀꘘVmgj/ZZ}G6%kĮ~5o:bՄ ؎ qh a?2x#G0)/ <2/ x|0R| x(p𮆳JH9 8Ajtڡiu5'-I5H+Ii}ZFr%3`WZoڇtz%1)P:Ɠ9RJ$&"%OE֧KiZ0Ҟ46$ hA ^HC3K^:[ބLΣ))R461.*{1-h\h3M;ԢBb"MisKFä$+GŤ-xΖ gSRSMh\o3m;ADDB]jwƵWͷI5H*8\I-Y%33=իko@G:֋9h7”HLDAwZst7'm:HF3B ZGuBgg{Lmmcvh򘔴破\ Z-5,>SqZ$Ŷ!B ;i#bQ%עL=zR-IE)Ez+@Vr%7բ~QMj=HJK{]wYo/!ݐwd;vC 2wD;GtC!$wIGtHC D1C D1C}܆@A 2v?M=0zhGM!CvI) D1C D1C D&gpC!w;)w;pC!w;IzC!ޤwzw;|C!ސH8K0a 3f!C0UQ2e!C,Y d20JSR=&h84Sel%DRgG=#И6ZO=s+KZ4̥Z2WmJoHH2·KIyyENFʿi'2촡A<+g"[="|+G F29mr֔+pBo2?jr=TuO(sNfʣ&cjvƓ AدUfxIkyQq*nZ4{Z9W)^5%&i\7ԔIDG \q-%ה-kpRU4רVt}49ާ]B3-f8^Jhpe*ʩJ)5meL<1))$&)JPNP^yO*ܨmlҢYQB:*zp٧z7qRLȉktRhR*=2(LJI5me D49))$'DbR4^Sʠ-mlҢY_JtL*ey eT7;g"Z'U9ƒU?+E?tJQ)T7&mlW+ᡍ%$LJW¥t7KIyyT-:m*%Z:WNw oK{fsjD*hWkrRj6*xc}II!:Sph8yUMiQ,TWAݽs4HF8tZ"_ ҫZ֋zR0WJZ QYVBe1)-o4^Sˬh4QD= 8p;S8S-8h%W~ Mǽr2G0^+┚W(xc}II!?atVi]S-m6KN0y1b4*s|\r V=){E*}o,X8Bt{Gpãtw:;pv)f3333333333"Rni嶌4Ky-@@@@@@@@@\3jclv͎ٱ6;V6;fl(f`I $0C $00AJp`!`HmyiIiIIiIII6A20 d d dd dd d d d.@@@@@@@@@mbclvݱ۶;vna,%C-#-#-#-#,ZA4F LLLDFgl-709!)T碡˜Z_z.29Hu'EzE@zqQRRV'-ƱhE1sBUf&깾ދ=): s.5ON**ZK]Z{βܶ&ܕaZ=#J}##W)5HE=8i-s[^G*·ZQCoJ9ԯO]ϊ㼎@u~t)55KzqQ2ZVQX-j `2){9ҪwRHtOA_t)4HE=8i-U+jIRֱP[]*^JUNUJ?_z.:HGIC\"TTյIT:keqU=¤i3 TGDrs[\E=8i-z ڴ=uW[Va35OṿwG G;Zԛ\A⢥hruCNV#+Gp`—?ǠG G1{)!zEĊzqQRV!C  0(`PAI2-TK D1C D1CJ8T2Y,3J𚔑"b!!19&Bbd&&&C D1%|)/tČHČHČHČHL!1110zDffffffffff"m.8n4G=v0Ej/}"9UIֱAZ1IFhH&z+Y!.8n\Masb Ǿ0{HiV"u`L%k7"ǾH'7M`DG:{jǵӞiQ(]koqVZWdzG{b9ޥ*wבο9cS|&s_TdqqZ%K4ɈL<>OzT{P^~ҬZN~ %,֫teIIMѕKpAˈD<<=RIIh#Ji::Qʇ&Ij5 L=3Zɲqq_t279=Fbu`oL%J5L=3Zeg]/x|:T=+ẐU^k?kɔFT)qVlpW]5 ĄdG1D TmFbubR|JkUm~0Dz+Y!.8n+KAApA"<R{htUIֱ)fh7ҙi}9ǥJcҌzQIcL*v#Gb;!v`JOd$wIGvݤwiGx$ZL#H;Ď#H;JypC!H!C' +}a\te iM&RW$qmZJe/Fs8oɠO;޹Nڲ+\-Ib4 ZS;@W.Z)e0e-m!qh2&Hf!֥O;ީN ڢ*-3,F+zWdR{\h'22j㤎76-rZQY$g;%JT3"EG3,F[Ҕ΅񨽨] EiqW&^ۘW+̥FsRjΗwU'j%O ?jKjX)J(*I]+EI~THCnb\TVH3΅*ޗw0_TLפS=JgRE*+E)A>:HKnb\bA*N qW,A)$GLWȥZZ(OOJ㤎!T+ \?;@tw"qZt%3Ia*pA|n"ƣR0|tƶziθ~aJW;L}_؋8K@Jqh/m\5`@#riDAjT38SV G IJpqKIzK@O )xxhSi1d'L#bPLMBfw1>{q=}-#-#-#-#-#)#-#-#- A#}clv͎ݱ۶;flcl>Ѡbf&c11;&&&ܤ$$$$$$$$ ]! 8HaFaHaHaxS!!!!!!!!+POҘTZH9nFr'k p084Jgqsi//zq%0eAW)3O 3Zk=Ӕ>JgyZq_220eUN-r6*Fr ^;t$^sӔ) .uA\.BeP4#,'JRqV7sR霉kC\/~JgJ NqurZgR{PiJ,4*DOmoDtˆHzg)Gʄ/.qr\hmGz󈮕*N"RpRFs o|gK<)pk^γJ89R7f6"=3-CWJN2RM'q֤b)ԍ2=^6ۄi=iIiy6;߰JDSRp~ޘoɮ-RgISJSCnftz "rNچ^S+mu:-;:^TGzZn7Bj { 5W*L*x JIOLBwe z,Tۄo:vt?QP7t*F3"Btgz 5VWҕŹmR;ʽ*ySnf;ѽR;e0'SwM;;UoGzZu8 w!̋ _;@Z1 5@H-LҬW}Vۆ٥DO̧r7T&I'R>i2C|6B fE")jixh3^*>p4(@aB䏭^6TۄO}٭G^n7$#"á=/3!GG!"H0EIR` a"!"!"!$i!#F4i1c@Ɓ y#$d2FH#*C K 000 wݶ;vclwmD!jP;@;@3BG!C0#0#072#C D1C D1A 33333333331f$f$f$fffg fxK0#0#bd=&&Bbd&&Bbd& D븄@sde-I}hLH hR -(Z Ih"Q9!,!zӢ ;:(m LxU<"k:~6f;^~=ϤGcCL5ӝ=it"c.,q-BEHf?eW[h#K`s܄cZ$ZQiP*HJ4GGyh.>Dqycb9&/ Б,bs{q7؝Vuh^ɴlxsr""6$r>)1Wt7Ƣi}CgvlAE !漗w:wX]Zs=iu=G_t] dڽijB֯Y~(Fo0ff^ŢEOL ZJoZ?ل Ī]nڙ̥@mK}淉Tlvfӆu[q^>^>^>LNkG!V=K޷-{z޷-{z4DžD-&o4 }[MbhƢ5a]Iv'>U۔(WmR<]Hv#>UtnWm4?F]Hv#>U۔!ΔR6R6R6R>Z>Z>Z>V>V>V6~1?G|QۤyGj?F]H|: -&o4 zz^yz^-(# biE(Nmټ5vXmiεr'-ʜ%d7Du0[RSxdqtѲiwtet2?hp/9 c$Ze#[/z{޶^lg[?z{+D[`E l4[qۅ-mƊ%!iq ov|]*ۢ]h7ʷTjFݶ[l`5[[[ Vy5[ QGQkuoQku/nV'}K1W#AnWMsl9t7e3_Kܯ֗&Ȗ; T_gz<slsNm;tE(n~t 8-irkl|]ݏFgܮٺs;_iuﲉuΗy ൥A5G=|e܏3ƃgܮ~ٸs˅79n9/+൥A5D~u|m&|oZp ʲpZ !gS%O}Qx3 h6{ʯӁNmx |ҧ&yZp-ʢpZ<{㨞GXQ7%p}Ͳx,wB=Q3pJs "pIcxhhhhhhhKkImڅ jյjڅ j-QbZz{.28g2]|˳r]|˳Ovi.>d~'/vO>_|?k]_|_/vWilʶmhմj5m[FVы. ApR Ip\p\up\Elۯ[6mlٍ۪Vjml۪ٷUnЛ3lۯ[6cUճnf5[6Vͺճnf rnnnnnnn?n?n&2]|˳vi.>e̻4g2]|w)޷ozݽv޷ozݽv޷o~l'; .;qL! &mT,3C adZ&N8LꨔqD rRœP39\68: &!i * 3a;,b zD=!ǎʩ`2~6xY8o0C Si.U,gXvXWIVOƠeε)fqܾx ٚ~ 5; )%X!g]6k N]j`zܢR}3/ 7fkHל68Jse;m6ʣY'e{+Zw1 661unH8p96}fn+!;eʇnn;+^tZct]_Dj +fgy`RsMuoXRax5?G?@;;TVx-!0m\,jqvUeHZT%,>! ݙ@Me?@;<pC 2m\<>g ,=0sd6]ʙLa8vzGUhiӵV;UiګGU LDmj5[hMV&mUJ Ez}7cy>y-7跘oOcy>y&cOu"z-?跨oOlxΘsRRVT FI8VF(_UQ2 7VF(_[+py~eno/̭fbɚ-4[&hLl3EfdECn[z-=aEl!Q-n|t[* VʷH>UA6ENDg/& ˭_긮::*K0kP3$H) VBR AH,sxT^U )S\- G:7$Kf 8n,Tz;hR9> 8:-C[R`@&//T^ZE0kŦR9A7&S.# 讲G ΪG5L|3Ë3T!`7:Ҫ%0?L">"7&uSMpxo9o&[."/Æ讲`6C:ձ|Ë'~Bd>_K axɗ D 1S\-6'\keqyއ ]elG5>|qsi-CM%06_L"e|0.u ^<:ww\#\Fȧ2ug(_k*5$F]̈́Y(Dwr~DwGQ\(F)Mh` %xy\pe^.D"fN3L3%aQ"0yҁ03&۾e)p7M: SZ$<(<;42 ޗ4 ] D)t3eLAw aQB7sa5ť11؜3&۾oU)p7 PB&> bgq|p.Az$1H̝X3^t.!QiB8y%11Ȝ6szK܅) JXg|.N_WHb Oadꛚg(+oZf# ':mqYZ]FﳛJ\ FPR!rU`%3|^C40 QT.A$Sa974Qt8F˳5Ź C5Q9pA6szW SZ$0(Yb=etseB1!(EQ f#;as(@amިp*#0HxP%n[l=a[ze8f Ѡ̷#[ng̷C=t:CR:BlUUUeuVFS[ki+lV1Zbmm V5ZjiTڭ59ph>l}c[z޶^V޶cUXXU`jlDڲnp\p\pP{<iZ Ҵ0[%lJؕ+bu['U+buQŶ[= ޡV ޙ[=z[?zޙ[4(Gb۵mڶ[vVݫlնj5R 2 l + °-٭٧6Xm"JjҴ+JҴ+JԐ2~XP`sDQ8Q!E9GΩ{}g`aBuRp~4&00"&Yf4mya 'MNo\!jX/ N(g\Hb Nia(Gka &9Bkܦ{< YDKU&7`<2n9 V8y&wbCsK ~]"s/uo(3$SXdoQG7;&r+<;kOgx ufMFJݘf-ًvbݘf-ًwjڷvVջn[Vջl [ ?@.D/ <2pn+ν ';Mv$1H4hcw۝|f.5Vw]nޢ{? z/V)^@' < s:tCsK rz=y݇0LZ՟7&00_c*Fwѕ'N#,s|\7!ó} ʼn D),25ǣ;sL+:o7(ΰ c._IRh.r2 ᓌpn,8$1H4FGnuC4Q}N8 wC]qL``sT&﷖@O *LdTN D),2r Z: !g(k;5Q=&00aB15Ilҡxd'6X"993‰ D* K"pfj&9F ]e-2kCis$ Il0Laq*VBd+!Xja. Z*VUlEZ(^JUhEZ*S*eV[gm?U~lVMT"ٷEnfͺ-4[6ml٢ٳEn4&% RR[ʷ8Unp!B9ڏڏڏڏڏڏڏjP8-&nq5 s~s~nonnnononononnnnE:> c>?xvD}G">]Q.ȏdG|#>E?vD}GD-&n15 q[MBbjP((ah!vD}G">Tfkl d E#~˲#>E?]"TLr`<6&KͿB d;vm͞qٶ\?Q@s< P+䔔IIIIJ씔BA{$0o'%'RduLjA vwY\T.msQ΋$uN /y`n6Dm#J|81(O@?D|)2Y rxD9֯tB(6{3Ép}qͿ}MsJV0(4+P"*u7cp?KU3?59>7Fx\8D9֯bPlg:6 >ٍ5cm8p1Hx"i=Vu7*saP*+s*=>,?}?D ':xq)εbg\T..VT@f&h~3P2f3 ’.Mt>O@O g!2X#!Vx<g:6MN{[Xbq.Td tVN˴VN˴V]tV]af˜S aL)h+A1juV۪UꭷUmm[nuV۪5mmAm.lO"G`2LPZOHX*<8\oOVNTxqMI$:V 0:0˜S b$fޒR*EH"TRRD< 01@!PAQa2"`Rq#$BS?al+aZ Vl+a[ C U-VZ`XjaU VZYjh+a[ V¶l+aZ Vh+AZ Vl+a[ V´l+a[ V¶Yj0Z5XjaU+1zf/L阽3b^5zf/Nڽ;Wj^1zf/L随nUl+aZ VBh+AZjYjeU+N1zF/HX+b^ұzV/Hϕ#V;Wj^ӵzvN隽3Wj½+b^ұzV'`lYjh+AZ V5XjۀafxUfvm 0#\(7I9qYxM^aq8 |+lV[g¶υ{+{@P@P( *B*B*B*B*B (PGHA… hGXMP@P@P@P@P@P@P@P!@P  (PB rOQLjj;~+79x:z?mV>;7ߨoOWcf5;9~Vr߷s+1,|~Μۂc@p_7C#:~@7n#:/ۈc}o?o]:NԎB|v(fB) B!HRHR*BJh|t۾oL"gLi埾[utҍ'&4@E:t:`Α/D w>691Wq9vHÎLr3 ʻ?(Ξ xqEmYn#*2Oɇhfr2 /e]CN;xq@nWq<ǃ>4h9j;#@o3cן3Ӑk1:g~om3΅YW U®p\*W U®p\*W U®pz7Ԟbg(3ecw;0O|gr"4ϕ&s03S)Fx&s~K6L}]'8;9LM,ۣWcgL0AǩH}#&6D΋n}]NOEǡH}: OLM}'f|؈AHtJ9%J*rʕ=Kg\M+9Nz#r~0}Ywor~]F ',|6XxomaAJue'~`1帍)C'θf⑾W:s6w=A7ܘ/c[vw{?uN e濰TX>_=;O|ǖX]GN:\m?,:o#Nsޮǡ2~O<\W?V#*򱱆 3?3gؖ5_og+1ܯ1F7b<|:;#'uS.&Sf8:oΝޮǡܟ4$|X $&~_V6?<\cV]xv_#ծ-!'cX+X%`G&L:$Sf(do #NoW~(P2; \^/V0?Xm,54N@^@ܢI,(P߳&#*TRJJ:APTAPTA@wN%ODp#l3qec' v8` pYUag7'blj~1) B=Q 102 !3@AaBPQq"4`r#$Rbs5CSctDdp?K,-5j"l 讚zȌ66K~ޖ Xmh@EUjde*6hMSgمV^F|Ӫ"ioipY-z^x;/^QIw{ǔGmz~LWPc0nG˰a3[\W]iW`VZB9tn~hB`tz#%5P޿apE(/i:UIh@x= gُ-2`AȘyFM}, 5_ᑆNyok5E0)/(NH_3Yyq)L;eM6fX&hժxa lNQl7;l]5R."LD2T:#ڝA+ZN 99;9999999킽z+ފz+ފ[))"TR*EH"TR*EH"UҮt]*WJUҮ>w]WJUu]*꺆H-xֵku)))))))))#Tf,krܢ4FtJ\ *e " -X-2&Pdd6"³J'aܢ,سū5ʨUhbna>6̉g Ǭ҉;E&s滬ia6Bn>8( 4՚Q>Cgrq7~vp6Cn ƀ[q7s"e@'1k4wXQی<,s,%g6Q^Dd.IJ("F>jPȌSd1v H sș@2 48;(2@4 J'h?ƎYPYV 0!mP m]̉4AOw(1cϚe-Z SH(w+rw+rw+rw+rw+nYAVl)0Y"(6L2Wޯ ޯ ޯ ޯ ަ,]JjaL)Jx4,I` "TR*JEHlgxqmƉ Ob/Zw"NS獷Ĩ X@/2 &xxqJYĉ OLIw(nt&|0f/cw(mQ>Z>"gX+5>NIYtF|LVjvG{j ')6q/=sg=sg=sg=sg=wUbaA_WE_WE_Wֵ"TR*EHH"TR*EH""TR*EkR*EH1]ekZֵkZֵkZֵrֵkZֵgrܦw)gr׹LS;&ZֵZֵkZֵ"kZֵkZQ (|E{^WE{^WE,{E_WE_WE^WE{^WE{^W,gbȬSc(!dl 䣭yvXfcb,؟ D><,Ŭ ldl7K,beߡmbDc#g<,őG@6FcDb#g xګ7J8òDž8r7ۜ;1͘LjFVoL,xh}ً"eirYg`|;,xY#cjl, :(vXFޡgً(, 񳊒,;!MMMMMMMMMMmSSSS5554bcJXRRYd請ꮫꮫ愈RdۡVqtݘv؛1}J6؅@ʶb> Y]a861,;l m>xC@f,"gveڍѯx+^ a^ aL)0h00eOWܮ5\krq[Ʒ+nWܮ>UƸUƸVmqqq\*|*5Dg-RR;ӹHR*EH#HA՜D)bKU555555554Drٍm`%d;rϕ#*UjzZ-VTDCGb|4H aۢ(gVf(03+*ygcUco`KH6w(mfn|<¬͕VZVwNodyhY%HqmY*YDyXYUk?=|4҆'15*c H03+*ycg}=hg@*ϖ(ňܫ3+*ySgU{l>n11Y+(03eU#l*]0=O}#rU򲈖̬p?<0g}mkAj,2nQY,#r6UZ8 Vw;q6(vA١?!cbϕFY*yդ'bɧS;3LS;3LS;af2^r׹kܦw)grܦw)^r׹kܵZ-{^rJ~~~~U555555555ܺ۔ܺۗYu.&.咴W[r.ܺ˭u.ܵ_ aܦw)grܦw)2w)Чx'XjZֵkZֵkZֵ+u.ܺۗ[rn]m˭u-kZ׹kZֽZֵZ( j}e$χ` 0 d<,`-rg>vq~Z~V0ΊlŘP*$Gz;8ٞVΊlŘev~:.PA %ΊlŘl h f]:ekғIRqy8<ԜpRqy8<Ԩ?v]Q,㱃JN85'<IRqy9<ԜjNx5'<E 00ؠ;Rً1l X3kI|֮{j@c31f1`T'6QcgֵkZֵkZֵkZֵkZֵkZֵkZ~?*"ڐE6bc@,`,?3k#L~nHh@GvO^2(9&]#% -6рYn .d[h&mCa E}!} }澐k5~_Hg5C?w[wa 6:'V?K?wK?wH}%}!gT&$l·`U5Uu.ܺ_uW_r'*OxT=R{¤I p8TOI¤I '*OxT=R{¦`]f mnSkrn]mmnSkrn]mmn]mmnSkrn]m˭u.ܺۗ[rn]m˭u. GPi]}˯U ~ v'#9:ЩtWЩtTM :El2"Q*Œ1fF>Ϩ`{C5tF5{䯏E|($:qIНRmk&%E/7gF.c,tYvLFWz# #O+x3n|&Tz ­vrlFFz=$:6HCruV_F+:a.hծrCHzJY־K<ޞK$]Q) ;wT :]F 7YN"zF'Fo ^HdמM8,ɼ.dhw4<1ςQ1}E<0X2jMA޲0ZQ I-'#;&Pw1 1=NCK9Pb.?&Uz܄ORt.^ݲfR"Ufw~x7Ҙ3*L+m0mOKe(a4TPg/J'zօ1DGk佤a! ;(vc>K}E_'']|L.öEf8pVk0IC-ACrobkP%`ܨ`:*#*y&,ZXbL=Ϧc:.7û6F,!0H: %{MǺt]FoUw~p]X(۠/ UFKm3JvQ*H/׃ gTvl81q=rɥVԠ?J6䂮ٯS1^.{W\xY:PTx|;]'K5fo Z" 8X ];-rȺPݐLoX)?h%NzZ/۰*tL5b)}4s"H|⟹l3Sl:MrrGb{HyT6hj0gÆ1 ùC 5%F|$]:zA2ӆXdG O{#5G uX晣=gaa_|FpM׆` / F֘1plCd#H|HPQrYў+0wX2=#S^G C&.@7>S;&ϒ6'L)NB2.GҘɩU??QtOu&Yz婳Q(y䘣Qۖ.QR)4#|My?lᡒYG0ֲaBsEzGYIά#eT,O #::"xEX><^V0"?y^GV7{ vv^(I  SAhH%>?e%Q\{"C"#MDZg!tbD2hU:O%\I9kg5 kaYa\OyG }>ϗοguK9uK<]1BupfZP ^hF"hh+?澁D-NO26̋XhR,HerermpvÊKMWoCF=GsXNMѻ.!L>7;%e^~Gћa߀/#kE0XuG誶c]?/?+oNT1>Z<+<28(i- ak0~(ǣuUhy8,8y>D¡ O RmBYq05:'": 2-@mq9 )8P77r\ ;F z+o 1f_ž&mjūV̐1p'6}2A'Yf,j٤0 U;vm3f$<ϿGV-I@]c+/bLdDͳf6M[uo{f\KVpZ7nF[3֭ZbM& H \4h<]&vlؽb*fi8@3(X6Z;avE,`#|@sJ-(dd"K,d3ǵБвEx7X+Dhe0@W&̷7VKҲ)9 o; "`JF"W][^SLj%TTS#<^=ɐ,*W H9ng>K+P-a5fF3D#Rt񿲤T6Uy+UMes)eH>`0GiHq n8 }LF!4_ݏćŋL,3+BI|cs Eд{2|)x4-<2)D#Dg E>B^-\"hT u9#ԋ@_h i&Bpy;%O[+#0 杕e`Y{&2 As]RK,gk#4$%@FE^7eCz P9 B SDF˾(@1b<`KZ|`P {\1uޟдLV]%{fqpAg^>Jhb-(Bd&4A%Ѕ!xk9S2ZC!{h\Y(W:Wr1LPiE\8{ (ddH3yA2qa#1.,Q+-<'5_./n.&|%ں5)ds@,olj΃H0X+d0.q(Yy0N#f0Iqh 7oc#L=@6Wt.2?=rX:9[ ZFz"a#p/jF*c,Pہ?c8p_!Mv{8BP[#.)Nb40iD*cxN#A0[t6rO\YR&Fv2ey6OvrB9dV0ajWx'і@6)DPV]BӲ(% B@&+*Kc<25Cdf`+`C4G$S+;EG?y\ܦ|hzR% Rd# nX:! Y/ag+ Mk/\a=gT,IGVF(0 $:)w- !7ͥo+T6V̭⶚a贽D.Jy\ܼz`bpE2Z %ܧyLVYWV^bI@27,cx2$]f5R}Bu."ZFXEtJ- j}`곜kEMst"쮞Kjˇs6Sܔ S8{ģi P&4w)=20 &p$qnk'xV; Xkt4K8J]b[Ôlz)bKnPlUsABmEdȠ` %jXxs!z`ұB`cr"NC5OrEB 0gLaE^ evh)V0&k#pWdܖ5FruW0 :8.ku*X'z,nts@h̰xbt}E@}4ǐ@41{7X0n~ ct bgºW2 ;=b0C'6hab{_t^)hʘ4 ՂAEtX;cV[ӬLWThU' Qu䁶cv7DQ.`J'V+"g=ѿC烋!fK!Of1K~ ͇ 0sYhe쎭cykCGZh:^"it5G94XVӸt.ȶT(p1Fp@C:'N<J&'UD@C ~ ׃0dEp;wS!d` @@r8b`x!3DoGtKY}-GAtKY}-OAKS} G ;B~E{/@ cb(i^ʹUϰ\*Q5'2Cz͏eV`>ʾRT`>\E= lYiz%)C1)35W)8kj@H"l "Uh@aaqr4Z!ho@tHIthP'^ezQǿq^r$I+J+W%{ O0WZh:aZNIi*/aO`W dCm?5Ok-e]g XXSfߕUf|U, WTOKU*6fhΜ4,GxWr4;+VNmQK1n%WXNۡxSLq^ =Sp{z&lm`o+IJ 8h$= vC ,*"%9@+SP J޷&HCa  d wXЫ'%̍.U ±&-0@,< BG7NT Iq̉@<,QV7~P*b0BhNNYT-&uf߸]UQ֑b9:@4DK][ pKDDfd&-Ojc>pfbC бM7,4a48i KH O߄*)5~d הor7V`"]T@bUxdqI"˒򼡻K/Ɇ("ue Ѥ gVWVDk[+ql_ BW(kIyæ`  633 71hnQ2 $3;K8Cw* 5%T"@: 7ySN#|+9_*4FEJI'E-p,+B&jn2xa̵F$auL&iF;_+;fNH &(=5b*ut;tbx`jքHך% mÄU`] 0T7;x !,$2a  Z&Od]q1BUӘ18L70b藪tbYX{.na +v]Q.*(X ! C2BQr|` ҆Kjйq\Icrna48i n_________]h]W%\5@7j]VMhZnEh0i 3L}EB"4/hS[#pL{K@S3Y#bw*VZ48nX׸D8"*xa%K XV4'8MtD7D#;#1LstLr=FDĩ~B Y~)~B,l陦ffkQ343L4N:(^M~e~e~u~e~}~u~u~u~]258m<2fa\Y{C6ɿ^3 DQAYAp)RTAI\al] LZɠEaa 6Nn?± qi 2 :+Q70@BtЎg ⵻|oD :x{73D =X\L ٹx*"$DOKZel 0V0K g]X72.i]ػ4Hf$431c<po"s\ -eYl=}>A}Nu8Atj>gڻ_!S7{{[QF u1H@3Bڽ 7>'R*Db#&bQ1"> @C'}>ևHZ=#h􏵣>teVfOjVWj-^^Љ^z>ר^jniz7NS`!:G}`}XkG}.÷4}>kOG}>zGګS@PNuN1+[u9{O֧Suk}}O/Oҿ/B~6 \zk}Z[gz7?ֳ鹽n \D$O9 ][c>&LJFzf.'A +'Z껩[\!V#b2hu7W+pq!&8D{ǕJfp\ W%\αDL-͡OYV ,hX6l[Ɋl*EaVphYAxYA J@`C~P- 91p{DbLz;(^Ldy{PrqcX rTX. aj S4SX"*(.CR%xO!4LFS0!׬دNУCX:y=ܠ(~ yY{IcCc/o!W4, 6D9 I/(d[?OdҽJRxVWQvA^ rW6B5XKc;LřKk+nK+x2yx1,XvKߪȒqOe\*憙d @|BB@/P j/J*t sU¯#' 6B RZ W`ML ,>d%zCz Ndd{ejvZYk-dI7NsN;4ӜӳN;4#ʍ=A 4A-GMMMMMF2@k bjc&&d':ӧNBZD `tߌx@ł-Q"c|Fbm`,@͎ U&ɰU͐ dӅQ!:298&(P &pM.won,pL-d :(HYl^|8ԀDE!1@@ɇt L;DX(L0! `O5e4OMeO6 h)kCV(` X\"G^/ x:S`Q<,V?d7A;AX+MD c 5U A b%7!1pۼ=QBb)imEc _v(b@&@j0mj>JojcD" ֦1v!!9d dFBCr F<"cf?rŏA^M<7d0)?t@ LPSc|_&W6qxUD!({hMK _447 ŌY(,%c)yy4(^K i2 ܒ(8EYUQ.L e3"(*pL@248eGLa*j+(uqFvHAFTpW6D&! SDC(Ɛ j >mdEۺ~p{ V?ԀPb&@+/_?G1sGP NXfBZnAiz/U Ȳfi晚s3Z> H).B.r%Tk+(RB+rYt?\CnN*;~Ȓ )vKAsG`aؠ.NLr)IE1ȠE1Ȧ9"?#61Ȧ9GcS=hz&ЦJ~===tZtZvGvE H;i:'U괝V-'UꙫzPӚG;z'9背 pdIע^>a30fifL343@] 1kuAqdilP#yPhQLil-519 I$% r8.5 =2SuIBvħS1f" F<\i@xC("ASWGЭn>Eȉ8Ӂ=A#h @\..}3SB zN"As Jpn*<c|HlÒn2$U. FX'Nzbba@hy^@iĢ ῢd `2ؠD@ q0}Alj!Fh(-@I PQQ1Jnb #SqDjؾ ጾQnÒa4,o%;&h R'Ȣ(!< N[&@+! |SJ1 y/abНnɩ Kt,b s͂ dK\O2>/^/L=`xbbbkp*5 -PP(?7QB/(O54 4_2 dT (F>JhF9J,]hIF[+.P`H9c9t6rBī<4Aؾ f2~eby`9\edjI d{P;QDa !( 29@2~K5fZ(VAv?qm%.qD)_b$.B4.l0(C1xB \@2 #JneUc|EK-E`C-৒!XV`=:a-tD@D]EP - ;+qЀ@=xhB4#2I”9HClb cavsR^-WLD87r 1X+(<8b$ 41|DŇ-q0yM1qO4CDS1(`.PZۢ :!lt (sQvVc@&@TL d&K28r]Q ]/ &cshx ⨙&PZhZK+SU&`$I\_CjjWt\j[EJ4P@UQE@46LQE?7/zÈNP@ QP%pAA(X {?'c>J!b88 q2 PxL r1V+n%q3D9 (m("`Z/ti1@΀d d('6xX(@&Mp pnB G?3F9ʀgG>-E^5*Q顳s2#\3QFxXʚsW7ɕ< kJ*H.P ؙyM|GHhCz>(B08l L@g M׸C|{1'_k__k__k__k[_iшlOoo1AOW[-Vfn&f3tZ&b1]%{}}.kK_k_kKPUz}|kK}@}khAF!-zoc7MM|>P LϲfdstLD3=s웙.Т`F!{^{ B 5 [}`}`}`}`}`}`}`}`}Cn,y^^G^>oG״>ղWet&ٖn[-r܃ Iv*k8SN5N5LEbΉVnyo&j/dC#;+aױD-2L( YLW^lU)*q9 h`>A"b(AG`]wDexcFP:xc!bev)tY/di>Q@B!x[ kA&<'= .Kc"A HܦЩ79c476e$A Eh ĔQ(S (0'5t!st +,ei#ЍϨJ$ @1D&7v3` #ArMoU$"7@n c~ `XCH`QFt\@`0/Hܯ*0VlJ !]9@C(]! +D(HH 4arM4 /<kX1C"rb7GA& H .q׿o$.\8jwX1pHjՓA*aW :k(@`"xtKAᄎ& +ՒSC,S@ ޘ |OKfe!0@RtrM2 CSc/8D`Hf: y]yvWwW&, tFi.@DXUöCv~d! Iz,9.3Kj` $%68湺\5jjjjjjjjjjjj 5FdVr#DQ2@`%ze)hZmq9乺%"$s1/ZG :uJ4!wiG0kbƇǧ(F%=UPnP/BB[y7o0 /_@@2 \W6a>`4Wa1^>աj` 7%6j8\]4r*GvQc @%IjDM " '/YJZ*pwPU -[/6 LjF (^)psAb7`f Kwpk'j`G*vMUWP,ecPh| T k|p'9 P$^*s .6k5*wEYrEM[2!Y #sh bwDe!\? ~0}g3&C FtM'&_lQ(Ar ($txX E&#SlL&ւA3np׸sh:tM}ǼB)X|_dd8!r~0[wR̢ȳ_O -ǒBjeArsʤӻc@T:@ +&42S!#bP=&>}mI,D :=p<O ,MSg>g>g>g6W:(aڧRQ(Ar < ؆xbX:Kgm6B@`z?&Q&Au`y B @3(uBsj${#KW`PT`jdu& Kz.C0.!99&3DHk2eA, ψ&(RRI^Ԕd`0BsT0PL(WWhU a`@T92UT柀v-P5\%ә$0>5_4| ;T=j:nua2 *%bGVD\`PEӢk#sº2JLF1j-%h:%.̹Fv# DA分S)lBgD4K;V;?,odK"Bi1@ж k"hwrD*^٣E6C:,H'w ``p;I2ÄC'Lf `(!UAW|FN -LP BEV`*+%;T?wlh1X fp P39OC+q $\@PJLXۀY!,D4ᖮN|Ux ,#<6$# `F/2Z* >A#D.0@á7hK&wpԆ # +eEٔES<Bں%wgnI?( DaNQ,@eէLCKTtJHCU$nJ>j,74AJ)d'cF. 9kW;-ATjy6"OwbA7FY^P؋RYTBD0Ŋ0BgBahȗ< I]^&^W*s#^6;> Bk*bABJ5\Nd@.zn ne,B8&"%\*CC&NJ5A Qbj8K@vU HHKP+p`\ȹFl΄ )&hA.Guf&[7LӸS AI9PKg?X0, PѹՇ#ˀ&G ^Z7<;ҷ脈Yb(0 8~HR,f xV Z>?O;t,:yY_=*Y7^ʍBȓSK@8=s{'O+r3%RDOT\,칚2bPPPP2v9gBd ~~~`L'-E=?zVh*SUX ȋ.b'ffiffifffi&' *39vNNȦ9'dS)I"8C'dz'dz-hz'f蝑蝑蝑*2_9~2/_9h%;>>IIŝ$S$N:m$SGsK%S%CR.Y^Az @'$20X@_TP  5x\bU^Q I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$H$IAA$I$I$I$I$I$I$I$I$A$HI$I$I$I$I$I$I$I$ I$II$I$I$I$I$I$I$I$H$ $I$I$I$I$I$I$I$A$$L #ɮLR(RGf-k&o!I>)}4О}Y䈒nE.BH mymi%߷cՌ?l mgV'iWwzY2II-g6 M<ԛk2yITS%[ika+iCݴ!DײۥcC*m5u"-l-iΧYjO_NЛo묲߿l&"#*ҖImi,_8fPR loHM{o-[|6X4I>Q}Ҙ %&Y8Kgn[忆$ ^Mm$#o$eORI&xI$7%{,{8҉@ku 6ffmcC0 ݆uӮ#G-Oބn}j! oiiտ-A @Dkؽ(Z IDd06OT_'F.Dhi,$qlMb@M{IgvC0`yaa[%kie+m%pq.u߅-4mOg Cm%C{LE Y< $s@5֤H>̒I-vムY \ooۯ&ӮbmKMB $x]RIP($,ngx%FHnO7y7&$H͝li0-(qH$5]T吏c26md`$e6Nwd0ֿ>cI-6[@ -}mI6z=mYfjiW)w{+y@$~Dp o}2wƭgu7'RgrZHoնש kkt%9̿Fl.JI%ͿMo,ߺl[rֿl?|Mdo{nYilZo,}^}= *,3}l =Umg -e~sH53qMzmei4O け"`[4,x/IJ+4:a-i)R,HM[daeլcio}O=I$L{dnI}k ?-DM'XhWS'w] Rm]DL"II1$?mdQHkL.ɤOi6m0{7ƖPf.o~ $y=Llwom&܄m=oa eTKen}d+_yn}IdBo>F>ϭ쇊@=<>bkjEIawCGӉu\rJI$A$H$lQ/can/fL'Kt7H[II$I$I9mVQ/o4[wKTF dZII"lkNQũ$I$I$I$`ywok+Y$΃ihOMuWd.iAVI I$I$/$o&I$l}τIMeyw&`H$A$A$GB\yO}mdYK:Aef'Q)77[0鶟] $$I$A$I*[IlK&emo$nrK͚hYhlK?6II InGy;d%۶JYI ~Y`wr/IkR$ $I$I '%Ydɤ&_Eml$i_m;춓Om>uIKe$I$I$G24K$Idl"m@:46i~ϯtim[A I$I[lK$$vՎZCVM'}`JMKaO*J-$I$IlBKtP1t97ٮ)@IY$I ݯH-$j@Z&rmĒI$I$ #g6JduooI$vzi q/l"I$A$@NX1ˠsޓiov$N\I )4_m%$A$I9D6n{2zߒdMI"`Fʹ)~$)-HI$I$u8)O2Lm o>'$ݍT65+*MjRZmIl $I$L?3]0OwM!H0DhHЫ,B,m[m& $O-#%7wMJsʼn-!6o$Y$BD޶B6̖.,4ܓc $I$I6h"sQDkI7o%bK!,|^M$KmY,$I$-4j_ՐBmͧ6iQw)-mDI$&VO} 9M6!ݴp2Kơ`6L$mbI$IMq{iw Kmd.{M6^o D`8AI$ A5 P@$im$.hIl 1dOlT6f)&al?^mik. D-HA$D/bkO~I&ݾmMi3LA&yDIlvI&Km[- $dUXry#me)}W uI$om[i0J .wݎ9}d6,$F3cK`vH?d=z6Il$$1 Ѝ5soWI lI.5*|a_de-m$mrKwװJhA߯` ɦ{f $ m;I0P}»4Sm Im*D$ؖN3.l3Il‘M..uD!oH:E텷JHlZxq $ijk_SѤks6OK yciVgm9-'_I?̅ ׶m)2N@0mM~3O?a$ěY4;`V=ܗREWm$M6^Ig}TZJ埬lmjpD!:1~@Ah@$=f{BjM5\Nehh6_C *_I%sI64lI$-|G+$Ïi2H-4V"DnpjIx)H no/nȼY_?ߏ )mз}ŖCmtM=a.< 4M =Ŏm[P|G6}׸vHMvmJA}v7UFSIH *@a-G[*<ۉki%{- `H|wo] MAl!lв&TMjhyf&< Œ/P9# '}{ȐM r@BJLdJ pjjl8mIoCW$!mzՠ@4H!e46*aevMt[m'e{Iտ}--2j 3/Okoz[ISe GÙ&.R}mL&mkԶ$@I-&#%m6١/&rEvXk!-~"@ IҊmmmPhHmbiRn}ge &m" Zkl'^Vd_E$I$I$KwmKilۼM4* >ΚϬ `[#Dh >lmMͱH{mml5d~0V i֛}'d6YdA=|b &}&dۭciy{5%eo I;;o(\?c{m~$ߵQ%ie%S@ueVeiZyI$o[,U=wy$<@ lȢI$I$I$kaM$C} Ikc`-_YBv&!ZmmmfUIh̔ +7m @#M$I$[Imy'}4_QhfK%IߠAq.8@ >w҄HُB% gLD ˵f-6[bef7$ISRI$I%:I$I$I$I$K>?#vH&o]MMl(l}Iٺ4̛`XO$Z$ͥI7$id$I$nΫ[%kGm4$3M MF: [YbGeIlIn+/[m&e!G4{msV^cI# g )qHIM-%Mpӟ}.l}k`-b[m9oY-IlT0DYĒԺJhjoI8-IVkdEi$ߢI-]NHRQdjN5^2HkZ"I-]k푭Y/ᴛM0mdI-eN-]fK&ilnr&}% /$-%I$I&/?{%M&@ݒo7֙ T! $t_T]$T$Y$WKCԖI$NWid"I6+!1 AQaq𑡱0@P?Hb}@7@wdu;}@Eu;}ѧ{uw\v ;CwLwd;$wdu;}PC$set!weu;}@Cweu;9 sd}u9>H7`sd}u;>PYCk(se}ht0GCG u w_;)29@S>b?2@f};}(=@IGHmʓQ;u;þ,we}HYc$wdG}Hﺥu;cu;:H=WQd?:?砿.?h9`O1O-89O9OYOSou/*?@; ,;}PYC(w7ђ0wN/6Hyڪȣ)jCk`VПuHt!9h*@ aGp$N * j4+U<@*hOW&ɩD)dZu7דp9١dE_`m9K5 qK45+dOK\ihZB8W& L(EMOk$g7N|.y\e<FiR $'oPK&l s'Ay^ Xe"9?O=Y`i$!p$rv+C)ӊXxVJйIJ:v`-MDd*@BsgDs"$g NLIM5E= aY|PܞeS߱jw,OWrc$iz@V*X2 Z7f8rPFg (F  t 5"Y-9(?iϴgqoiL=>;}e;;k <˅r\Tnpsp9'ίÅr\V>.˅r\W.~*SR?[M4^LlA.L "JTU s3&Fh.eNuO)C)󝐐 */LY1 (9S@4ʪVו8Q+DΎ8@JH v^B"̹ :t bfsx:$ R)S*~ tӧN:tKIP7? *Zܟm໖1(4P9*INHL(P&tNCQq/s0MC%TL)@ir{E4U ӓUR0 ?)Jã4@d&2iU"jBecs!m4$&‰&mOuPP0tEOŗOZM6Z.Lŝ3*ڦ,H+~|U8\ T#zpE@NO1ZN2%(RtW~3z$'uD9 y,AdEZ2tY MHU9u@ J019 ,N`lMl(1Hۻ-0ܞ.+$L"p'N<(|=DNOlx6ܙ3Wƨ P2? lpS ,j/Yz &\kX48IaQyK;g$`?%Bcz3zE`C @2 d̙fcku(F D…$ jUUT%yhbȪ4b \^qEMw NDd*L/b1a@O i?w@ bnEaZwRSԢ)(% BވtKGf-dT _rP HITԪOr' \<< ૡXҳH΍!6\FkTfob;Øk@MhהSAtL Ўsy  ą9$$sHL+͕ 8MͥqАtC&ӹT*S >SAdتwS0%I@K4FQRS(Ψ#o!]dΈLl~, Q}sPlBwxKHZ`M\ ]'&ih"4jFNJ~3*?~ I> G*;N)nFjp7PSC4 DiL̡V(ɮDr2#6M=΋2@$zh 3C$d!XN}ym J,EPM;`xETE"S  󜒫/;CMzfd%hآ-!vƹtz0±tꂠ TEgwQIrEvt)3BuzGsDf4J%.2My@3.sŐMTʮgCSbk0,EE%Vb`QWq?1Ϝz)t RD ~-!T `>"9N:qdh}Dfz#3D D EK P`&L&LpI%1~S6@|^6OWa|^6Zlg1? XS '8_da|^6AMdj|Ӣl ,w!wl ac@!`bSa`dJr#M6@o[ f;Fȿ2"Cf.O/d1КtM޾25i' Vg2+;CHU=z)U6ݶ\MflWe[}lNl\,K3dEq7euf;l[d0t` tMR6d+ 8ߝc[4(r`;VϺD) AWRJd`pƼgTP;2g&Thcs d9.Yϯ2*fb^6+J/X1;$n(y͓b~ @šHVMS!IQ d uO y L@j˟}?bLc:aILP&\LH+? <RL D@I C$>rs@#saT0)*QQ/3$8iD @:>}&~sD+NOzQ:6)~!N C94'<9D3 x .1>w14T&C cN('st:8Nh Y1 ³ S1 1zYn!dK,UYn%xb篝Uz2) B#@Wd5Т} fNST. A1СSbL$۔L.DP.;RDt(ou564$ ,xt:0BVcN)ۏB @= cq$l &.M6BBCS bb )D cLp(&U-7h>r읐`ɢɓ:}ϩ{CQ%)*Mi mJ$#\穭"'AՁ8eK~!i ^xZvV.S#A@(TUsd((kHZhS'PF**=^>X5?`<9sB0 |Pa$7S <{aGA ĠWZjoeu)1e5F|TO+uDA^>  ,D^:B5h9 MO<{!F @ YlT4-}g J)0{אdrt;+0xbpn_b͗Ȑj.mStx {?ԫbyǿ#GAm DaX 'TUMM7:r(oD{/n+ W/+ ^lř!F`Q ajSMR н mq(8jߏ(e V)UY٥7~"U%4ӧt4Tu)q+lV Upj,$$y9b:حj|h*F?+*>4BsUYX| 9ǿ4\icVLPEX4)i8vj NQDOij:y+? 䊥6z"O6H:1b9O8YZ"LXtr qr!B4u>ߏGAa Z6 h4D-79O|T^J%DˆySĕo| FIDʙ=xF&b$QK#αؕrvJG";%[r"xZ*UA9!Ke@h2laEDdaB4a ӈ(M }>nv ƨDmTEXL =xS$"#}V`!$P (xXC'BzBpƴ( rd USL 0ZEs).DS086': u8闝T8'ЭaOlr0 OXS1 нkЪHHS( Q8Q u?^w(蜐R n]Y۬mg9uvf{"d vϵyO>+(:O>Q5? :_h<{O=Ok=ӿh+Y^(;}_ϵ=rk{\91gW56"j]v,L.!4#nA9Wjn ֯A7C3Rcfv;{Mػ{MVgoiv{{@'zg}{ZOi==g}=T{燯 7Y΃u7Yu7Y΃tq9nm7{jDt37Uf$]?rD&cnM&\w/sΒON}>Ӯ_?{@ضhaz{@uGLMNk'~on}2)/iϵͽmgŽm?Fp L@'dB %DЬ@Ѐ*TtN暝 09 7Z Q*!ED^&T C:,YY{&X@7L.>[Oɖ&LP@'9, d6hT ;uz!FzT&Jpَ9 7S%@EE>aEz|*H0=aYw_D}@֚1> mc!tGV&LAP@ ?5* sLMw IӠ1pBhَ9 7ҕ4F袊1S FmeQm7=$> {I<eiqȁp`FIE01C-D*V&@AU5@kL^zL|tDbP !&RcJ2E`9K D\@\&klɀDIT!+'D#XڦŠa11CQ*m@ -aa^ 0E.,x )L{N9~2 8#F9,,2ӽƯA £ɅPXqH3D^TG.>bu 80he0hwG7B26@4M lh0ž$@6{NNVs$@N:UCF.qeJnT)Y4{(A D1e֫S6c[2&!)bZ) yNvK|k1'G7LGID%l /H`mM?B /P:ЀwCxD1UOdSqeU:(Fc} REMFР&{uu|EjƼ%6]4ZBU\}b:fL  X]24E2Sx%1ɈJP(g*N :xML0_;/USVQM d{!f=1cA`S .q%Z8!El7D^x!6F{ U8]r.6\l@se˜ 8.p6B$r狧E#7b!>F Cw GH 4E9 t@WD 聋耥H"r&VEM51MEz<'?ӹp.]˸wMryMy\.Gx$D'ys'uN뜝9;rw\s q'uN똝;"w\D83&.Eȗ(>*x888T*xADx6SQRAd$PX9 tix)e,JYP.pئL?,5Nd5uKO҄eJӀD5qSˑpat'd*RtМMTT%LeUWxԙo @24F"8VtD)4x )e"8)`r($L c @ }60Y?$J^*ɬLꉌڣs4Za|z  Λ"6DjJ0wFN_"o 0/诅 zEԕW#FA}D3e$Cs8t$AU7G"SGQ#Z&}P@5] BK&x™V h:lF&Crxp+q1XUKd" Of5 Qj)R Pd4uK9 h aqpb0hD¨p7d(E!H$lvZ@䜙_RTЪuz=B*U=mhnJjqO *ŒDZc$ej-cBDxqO6@D43ASA$g.,G $I C@@*m@StJ%NWBr80{UR~s'D ˼U=PZ%Λ)X*ɩJ ({F_ DYQ f@\icDB 8ƚ `!NqBHGܯ51(?@" f Ov@_$ Bpy++\)*;UM|2;*"7'T58Xx۪q;$|UjcFOC"a#]Y"PU B 8A4DknLQ Ng4trxVOB WBt+=СP= GC Mu ~h4=t(غq &ot*}] `sYLʺRGLЬЧ\B+5GF̡|ST+9JYrSoS7z!gЖ^tni 52dΡdY,PBu VAE{tY=g:/X?dA ]f,Ř Y1f,ŊP9!M&D>QQPB w'.P}xd= Ob@݊h&LS1LBcrb '/Y+18zSY~|! ͡Q5GLա|a`VR^lG>R+.>DԦtG@Q!4v"{?GfIX A(oGᐗ@CL<ѕK *9QV7DLŬ LIN""5eP#DD!<`-`u'GKM3ozb9'zB+T&=+zO G#U@P }ѓA""ȉ;#r Jd q&Br} U(E"td+8h vYcǮMtl ܸ௏2T^O_O*T% BxFTFL!1?(eѢ>|C}&` | R "D8<є"F*.GJ7Dt,$@"M>}֨ 5R"aA d2ULaÉYɬzZ8r:=2Y٩&B1U2'M#s&}Ъ*h`I X6T^X}biAk7T)D|9< @(X7GϿ: ?RjQ":(?#C,*ǧs;ZBJ&UE@U$PYTT'Ъ!f(ʚCco4?x<*إuBw2b E3? *yz`D @qHa菿~|ATbT#)"N#a5HDfts3&z^8"Lw:AWGƈeIxC4r},EM G8`} !PG2E@J"(,h2b  B̯ *P( 4Y$ Ȱ ͕|fS*QcDdHNJzUX&Fòl=9;ip٧0`rŀ%`(Yd"" BqnS` pX,dqk AQ~PDP#Ns" < (YBhA9L~mpL~t GY TN_4 9 Bۢ0[OMLot~ )@e2$D EB `H ^`U$ AE %JB 5ZQmL(KD43FHT &dm ?vcSinEF90RTE2؅L1 x0=TU~ L/HAi!@8<ѕ$A$O/@` S"'eHA@X 6oj`"dP(:tJtHbp[NE{DMP) 9s}` ꨳD)^FEH#T $lhB ꑭC.>!%OlP&dg1Ddl50G?2@ Z7{Bm6C={@h!3g$FH Έ{Gϴ(|=8e\]5tOOk1==Oh==I2ϔL^z q7Yguz q8nA5=1vz^֧Ok0OkS=c}s-Nbg}/{L=&gx3t/kg6{Ev{YsנI{L Vz{ZOk_okYk==}gh/hǝ9\8S 1 ˅11VpY8,Ŝ!3!36y *f*zu /n`ntHe۬ϵ{n=@Ƈ Yhj.?F ~)⟊v)اb<ɓ&L&L MЈ0LLLDn*cE+? <[͠#S =c5L `Y9UͯXxD>-B7{ | e&E6?Uh5EB>шO`B&Bƈ Ykb"kdSi$@DJ%D/q!7)|m?D'ǘcʤ^&ɈU$t`K$}q%=O!+xX bA(1F29a@M4 ZY0bb2T(d SZK0IDF*#K/ Oi]?DC'cΫ+&*HC !dP۶ ŧ9c#l,QMQ2 ">( B UVD$&5Pd "1]OX ?%$"D$Br ϓ¾Ώ0ߕ1MlV4Wi"1vI78u+` A11HAAd "x`ND(Ĭr4U/qØ&ǔy#bȞ~Q&@r!bvB $ 'xY qJRߑ0d jS=ֆA5DARUldVd ٢)' 'BQ#b2* 'x9~l0ߘ^Erk TxxTak\S8s##> &6+U"=`~ARL!+-ep-ZAd 9Aئ4TŞArODS9- tn8sz9~3)M`TGPaB{OBQd&8_2~ aiiQ7/ ȀLU"ɠ+bٶ)h@~ cHyG J%:@zq FNk ~m0ߘɬu!!n VAE'R4$xsFH9Umv\_Ur!P(NHX&uZn Ds/X-PTUƋ!`& dE-) 1)@:Ξ Ӳ%ƉN#iCXz)򊶟a:MKU&Ub m/fAÜІWL_OmAd)ib@#o˦ I}dX'T |? ѤTUrpt009n5.8r8ߢ }*Tt`<|D,B0W )ic0q|kkhi@ Dxd7 %W "#@,ZYk-e(VbGU*Y=rPpyRbL^,]eˈ . 6\lqgl+8H7F?\O}u'r}~Rf )3Rf.;rwY~uN뜝Os'uN똝 \$s't?r'uw.w\$ydi]cv.@P[(ظ?b#n?#ρ0!d?ldi RYгf,՘bzd&&&&& d&`b`X&FK""O$)9D'(r4P@*r Qi̞~TI'Ir &l"./sK\7?=M#*nl' H"$e7,*m\\M@  D2oW@YsM`UFR4hLT!AmR=£xfO*xMSp_))));.Arːv\[˘v@;]Yn,}K%eweYn'x<2GcGMG4MG칇eˈv\n -y1CWy~,L_g/!n) vDc%L)  &@  ĉЃY8@BN`lڢ\[9D'4W@pFP@ jX6D!PS)obĒ,}U@'P4 m|lmDsFqj.rOtY@iYT!HUU@v*Xi{7:x",K tbdH3T&]\$NNNND@r''"VGs|]u>M`j$M`+EpuBsK# $EB&rɋ=SYvGMټQ;/O _LXěd5#E›:NcE0Nu 9&@KŇ Șr3Gī \ټMml s&ѱJ+obrSSaiTY KB zo] +!FN4]#yRt5)K6D4k"0/YS hI%͊T<{Z2@  DhؽƖMD\B nZvl(ku-){' "LY$nzc SEK 8M0n%p≨"D KD"!LcD0{2o#B18ݭ .hdK4g_S * +f7D\@BhX%p @PB5)&Um@}OxOE>MHC4A5"`LÀ `(O@4BҁAt8NSh8>5ʑ{&6LN7|@"RLMA=7d '''"^8W _(Nl T(H Xįf I?j (HI%O` >$8N1D1DAE1161LpLpNLpFGr?o|~39ws?or?o|߷Wro|~;9_WLK~39gs?o| !Fr3g+9Y EoϱϰŲf]ͯ;Y]6HJDifJГntI/GVbnodёvVM <I7(Ҙh\cssҫ@cKfFUbŊZvpX[OQէb56vjSJE Y tXC];EZ3^J.!׊'޹;}&! `fMcFv [Qm6 %k0dʡ(WHFl, PcYLmAvԉtQtQ&E؃7p`vۄ)6V6SԚu1cr="+7"IFKM$=$<σhGA#6EjLw$bfMI$I$IAAlI$䤃Y9C9c9bg9c9cI&H"tpA%qGOzA=A%$K"}'ܑ>Ls9c9CI>_or}v_]oq#O~?_w'i{M/)=$J   H"D$HiamsKiBV]ib}zRo膴VGHyڦqpN5HrDmayeBB:3iBVã[=GoWK!M1҉Qu5&62maya!cuG扶@{UvEMk&ĈC$wEH؆+\~tqQG%`)UgmayX[vݘЄ$*Hǚ! *cPdMz tT/o ՛EoBdC2-ŋBnYj5UuߛՅEsqb]v4! n y9JvSMzs}v:A͘3Dmc-V_ڮEƦd.UJEk}BۍhB:@<ڛiBUcD's#+0-bV #PE6DIQ"idKO;+\-_1HW<7&P&W1SِҮH`UY~wAsSfk2E (!. ΈToX_Dkf4! Ų<7Ӕ!%Q5W\Y>V+ZU1EN] EQ1LQ-tǝM,/jǝr$eӽ3z}FH5yFl0IDA zF<7Ҏ,-!!l<!A*Puu!dёjbNtMtS;Hڞ| <x'O䟓?'~O :[Fii>...Ɲ; Ӱ㱧biӷT)+*8֜C A8  @ A @ A  F#88! 0pGq,GptQ#ePL B!- vYtX Sct5oeY97ufevMGݝ fO]-6E^c$n%"³Vb,n ׍$l15z$WbJf[QaeޘXžNUa]0c^H58 ym$Ƣskx =_щl\5h\l,V #uy$d Sc`:_cnSΘ=_ҙ"dS6c7,;شbƠɁQm4I#mY{i1$zR7ΖaJ՗{qrŭE&~A,*Vc}9lxcp=i4I5Iݯp[XzsgW{\ oW*z{xjsg׫IZ~tit:~ԍɎ4xcI*4G _@-{-4Y~w4Xt{o?L$~#HdA9&dw[Zz emaru~wOEn=~<,mbC5!v!%ؑ.Ļ NҤ4I"9cscS:j>!Gӣ!_C;LJ$܁(J% )&hI$JD͚R5"MiFI]]]]]DdI(J% FYAeI$I$HXɅ3 F~DVQ,rILƍI_CPԚ%F3mΡluP*F6VUybޯq%X?I h~|@6b_ mGyie uqzd_E^_oWfN$HuVMV MVǭi/6JՋmݍG~=,WyV u M-yy5wdHbBj6mvI:+"GxEt:].j, FΣ'bVf MF6,&ަ5?Vv'Wz_&vQLdĻބ=^vqQ$%ۼ yY6'cГ֋Y~H1~&vrtJf"amhV>*1݋EsQi~ĝ^LJi9C9c9$H"DA'zOO}@ f9G <'xH?>_9ss1s149Ns9s9Nqdᜇ!r)rUڄ`M>NЄibkȽƣG&dY,K%-R! c÷$R ޿]v^I4{8hs/ Uxe`uoإ@Nv,V'IALsC"*5W3?;h30tU,獼6Oc ciõ)t"&" YbMF<;zUYxf_VbtUQQ`=\r,D_T/S5R(*u0ښ?U+d$1+zQR}]`GTYyxfB6ʿ?۰^pŨ[X+;bݖHLJnoR)4j5V3:EdUptr񷅭.NHLmVث172HOK iHXQ]heY!=獼,os+f:}v!dcK')f;j5jh3 cîo_\&{;n7kL׫B iuȣY&:37d<)FuP^F4XYj%;]s:ԕӹ+5ܕ>J %;;w% !FTH"D2D?VH"]2D$@?v%ؗb]K9!܇rd;CRlx A nmR83838GSCJh5ȇoDI$I$Ȳ !_`2("Cl'::2/o*^ɣd356md58,RuNFn]Hz ȰAGuvz'iBV2gOF=@O]f.tznlt;#XbudWG<ѨHdsJx3QFPǷBQ5mtSD;cKR5HnjTuopkW{ \jJO^kG~Uc[1cj-u[IuBk.G[76,Y"=] Z yO҅^ǥUJ=Ap]EƷqUm] BKq5cma[?%$:ƵQzܜF= YV<3%[֓Z-WOnB:#_@kUXbl[3074v,+yQ$9XǛg[-eUsVuW4NXOfV$;X':HؕcK&} ] yilyBUkDuW*U^iڟ[5j6L(1?A#:+]qV%d Q}HG[Cڞ򅬪dӨ"'UWl' Z=)[YGlއPԪy-͈XՋMZ",DZjHQX&ddgUюՀ4֏il;ɽNu^چ2e'K.Ļ ]'Sm1=;A }$K.PKh<#x#IIjC!!!!d}2hzOI#؏cJT"]v'ؗcb]v'8hC[u555DjA2 5g@C=/>ǥcz^}Kϱ=/>Ǡ7$O2D$kQ"^BI$I F{X Rąv +g6dͲdž,5]IKpiژbGcu9яbGծ̶p(WiDx!%lxp 3l7xfBALkЍ&5,Ƨ 콇JE5;l`,R(EE)P~;׀\؛dQU񴔱9j6yfý&{kjlIHQZU(BJ3F9 Fnc]vki%jA1RI8Ǝ4qhG8Ǝp#' 8QŽ Pay5sk[Zm5; 57ev2 Ԣ1U(BJ_f/ cA͸(]RThݏ&k#F̑r>j/XlVA!%U+bndAق$ vKV1U<}8Սv4>i.jlU>q(yBU}73%ᨮ m3FR=]"5u0r͏45 ^Ջ"MUq⽌W=IB8k= Q0XUpH5ٺ NS#?5ymM M$V.‘{<Tyl!F E2;I}lS&<[HdD-H4[h= kkx2^%ҪDE&1kq}d6UKtM%%%9 w%%%ܗrD"DW) D! .3838KCs1s1sDK%%d]9#D]o~'ÕD}+4ul}*u 5TW%:+WY5xoXW2k+;4_6NJȰH{1:"gWF"nx:݀¾Hǝ,E\@R:--yOuZQ=%/ضK_g14k<([zA"}Y=bp@95~ݬ\VMo3"ũw PcmX$[+3v6H$ Z\~'^Sq) KDZ%hCYUfxe\qGl¹Y‰YӧsAO?.s"Jf=Jܭođ6V%fiou{Lyba_x7e,*e٢Mvfܞ5} - t; hމDkZ ÒHʮ#4 Ivan.43 +u,գkox픒PNL=J>J=Xoͫqfį*%8 _1ba_x7wn;S>p=spj~&Dm֒ؕØ߯O55cUٟpr,M4 cC 6*6wVꎱƝ砆^安KwU-5"PBszqUosK5JsBS Lta_x阴eUGu)~-a kl.}?I1 <ܡ=P?K^5 ܾcE5ݰYUIF83״ 5kؔdIBB!7WoY[IHgWa_xDXDr>σb+ :ΞazoO>'Y]ljH @d"bbb*!GK"'vQJI$KRC;C!;=`CC!!!GppDGau>v@6i )5'b ?ci:v6i ;^#IGgy4 bkn(s dAm&jWCBQ$ITI$L+!1AQaq𑡱 0@`p?#@øG5:PiV-*LiBxj)8/,ZScd=ݔ)Dr',Eviz B1^0;C,M5RH^[9VfPZs~ѕ֝ыZ:͋Y :PAjpt<.(>Dxuḭ24 (Z Wr]J :+CLP*pHF% A VGP ]fĂ@[JnP\VluVXGUUfZo3A2C5-ƊPĦhSͦnJ*W3RTUxۇXRz([xb% @!E^W4>[(&DDȓ+pfJ[/J°P(\PAIj!q7u_{d@4ịa=뗡uoesEx2@T8hԆ 2 B徔2A-yXW%!`RR*u^N*" W )l1deZk9 (9b XuiP+++0PpXc~ FJCڣ̉erZNT RYAV-r Q!@dp G&|At ,`OJŗg, *8([@f,QIF b[ȪUΰ7Mh*sF,v0H(%\28 1NDQtEW[\#*3Њ[V.,v*_ڕr)4=_/E(Z#VFѝR؋]d=3D@ As)^j۫>8zJU"[X@3ښfOЦu ΟU9f }|fFeS/IT])(D4OL9x5"rAS_8W ܂&sɢ@Y?{);s+W֍3+U4ۯ;)hjQn bR1lF2讚1&[}t3C!L tU"=uږ Y*HOzT)Ѻs\IcVFoDfP#=_@PL-2uA԰Mٓ[M G$O.Ttk߯@%bwXUB4^}\S^Kw~Lbecw _fxu#j'37 Ic3/nfg,Cw$Bn̯8 G=2Wh {Cme_X7%NT/2Yv]Pij"Lq*~ۢvجb+?SLusY컕i}ɊmQ􅂍ӣ5hVY(Tdu<Eu =&"{+_@ pD _Q qX[e97(eB,}T_#/WjqdUq+5NW/++VʼA^䛞g#+*@Pޕ_q+J* 7>I/}#gydm^f xclfXW4yu_*o'O}f'r|fVW2g3Az?9P􁞰*<5Ix3ǯ7ZzT^"c̵~yЭqQh ` 3@~2&N1P;\{st'J']5+3~mkm lbޑUkפ?.j,sb9G%tBTg|~|leNy\=bkE8s~@V\7]jQ"`Q_hn jN mZcY ~4醙0#u1k %mx Jvv Y&4\ ~5=d[+!Y| NwQ>98*={l8%{D o̮p֦)įj13mbDCֳ86טO 0 ^} ˟JIґ ZA|\g`u˺mue{>TJ?SW\ \!#y{ʭx5ѡe}z+_Ԥ٠ӷ7i{ gmG-cF35y{Mx}]ޣtlMmUYN^}"ќ`=^WuEMJukPJ+?ƀj,[*̡?.Ҧ]e^^ed:`c0*uX^Xl혢1WD YX4rB`[) V{}/xp/rۤ7e^c*jpuvžrA[0 qg,q3.'u]/3̞O?%0ߡG\&lkǪT..=-{Jm37qs_ PB"cW~>wu!tAZl@gE{N^g~"{Cd_I\ڗ+AՀ;MO+WɆq09GoD"bZ`gwl/n7go Nߟ@f"h]tz{ͯgE״ECB=5zb;%%w`Syk4.9&(.١zp΍ (AseR27k8zJk9K'le)h\x`WH xzhgu(t[1+1 5p1Hƻ>LG,LڏFe>7\9YYOIGMoC8Hu9RugOGp}}@k=&_2=ޙI]c(>O#Տd4r*@ V!c׿-U.%2r}&g'>{%Ǚi p>!TgzPϤ 8X*Zí w yWѕ MyQVo^8=ݟ(sqmk2_yγ4q܃ݿ'oύ^f/IA7Sg].?XTs/sit8k;4u,\sw_ǜe\_ttoS.\![zcy 50۪]b/0ż6PJW1T qRBd22ߎ8U>*kRD 8ou;OZYJoR< s]_}c ]9"ۆfdV3/;=o@f;Y A*v׷$B(\P_ַ,:799t1>~|̪.xShS*Xb Kǽ+#0:.WOL+BUclUx_i,ЫBln,X,:|t]dK)@@*x`+4( 3VpBo0P @֭k`h^YVJ54~P#z4.[a 8Dl> V5/k{;U*˳s tf7פ]p۔㞱=#=x#scsJan;z3vz?<#+#Vo1x3vU%#+7z_]3$7]%/J//6mE /Rmܺ~(?y:a ?qxPs2|3S~~|u#ci(0ey ?x?pr]z |^) t B9)t 5RȦܔJols,=,ci /YE-g+33؂_|~C:b}Z˖1gH:2--Fֿ3uy^ggWW00WB2%_f"d8+>1B7NP^rVr@}R$+KIn,xs 0tat c!n̖P - q7. *A"mhֿjlj0L2):'m/.eu+%;9+LYg?KÕ_~d~s~㒟,X ~.?Y_Qð{~&?q`~5%5Zj7x{~7?q7~u/՛7?q67Gr7d/ Ah~騞l![7pp<#Ҋ_)G8~uϲw~ _a?dXܻܸE~a](uGE0=֏֌ƃ#7k@Yh@sB?,zJ}&VXe1ĎHOϵ6)_@%pGwKaz|Q3zNYT-/:"aZOWS,ı]g#/I.  (=;`VL 9"^o%bgRkEMSUޕ]]QݍP }ãC]Zx,pKGBx \(\XSe07.5%湟IԺ]qD9ONFSNxFo[w%[u|+˚N*%$;6fn@˚ESGN:j^& 켥cY+:=QTJXκ iұq݋e#Scהod_tK#d aUG* Ww fs.Wg=5+(p*}.tAbW!/up8Ηw?`+Y\J.yF&)-]S!<,D6;eI ؍(Q5b%CVY^ãp%Z\n4wK`/l  t" W2M(8& f1uto&A&l[wVM}n"%7 ?@Ŏ9cZ|Fo5XD͢WU+882 s?wG|gYԫsrqK{|Zeg'4J7Ljg|S"x[\gIt*sh4NUuҎ[ޏsJ;Nw>=}O) T0@)!|x]/=^{h}eGM1HeWw{͜u{<7aR [04gA[֨]Cx~?-U'` <缦+BI v3WX'Bt6u>b5Ky Շ]K+Fal[% cKCb_5X7J0\oV6UMj,2A3NWEN3xw/AzKkQڵ-::b/x 7D-&:jb^k]-o³: v$>﷙opxx噟77/Qez~ww.YJĶ:sJ2u;~?(̤_)ĮbQ_DJ0nGt/k8!>_7*3JLbNӔ9cOG9[aq~Ĭ'D{BaӛYEӋǙGϯz,>QڴhYaϷ)LcՏ1mt;Ɣ:^|P=YrŸ: U7a1uz=Wo֍58r.ʢg ᧉjr2Vׂ^%:Y 4JyV{:&HbqIϴN%H^,Vfh3Θwlj\|s\WiO_Ebju@lea6=y"ٌ6Ը>QLjmx-f,;A?pL9xh1]3>2+He " _.NeЫ}VPnƚRq*4/"Z%n.RomK(b0w++X]S[gVSV^k>|W4Pocʧg?8]ot PvտNtU[a}uͲg;b:,Qcz T]f/x?ˁynw]<ĺ-74u)&߿>iݻN["oһkWM=HK2@%n-D;kkkOon@%= 3Xdp{Ur*:J@r=o]b%{>z(M7yT+_;'uz6=6?},_JϢTTw_IxL'5yq機i3СeϤ {qNs;bD O)xQ%[5W҂X)B7Ӊl*u%Qyeon/f4t˔MGZ47D:24KjC|/=x igxbSS)]c/FA +B V7c'}Sh2L hLb5R[nʰ-Q -8nK^!%^ P+Dٲj6LbUug+FRխu &]Yq-~VzO8 };:Grk4WW ۨ2X1$~XĬg#[hpӶ˛`\ɢk3_DJ_N\oGP72Js:ʼnBpt~[:C8B{:WS^?vڜǬph3^Ώxp|`|8U0{/:-,`۟ &8e %T!k% Fe0c&(Sn4ʺjBKX,=eo%gہpJhs](or(j¿2#)aȴ?;D҆Ψ2]>̆Q<_!*`%PW}ٯoiZZ˟Xxl޸Xyqr@ujq֫ܶҽ_x!! cX L;8[]^z%`eo3_G_Ԯg艟UrzkYNzJM3#9?ӄ;9űh8IDlaw8[1!WJeq+Bnn1ywr!|uว#[xšy-\{UqԮul-ٞ iY01״JoܙzE⿉jϛBʹH'NC3Qv,RY14Xl@ƱRʏ+{ʼ߳*^ gG~6h?Xrn;7#uۤ)q0`%jܰ[Z/ǴB.TOm~:p5p)_O=!Wi㋛G cu ļTwQpe5juQggA /8ːs1_L+VffW;W󨟉gU&?CXmN=Qġ/oJRqj(ڪN"$Dz4>8Wfl̢;\O5J(o:HcРh.[m|X oU;MyIiX,Q09sz1]!^XlzYK-n W = Ѫe/ kh(Xlϴ,=8ˁE ޡlb-͌w@\cE_x s{;nUM_J8;~,]qAĬj#v+>qo_I_5i|M=!A8CG#3fXn\ zq@]u."r1HDW09~1`):JkOi"cE>j14D}7sl+К 7/?r@l)?xq[lSt-55A/iiyKE޸f,VQ]07p<Ԧ6ϗ 57- Ridq/Fr{5~6}8/dLi`W!۫ڷќZ]9e: pB] WM6^%֋z3үS]0Q+^qhv|oy>n8K Y'')evTdb EÆo=*НQ{\ș⥩ǔz/W *gI]Oh*,CwGy(xk>\G\FM b0UsQ531=tqhBfJז}-X?;ߣ/ny~'~>@DDP]"+;0%/e=_9~(Һ?S'%yMR N+Gmu?bFn-޿h[n+ĵ W+@WU]a"WYŌ[7{P(}i_*ql~>/|^P/)3v`2z1wL SuBxZLjO]-2r$?9KttN(S )qƷ(IM;ķXdV9zxy"1A,y _FUϘ]w+qqU- `+hWre螊u4s?Ο6ҷWzyUAD8,aA_.T<3k2i}_yw l2`Q: %gz&oݝ|L(90 nĥ[+`/sKJ%@2+TT,|h[8` 7b?Yv)!.ʤӦ*/ Ͳg9Ub`6.xStQ+Z㳤Y:<ʎjP;,jdRgEb-E8MY>QF n:ov1mw OJ'+:p0Fj]N5ZL֡~VIn<Po.X9պu؅YQŒMNQ pd32)UO;#kRq C4oJ[1B Wul5enX/ f?oy*gBx* ))WXQ 5nzuy8F)Ytw>HmaaWZpb}Jd 8Ez+8=V0pzU>ޞ_OEc}׫ǝz8Zjdl{ v;wxua@Zhjmwoʖ:{6j]5:%j^3N8M-Jٹy4vZqܱ1 Wy r/ C5 uL9ߙ[8Gf}} dJ' q396qw_b`˾- G DsY~rYn;~e+״/Sa>}s' eY!}!9;5 "Mb'%Ys8JI6J:Jǯψ)IYO@W2N`bVjR^ {Ot5a>ĻywFSeqd:5 ptCsfS.ںɒ`NzM E]K).rqh:4 AcbKx!E-jInoAskڢ_:67$:J.aҿ{B`U\ ^fFWx* ;>5 ѨxEWRL =?J?Yk&Xbx/7ɂXH. ߉@DuOYW̬z*M,Gh6z1C :J1.%*$rĪr<;xZ%1*i M3HĶlWQy(DډE2k-5FTP6B-^fJp[Ύ.s S>u+q"λ@9jY0u]bE,h53sgm2NS]'tC~{4Z+Y8~j< m1T:~+b^jZ,>YtKq|q,0#ڡr>`֕ܶNԥ巚U_KN^̻{ޞH72sF2`}yEx 6u[\iXb89W[J'ϝԁU ML< KLɉwq",@37sƣʾ==Y5ER =;S$0J[TcrXo)zg?)x7ɥZ=/(`1 9.5Y TLi1jxjXOi`Yc/lĹYAN*^b&opV郹BGcso[~Tv,8RmiWnP`yD *OpΎ_J$LNPM}{͛zH?x071 /|GTC?XρHg:4Hv9 ٝĔ·r@2®ع;lw:&[E4zݖo\QFw6o=<9L?9:޾~S5 #KEKp"]iݖW 1v7.mY/EG؋4 ~\Z$CU(ox,;xzyϴ7gDνRf(^zSpNP^x+jf }:@yV:T"ֽ g,_9z}ew]9>yM{ö!α_#JrY%vGn =V6fiwBk([ sE5x4qoM=ۈGHJ' \s(YOux{zoVqf7.{w-2-c YVFu.2 yi;wz LLVİJy ]QK|a\=xձjYx,&f;KTJ څ:"B."?;Ɖ2 AVs ъ+O.JK=Y[)Q,bk>d_-o58v-UxY!7a`K[voNaTL'~>VF˫SW##̬>'γ~ljgS/.>YGoe]R[Jx0WblB`,BsGr[?ܵ4*~``c~ֻzfS'FGhi`{e^ k~,ַ6E Jk%i(D+#E?py@`ַ4˶`P@.4V;˅%KQZ3  Alٖ:^ڳ++[`8j@}"pct5qvo)Xfu~zDqotMuN1uqh*35Ӵxf 75*pLz1{% 6{ uͳqOs9y& ~%28[T~s.)VeTDk-@L]ݟ+%e~yi>ڂJǼ<#NyzޣNyyhvF 6le}e=N\ .yY@u#>?3u~'y}e>E°;^tC1;yI~~_E0,yW0yHnS` x)g6(3Xs"FK93WN啼ݽ'/KGes,s|Qnn(`Gd tmƏg_bb᾽.sEU̼ӎsǞ^M\l7XHIodW΂s2@4ΓGmT{pzS4riec ]a'LtEҮU|'I!ЅElbZĬau-uL{s9pmιwJ6LV&iTބ{wG:&Gnٟo1Xơ<oSh&YP_nUV6aa:kЀqhnϜJ˪ME`q{Ƶ.?;#g:YOy{:cu\_}<ȷy嗛FS9:[pZ?i}gZ6s:7}Ps;ס>_VS̺1rmhzuW\33 n uP1:GF?j%7@fNЂ#$9%ܥ@:cSdSA E#w%bEUB:\e'eȭyzÅ_pEEsD?u0&n )_*'Y8cMBzG`Qk4] ``>s(8kIJhxM|Ű>E@EZGYM`.1MM&_^*L_iA̻nԆ3mwk5YhWDS"3D;VϠMKNwPC~&S?RxPq;foBN}~uY̺0+jCPMu,2t_UX);??4?O2b^!",!DqǦxgxg^fQNÊa zˌɅzKv{< O:fT&"THc: ϟÎ=*2W 얌uf?xo3kߙ&:Gi[TiqG:Ot˶ u/X nEEz&ˬu+kBw~^gq%Ol2#[{8zW@r"QO۝:1m%qZv(1iaj\6 ,{ƞeQ!Lfj [7p-߭"q 0 1ʳ5 x\i:z[6Ÿ=,KeV뱾?:*K ?nЩ_He=D+4Msߒ}g9`G&`݃nUS<`73q~TƸWƟh1sphhԎ2%n!u̫gX}joއ\}|Ъ. QZNIf~ >#>Ǽ޽wvgY!-J4^|09ͼŌo/xz^XFdYeQ^Iv ܢ1e-|NW`S* \2&~slhX{ܣggCpKy \;L|US)Efhyэ:b> /?X(ba0 M9bD㷧zLG:j "]s̮g}JϤZWP@{9^*?1KNtmҺj&*m.[7+?1Wv%pEwfzly[ҧ:Ǣ7{8īx+W_w{=?X>h  .ͳUu1Xj(X{nȡiF%Ӌv<˴s*N2yN-A'[{+lbK SG0@[li}oVLte6aq0cE9{J6W&2+%0ߥb8 "Vq\˻L &[^uvU4S*u)`nS[x}Ehs+*Vq' ,`K7Gr_?ˬkg8XQa(GQ%P7Q^%r* R0:?$"R$K j楳{~x=tf:J0~پ|WP|oU{ħĻ3 +/f|jubtn%}  Bcg͚4D,^weXG.-ы&OM0s]& ]̛wSKʲ].lXF,_T9 1=_WĬJM2o֣7L Nj,zgSH;LϼC02Q*īCGnV3*~7} "95POA&?6?"J^Xcʪ2%S8x=R`)p49cv/~bN]^{Z|Qh>wИWݟ?#|Q(mz`t|u`9a3O?mG5ZYX2 i+a+8 ؊Os-gG}Gb.%0nΘ>RS@ncPvSیM Tīsa}iSsAX1[υ}ث/+k{f#u0wn@j%)HTfԿ_?Q&J_s88r+ŭkA$Jca1ܧAlBk8.i*_,{[.Be7ߘZ v7EXgQoJ8{7/N=8 k~D/3p:CnP)uQyԣW0{U\16Fp7q; %V?ߡo!+la2%XZucgoxדD-c$w=Cx7S5Ǭ.=#opQ\Zs[h*qZj{M̤ (ldqr}m?KKN[={7*UupwX 1Sϒ 82t ZN, GuqY iFqtWy/, Qf*(vm {8wk7?լ(?X4ze?$11qϘU-Xn/ _GQi+7PJȳ1cr8c]'c/!?8C's[|mx+X;1PK7 jŪ]fs_MrDCv^\'eбj^C" /U?/1tAyuqsgϘ|,hkrszctaj]xw+obXq0QXx3T(` W8LCZ+ئM\TP)HCBN׆ 4T (2C Zڶd!ci]U5xzb20q6.QjtYq V^jSu?Xb oytv{Y9>D _=@(8&8?$_"\sߦ^Eߏ?~#yQ1(64ӜK3˻.9|A74˥${=40 Ct.,K-WFR).!evr\eͲ#iqv#"ڏSSUke4_!{ Ujs :-{ghTck=o?̦S)z;bۿ4̻b{…k%ɃTO@3YT 1`[0yJVem+::4.nnktuX\S.x. GSUEIw--+xxiF8h=Fu*l̰b 98Kv?3.ጹ=N/._naDF83?_zh~OCS=u7\toA}_p=ߏM; 9fVN9櫤j_d1>MV,bq7.5.u< _hm>ӯ n$@8OܰN'mCw_lž x>"%J ;Njijiy_!{ Ldnȭ8Q{:L"bψ}lOG~t16~~6Sye7u;U\ Xr+\ENWDP\?7Exbov,ZoUՅˣ*왳 K:.sp{zn ы cEG)v}"Y2` s[P#oQޠu@CYQ% `/v)Gsʺ!^Naϧ+: u؞f6N /*ұ׈5 >^bg~#=oGw\?S,?'.pqg;'Q6a ˶K:Ԣw[w_)Fu+]|i.bߜ1~j⿶[H{&0׫ WC7Z6̺}fmP[O^_k6a}FX@fFpat%s87 8;pX@UUY;쾐@,")v+GbXѠCGC??3+8]mlDpw~OxT_7ŷ59Ab(MRޞLA8y0rA牑=T9`_"9sXA3ChT*c6C|Y~gE~ P nS; ͇{:0{E5xЭÎo=NFuoJ/7GG9r>q#;lcƵbkV)c{K7 F/AD$R ~㈿.&NNҜwi2,;?~LPw=^wV [ˮ#WI?#xgP]8+ko-Me3j[ S uZǗy/X\g(1aGR8XUL6WJ97;oV9뻙L;^α~}>L7빏Km=5 o6g=asİYc}n+rH#4US+İ3E'5[+(痴W!hDn~f3r9JtܽwZKh+$k@kJ #hsN @3d1:qubW.'xdoʅ|(p`%< 뉦瞐)IC(\*:+H"Pqۨc{dʦW@ѿW0s3({_3*@ iUįGp秡s[>D};ŗ)cA^}o8"lnMz~!LFi/qΟ- j!4KS8E[`:vX/u˱a ܲ~H7/ܼW)~nW{S6eB7Ȫ.8oo?Y@*S 7NM?3PpS@3m}#;*4um)MBM`PਔPLxV2wb52% o_' 8:Q]7 j֪rŅkEql?$ ?Pwkxu0 ;r/aX D`4:@<%GbVnLotΐ[tyVU$ɿ۬e8X~`5\N#lW~I_]zUv9&}%6z Ec 8v~+=e>k "ef"M9#ӤZ="YEw-ΓL1&Q g+~}eKrˆWta^~>~38zyǢ+:N3*JX28Ŧ՚{,B,iaWWlRP9̨0[uzS;G+Jlٞ.^kH>gC?/*6Ե-bx~c?b]+ :2cQ0iHe GҿZ2W4R7Bcm~ul.?.1J n+LGJNuBr%4lq&}K&"p+AÐ5 JO,&opڂVx6erɔ}ŖK =K Eb0~?.nWXA<ߘJ"`^E>HS?P;>QD}w?R~жj|uiJQ˟<uDF$Wz<#Mޑј򢍆 Ĭdl-48Ш^&LR(BDYRmJ.巼Ku[cx#qZC &M&]fW'_]ȼ1Tj~1sRO]ʫX7/Oܼst!M?\~et&ǯjׇ xtkF=9yrѐyR]ó̪< U^}-vywԋ"WȝvDyD^6`C /2sl. : ʦLM=dòQY8E[5fS"tXX~^l{@}?%Rd {z}~P5ͺʭQhjoRAk2|~=>3~m״Q#7D\:[M:LDmV1/un՗F\WZʥZ5PSh>ЭA{7Rx.6X'5T$S.!+{:D^1טZtN72 M,;ſ@ v]Pqij{ ;CNEigrR 8GˀSG,LY!G;.ER,T<1wgyfϖPapFOkj݅5Lcsâ%a]^Ihfg⣐}EjXv w|L{fS]?N2X 7 'igkP|a< SM^ͿѤD2:z?]Iq؀=~`&ls8:.%Vi_Ox5g$]|-(8NlExmMCE{!Y翉wY~&ҵq#-Y"vICMMsƪ3OE皘W&?%6}R\\J7yӏgoNS* q@|CY+&c(q4H3,e~c}"xZ9 ؉vX7c1(~1lYG{K:V?2ȁ:u1G%#v= U+<]k,ml?tw/;v>hqv>cѯc~)q6a+l~1x1l/HڸRGI zߩ}M~g9<vsẕ_mL1A(09jJnRU2% yT( O H(o^'  sDg9r-j1Q9:qB(x`7bS"]Yu-+ᖮYz~^]@ft:7*XَwHg^52sL2ɟu}H #ٿgOPG꿏MSoD^@PߘZ""5N|ޱ=}/#F#YmEjc[k{sWGGbɖw^>uvV>'>X̰j 5_Xs%6$ܬc_hrޣm^س2:<|gmwTg+w}1yJ_xs ~x?w_|J_`&9+ZJýK?Qiu!p^zΰ\ypwWpvAXD}zE?0):rA^jT=èltZ /?juaEj6433-fm5}!F_1w\B~'=`T +}dƞo=A.9>耂錊S;|pGclz膣p\|@(4cLL p#c'oSKa+85QQE3-EgIuØծQS%M:\,U :w [y\^2>*}m:0z)SjSGtIsW>jqb/)S'NfЮ39L{&nf߭tN\VOBh#oҍCÂkI|XzuWXJ8MD]ړ/Pz'*A̬Q@l(q=f޽%;njf͂g;w@q2 ر1OQyuT"auN5xً*/Ց{r6rJ JcuyE#kxykVLg+ HVтoDr1Qv\{@ s?%rFa3ӻqdK{f/qQ՘makO^bQm^57qgu 9Scv`; ^bK0{="_SmKIAg9Gqm* _baݍ=&5RܸKyS'H/_,,?S0*pG"hV_C¹!%2c7||>3zDrD7gP7ZiޗIJ#v oQ+&>' **J;vWSeEne[ 0t8Vyyy=1]%4q04SƜdA!+h j2׷sXٝn)Swz{N^e9:G}GO?jsr cq1~DlLNqtk\ӟDo"SzCi/5n]BR]7au[U׉_yoPV~2-2WP*-9 ŕ0xNJ N<>e5,]c_sM5oHt׼u0cy)Mc (W+\;(/5s_૑fKwN\̦ytaqDz߹2}zT5M8{}s{%I &MA[!JX 8]P"V jR9RԦx!`9 c1y{'_Xs1z3S*]GzjLa3zs}.nz@Pcz;|þ&^Ciϯ;0vu:Ǚug1ǙG7m_ycV;:j[{ej^/(90Ә5u%Rɼ?hXsϘ/pj}c1](&UAB a-2o7(w<ש0}vΣݮkDE2.n Nծ|~a^yT>\_1 F+k^dz>4[|~Ѡ%5Q1n_5e_XE4;HL)N紡=GK0+poZҚ +H[܇G NUSҕm{{M^e(;nj+:- 6y Lw_ר߉EjCeӣƜdPӉa/^E%"aMSapxso w?3 ϧ8.Ce`u?_ +|xΐ^uwQCژDz0YeM+r\1_H=8i|<'cS =w.o_Hs=I&U|g5){uYWauDoU+K'ӯSO5kC>.GNM\1_j ͖߸SyR*}F- 6}%x8q6.5 ,Pڍ@a=t2"ya^`>ۧJ믞%= fw˔%IUN>sAZo_?Lz~J_N"o}-U5`G,jSX0I7x,C{ºRuAr˻7 jNr|F }h'$Ӿ%ݷ]зm|Ϝ9E-S*U%9Ǝkdoǡ*҇S!?`)oQJ0=KDKO(?Cd؋Dh{0̫07 d?M?KO;MVc*3Ot-1O[#}{`-F`ጇ ꎇ?Qr۔lrgleҸKTQhh@Vw[紴1-wYyƍ/+_Xt̵д(.E5qh11=CLw?1کK5*vcSgGs0Ӵy쎃ILlc.ˁXaR]F䎿-oびg؎7CTjPpqRvMbP Ї"}* G jR04G0  .]+;Q`n3B}de)eM2Q]}VsM5|JW#]Ѵ%J3>̿Q F-HBOy}:q+,Z'X M.YhWHNX.E=%/e`Kor3oYX\!}>&K}.ξgy MuSKo1zdXt[]{.4OP@3lv~e D@vf}\bP`3N?` F~y_x1Ҡc zA }.;yVCcQN%%hiP1LU3}!VM=Dŝ&DnRv%t`7:1O{ܡy}bSr''hh-Rt{‹e=j]ohk&3 ._uqzyc~tNCJ;RWTcJ>wa蟇DPJNLM׉Gi+:zgL3G=O@ϾeA_`a\>oy=~6vnXHOlv]b޴KoqMULj9%IysƠ,zmOfUƣK^iʭFyN˗$Z8Am+oX^{}84;6aθ0U[5qV- k>g] l.UQJ8p,+33Y^M&PpN.}eUԻsd;dM$7`-#ӰJڢ:VN'ZY>:C M֥7X4+:-gM]%EbǣܔV8.cg'$iuZtx_ x=Z7؆v)=Რ]qo]"pZ5Okӈ)3(eC$;")0L"j-g9_礧ԼoqzMjO>>h9g92A20Cc\UeSFmP b8t0%G[늖2ԗ|Ѿ|K#OxW:=j/yODP7ϦXwx@T}xTѴ(?om7\5{CIC8?0lne۝uю?a+8jkArT}/*{J8f)~N;0K,|RtL_,rp]}&\~Ō_yTY3:=9"yFTs+u[l0r(hG$!-P_0ނuxʀ,G輝g9EZZE/ӭE8x-G#Rol΃3 :~g,(756+;'HV2<|~gSM\v;#}e,??`DDL}"뺏6h(dt`^Zh?\0h9"s.=qC3 EMn65]9b[/{_^%WZ={}s~bp a;cc~#vc8uN0'!z LOP\oEZ Eu_#qar'}$UӮ q_ '%[є0o]>?f~:tnB?96q/X5Ud½i*qԞ{wR[sUU=s$u̾ )8gZ(w'ؕu"[UA6bs :9qNa K>fr/ ~im ʭ*~*0)i':*SgL}'V|>=4z']Uq鷗/y5 쉘g"UߤCcцBu?Zh:No姫ykQu:a~Z+\xߘ,sVɶ91-^h{DY~3}fN>L z^= Z:ˍQ|-&b9+˸2~eE^q0-pC)7 ч"q:7Ԝk1-s<YFd0o7np^{&;y̬^/b yUkggR Ê%Ӵn%]% ym]kUZ(Zyķx6 a PX+#.Yʮn4t6`gcrٖ'f'Ihc|3=>& NNng`3),(z@RlJIgiʝ^`)%ta}߈3FWx!:wE/5>Ј0K zǴ\W7ۈ>CWR/CۼTSyoKY"]aǎb8xۇ̻\<xZf n]sj^*Y8@> s-*s(胉8ߥXsϨj^f[ XߩTrL&ᚹ]74WBt%]cOy=%^/>%5ʻ3QX/B\c4QqJ[9.bv?Gv/gQ{ r:1~!Nj9 ߈lLk~bVSY~!$N.e0\Fع^("t([YVp9yΦG5~/Yq; 4'Ήh^u~ӷ=}{LV] PDF 3eUly\Bet'~ A9.yjDsޣ Fp {ENM7x TNޣKlYhZq9L /=b1!ɓyDY ~Ti&wWiSevϕ1jjWhNc1 :i;= n? z>Y|BJy.x QAs3&@u9 ؗ}?KGZbHTS[ZD%0q|S~O@ơ.iсqqG*tQ%uWr]'E #üEh}1`Nn&t=>wC=wS] qPۙxYXG%7>flp'3IM asR8 t@Dt?JϨAʔ&cd!X]}.g9Q~w[Xƞ_{qW%6K=G2 -ؚ4Jh &=F1a ޠw5=C{^,Wrqz$JC^` ]* >}D >;.0=gg-mG^Lԯ?IX+/4_et1ep;%R xh ` =]NWt}ҪR"%%WݨV4/\:~f>h6`\#=b~';OC;aR D>2"!0B0Lfwrzb<zv;j@UvccbXZ)cZiPWhQ~UFa|(~'1g"ThE;͒aSU&~޻`~ubyx~>UVSVħlu*ُ- tRgۖ="\v"򍯺1 #z#%:U_EsWu1PI.[v]JGυG;Oj!9S4+xӌ@D;^s^e/,qQT1s}D_XPźb (ɉk]JwwŧX1'!G@- 'XڗR={ݹt˭^NåtWLu,1z.G-n39}4'}K:HOz^K;57`΂2( [H~}4 q{ \:D,a VJe%qqaF_.$䊶b>OOܱهsphBPWmfd?_| >=W|迼o`> y"0 )%?epxH>\!!1BzZ$@tAx{*S4@m,;Yrota5]GSB0WڐAzAQQg^i@wn ==jTߎVe_k18?ss2y8:!R0GgjKܶq?uѻxC]cuNx1bT{\P uT}3;r#$ﯷ 2+֮G@8 6A_3SOmYz b18RZ]8,(%&~`~{?~Kwo`?r ܈ЗTaIg-poڏ&JƤ#6kMV/!b`8&LUa6=O1EWfG8ۉYY8rc7p^e\+9{,ϺmKabl;ϪGȫqӱ4I%}f&ޕz0l,Bh)DD8Ӭg>Apz] ~(W+Cs16zىy,:IgL3~Hqxɉ3{g#NöR#&Ec@-)ֈ5Z>1n Xs^ /1Ds΢&ȫgxtfƚbӬ[.|cy3ϳ׈tu,q/s": j!C>yjEpUӜc8@֢`0<"08% >r .7=\Oߓf_Kg@;Oq7-OiF Wlvb}b#'BBCRSOLͳ]_ò~= _TޥCPk/D֏X;,uvQx u ߦ/URQgE#Tϻ .5ZxS}yC9㬿:Iv^ļ;5}N?S_ϣٜMH YkqrJR&ğh774S銎V~Ow:DZ{F*ߖ-^%EZ(1+HweZaT%b3R1jvs̫^'EKϪb<4μ("lP]/x\E Lso[ԡq܍LV'1s3+71V,3UE0eVyk9WQ({ V6a<~A2ixwc<˯N`u1}59Co,闥8GS;ma+;=>R4Iק0MĿ '*8Fo'|:XyB6e̱17mU<xt;8;q{U܋ՠ5~VQQj.<ļ'E[V{0#[+_1RK*hʱqkoVx]Kf%ba;ᐃЫClwFS oxYS3W]q>sץ¿oi3QΦ;u/7c^nQVWSD8t6}'biN(/YEq13r}fSG ?ot/<bgO]tܩJn.!},54[xKܦƧgϟ<όi:DGZxVR_$l Di/^1l+x5?Աlq/h'>b8׈feDqgو]deg03K0[uS +2& z6r(%ٓ1liLJSٍKlu2 +]fV\|f3 tdY\KOϩϪzT;ܖ8MoP7L_z,]MMû3Naj=C> Pk?tYC)Y'i*^pı ם]u((5;jR+/+*W?\jbW1 ]1@{Ͻ^=b9;=8;Fl+7ĆGŢ7s]zMw_o99Wo=1Ȩpf0 {,ufCZUv {KF>D[Q.ͦwQ} [~ fyK]@#fzIϖ9_x9,6%>1E-%/X4!Ni8lSIN[NecŋKfR/S%,}*7{CQh'd?G,{IHY ij&tƦɢ}56J9yaSvW~%Ӌ H;a8ɾEt:q焥nǻ2󁞃*av3z~H}X~~~~~~~~~~~~^+|(Jr'uX5Is.?CvQ]HaN#1qmc{Ee~M\b;:M|Eu(~}ŷ]CL.n}jfq8Er rb,y̭DgюwruĭC=-M{gDOU> A OǩDX<{YJ)/|]=;Wfo~ߔ5R}؃ ˯>˂}e}O(j_5r p4HoS>JEjW9OϝUshŸr %ͳ=Vܔ5jiGwTCRDۉhA 30 }poDx)oM$ ks:iSk=8=:\㕆/g⌹U1Y,@-eR0eJl")@\ #˥-*t?#=]-Hyuѯ ݶJZ \FUAy(VP @kFRɪ,o UoΠʈ`)eRvN@?e#ٻV}e;QBWP"_Q;/d X6:ߥmQq"M;mn:q/.oTzw:n|ץ3dKW^Įkܮx)9YN?lr.S2g0/n%@> Vl4 `:~qBj K m=R4gzC鳷,ǘOk_i,mW~G)s7DY7>bܿ~MgG/q}wWt.}%NZCeJy3gϟ?>|3gϟ?>|3gϟ?>|ͩp3xo&'ʇ/w~Kv/xk~b^x2ظ+pq/=XvOXA癠ٍKs`qsUӈ+y7]ɺM6KQt t>}q?V)@} mLWZ٨ptק0~1ZfvW /^svW8}Y}YՃ@o!)u TBv(tU|DMy-_~fç}_ܫoq>&nyk29=,} ; Cyr%Ѕ}h Oςς7otgp0XU r򿹟2co/SO?PyW&#B~x8`o=$5ă񀿇gÈҩ :/oMVRo~&~]=S}]Qbdb&)a?+WkEwvOϼ}"&1(눀֦Un hmbxz2q 1^!C0~_^ rKKuݵcr54NLe_;S7KAܼԸ}وl? w;%緢z Ϩ Rf&4<"EKNzGm@9^1D[hY8{?DQ,GOG}cYz5y>4@z%/ҏշxJwM;NI7ܿiI&u.7{ƺs1p59QbԾ3,/b Cj_-1spU,v^'Y>hl~. Ͼ A7 ]&2a{q]H>4D^x2{t^yd)n6C_D"r& h0o=aV)A^!9j* W7 j?^DX͸Gpĵkšh,AMN!!bj_}ZGy %F>iU/"I{ڱ_8]!͞SaU_Ʈ̠(/l5}pq6O ป'_}V[i;$M+Tt4tSzFK/3~~fN/Hʿ05ol]b .T#=- x3lJzq}| [ؿĢ;"u6 NcDK`crXO} jr_hcrr3AqYe צM͞&޻#v\vΫQ~ìEUK&:Ǐ.ӱ6QR>ߦ7Y2KS6{Ã<2dkPʕ\cZK>5U%a,kiۅ ,rz2\'ʸ[TqRѰkt?)*w;ca[-Cwmy^DA@U6/ 6/ǥ }yBa@׵!m|(1ewɸQO`ᚪu6[^m E7COQGSN&ʜ(2xeTV0SlҰEQJD\~꥓L SPʡkP.,*m5C!H Q(Uw^}>Uz_(&R aFobW-|>UM50gSrߺ;XmPE^ȷ=/^YoPg}5ASRTpmnyeEǫ*rg^3~HaN]F0}gn-Cqh}gt zn :z^[oHQӤEcRQAg]=eֳ5gQ3ګ{nnUt=W5^cļKt^ޘ 0>\G.H"r=&fVX !Ұ"؅JW#$ɵypB5j kpx`h -Cibج ֢UuSz?Q Joĸb{ K<[v0KAѾhJ(Cdmo~'|zo8Z!6UUPUizzz嚨 )7.<œKD@d-Ej_ Q A@jw9hLq3.|KT5Cp=l R ML rz-7=9Ï5s)"m#2m|\uLmZG~#{N".[bT37Zzͦrj;ƧY,M5Ngt*7\LwEjY9ӸlՋ=o)^]]{%Og}@l׈ܸk9Keԯ./}rvsm\\+.ۖzʻ$K6A*hGbR$؉, UGHGHeHy+Bn RNkjh>ol=E(Ebk/j 8 h CU 419r}W֎ ʣ<rPZ/֖4U`ƲzqZ]:) Gp krR[v~/gjnG<',z 't1ֽ"ay՘ P8> ys~ |h"y7c|w G9]3dKPZ0әi jR+2A/ti|P\mQ,z/w%.wP:g,VOqN2M3:E hǙȻAt:÷wFi\ R,0xs[Z5oqǴ̎@īt0GK5|%נxOx1q>ovgPM@hl5izZ! lwZIzm@eU-^ [R#g" |yp};94Ni!O3>/ű(4(D K ւ>aϘ1KkzkzkZz Uw4{PPwIQԺ`3Ώj:sWEX:5]1;gqSU18z3QMs1}N ]9s~lKV3:NjNâ8}e+v n0(Nv b;vgx{NȎ h[i`K {;L1O]mN:2UĿ_]?S?gO*FTWJ֗ԙ?fSW?^_LT{C#0JBG<-We0ܪt?t2qV?,Nfwrt UGԢ&J]xO~ƿS_1F)I1غ >q㐗f 0Fu++B)RF"/J%yB-iS,P, YEAR. # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2015-04-18 18:01+0100\n" "Last-Translator: Jean-Baptiste Le Cz \n" "Language-Team: Faissal Chamekh \n" "Language: ar_DZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "X-Generator: Poedit 1.7.5\n" "X-Poedit-SourceCharset: UTF-8\n" #: prefs.js:113 msgid "Primary monitor" msgstr "الشاشة الرئيسية" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "الشاشة الثانوية" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "يمين" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "يسار" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "تخصيص الإخفاء التلقائي" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "العودة للافتراضي" #: prefs.js:386 #, fuzzy msgid "Show dock and application numbers" msgstr "أظهر التطبيقات قيد التشغيل" #: prefs.js:443 #, fuzzy msgid "Customize middle-click behavior" msgstr "خصّص الإعتام" #: prefs.js:514 #, fuzzy msgid "Customize running indicators" msgstr "أظهر التطبيقات قيد التشغيل" #: appIcons.js:804 msgid "All Windows" msgstr "جميع النوافذ" #: Settings.ui.h:1 #, fuzzy msgid "Customize indicator style" msgstr "خصّص الإعتام" #: Settings.ui.h:2 msgid "Color" msgstr "اللون" #: Settings.ui.h:3 msgid "Border color" msgstr "لون الحواف" #: Settings.ui.h:4 msgid "Border width" msgstr "عرض الحواف" #: Settings.ui.h:5 msgid "Number overlay" msgstr "عدد التراكب" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "عرض أرقام التطبيق مؤقتا على الرموز، المقابلة" "للاختصار." "" #: Settings.ui.h:7 #, fuzzy msgid "Show the dock if it is hidden" msgstr "أظهر المرساة فوق" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "إذا اُستخدم الإخفاء التلقائي الشريط سيظهر لوقت قصير عند الضغط" "على الإختصار." "" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "الإختصار للخيارات في الأعلى" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "البنية: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "زمن الاختفاء (ثا)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "عند التصغير النقر المزدوج سيصغر جميع نوافذ" "التطبيق." "" "" #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "حدث Shift+Click" #: Settings.ui.h:14 #, fuzzy msgid "Raise window" msgstr "صغّر النافذة" #: Settings.ui.h:15 msgid "Minimize window" msgstr "صغّر النافذة" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "شغّل نسخة جديدة" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "التبديل بين النوافذ" #: Settings.ui.h:18 msgid "Quit" msgstr "خروج" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "سلوك الزر المتوسط." #: Settings.ui.h:20 #, fuzzy msgid "Middle-Click action" msgstr "حدث النقر" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "سلوك Shift+Middle-Click." #: Settings.ui.h:22 #, fuzzy msgid "Shift+Middle-Click action" msgstr "حدث Shift+Click" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "أظهر المرساة فوق" #: Settings.ui.h:24 #, fuzzy msgid "Show on all monitors." msgstr "الشاشة الثانوية" #: Settings.ui.h:25 msgid "Position on screen" msgstr "الموضع على الشاشة" #: Settings.ui.h:27 msgid "Bottom" msgstr "أسفل" #: Settings.ui.h:28 msgid "Top" msgstr "أعلى" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "إخفاء المرساة عندما تحجب نافذة التطبيق الحالي. تخصيصات أكثر متوفرة." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "إخفاء تلقائي ذكي" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "حدّ حجم المرساة" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "نمط الشريط: تمديد إلى حواف الشاشة" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "حدّ حجم الأيقونة" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "حجم أيقونات ثابت: استعمل التمرير لكشف أيقونات أخرى" #: Settings.ui.h:36 msgid "Position and size" msgstr "الموضع والحجم" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "أظهر التطبيقات المفضّلة" #: Settings.ui.h:38 msgid "Show running applications" msgstr "أظهر التطبيقات قيد التشغيل" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "عزل مساحات العمل." #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "عرض معاينات النوافذ المفتوحة." #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "إذا تم تعطيله هذه الإعدادت يمكن الوصول إليها من gnome-tweak-tool أو " "موقع الإضافات." "" #: Settings.ui.h:42 #, fuzzy msgid "Show Applications icon" msgstr "أظهر أيقونة التطبيقات أولا" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "تحريك زر التطبيقات في بداية الشريط." #: Settings.ui.h:44 #, fuzzy msgid "Animate Show Applications." msgstr "أظهر أيقونة التطبيقات أولا" #: Settings.ui.h:45 msgid "Launchers" msgstr "المشغلات" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "تفعيل Super+(0-9) كاختصار لتمكين التطبيقات. يمكن أيضاً استخدامها " "معاً مع Shift و Ctrl" "" #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "استخدام إختصارات لوحة المفاتيح لتفعيل التطبيقات" #: Settings.ui.h:48 #, fuzzy msgid "Behaviour when clicking on the icon of a running application." msgstr "التصرّف عن النقر على أيقونة التطبيق قيد التشغيل." #: Settings.ui.h:49 msgid "Click action" msgstr "حدث النقر" #: Settings.ui.h:50 msgid "Minimize" msgstr "صغّر" #: Settings.ui.h:51 #, fuzzy msgid "Minimize or overview" msgstr "صغّر النافذة" #: Settings.ui.h:52 #, fuzzy msgid "Behaviour when scrolling on the icon of an application." msgstr "التصرّف عن النقر على أيقونة التطبيق قيد التشغيل." #: Settings.ui.h:53 #, fuzzy msgid "Scroll action" msgstr "حدث النقر" #: Settings.ui.h:54 msgid "Do nothing" msgstr "لا تفعل شيئا" #: Settings.ui.h:55 #, fuzzy msgid "Switch workspace" msgstr "تبديل مساحة عمل واحدة في نفس الوقت" #: Settings.ui.h:56 msgid "Behavior" msgstr "السلوك" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "القليل من التخصيصات يعني إضافة الشريط مع سِمَة غنوم. " "بدلاً من هذا, خيارات محددة يُمكن اختيارها من الأسفل." "" #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "استعمل السمة المضمّنة" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "حفظ المساحة يقلل من الحشو ونصف قطر الحافة." #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "تقليص المرساة" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "أظهر نقطة لكل نوافذة من التطبيق." #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "أظهر مؤشرات عدد النوافذ" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "تعيين لون الخلفية لشَرِطة" #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "تخصيص لون الشَرِطة" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "ضبط إعتام خلفية المرساة." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "خصّص الإعتام" #: Settings.ui.h:67 msgid "Opacity" msgstr "العتمة" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "الزاوي المستقيمة\n" #: Settings.ui.h:70 msgid "Appearance" msgstr "المظهر" #: Settings.ui.h:71 msgid "version: " msgstr "الإصدار:" #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "تحريك الشريط خارج النظرة العامة في الشَرِطة" #: Settings.ui.h:73 msgid "Created by" msgstr "أنشئ من طرف" #: Settings.ui.h:74 msgid "Webpage" msgstr "صفحة الويب" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "هذا البرنامج يأتي بدون أي ضمانات.\n" "لمزيد من المعلومات أنظر رخصة غنو العمومية، الإصدارة 2 فما فوق." #: Settings.ui.h:77 msgid "About" msgstr "حول" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "أظهر المرساة بتمرير الفأرة على حافة النافذة" #: Settings.ui.h:79 msgid "Autohide" msgstr "إخفاء تلقائي" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "اضغط للإظهار: يتطلب ضغطا لإظهار المرساة" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "تمكين في وضع ملئ الشاشة" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "إظهار المرساة عندما لا تحجب نوافذ التطبيق." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "حيلة النوافذ" #: Settings.ui.h:84 msgid "All windows" msgstr "جميع النوافذ" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "نوافذ التطبيق المركزة فقط" #: Settings.ui.h:86 #, fuzzy msgid "Only maximized windows" msgstr "صغّر النافذة" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "مدة التحريك (ثا)" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "زمن الظهور (ثا)" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "عتبة الضغط" #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "بدّل مساحة العمل عند التمرير فوق المرساة" #~ msgid "Main Settings" #~ msgstr "الخصائص الأساسية" #~ msgid "Dock Position" #~ msgstr "موضع المرساة" #~ msgid "Dock is fixed and always visible" #~ msgstr "المرساة ثابتة وظاهرة دائما" #~ msgid "Show delay [ms]" #~ msgstr "تأخير الظهور (ميلي ثانية)" #~ msgid "Hide delay [ms]" #~ msgstr "تأخير الإخفاء (ميلي ثانية)" #~ msgid "Application based intellihide" #~ msgstr "إخفاء تلقائي على حسب التطبيق" #~ msgid "Show the dock on following monitor (if attached)" #~ msgstr "أظهر المرساة في الشاشة الحالية (إن وُصلت)" #~ msgid "Primary (default)" #~ msgstr "الأساسية (الافتراضي)" #~ msgid "1" #~ msgstr "1" #~ msgid "2" #~ msgstr "2" #~ msgid "3" #~ msgstr "3" #~ msgid "4" #~ msgstr "4" #~ msgid "Max height" #~ msgstr "الارتفاع الأقصى" #~ msgid "Expand (experimental and buggy)" #~ msgstr "تمديد (تجريبي)" #~ msgid "Maximum icon size" #~ msgstr "الحجم الأقصى للأيقونة" #~ msgid "16" #~ msgstr "16" #~ msgid "24" #~ msgstr "24" #~ msgid "32" #~ msgstr "32" #~ msgid "48" #~ msgstr "48" #~ msgid "64" #~ msgstr "64" #~ msgid "Optional features" #~ msgstr "ميزات إضافية" #~ msgid "Deadtime between each workspace switching [ms]" #~ msgstr "الوقت بين تبديل كل مساحة عمل" #~ msgid "Only a 1px wide area close to the screen edge is active" #~ msgstr "مساحة بعرض 1 بكسل فقط قريبة من حافة الشاشة هي النشطة" #~ msgid "All the area of the dock is active" #~ msgstr "جميع مناطق المرساة نشطة" #~ msgid "Customize actions on mouse click" #~ msgstr "خصّص حدث النقر على الفأرة" #~ msgid "Action on clicking on running app" #~ msgstr "الحدث عن النقر على تطبيق قيد التشغيل" #~ msgid "Minimize window on shift+click (double click for all app windows)" #~ msgstr "" #~ "تصغير النافذة عند النقر مع shift (الضغط المزدوج بالنسبة لكل نوافذ التطبيق)" #~ msgid "Make message tray insensitive to mouse events" #~ msgstr "اجعل رسالة التنبيه غير حساسة لأحداث الفأرة" #~ msgid "Appearence and Themes" #~ msgstr "المظهر والسمة" #~ msgid "" #~ "A customized theme is built in the extension. This is meant to work with " #~ "the default Adwaita theme: the dash is shrunk to save space, its " #~ "background transparency reduced, and custom indicators for the number of " #~ "windows of each application are added." #~ msgstr "" #~ "تم تضمين سمة مخصّصة للإضافة، هذا يعني أنها تعمل مع السمة الافتراضية " #~ "Adwaita: تقليص المرساة لكسب مساحة، إنقاص شفافيتها، كذلك تم إضافة مؤشرات " #~ "لعدد نوافذ التطبيق." #~ msgid "" #~ "Alternatively, for a better integration with custom themes, each " #~ "customization can be applied indipendently" #~ msgstr "بدلا من هذا، لتكاملية أفضل مع سمات مخصّصة، كل تخصيص يطبّق على حدة" #~ msgid "Shrink the dash size by reducing padding" #~ msgstr "مساحة المرساة بإنقاص الحشو" #~ msgid "Only when in autohide" #~ msgstr "فقط عند الإخفاء التلقائي" dash-to-dock-extensions.gnome.org-v63/po/cs.po000066400000000000000000000271401326047523300214320ustar00rootroot00000000000000# Translation for cs # Copyright (C) 2014 Michele # This file is distributed under the same license as the dash-to-dock package. # Jiří Doubravský , 2015. # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-07-30 18:05+0100\n" "PO-Revision-Date: 2015-05-21 21:17+0100\n" "Last-Translator: Jiří Doubravský , PavelZ\n" "Language-Team: CZECH \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.7.5\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Hlavní obrazovka" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Sekundární obrazovka " #: prefs.js:154 Settings.ui.h:31 msgid "Right" msgstr "Vpravo" #: prefs.js:155 Settings.ui.h:28 msgid "Left" msgstr "Vlevo" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Přizpůsobení chytrého skrývání" #: prefs.js:212 prefs.js:397 prefs.js:454 msgid "Reset to defaults" msgstr "Obnovit výchozí nastavení" #: prefs.js:390 msgid "Show dock and application numbers" msgstr "Zobrazování doku a čísel aplikací" #: prefs.js:447 msgid "Customize middle-click behavior" msgstr "Nastavit chování prostředního tlačítka" #: prefs.js:518 msgid "Customize running indicators" msgstr "Nastavit indikátory spuštěných aplikací" #: appIcons.js:872 msgid "All Windows" msgstr "Všechna okna" #. Translators: %s is "Settings", which is automatically translated. You #. can also translate the full message if this fits better your language. #: appIcons.js:1170 #, javascript-format msgid "Dash to Dock %s" msgstr "" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Vlastní styl indikátorů" #: Settings.ui.h:2 msgid "Color" msgstr "Barva" #: Settings.ui.h:3 msgid "Border color" msgstr "Barva ohraničení" #: Settings.ui.h:4 msgid "Border width" msgstr "Šířka ohraničení" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Čísla aplikací" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "Krátce ukázat čísla aplikací odpovídající klávesové zkratce" #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Zobrazit dok, pokud je skrytý" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Pokud je nastaveno automatické skrývání, stisknutím klávesové zkratky se " "dok krátce zobrazí." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Klávesová zkratka" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Syntaxe: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Prodleva při skrytí (s)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Pokud je nastavena minimalizace, dvojklik minimalizuje všechna okna aplikace." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Shift + levé tlačítko" #: Settings.ui.h:14 msgid "Raise window" msgstr "Přenést okno do popředí" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Minimalizovat okno" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Spustit novou instanci" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Přepínat mezi okny" #: Settings.ui.h:18 msgid "Minimize or overview" msgstr "Minimalizovat nebo zobrazit přehled" #: Settings.ui.h:19 msgid "Show window previews" msgstr "Zobrazit náhledy oken" #: Settings.ui.h:20 msgid "Quit" msgstr "Zastavit" #: Settings.ui.h:21 msgid "Behavior for Middle-Click." msgstr "Chování při kliknutím prostředního tlačítka" #: Settings.ui.h:22 msgid "Middle-Click action" msgstr "Prostřední tlačítko" #: Settings.ui.h:23 msgid "Behavior for Shift+Middle-Click." msgstr "Chování při kliknutím prostředního tlačítka a stiknuté klávese Shift" #: Settings.ui.h:24 msgid "Shift+Middle-Click action" msgstr "Shift + prostřední tlačítko" #: Settings.ui.h:25 msgid "Show the dock on" msgstr "Kde zobrazit dok" #: Settings.ui.h:26 msgid "Show on all monitors." msgstr "Zobrazit na všech obrazovkách" #: Settings.ui.h:27 msgid "Position on screen" msgstr "Umístění na obrazovce" #: Settings.ui.h:29 msgid "Bottom" msgstr "Dole" #: Settings.ui.h:30 msgid "Top" msgstr "Nahoře" #: Settings.ui.h:32 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Skrýt dok, pokud překáží oknu aktivní aplikace. K dispozici jsou podrobnější " "nastavení." #: Settings.ui.h:33 msgid "Intelligent autohide" msgstr "Chytré skrývání" #: Settings.ui.h:34 msgid "Dock size limit" msgstr "Maximální velikost doku" #: Settings.ui.h:35 msgid "Panel mode: extend to the screen edge" msgstr "Režim panelu (roztáhnout dok po celé délce obrazovky)" #: Settings.ui.h:36 msgid "Icon size limit" msgstr "Maximální velikost ikon" #: Settings.ui.h:37 msgid "Fixed icon size: scroll to reveal other icons" msgstr "" "Neměnná velikost ikon (rolováním na doku je možné zobrazit další ikony)" #: Settings.ui.h:38 msgid "Position and size" msgstr "Umístění a velikost" #: Settings.ui.h:39 msgid "Show favorite applications" msgstr "Zobrazit oblíbené aplikace" #: Settings.ui.h:40 msgid "Show running applications" msgstr "Zobrazit spuštěné aplikace" #: Settings.ui.h:41 msgid "Isolate workspaces." msgstr "Izolovat pracovní plochy" #: Settings.ui.h:42 msgid "Isolate monitors." msgstr "Izolovat obrazovky" #: Settings.ui.h:43 msgid "Show open windows previews." msgstr "Zobrazit náhledy oken" #: Settings.ui.h:44 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Pokud je zakázáno, jsou tato nastavení dostupná z GNOME Tweaks nebo z webové " "stránky GNOME Shell Extensions." #: Settings.ui.h:45 msgid "Show Applications icon" msgstr "Tlačítko přístupu ke všem aplikacím" #: Settings.ui.h:46 msgid "Move the applications button at the beginning of the dock." msgstr "Přesunout tlačítko přístupu ke všem aplikacím na začátek doku" #: Settings.ui.h:47 msgid "Animate Show Applications." msgstr "Animace při zobrazení všech aplikací" #: Settings.ui.h:48 msgid "Launchers" msgstr "Spouštěče" #: Settings.ui.h:49 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Povolit klávesovou zkratku Super+[0-9] pro spuštění aplikací; tuto " "klávesovou zkratku lze též použít s klávesami Shift a Ctrl." #: Settings.ui.h:50 msgid "Use keyboard shortcuts to activate apps" msgstr "Klávesová zkratka pro aktivaci aplikací" #: Settings.ui.h:51 msgid "Behaviour when clicking on the icon of a running application." msgstr "Chování při kliknutí na ikonu běžící aplikace" #: Settings.ui.h:52 msgid "Click action" msgstr "Kliknutí tlačítkem myši" #: Settings.ui.h:53 msgid "Minimize" msgstr "Minimalizovat" #: Settings.ui.h:54 msgid "Behaviour when scrolling on the icon of an application." msgstr "Chování při rolování na ikoně běžící aplikace" #: Settings.ui.h:55 msgid "Scroll action" msgstr "Rolování kolečkem myši" #: Settings.ui.h:56 msgid "Do nothing" msgstr "Nedělat nic" #: Settings.ui.h:57 msgid "Switch workspace" msgstr "Přepnout pracovní plochu" #: Settings.ui.h:58 msgid "Behavior" msgstr "Chování" #: Settings.ui.h:59 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Nastavení kvůli integraci doku s výchozím motivem GNOME; jinak lze použít " "samostatné předvolby níže." #: Settings.ui.h:60 msgid "Use built-in theme" msgstr "Použít výchozí motiv doku" #: Settings.ui.h:61 msgid "Save space reducing padding and border radius." msgstr "Prostorově méně náročné zobrazení (zmenšení volného místa kolem ikon)" #: Settings.ui.h:62 msgid "Shrink the dash" msgstr "Zmenšený dok" #: Settings.ui.h:63 msgid "Show a dot for each windows of the application." msgstr "Zobrazit u ikon tečku indikující každé otevřené okno aplikace" #: Settings.ui.h:64 msgid "Show windows counter indicators" msgstr "Indikátory počtu oken" #: Settings.ui.h:65 msgid "Set the background color for the dash." msgstr "Nastavit barvu pozadí doku" #: Settings.ui.h:66 msgid "Customize the dash color" msgstr "Vlastní barva doku" #: Settings.ui.h:67 msgid "Tune the dash background opacity." msgstr "Nastavit průhlednost doku" #: Settings.ui.h:69 msgid "Opacity" msgstr "Průhlednost" #: Settings.ui.h:70 msgid "Force straight corner\n" msgstr "Zakázat zaoblené rohy\n" #: Settings.ui.h:72 msgid "Appearance" msgstr "Vzhled" #: Settings.ui.h:73 msgid "version: " msgstr "verze: " #: Settings.ui.h:74 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Vytvoří dok z přehledu činností a oblíbených aplikací" #: Settings.ui.h:75 msgid "Created by" msgstr "Autor" #: Settings.ui.h:76 msgid "Webpage" msgstr "Webová stránka" #: Settings.ui.h:77 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Na tento program NEJSOU POSKYTOVÁNY ZÁRUKY.\n" "Podrobněji viz GNU General Public License, verze 2 nebo pozdější." #: Settings.ui.h:79 msgid "About" msgstr "O tomto doplňku" #: Settings.ui.h:80 msgid "Show the dock by mouse hover on the screen edge." msgstr "Zobrazit dok najetím myši ke kraji obrazovky" #: Settings.ui.h:81 msgid "Autohide" msgstr "Automatické skrývání" #: Settings.ui.h:82 msgid "Push to show: require pressure to show the dock" msgstr "Zobrazit dok až po zatlačení na kraj obrazovky" #: Settings.ui.h:83 msgid "Enable in fullscreen mode" msgstr "Povolit celoobrazovkový režim" #: Settings.ui.h:84 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Zobrazit dok pokud nepřekáží oknům aplikací" #: Settings.ui.h:85 msgid "Dodge windows" msgstr "Uhýbání oknům" #: Settings.ui.h:86 msgid "All windows" msgstr "Všechna okna" #: Settings.ui.h:87 msgid "Only focused application's windows" msgstr "Pouze aktivní okna" #: Settings.ui.h:88 msgid "Only maximized windows" msgstr "Pouze maximalizovaná okna" #: Settings.ui.h:89 msgid "Animation duration (s)" msgstr "Trvání animace (s)" #: Settings.ui.h:90 msgid "Show timeout (s)" msgstr "Prodleva při zobrazení (s)" #: Settings.ui.h:91 msgid "Pressure threshold" msgstr "Míra tlaku (px)" #: Settings.ui.h:92 msgid "Enable Unity7 like glossy backlit items" msgstr "Podsvícení ikon jako v Unity 7" #: Settings.ui.h:93 msgid "Default" msgstr "Výchozí" #: Settings.ui.h:94 msgid "Fixed" msgstr "Neměnná" #: Settings.ui.h:95 msgid "Adaptive" msgstr "Adaptivní" #: Settings.ui.h:96 msgid "Dynamic" msgstr "Dynamická" #: Settings.ui.h:97 msgid "Customize minimum and maximum opacity values" msgstr "Nastavit minimální a maximální hodnoty průhlednosti" #: Settings.ui.h:98 msgid "Customize opacity" msgstr "Přizpůsobení průhlednosti" #: Settings.ui.h:99 msgid "Maximum opacity" msgstr "Maximální průhlednost" #: Settings.ui.h:99 msgid "Minimum opacity" msgstr "Minimální průhlednost" dash-to-dock-extensions.gnome.org-v63/po/de.po000066400000000000000000000354421326047523300214210ustar00rootroot00000000000000# Translation for de # Copyright (C) 2014 Michele # This file is distributed under the same license as the dash-to-dock package. # Morris Jobke , 2014. # Jonatan Zeidler , 2012 # jonius , 2012 # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2017-12-11 19:21+0100\n" "Last-Translator: Klaus Staedtler \n" "Language-Team: jonius \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.4\n" # Konjugation wegen Stellung im Satz #: prefs.js:113 msgid "Primary monitor" msgstr "Primärer Anzeige" # Konjugation wegen Stellung im Satz #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Sekundärer Anzeige" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Rechts" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Links" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Automatisches Ausblenden anpassen" # Verwende Übersetzung aus Nautilus #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Auf Vorgaben zurücksetzen" #: prefs.js:386 msgid "Show dock and application numbers" msgstr "Zeige Dock und Anwendungsnummern" #: prefs.js:443 msgid "Customize middle-click behavior" msgstr "Verhalten des mittleren Klick anpassen" #: prefs.js:514 msgid "Customize running indicators" msgstr "Laufende Anzeigen anpassen" #: appIcons.js:804 msgid "All Windows" msgstr "Alle Fenster" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Anzeigenstil anpassen" #: Settings.ui.h:2 msgid "Color" msgstr "Farbe" #: Settings.ui.h:3 msgid "Border color" msgstr "Randfarbe" #: Settings.ui.h:4 msgid "Border width" msgstr "Randbreite" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Nummer der Überlagung" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Zeige vorübergehend die Nummer der Anwendung über den Icons, passend zum " "Tastaturkürzel." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Dock anzeigen wenn es versteckt ist" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Wenn automatisches Ausblenden benutzt wird, erscheint kurzzeitig das Dock " "durch drücken des Tastaturkürzels." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Tastaturkürzel für die obigen Aktionen" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Syntax: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Ausblende-Verzögerung in s" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Wenn auf »Minimieren« eingestellt, können durch Doppelklick alle Fenster der " "Anwendung gleichzeitig minimiert werden." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Wirkung bei Umschalttaste + Mausklick" #: Settings.ui.h:14 msgid "Raise window" msgstr "Fenster anheben" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Minimieren" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Neues Fenster" # Vielleicht einen Tick besser als „umschalten“? #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Zwischen den Fenstern der Anwendung wechseln" #: Settings.ui.h:18 msgid "Quit" msgstr "Beenden" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "Verhalten bei Mittel-Klick " #: Settings.ui.h:20 #, fuzzy msgid "Middle-Click action" msgstr "Wirkung bei Mausklick" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "Verhalten bei Umschalttaste+Mittel-Klick." #: Settings.ui.h:22 #, fuzzy msgid "Shift+Middle-Click action" msgstr "Wirkung bei Umschalttaste + Mausklick" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Dock anzeigen auf" # Konjugation wegen Stellung im Satz #: Settings.ui.h:24 msgid "Show on all monitors." msgstr "Auf allen Bildschirmen anzeigen" #: Settings.ui.h:25 msgid "Position on screen" msgstr "Position auf Bildschirm" #: Settings.ui.h:27 msgid "Bottom" msgstr "Unten" #: Settings.ui.h:28 msgid "Top" msgstr "Oben" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Das Dock automatisch ausblenden, falls es ein Fenster der laufenden " "Anwendung überlagert. Einstellungen können weiter verfeinert werden." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Automatisch ausblenden" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Maximale Dockgröße" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Panelmodus: bis zu Bildschirmkanten ausdehnen" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Maximale Icongröße" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Feste Icongröße: andere Icons durch Scrollen sichtbar machen" #: Settings.ui.h:36 msgid "Position and size" msgstr "Position und Größe" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Favoriten anzeigen" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Laufende Anwendungen anzeigen" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "Isoliere Arbeitsflächen." #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "Zeige Vorschau der geöffneten Fenster" #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Falls deaktiviert, sind diese Einstellungen über Gnome-Tweak-Tool oder die " "Erweiterungsseite erreichbar." # Durchkopplung von Kompositum #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "Symbol Anwendungen anzeigen anzeigen" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Anwendungen-anzeigen-Button an den Anfang verschieben." # Durchkopplung von Kompositum #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "Symbol Anwendungen anzeigen animieren" #: Settings.ui.h:45 msgid "Launchers" msgstr "Starter" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Benutze Super+(0-9) als Tastaturkürzel um Anwendungen zu aktivieren. Kann " "auch zusammen mit Umschalttaste und Strg. genutzt werden." #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "Benutze Tastaturkürzel um Anwendungen zu aktivieren" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "Verhalten bei Mausklick auf das Icon einer laufenden Anwendung." #: Settings.ui.h:49 msgid "Click action" msgstr "Wirkung bei Mausklick" #: Settings.ui.h:50 msgid "Minimize" msgstr "Minimieren" #: Settings.ui.h:51 msgid "Minimize or overview" msgstr "Minimieren oder Übersicht" #: Settings.ui.h:52 #, fuzzy msgid "Behaviour when scrolling on the icon of an application." msgstr "Verhalten bei Mausklick auf das Icon einer laufenden Anwendung." #: Settings.ui.h:53 #, fuzzy msgid "Scroll action" msgstr "Wirkung bei Mausklick" #: Settings.ui.h:54 msgid "Do nothing" msgstr "Nichts tun" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "Arbeitsfläche umschalten" # Verwende Übersetzung aus Nautilus #: Settings.ui.h:56 msgid "Behavior" msgstr "Verhalten" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Einige Anpassungen, durch die das Dock besser in das standardmäßige GNOME-" "Thema eingepasst werden soll. Alternativ können im Folgenden besondere " "Einstellungen vorgenommen werden." #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Angepasstes Thema dieser Erweiterung nutzen" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Platz sparen, indem Innenabstand und Eckenradius verkleinert werden." #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "Dash verkleinern" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Für jedes Fenster einer Anwendung einen kleinen Indikator einblenden." #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Indikatoren für Fensterzahl" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "Setze Hintergrundfarbe für das Dash" #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "Farbe des Dash anpassen" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "Die Hintergrundtransparenz des Dash einstellen." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Transparenz anpassen" #: Settings.ui.h:67 msgid "Opacity" msgstr "Transparenz" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "Erzwinge rechte Ecke\n" #: Settings.ui.h:70 msgid "Appearance" msgstr "Erscheinungsbild" #: Settings.ui.h:71 msgid "version: " msgstr "Version: " #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Verwandelt das Dash aus dem Übersichtsmodus in ein Dock" #: Settings.ui.h:73 msgid "Created by" msgstr "Erstellt von" #: Settings.ui.h:74 msgid "Webpage" msgstr "Internetseite" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Für dieses Programm besteht KEINERLEI GARANTIE.\n" " Details finden Sie in der GNU General Public License, Version 2 oder später." # Verwende Übersetzung aus Nautilus #: Settings.ui.h:77 msgid "About" msgstr "Info" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "Dock einblenden, wenn Mauszeiger an Bildschirmkante anliegt." #: Settings.ui.h:79 msgid "Autohide" msgstr "Automatisch ausblenden" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "" "Anstoßen erforderlich: Dock nur einblenden, wenn Mauszeiger schnell gegen " "Bildschirmkante stößt" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "Im Vollbildmodus einschalten" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Dock einblenden, falls es keine Anwendungsfenster überlagert." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Fenstern ausweichen" #: Settings.ui.h:84 msgid "All windows" msgstr "Alle Fenster" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "Nur Anwendungsfenster mit Fokus" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "Nur maximierte Fenster" # Nach DIN 1313 werden Einheiten nicht in Klammern gesetzt #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Animationsdauer in s" #: Settings.ui.h:88 msgid "0.000" msgstr "0,000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Einblende-Verzögerung in s" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Stoßschwellwert" #, fuzzy #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "Falls es zu viele Symbole auf dem Dock werden, dann bleibt nur " #~ "Anwendungen anzeigen aktiv." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Arbeitsfläche durch Scrollen wechseln" #~ msgid "Only consider windows of the focused application" #~ msgstr "Nur Fenster der fokussierten Anwendung einbeziehen" #~ msgid "Main Settings" #~ msgstr "Grundeinstellungen" #~ msgid "Dock Position" #~ msgstr "Dock-Position" #~ msgid "Dock is fixed and always visible" #~ msgstr "Das Dock hat eine feste Position und ist immer sichtbar" #~ msgid "Show delay [ms]" #~ msgstr "Einblendeverzögerung [ms]" #~ msgid "Hide delay [ms]" #~ msgstr "Ausblendeverzögerung [ms]" #~ msgid "Application based intellihide" #~ msgstr "Anwendungsbasiertes intelligentes Verstecken" #~ msgid "Show the dock on following monitor (if attached)" #~ msgstr "Zeige Dock auf folgendem Monitor (falls angeschlossen)" #~ msgid "Primary (default)" #~ msgstr "Primäranzeige (Standard)" #~ msgid "1" #~ msgstr "1" #~ msgid "2" #~ msgstr "2" #~ msgid "3" #~ msgstr "3" #~ msgid "4" #~ msgstr "4" #~ msgid "Max height" #~ msgstr "Maximale Höhe" #~ msgid "Expand (experimental and buggy)" #~ msgstr "Komplette Höhe (experimentell und fehlerbehaftet)" #~ msgid "Maximum icon size" #~ msgstr "Maximale Symbolgröße" #~ msgid "16" #~ msgstr "16" #~ msgid "24" #~ msgstr "24" #~ msgid "32" #~ msgstr "32" #~ msgid "48" #~ msgstr "48" #~ msgid "64" #~ msgstr "64" #~ msgid "Optional features" #~ msgstr "Optionale Funktionen" #~ msgid "Deadtime between each workspace switching [ms]" #~ msgstr "Stillstandszeit zwischen Arbeitsflächenwechsel [ms]" #~ msgid "Only a 1px wide area close to the screen edge is active" #~ msgstr "Nur einen 1 Pixel-breiten Bereich am Rand nutzen" #~ msgid "All the area of the dock is active" #~ msgstr "Den gesamten Bereich des Docks nutzen" #~ msgid "Customize actions on mouse click" #~ msgstr "Aktion bei Mausklick anpassen" #~ msgid "Action on clicking on running app" #~ msgstr "Aktion beim Klicken auf eine laufende Anwendung" #~ msgid "Minimize window on shift+click (double click for all app windows)" #~ msgstr "" #~ "Fenster mit Shift+Klick minimieren (Doppelklick für alle Fenster der " #~ "Anwendung)" #~ msgid "Appearence and Themes" #~ msgstr "Erscheinungsbild und Themen" #~ msgid "" #~ "A customized theme is built in the extension. This is meant to work with " #~ "the default Adwaita theme: the dash is shrunk to save space, its " #~ "background transparency reduced, and custom indicators for the number of " #~ "windows of each application are added." #~ msgstr "" #~ "Ein angepasstes Thema ist in dieser Erweiterung enthalten. Es ist für das " #~ "Vorgabe-Adwaita-Thema gedacht: Das Dash ist schmaler, um Platz zu sparen, " #~ "die Hintergrundtransparenz ist reduziert und für jede Anwendung wird ein " #~ "Indikator für die Anzahl der Fenster eingefügt." #~ msgid "" #~ "Alternatively, for a better integration with custom themes, each " #~ "customization can be applied indipendently" #~ msgstr "" #~ "Alternativ können für eine bessere Integration Anpassungen vorgenommen " #~ "werden" #~ msgid "Shrink the dash size by reducing padding" #~ msgstr "Das Dash schmaler machen durch Verkleinern des Abstands zum Rand" #~ msgid "Apply custom theme (work only with the default Adwaita theme)" #~ msgstr "" #~ "Benutzerdefiniertes Theme verwenden (funktioniert nur mit dem Standard-" #~ "Adwaita-Theme)" dash-to-dock-extensions.gnome.org-v63/po/el.po000066400000000000000000000344531326047523300214320ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # Δημήτριος-Ρωμανός Ησαΐας , 2017. # Vangelis Skarmoutsos , 2017. # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2017-09-29 21:48+0300\n" "Last-Translator: Vangelis Skarmoutsos \n" "Language-Team:\n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Κύρια οθόνη" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Δευτερεύουσα οθόνη " #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Δεξιά" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Αριστερά" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Προσαρμογή έξυπνης απόκρυψης" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Επαναφορά στις προεπιλογές" #: prefs.js:386 msgid "Show dock and application numbers" msgstr "Προβολή της μπάρας και της αρίθμησης εφαρμογών" #: prefs.js:443 msgid "Customize middle-click behavior" msgstr "Προσαρμογή συμπεριφοράς μεσαίου κλικ" #: prefs.js:514 msgid "Customize running indicators" msgstr "Προσαρμογή δεικτών τρεχόντων εφαρμογών" #: appIcons.js:804 msgid "All Windows" msgstr "Όλα τα παράθυρα" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Προσαρμογή του στυλ του δείκτη" #: Settings.ui.h:2 msgid "Color" msgstr "Χρώμα" #: Settings.ui.h:3 msgid "Border color" msgstr "Χρώμα περιγράμματος" #: Settings.ui.h:4 msgid "Border width" msgstr "Πλάτος περιγράμματος" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Επίστρωση αριθμού" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Προσωρινή εμφάνιση αριθμών εφαρμογής πάνω από τα εικονίδια, που αντιστοιχούν " "στη συντόμευση πληκτρολογίου." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Προβολή της μπάρας αν είναι κρυμμένη" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Αν χρησιμοποιείται η αυτόματη απόκρυψη, η μπάρα θα εμφανίζεται για λίγο " "χρόνο όταν πατιέται η συντόμευση." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Συντόμευση για τις παραπάνω επιλογές" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Σύνταξη: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Καθυστέρηση απόκρυψης" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Όταν είναι ρυθμισμένο στην ελαχιστοποίηση, το διπλό κλικ ελαχιστοποιεί όλα " "τα παράθυρα της εφαρμογής." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Λειτουργία του Shift+Click" #: Settings.ui.h:14 msgid "Raise window" msgstr "Ανύψωση παραθύρου" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Ελαχιστοποίηση παραθύρου" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Εκκίνηση νέου παραθύρου" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Περιήγηση στα ανοικτά παράθυρα" #: Settings.ui.h:18 msgid "Quit" msgstr "Έξοδος" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "Συμπεριφορά μεσαίου κλικ." #: Settings.ui.h:20 msgid "Middle-Click action" msgstr "Λειτουργία του μεσαίου κλικ" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "Συμπεριφορά Shift+Μεσαίο κλικ." #: Settings.ui.h:22 msgid "Shift+Middle-Click action" msgstr "Λειτουργία του Shift+Μεσαίο κλικ" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Εμφάνιση της μπάρας στην" #: Settings.ui.h:24 msgid "Show on all monitors." msgstr "Εμφάνιση σε όλες τις οθόνες." #: Settings.ui.h:25 msgid "Position on screen" msgstr "Θέση στην οθόνη" #: Settings.ui.h:27 msgid "Bottom" msgstr "Κάτω" #: Settings.ui.h:28 msgid "Top" msgstr "Πάνω" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the the current application. " "More refined settings are available." msgstr "" "Απόκρυψη της μπάρας όταν εμποδίζει ένα παράθυρο της τρέχουσας εφαρμογής. Πιο " "εξειδικευμένες επιλογές είναι επίσης διαθέσιμες." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Έξυπνη απόκρυψη" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Περιορισμός μεγέθους μπάρας" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Λειτουργιά πάνελ: επέκταση της μπάρας ως τις άκρες της οθόνης" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Περιορισμός μεγέθους εικονιδίων" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "" "Σταθερό μέγεθος εικονιδίων: κύλιση για την εμφάνιση περαιτέρω εικονιδίων" #: Settings.ui.h:36 msgid "Position and size" msgstr "Θέση και μέγεθος" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Εμφάνιση αγαπημένων εφαρμογών" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Εμφάνιση εκτελούμενων εφαρμογών" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "Απομόνωση χώρων εργασίας." #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "Εμφάνιση προεπισκόπησης ανοικτών παραθύρων." #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Αν είναι απενεργοποιημένο, αυτές οι ρυθμίσεις είναι προσβάσιμες από το " "εργαλείο μικρορυθμίσεων του GNOME ή τον ιστοτόπο επεκτάσεων." #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "Εμφάνιση εικονιδίου Εφαρμογές" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Μετακίνηση του πλήκτρου εφαρμογών στην αρχή της μπάρας." #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "Ενεργοποίηση γραφικών κατά την Εμφάνιση Εφαρμογών." #: Settings.ui.h:45 msgid "Launchers" msgstr "Εκκινητές" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Ενεργοποίηση του Super+(0-9) ως συντομεύσεις για την ενεργοποίηση εφαρμογών. " "Μπορεί επίσης να χρησιμοποιηθεί με το Shift και το Ctrl." #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "Χρήση συντομεύσεων πληκτρολογίου για την ενεργοποίηση εφαρμογών" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "Συμπεριφορά κατά το κλικ σε εικονίδιο τρέχουσας εφαρμογής." #: Settings.ui.h:49 msgid "Click action" msgstr "Συμπεριφορά κλικ" #: Settings.ui.h:50 msgid "Minimize" msgstr "Ελαχιστοποίηση" #: Settings.ui.h:51 msgid "Minimize or overview" msgstr "Ελαχιστοποίηση ή επισκόπηση" #: Settings.ui.h:52 msgid "Behaviour when scrolling on the icon of an application." msgstr "Συμπεριφορά κατά την κύλιση σε εικονίδιο τρέχουσας εφαρμογής." #: Settings.ui.h:53 msgid "Scroll action" msgstr "Συμπεριφορά κύλισης" #: Settings.ui.h:54 msgid "Do nothing" msgstr "Καμία δράση" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "Αλλαγή χώρου εργασίας" #: Settings.ui.h:56 msgid "Behavior" msgstr "Συμπεριφορά" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Μερικές προσαρμογές στοχεύουν στο να ενοποιήσουν την μπάρα με το " "προκαθορισμένο θέμα του GNOME. Εναλλακτικά, ειδικές επιλογές μπορούν να " "ενεργοποιηθούν παρακάτω." #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Χρήση ενσωματωμένου θέματος" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Εξοικονόμηση χώρου μειώνοντας τα κενά και τα περιθώρια." #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "Σμίκρυνση της μπάρας" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Εμφανίζει μία τελεία για κάθε παράθυρο της εφαρμογής." #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Εμφάνιση μετρητή παραθύρων" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "Ορισμός χρώματος φόντου της μπάρας." #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "Προσαρμογή του χρώματος της μπάρας" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "Αλλαγή της αδιαφάνειας του φόντου της μπάρας." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Προσαρμογή αδιαφάνειας" #: Settings.ui.h:67 msgid "Opacity" msgstr "Αδιαφάνεια" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "Εξαναγκασμός ευθείας γωνίας\n" #: Settings.ui.h:70 msgid "Appearance" msgstr "Εμφάνιση" #: Settings.ui.h:71 msgid "version: " msgstr "έκδοση: " #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "" "Μετακινεί το ταμπλό και εκτός της προεπισκόπησης μετατρέποντάς το σε μπάρα " "εφαρμογών" #: Settings.ui.h:73 msgid "Created by" msgstr "Δημιουργήθηκε από" #: Settings.ui.h:74 msgid "Webpage" msgstr "Ιστοσελίδα" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Αυτό πρόγραμμα παρέχεται χωρίς ΑΠΟΛΥΤΩΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ.\n" "Για λεπτομέρειες δείτε την Γενική δημόσια άδεια GNU, έκδοση 2 ή νεότερη. " #: Settings.ui.h:77 msgid "About" msgstr "Περί" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "Εμφάνιση της μπάρας όταν το ποντίκι πηγαίνει στην άκρη της οθόνης." #: Settings.ui.h:79 msgid "Autohide" msgstr "Αυτόματη απόκρυψη" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "Πίεση για εμφάνιση: απαιτείται πίεση για την εμφάνιση της μπάρας" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "Ενεργοποίηση σε κατάσταση πλήρους οθόνης" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Εμφάνιση της μπάρας όταν δεν εμποδίζει τα παράθυρά των εφαρμογών." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Αποφυγή παραθύρων" #: Settings.ui.h:84 msgid "All windows" msgstr "Όλα τα παράθυρα" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "Μόνο τα παράθυρα της εστιασμένης εφαρμογής" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "Μόνο μεγιστοποιημένα παράθυρα" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Διάρκεια κίνησης γραφικών (s)" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Χρονικό όριο εμφάνισης" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Ελάχιστη πίεση" dash-to-dock-extensions.gnome.org-v63/po/es.po000066400000000000000000000252211326047523300214320ustar00rootroot00000000000000# Dash to Dock spanish translation. # This file is distributed under the same license as the Dash to Dock package. # Hugo Olabera , 2015. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-05-30 17:27-0400\n" "PO-Revision-Date: 2017-08-23 19:42-0500\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Monitor principal" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Monitor secundario" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Derecha" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Izquierda" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Personalización de ocultamiento inteligente" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Restablecer la configuración predeterminada" #: prefs.js:386 msgid "Show dock and application numbers" msgstr "Mostrar dock y números de aplicación" #: prefs.js:443 msgid "Customize middle-click behavior" msgstr "Personalizar comportamiento del botón central" #: prefs.js:514 msgid "Customize running indicators" msgstr "Personalizar indicadores de ejecución" #: appIcons.js:804 msgid "All Windows" msgstr "Todas las ventanas" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Personalizar estilo del indicador" #: Settings.ui.h:2 msgid "Color" msgstr "Color" #: Settings.ui.h:3 msgid "Border color" msgstr "Color del borde" #: Settings.ui.h:4 msgid "Border width" msgstr "Grosor del borde" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Número de aplicación" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Al usar atajos, mostrar momentáneamente el número de aplicación sobre los " "iconos." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Mostrar el dock si está oculto" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Si se activa el ocultamiento automático, el dock aparecerá momentáneamente " "al usar el atajo." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Atajo para las opciones anteriores" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Sintaxis: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Tiempo de ocultación" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Cuando se selecciona minimizar, una pulsación doble minimiza todas las " "ventanas de la aplicación." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Acción de Mayús + pulsación" #: Settings.ui.h:14 msgid "Raise window" msgstr "Elevar ventana" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Minimizar ventana" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Iniciar una instancia nueva" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Alternar entre ventanas" #: Settings.ui.h:18 msgid "Quit" msgstr "Salir" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "Comportamiento del botón central" #: Settings.ui.h:20 msgid "Middle-Click action" msgstr "Acción del botón central" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "Comportamiento de Mayús + botón central" #: Settings.ui.h:22 msgid "Shift+Middle-Click action" msgstr "Acción de Mayús + botón central" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Mostrar el dock en" #: Settings.ui.h:24 msgid "Show on all monitors." msgstr "Mostrar en todos los monitores." #: Settings.ui.h:25 msgid "Position on screen" msgstr "Posición en pantalla" #: Settings.ui.h:27 msgid "Bottom" msgstr "Inferior" #: Settings.ui.h:28 msgid "Top" msgstr "Superior" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Ocultar el dock cuando cubre una ventana de la aplicación activa. Otras " "opciones disponibles." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Ocultamiento automático inteligente" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Tamaño máximo del dock" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Modo panel: extender hasta los bordes de la pantalla" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Tamaño máximo de los iconos" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Tamaño fijo de los iconos: desplazarse para mostrar otros" #: Settings.ui.h:36 msgid "Position and size" msgstr "Posición y tamaño" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Mostrar aplicaciones favoritas" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Mostrar aplicaciones en ejecución" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "Aislar los espacios de trabajo." #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "Mostrar vista rápida de ventanas." #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Si está deshabilitado, estas opciones están accesibles desde gnome-tweak-" "tool o desde el sitio web de extensiones." #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "Mostrar el icono Aplicaciones" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Mover el botón de aplicaciones al comienzo del dock" #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "Animar Mostrar aplicaciones" #: Settings.ui.h:45 msgid "Launchers" msgstr "Lanzadores" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Habilitar Súper+(0-9) como atajos para activar aplicaciones. También puede " "ser usado junto con Mayús y Ctrl." #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "Usar atajos de teclado para activar aplicaciones" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "Comportamiento al pulsar el icono de una aplicación en ejecución" #: Settings.ui.h:49 msgid "Click action" msgstr "Acción de pulsación" #: Settings.ui.h:50 msgid "Minimize" msgstr "Minimizar" #: Settings.ui.h:51 msgid "Minimize or overview" msgstr "Minimizar o vista de actividades" #: Settings.ui.h:52 msgid "Behaviour when scrolling on the icon of an application." msgstr "Comportamiento al usar la rueda sobre el icono de una aplicación." #: Settings.ui.h:53 msgid "Scroll action" msgstr "Acción de desplazamiento" #: Settings.ui.h:54 msgid "Do nothing" msgstr "No hacer nada" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "Cambiar de espacio de trabajo." #: Settings.ui.h:56 msgid "Behavior" msgstr "Comportamiento" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Utilizar el tema predeterminado de GNOME. Alternativamente, pueden elegirse " "ciertas opciones más abajo." #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Utilizar el tema incorporado" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Reducir los márgenes para ganar espacio" #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "Encoger el tablero" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Mostrar un punto por cada ventana de la aplicación." #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Mostrar contador de ventanas" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "Escoger el color de fondo del dock." #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "Personalizar el color del dock" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "Ajustar la opacidad del fondo del dock." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Personalizar opacidad" #: Settings.ui.h:67 msgid "Opacity" msgstr "Opacidad" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "Forzar esquinas rectas\n" #: Settings.ui.h:70 msgid "Appearance" msgstr "Apariencia" #: Settings.ui.h:71 msgid "version: " msgstr "versión: " #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "" "Mueve el panel fuera de la vista de actividades trasformándolo en un dock" #: Settings.ui.h:73 msgid "Created by" msgstr "Creado por" #: Settings.ui.h:74 msgid "Webpage" msgstr "Sitio web" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Este programa viene SIN NINGUNA GARANTÍA.\n" "Consulte la Licencia Pública General de GNU, versión 2 o posterior para obtener " "más detalles." #: Settings.ui.h:77 msgid "About" msgstr "Acerca de" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "Mostrar el dock al mover el puntero al borde de la pantalla" #: Settings.ui.h:79 msgid "Autohide" msgstr "Ocultar automáticamente" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "Empujar para mostrar: requiere hacer presión para mostrar el dock" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "Activar en modo de pantalla completa" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Mostrar el dock cuando no cubra otras ventanas de aplicaciones" #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Esquivar las ventanas" #: Settings.ui.h:84 msgid "All windows" msgstr "Todas las ventanas" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "Solo las ventanas de la aplicación activa" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "Solo las ventanas maximizadas" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Duración de la animación" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Tiempo de aparición" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Nivel de presión" dash-to-dock-extensions.gnome.org-v63/po/fr.po000066400000000000000000000274631326047523300214440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-22 00:00-0400\n" "PO-Revision-Date: 2017-10-22 23:54-0400\n" "Last-Translator: Thomas GONET \n" "Language-Team: Jean-Baptiste Le Cz \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.3\n" #: Settings.ui.h:85 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Ce programme est distribué SANS AUCUNE GARANTIE.\n" "Consultez la Licence Générale Publique GNU version 2 ou plus récente pour plus " "d'informations." #: Settings.ui.h:87 msgid "About" msgstr "À propos" #: Settings.ui.h:74 msgid "Adaptive" msgstr "Adaptatif" #: appIcons.js:1376 msgid "All Windows" msgstr "Toutes les fenêtres" #: Settings.ui.h:94 msgid "All windows" msgstr "Toutes les fenêtres" #: Settings.ui.h:50 msgid "Animate Show Applications." msgstr "Animer le raccourci Afficher les Applications" #: Settings.ui.h:97 msgid "Animation duration (s)" msgstr "Durée de l'animation (s)" #: Settings.ui.h:80 msgid "Appearance" msgstr "Apparence" #: Settings.ui.h:89 msgid "Autohide" msgstr "Masquage automatique" #: Settings.ui.h:61 msgid "Behavior" msgstr "Comportement" #: Settings.ui.h:21 msgid "Behavior for Middle-Click." msgstr "Comportement pour le clic milieu" #: Settings.ui.h:23 msgid "Behavior for Shift+Middle-Click." msgstr "Comportement pour Shift+Clic milieu" #: Settings.ui.h:54 msgid "Behaviour when clicking on the icon of a running application." msgstr "Comportement du clic sur l'icône d'une application ouverte." #: Settings.ui.h:57 msgid "Behaviour when scrolling on the icon of an application." msgstr "Comportement lors du défilement sur l'icône d'une application." #: Settings.ui.h:3 msgid "Border color" msgstr "Couleur de la bordure" #: Settings.ui.h:4 msgid "Border width" msgstr "Épaisseur de la bordure" #: Settings.ui.h:32 msgid "Bottom" msgstr "Bas" #: Settings.ui.h:55 msgid "Click action" msgstr "Action du clic" #: Settings.ui.h:2 msgid "Color" msgstr "Couleur" #: Settings.ui.h:83 msgid "Created by" msgstr "Conçu par" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Régler le style des indicateurs" #: prefs.js:454 msgid "Customize middle-click behavior" msgstr "Personnaliser le comportement du clic milieu" #: Settings.ui.h:25 msgid "Customize minimum and maximum opacity values" msgstr "Personnaliser les valeurs minimum et maximum de l'opacité" #: Settings.ui.h:71 msgid "Customize opacity" msgstr "Régler l'opacité du dock" #: prefs.js:525 msgid "Customize running indicators" msgstr "Régler les indicateurs de fenêtres" #: Settings.ui.h:69 msgid "Customize the dash color" msgstr "Changer la couleur du dock" #: prefs.js:634 msgid "Cutomize opacity" msgstr "Régler l'opacité du dock" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Cycler sur les fenêtres" #. Translators: %s is "Settings", which is automatically translated. You #. can also translate the full message if this fits better your language. #: appIcons.js:1682 #, javascript-format msgid "Dash to Dock %s" msgstr "Dash to Dock %s" #: Settings.ui.h:72 msgid "Default" msgstr "Défaut" #: Settings.ui.h:59 msgid "Do nothing" msgstr "Ne rien faire" #: Settings.ui.h:37 msgid "Dock size limit" msgstr "Taille maximum du dock" #: Settings.ui.h:93 msgid "Dodge windows" msgstr "Masquage automatique intelligent" #: Settings.ui.h:75 msgid "Dynamic" msgstr "Dynamique" #: Settings.ui.h:52 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Activer Super+(0-9) comme raccourcis pour activer les applications. On peut " "l'utiliser aussi avec Shift et Ctrl." #: Settings.ui.h:77 msgid "Enable Unity7 like glossy backlit items" msgstr "Activer un fond brillant à la Unity7" #: Settings.ui.h:91 msgid "Enable in fullscreen mode" msgstr "Activer en mode plein-écran" #: Settings.ui.h:62 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Assortir le dock avec le thème par défaut. Sinon, vous pouvez personnaliser " "quelques paramètres ci-dessous." #: Settings.ui.h:73 msgid "Fixed" msgstr "Fixe" #: Settings.ui.h:40 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Taille des icônes fixe: faire défiler pour voir les autres icônes" #: Settings.ui.h:78 msgid "Force straight corner\n" msgstr "Forcer des coins droits\n" #: Settings.ui.h:35 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Cache le dock quand il gêne l'application principale. D'autres paramètres " "plus spécifiques sont disponibles." #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Délai de masquage (s)" #: Settings.ui.h:39 msgid "Icon size limit" msgstr "Taille maximum des icônes" #: Settings.ui.h:47 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Si désactivés, ces paramètres sont accessibles via gnome-tweak-tool ou le " "site d'extension GNOME." #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Si le masquage automatique est actif, le dock apparaîtra temporairement lors " "de l'utilisation du raccourci." #: Settings.ui.h:36 msgid "Intelligent autohide" msgstr "Masquage intelligent" #: prefs.js:212 msgid "Intelligent autohide customization" msgstr "Personnalisation du masquage automatique" #: Settings.ui.h:45 msgid "Isolate monitors." msgstr "Isoler les moniteurs." #: Settings.ui.h:44 msgid "Isolate workspaces." msgstr "Isoler les espaces de travail." #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Lancer une nouvelle fenêtre" #: Settings.ui.h:51 msgid "Launchers" msgstr "Lanceurs" #: prefs.js:162 Settings.ui.h:31 msgid "Left" msgstr "Gauche" #: Settings.ui.h:27 msgid "Maximum opacity" msgstr "Opacité maximum" #: Settings.ui.h:22 msgid "Middle-Click action" msgstr "Action du clic milieu" #: Settings.ui.h:56 msgid "Minimize" msgstr "Minimiser la fenêtre" #: Settings.ui.h:18 msgid "Minimize or overview" msgstr "Minimiser ou lancer l'exposé" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Minimiser la fenêtre" #: Settings.ui.h:26 msgid "Minimum opacity" msgstr "Opacité minimum" #: Settings.ui.h:49 msgid "Move the applications button at the beginning of the dock." msgstr "Placer le bouton des applications en première position" #: Settings.ui.h:82 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Place le dash hors de l'aperçu des fenêtres, le transformant en dock" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Numéro d'application" #: Settings.ui.h:95 msgid "Only focused application's windows" msgstr "Seulement la fenêtre de l'application active" #: Settings.ui.h:96 msgid "Only maximized windows" msgstr "Seulement les fenêtres maximisées" #: Settings.ui.h:76 msgid "Opacity" msgstr "Opacité" #: Settings.ui.h:38 msgid "Panel mode: extend to the screen edge" msgstr "Mode barre: étendre aux bords de l'écran" #: Settings.ui.h:41 msgid "Position and size" msgstr "Position et taille" #: Settings.ui.h:30 msgid "Position on screen" msgstr "Position sur l'écran" #: Settings.ui.h:99 msgid "Pressure threshold" msgstr "Seuil de pression" #: prefs.js:120 msgid "Primary monitor" msgstr "Moniteur principal" #: Settings.ui.h:90 msgid "Push to show: require pressure to show the dock" msgstr "Pousser pour Afficher: requiert une pression pour afficher le dock" #: Settings.ui.h:20 msgid "Quit" msgstr "Quitter" #: Settings.ui.h:14 msgid "Raise window" msgstr "Faire apparaître la fenêtre" #: prefs.js:219 prefs.js:404 prefs.js:461 msgid "Reset to defaults" msgstr "Restaurer la configuration par défaut" #: prefs.js:161 Settings.ui.h:34 msgid "Right" msgstr "Droite" #: Settings.ui.h:64 msgid "Save space reducing padding and border radius." msgstr "Réduire la taille des marges pour gagner de la place." #: Settings.ui.h:58 msgid "Scroll action" msgstr "Action du défilement" #: prefs.js:129 prefs.js:136 msgid "Secondary monitor " msgstr "Moniteur secondaire " #: Settings.ui.h:68 msgid "Set the background color for the dash." msgstr "Choisir la couleur de fond du dock." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Action Shift+Clic" #: Settings.ui.h:24 msgid "Shift+Middle-Click action" msgstr "Action de Shift+Clic milieu" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Raccourci pour les options dessus" #: Settings.ui.h:48 msgid "Show Applications icon" msgstr "Afficher le raccourci Afficher les Applications" #: Settings.ui.h:66 msgid "Show a dot for each windows of the application." msgstr "Afficher un point pour chaque fenêtre ouverte de l'application." #: prefs.js:397 msgid "Show dock and application numbers" msgstr "Afficher le dock et le numéro d'application" #: Settings.ui.h:42 msgid "Show favorite applications" msgstr "Afficher les applications favorites" #: Settings.ui.h:29 msgid "Show on all monitors." msgstr "Afficher sur tous les écrans." #: Settings.ui.h:46 msgid "Show open windows previews." msgstr "Afficher des aperçus de fenêtres." #: Settings.ui.h:43 msgid "Show running applications" msgstr "Afficher les applications en cours" #: Settings.ui.h:88 msgid "Show the dock by mouse hover on the screen edge." msgstr "Afficher le dock en survolant le bord de l'écran." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Afficher le dock s'il est caché" #: Settings.ui.h:28 msgid "Show the dock on" msgstr "Afficher le dock sur le" #: Settings.ui.h:92 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Afficher le dock quand il ne gêne pas les fenêtres." #: Settings.ui.h:98 msgid "Show timeout (s)" msgstr "Délai d'apparition (s)" #: Settings.ui.h:19 msgid "Show window previews" msgstr "Afficher des aperçus de fenêtres" #: Settings.ui.h:67 msgid "Show windows counter indicators" msgstr "Afficher un compteur de fenêtres" #: Settings.ui.h:65 msgid "Shrink the dash" msgstr "Réduire les marges" #: Settings.ui.h:60 msgid "Switch workspace" msgstr "Changer d'espace de travail" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Syntaxe: , , , " #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Afficher temporairement les numéros d'application sur les icônes, " "correspondant au raccourci clavier." #: Settings.ui.h:33 msgid "Top" msgstr "Haut" #: Settings.ui.h:70 msgid "Tune the dash background opacity." msgstr "Régler l'opacité en fond du dock." #: Settings.ui.h:63 msgid "Use built-in theme" msgstr "Utiliser le thème par défaut" #: Settings.ui.h:53 msgid "Use keyboard shortcuts to activate apps" msgstr "Utiliser des raccourcis clavier pour activer les applications" #: Settings.ui.h:84 msgid "Webpage" msgstr "Site web" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Quand réglé sur Minimiser, double-cliquer minimise toutes les fenêtres de " "l'application." #: Settings.ui.h:81 msgid "version: " msgstr "Version : " #~ msgid "0.000" #~ msgstr "0.000" dash-to-dock-extensions.gnome.org-v63/po/gl.po000066400000000000000000000250271326047523300214310ustar00rootroot00000000000000# Dash to Dock galician translation. # This file is distributed under the same license as the Dash to Dock package. # Xosé M. Lamas , 2018. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-30 11:27-0400\n" "PO-Revision-Date: 2018-03-30 16:42-0500\n" "Last-Translator: Xosé M. Lamas \n" "Language-Team: \n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Monitor principal" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Monitor secundario" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Dereita" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Esquerda" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Personalización de agochamento intelixente" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Restablecer aos valores por omisión" #: prefs.js:386 msgid "Show dock and application numbers" msgstr "Mostrar dock e números do aplicativo" #: prefs.js:443 msgid "Customize middle-click behavior" msgstr "Personalizar comportamento do botón central" #: prefs.js:514 msgid "Customize running indicators" msgstr "Personalizar indicadores en execución" #: appIcons.js:804 msgid "All Windows" msgstr "Todas as ventás" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Personalizar estilo do indicador" #: Settings.ui.h:2 msgid "Color" msgstr "Cor" #: Settings.ui.h:3 msgid "Border color" msgstr "Cor do borde" #: Settings.ui.h:4 msgid "Border width" msgstr "Ancho do borde" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Número na vista extendida" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Mostrar brevemente o número de aplicativo sobre a icona que corresponda " "ao atallo." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Mostrar o dock si está agochado" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Si se activa o agochamento automático, o dock aparecerá brevemente " "ao utilizar o atallo." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Atallo para os axustes de arriba" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Sintaxe: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Tempo en agocharse (s)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Cando se establece minimizar, facendo duplo click minimiza todas as ventás " "do aplicativo." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Acción de Maiús + pulsación" #: Settings.ui.h:14 msgid "Raise window" msgstr "Elevar ventá" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Minimizar ventá" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Iniciar unha nova instancia" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Alternar entre ventás" #: Settings.ui.h:18 msgid "Quit" msgstr "Saír" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "Comportamento do botón central" #: Settings.ui.h:20 msgid "Middle-Click action" msgstr "Acción do botón central" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "Comportamento de Maiús + botón central" #: Settings.ui.h:22 msgid "Shift+Middle-Click action" msgstr "Acción de Maiús + botón central" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Mostrar o dock en" #: Settings.ui.h:24 msgid "Show on all monitors." msgstr "Mostrar en todos os monitores." #: Settings.ui.h:25 msgid "Position on screen" msgstr "Posición na pantalla" #: Settings.ui.h:27 msgid "Bottom" msgstr "Inferior" #: Settings.ui.h:28 msgid "Top" msgstr "Superior" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Agochar o dock cando obstrúe a ventá do aplicativo actual. Dispoñibles " "máis opcións." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Agochamento automático intelixente" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Tamaño máximo do dock" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Modo panel: extender ate os bordes da pantalla" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Tamaño máximo das iconas" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Tamaño fixo das iconas: desprazarse para mostrar outros" #: Settings.ui.h:36 msgid "Position and size" msgstr "Posición e tamaño" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Mostrar aplicativos favoritos" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Mostrar aplicativos en execución" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "Illar os espazos de traballo." #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "Mostrar vista rápida de ventás." #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Si está deshabilitado, estas opcions están dispoñibles desde gnome-tweak-tool " "ou desde o sitio web de extensións." #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "Mostrar a icona Aplicativos" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Mover o botón de aplicativos ao principio do dock" #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "Animar Mostrar aplicativos" #: Settings.ui.h:45 msgid "Launchers" msgstr "Lanzadores" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Habilitar Súper+(0-9) como atallos para activar aplicativos. Tamén puede " "ser utilizado xunto con Maiús e Ctrl." #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "Usar atallos de teclado para activar aplicativos" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "Comportamiento ao pulsar na icona de un aplicativo en execución." #: Settings.ui.h:49 msgid "Click action" msgstr "Acción de pulsación" #: Settings.ui.h:50 msgid "Minimize" msgstr "Minimizar" #: Settings.ui.h:51 msgid "Minimize or overview" msgstr "Minimizar ou vista de actividades" #: Settings.ui.h:52 msgid "Behaviour when scrolling on the icon of an application." msgstr "Comportamiento ao utilizar a roda sobre a icona de un aplicativo." #: Settings.ui.h:53 msgid "Scroll action" msgstr "Acción de desprazamento" #: Settings.ui.h:54 msgid "Do nothing" msgstr "Non facer nada" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "Cambiar de espazo de traballo." #: Settings.ui.h:56 msgid "Behavior" msgstr "Comportamento" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Utilizar o decorado predeterminado de GNOME. De xeito alternativo, poden habilitarse " "certos axustes aquí abaixo." #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Utilizar o decorado incorporado" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Reducir as marxes para gañar espazo." #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "Comprimir o taboleiro" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Mostrar un punto por cada ventá do aplicativo." #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Mostrar contador de ventás" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "Escoller a cor de fondo do taboleiro." #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "Personalizar a cor do dock" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "Axustar a opacidade do fondo." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Personalizar opacidade" #: Settings.ui.h:67 msgid "Opacity" msgstr "Opacidade" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "Forzar esquinas rectas\n" #: Settings.ui.h:70 msgid "Appearance" msgstr "Aparencia" #: Settings.ui.h:71 msgid "version: " msgstr "versión: " #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "" "Move o panel da vista de actividades transformándoo nun dock" #: Settings.ui.h:73 msgid "Created by" msgstr "Creado por" #: Settings.ui.h:74 msgid "Webpage" msgstr "Sitio web" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Este programa ven SIN GARANTÍA ALGUNHA.\n" "Consulte a Licenza Pública Xeral de GNU, versión 2 ou posterior para obter " "máis detalles." #: Settings.ui.h:77 msgid "About" msgstr "Sobre o" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "Mostrar o dock ao pasar o punteiro sobre o borde da pantalla." #: Settings.ui.h:79 msgid "Autohide" msgstr "Agochar automáticamente" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "Empurrar para mostrasr: require facer presión para mostrar o dock" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "Activar en modo de pantalla completa" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Mostrar o dock cando non cubra outras ventás de aplicativos." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Evitar as ventás" #: Settings.ui.h:84 msgid "All windows" msgstr "Todas as ventás" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "Só as ventás do aplicativo activo" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "Só as ventás maximizadas" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Duración da animación (s)" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Tempo de aparición" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Límite de presión" dash-to-dock-extensions.gnome.org-v63/po/hu.po000066400000000000000000000262601326047523300214430ustar00rootroot00000000000000# Hungarian translation for dash-to-dock. # Copyright (C) 2017 Free Software Foundation, Inc. # This file is distributed under the same license as the dash-to-dock package. # # Balázs Úr , 2017. msgid "" msgstr "" "Project-Id-Version: dash-to-dock master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2017-04-10 22:02+0100\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 2.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Elsődleges kijelző" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Másodlagos kijelző" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Jobb" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Bal" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Intelligens automatikus elrejtés személyre szabása" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Visszaállítás az alapértékekre" #: prefs.js:386 msgid "Show dock and application numbers" msgstr "A dokk és az alkalmazás számainak megjelenítése" #: prefs.js:443 msgid "Customize middle-click behavior" msgstr "Középső kattintás viselkedésének személyre szabása" #: prefs.js:514 msgid "Customize running indicators" msgstr "Futásjelzők személyre szabása" #: appIcons.js:804 msgid "All Windows" msgstr "Összes Ablak" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Jelző stílusának személyre szabása" #: Settings.ui.h:2 msgid "Color" msgstr "Szín" #: Settings.ui.h:3 msgid "Border color" msgstr "Szegély színe" #: Settings.ui.h:4 msgid "Border width" msgstr "Szegély szélessége" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Szám rátét" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Az alkalmazás számainak átmeneti megjelenítése az ikonok fölött a " "gyorsbillentyűnek megfelelően." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "A dokk megjelenítése, ha el van rejtve" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Az automatikus elrejtés használatakor a dokk meg fog jelenni egy rövid ideig " "a gyorsbillentyű megnyomásakor." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Gyorsbillentyűk a fenti beállításokhoz" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Szintaxis: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Elrejtési időkorlát (mp)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Ha minimalizálásra van állítva, akkor a dupla kattintás az alkalmazás összes " "ablakát minimalizálja." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Shift + kattintás művelet" #: Settings.ui.h:14 msgid "Raise window" msgstr "Ablak előre hozása" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Ablak minimalizálása" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Új példány indítása" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Ablakok körbeléptetése" #: Settings.ui.h:18 msgid "Quit" msgstr "Kilépés" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "A középső kattintás viselkedése." #: Settings.ui.h:20 msgid "Middle-Click action" msgstr "Középső kattintás művelet" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "A Shift + középső kattintás viselkedése." #: Settings.ui.h:22 msgid "Shift+Middle-Click action" msgstr "Shift + középső kattintás művelet" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "A dokk megjelenítése" #: Settings.ui.h:24 #, fuzzy msgid "Show on all monitors." msgstr "Másodlagos kijelző" #: Settings.ui.h:25 msgid "Position on screen" msgstr "Elhelyezkedés a képernyőn" #: Settings.ui.h:27 msgid "Bottom" msgstr "Lent" #: Settings.ui.h:28 msgid "Top" msgstr "Fent" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "A dokk elrejtése, amikor az aktuális alkalmazás ablakát akadályozza. További " "finombeállítások is elérhetők." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Intelligens automatikus elrejtés" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Dokk méretkorlátja" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Panel mód: kiterjesztés a képernyő széléig" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Ikon méretkorlátja" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Rögzített ikonméret: görgetés egyéb ikonok felfedéséhez" #: Settings.ui.h:36 msgid "Position and size" msgstr "Elhelyezkedés és méret" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Kedvenc alkalmazások megjelenítése" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Futó alkalmazások megjelenítése" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "Munkaterületek elkülönítése." #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "Nyitott ablakok előnézeteinek megjelenítése." #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Ha le van tiltva, akkor ezek a beállítások elérhetők a GNOME finomhangoló " "eszközből vagy a kiegészítők weboldaláról." #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "Alkalmazások ikon megjelenítése" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Az alkalmazások gombjának áthelyezése a dokk elejére." #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "Alkalmazások megjelenítése animálása." #: Settings.ui.h:45 msgid "Launchers" msgstr "Indítok" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Szuper + (0-9) engedélyezése gyorsbillentyűként az alkalmazások " "aktiválásához. Használható a Shift és a Ctrl billentyűkkel együtt is." #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "Gyorsbillentyűk használata az alkalmazások aktiválásához" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "Viselkedés egy futó alkalmazás ikonjára való kattintáskor." #: Settings.ui.h:49 msgid "Click action" msgstr "Kattintás művelet" #: Settings.ui.h:50 msgid "Minimize" msgstr "Minimalizálás" #: Settings.ui.h:51 #, fuzzy msgid "Minimize or overview" msgstr "Ablak minimalizálása" #: Settings.ui.h:52 msgid "Behaviour when scrolling on the icon of an application." msgstr "Viselkedés egy alkalmazás ikonján való görgetéskor." #: Settings.ui.h:53 msgid "Scroll action" msgstr "Görgetési művelet" #: Settings.ui.h:54 msgid "Do nothing" msgstr "Ne tegyen semmit" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "Munkaterület váltása" #: Settings.ui.h:56 msgid "Behavior" msgstr "Viselkedés" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Néhány személyre szabás célja, hogy integrálja a dokkot az alapértelmezett " "GNOME témába. Alternatív esetben bizonyos beállítások engedélyezhetők lent." #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Beépített téma használata" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Helymegtakarítás a kitöltés és a szegély sugarának csökkentésével." #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "A dash zsugorítása" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Egy pont megjelenítése az alkalmazás minden ablakánál." #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Ablakszámlálók jelzőinek megjelenítése" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "A dash háttérszínének beállítása." #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "A dash színének személyre szabása" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "A dash háttér átlátszatlanságának finomhangolása." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Átlátszatlanság személyre szabása" #: Settings.ui.h:67 msgid "Opacity" msgstr "Átlátszatlanság" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "Egyenes sarok kényszerítése\n" #: Settings.ui.h:70 msgid "Appearance" msgstr "Megjelenés" #: Settings.ui.h:71 msgid "version: " msgstr "verzió: " #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Áthelyezi a dasht az áttekintőn kívülre egy dokká alakítva azt" #: Settings.ui.h:73 msgid "Created by" msgstr "Létrehozta" #: Settings.ui.h:74 msgid "Webpage" msgstr "Weboldal" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Ehhez a programhoz SEMMILYEN GARANCIA NEM JÁR.\n" "Nézze meg a GNU General Public License 2. vagy későbbi verzióját a részletekért." #: Settings.ui.h:77 msgid "About" msgstr "Névjegy" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "A dokk megjelenítése a képernyő szélére történő egér rámutatással." #: Settings.ui.h:79 msgid "Autohide" msgstr "Automatikus elrejtés" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "Nyomás a megjelenítéshez: nyomást igényel a dokk megjelenítéséhez" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "Engedélyezés teljes képernyős módban" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "A dokk megjelenítése, amikor nem akadályozza az alkalmazás ablakait." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Ablakok kikerülése" #: Settings.ui.h:84 msgid "All windows" msgstr "Összes ablak" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "Csak a kijelölt alkalmazások ablakai" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "Csak a maximalizált ablakok" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Animáció időtartama (mp)" #: Settings.ui.h:88 msgid "0.000" msgstr "0,000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Megjelenítési időkorlát (mp)" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Nyomás küszöbszintje" dash-to-dock-extensions.gnome.org-v63/po/id.po000066400000000000000000000252521326047523300214230ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Dash-to-Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2017-10-02 11:25+0700\n" "Last-Translator: Mahyuddin \n" "Language-Team: Mahyuddin \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 1.8.11\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Monitor primer" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Monitor sekunder" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Kanan" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Kiri" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Kustomisasi autohide yang cerdas" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Setel ulang ke bawaan" #: prefs.js:386 msgid "Show dock and application numbers" msgstr "Tampilkan dock dan nomor aplikasi" #: prefs.js:443 msgid "Customize middle-click behavior" msgstr "Sesuaikan perilaku klik menengah" #: prefs.js:514 msgid "Customize running indicators" msgstr "Sesuaikan indikator yang sedang berjalan" #: appIcons.js:804 msgid "All Windows" msgstr "Semua Jendela" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Sesuaikan gaya indikator" #: Settings.ui.h:2 msgid "Color" msgstr "Warna" #: Settings.ui.h:3 msgid "Border color" msgstr "Warna border" #: Settings.ui.h:4 msgid "Border width" msgstr "Lebar border" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Nomor overlay" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Untuk sementara menunjukkan nomor aplikasi di atas ikon, sesuai dengan " "pintasan." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Tunjukkan dock jika tersembunyi" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Jika menggunakan autohide, dock akan muncul dalam waktu singkat saat memicu " "pintasan." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Pintasan untuk opsi di atas" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Sintaks: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Sembunyikan batas waktu (s)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Bila disetel untuk meminimalkan, klik ganda meminimalkan semua jendela " "aplikasi." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Tindakan Shift+Klik" #: Settings.ui.h:14 msgid "Raise window" msgstr "Menaikkan jendela" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Minimalkan jendela" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Luncurkan contoh baru" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Siklus melalui jendela" #: Settings.ui.h:18 msgid "Quit" msgstr "Berhenti" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "Perilaku untuk Klik-Tengah." #: Settings.ui.h:20 msgid "Middle-Click action" msgstr "Tindakan Klik-Tengah" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "Perilaku untuk Shift+Klik-Tengah." #: Settings.ui.h:22 msgid "Shift+Middle-Click action" msgstr "Tindakan Shift+Klik-Tengah" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Tunjukkan dock pada" #: Settings.ui.h:24 msgid "Show on all monitors." msgstr "Tunjukkan pada semua monitor." #: Settings.ui.h:25 msgid "Position on screen" msgstr "Posisi pada layar" #: Settings.ui.h:27 msgid "Bottom" msgstr "Bawah" #: Settings.ui.h:28 msgid "Top" msgstr "Atas" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Sembunyikan dock saat menghalangi jendela aplikasi saat ini. Setelan yang " "lebih halus juga tersedia." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Autohide cerdas" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Batas ukuran dock" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Mode panel: meluas ke tepi layar" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Batas ukuran ikon" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Ukuran ikon tetap: gulir untuk menampilkan ikon lain" #: Settings.ui.h:36 msgid "Position and size" msgstr "Posisi dan ukuran" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Tampilkan aplikasi favorit" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Tampilkan aplikasi yang sedang berjalan" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "Isolasi ruang kerja." #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "Tampilkan pratinjau windows yang terbuka." #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Jika dinonaktifkan, setelan ini dapat diakses dari gnome-tweak-tool atau " "situs ekstensi." #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "Tampilkan ikon Aplikasi" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Pindahkan tombol aplikasi di awal dock." #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "Animasi Tampilkan Aplikasi." #: Settings.ui.h:45 msgid "Launchers" msgstr "Peluncur" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Aktifkan Super+(0-9) sebagai cara pintas untuk mengaktifkan aplikasi. Ini " "juga bisa digunakan bersamaan dengan Shift dan Ctrl." #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "Gunakan pintasan papan tik untuk mengaktifkan aplikasi" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "Perilaku saat mengklik ikon aplikasi yang sedang berjalan." #: Settings.ui.h:49 msgid "Click action" msgstr "Klik tindakan" #: Settings.ui.h:50 msgid "Minimize" msgstr "Minimalkan" #: Settings.ui.h:51 msgid "Minimize or overview" msgstr "Minimalkan atau ikhtisar" #: Settings.ui.h:52 msgid "Behaviour when scrolling on the icon of an application." msgstr "Perilaku saat menggulir pada ikon aplikasi." #: Settings.ui.h:53 msgid "Scroll action" msgstr "Gulir tindakan" #: Settings.ui.h:54 msgid "Do nothing" msgstr "Tidak melakukan apapun" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "Beralih ruang kerja" #: Settings.ui.h:56 msgid "Behavior" msgstr "Perilaku" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Beberapa penyesuaian dimaksudkan untuk mengintegrasikan dock dengan tema " "GNOME bawaan. Sebagai alternatif, pilihan spesifik dapat diaktifkan di bawah " "ini." #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Gunakan tema bawaan" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Hemat ruang padding mengurangi dan radius border." #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "Penyusutan dash" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Tampilkan titik untuk setiap jendela aplikasi." #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Tampilkan indikator counter jendela" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "Atur warna latar belakang untuk dash." #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "Sesuaikan warna dash." #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "Cocokkan opacity latar belakang." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Menyesuaikan opacity" #: Settings.ui.h:67 msgid "Opacity" msgstr "Opacity" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "Paksa sudut lurus\n" #: Settings.ui.h:70 msgid "Appearance" msgstr "Penampilan" #: Settings.ui.h:71 msgid "version: " msgstr "versi: " #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Memindahkan dash keluar dari ikhtisar yang mengubahnya di dock" #: Settings.ui.h:73 msgid "Created by" msgstr "Dibuat oleh" #: Settings.ui.h:74 msgid "Webpage" msgstr "Halaman web" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Program ini hadir dengan TIDAK ADA JAMINAN TIDAK " "BENAR.\n" "Lihat " "GNU General Public License, versi 2 atau yang lebih baru untuk " "detailnya. " #: Settings.ui.h:77 msgid "About" msgstr "Tentang" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "Tunjukkan dock dengan mouse hover di tepi layar." #: Settings.ui.h:79 msgid "Autohide" msgstr "Autohide" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "Tekan untuk tampilkan: butuh tekanan untuk menunjukkan dock" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "Aktifkan dalam mode layar penuh" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Tunjukkan dokk bila tidak menghalangi jendela aplikasi." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Dodge jendela" #: Settings.ui.h:84 msgid "All windows" msgstr "Semua jendela" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "Hanya fokus aplikasi jendela" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "Hanya jendela yang maksimal" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Durasi animasi (s)" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Tampilkan batas waktu (s)" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Ambang tekanan" #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "Con la dimensione fissa delle icone, solo il bordo della dock e l'icona " #~ " Mostra Applicazioni sono attive." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Cambia spazio di lavoro scorrendo sulla dock" dash-to-dock-extensions.gnome.org-v63/po/it.po000066400000000000000000000261261326047523300214440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Dash-to-Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2017-06-04 12:59+0100\n" "Last-Translator: Giuseppe Pignataro (Fastbyte01) \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.8.11\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Monitor primario" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Monitor secondario" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Destra" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Sinistra" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Personalizzazione nascondimento automatico intelligente" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Ripristina a predefinito" #: prefs.js:386 msgid "Show dock and application numbers" msgstr "Mostra applicazioni in esecuzione" #: prefs.js:443 msgid "Customize middle-click behavior" msgstr "Personalizza comportamento clic centrale" #: prefs.js:514 msgid "Customize running indicators" msgstr "Personalizza indicatori in esecuzione" #: appIcons.js:804 msgid "All Windows" msgstr "Tutte le finestre" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Personalizza stile indicatori" #: Settings.ui.h:2 msgid "Color" msgstr "Colore" #: Settings.ui.h:3 msgid "Border color" msgstr "Colore bordo" #: Settings.ui.h:4 msgid "Border width" msgstr "Larghezza bordo" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Indicatore numerico in sovraimpressione" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Mostra brevemente il numero corrispondente alla scorciatoia sull'icona " "dell'applicazione." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Mostra dock se nascosta" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Con nascondimento automatico intelligente, la dock viene mostrata per un " "istante quando la scorciatoia è attivata" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Scorciatoia" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Formato: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Timeout nascondimento (s)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Quando impostati su minimizza, un doppio clic minimizza tutte le finestre " "dell'applicazione." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Azione Shift+Clic" #: Settings.ui.h:14 msgid "Raise window" msgstr "Solleva finestra" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Minimizza finestra" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Lancia nuova istanza" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Passa attraverso le finestre" #: Settings.ui.h:18 msgid "Quit" msgstr "Chiudi" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "Comportamento per Clic-centrale" #: Settings.ui.h:20 msgid "Middle-Click action" msgstr "Azione Clic-centrale" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "Comportamento per Shift+Clic-centrale" #: Settings.ui.h:22 msgid "Shift+Middle-Click action" msgstr "Azione Shift+Clic-centrale" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Mostra dock sul" #: Settings.ui.h:24 msgid "Show on all monitors." msgstr "Mostra su tutti gli schermi" #: Settings.ui.h:25 msgid "Position on screen" msgstr "Posizione sullo schermo" #: Settings.ui.h:27 msgid "Bottom" msgstr "Basso" #: Settings.ui.h:28 msgid "Top" msgstr "Alto" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Nasconde la dock quando questa ostruisce una finestra dell'applicazione " "corrente. Sono disponibili maggiori impostazioni." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Autohide intelligente" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Limite dimensione dock" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Modalità pannello: si estende fino al bordo dello schermo" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Limite dimensione icone" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Dimensione icona fissa: scorri per rivelare le altre icone" #: Settings.ui.h:36 msgid "Position and size" msgstr "Posizione e dimensione" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Mostra applicazioni preferite" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Mostra applicazioni in esecuzione" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "Isola spazi di lavoro." #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "Mostra anteprime delle finestre aperte" #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Se disabilitate, queste impostazioni sono accessibili da gnome-tweak-tool o " "dal sito web delle estensioni." #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "Mostra icona Applicazioni" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Sposta il pulsante delle applicazioni all'inizio della dock." #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "Anima Mostra Applicazioni." #: Settings.ui.h:45 msgid "Launchers" msgstr "Icone delle applicazoni" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Attiva Super+(0-9) come scorciatoie per attivare le applicazioni. Funziona " "anche con Shift e Ctrl" #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "Usa scorciatoie da tastiera per attivare le applicazioni." #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "" "Comportamento quando si fa clic sull'icona di una applicazione in esecuzione." #: Settings.ui.h:49 msgid "Click action" msgstr "Azione clic" #: Settings.ui.h:50 msgid "Minimize" msgstr "Minimizza" #: Settings.ui.h:51 msgid "Minimize or overview" msgstr "Minimizza o mostra attività" #: Settings.ui.h:52 msgid "Behaviour when scrolling on the icon of an application." msgstr "" "Comportamento quando si fa clic sull'icona di una applicazione in esecuzione." #: Settings.ui.h:53 msgid "Scroll action" msgstr "Azione scroll" #: Settings.ui.h:54 msgid "Do nothing" msgstr "Non fare nulla" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "Cambia spazio di lavoro." #: Settings.ui.h:56 msgid "Behavior" msgstr "Comportamento" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Poche personalizzazioni significative per integrare la dock con il tema di " "default di GNOME. In alternativa, delle opzioni specifiche possono essere " "abilitate qui sotto." #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Usa teme integrato" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Salva spazio riducendo il margine e il raggio dei bordi." #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "Riduci la dash" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Mostra un punto per ogni finestra dell'applicazione." #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Mostra indicatore numerico delle finestra" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "Imposta il colore di sfondo della dash." #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "Personalizza il colore della dash" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "Personalizza l'opacità dello sfondo della dash." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Personalizza opacità" #: Settings.ui.h:67 msgid "Opacity" msgstr "Opacità" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "" #: Settings.ui.h:70 msgid "Appearance" msgstr "Aspetto" #: Settings.ui.h:71 msgid "version: " msgstr "versione:" #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Sposta la dash fuori dalla panoramica trasformandola in una dock" #: Settings.ui.h:73 msgid "Created by" msgstr "Creata da " #: Settings.ui.h:74 msgid "Webpage" msgstr "Sito web" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Questo programma viene dato senza ASSOLUTAMENTE NESSUNA " "GARANZIA.\n" "Vedi la GNU General Public License, versione 2 o successiva per maggiori " "dettagli." #: Settings.ui.h:77 msgid "About" msgstr "Info su" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "Mostra la dock passando con il mouse sul bordo dello schermo" #: Settings.ui.h:79 msgid "Autohide" msgstr "Nascondi automaticamente" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "Premi per vedere: richiede una pressione per mostrare la dock" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "Abilità in modalità a schermo intero" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "" "Mostra la dock quando questa non ostruisce le finestre dell'applicazione." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Schive finestre" #: Settings.ui.h:84 msgid "All windows" msgstr "Tutte le finestre" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "Solo le finestre delle applicazione a fuoco" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "Solo le finestre massimizzate" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Durata Animazione (s)" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Timeout rivelazione (s)" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Soglia pressione" #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "Con la dimensione fissa delle icone, solo il bordo della dock e l'icona " #~ " Mostra Applicazioni sono attive." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Cambia spazio di lavoro scorrendo sulla dock" dash-to-dock-extensions.gnome.org-v63/po/ja.po000066400000000000000000000310511326047523300214130ustar00rootroot00000000000000# Dash to Dock master ja.po # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the dash-to-dock package. # Jiro Matsuzawa , 2013. # Debonne Hooties , 2014-2017. # msgid "" msgstr "" "Project-Id-Version: dash-to-dock master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-08-06 17:17+0900\n" "PO-Revision-Date: 2017-08-06 18:56+0900\n" "Last-Translator: Debonne Hooties \n" "Language-Team: Japanese <>\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: prefs.js:113 msgid "Primary monitor" msgstr "プライマリーモニター" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "セカンダリーモニター" #: prefs.js:154 Settings.ui.h:31 msgid "Right" msgstr "右" #: prefs.js:155 Settings.ui.h:28 msgid "Left" msgstr "左" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "インテリジェント表示の設定" #: prefs.js:212 prefs.js:397 prefs.js:454 msgid "Reset to defaults" msgstr "既定値にリセット" #: prefs.js:390 msgid "Show dock and application numbers" msgstr "ドック表示とアプリケーション番号" #: prefs.js:447 msgid "Customize middle-click behavior" msgstr "中ボタンクリック時のアクション" #: prefs.js:518 msgid "Customize running indicators" msgstr "インジケーターの表示設定" #: appIcons.js:872 msgid "All Windows" msgstr "ウィンドウプレビューの表示" #. Translators: %s is "Settings", which is automatically translated. You #. can also translate the full message if this fits better your language. #: appIcons.js:1170 #, javascript-format msgid "Dash to Dock %s" msgstr "Dash to Dock の%s" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "表示スタイルの設定" #: Settings.ui.h:2 msgid "Color" msgstr "ボディ色" #: Settings.ui.h:3 msgid "Border color" msgstr "縁取り色" #: Settings.ui.h:4 msgid "Border width" msgstr "縁取り幅" #: Settings.ui.h:5 msgid "Number overlay" msgstr "番号の表示" #: Settings.ui.h:6 msgid "Temporarily show the application numbers over the icons, corresponding to the shortcut." msgstr "ショートカットキーが押されたときに、アイコン上にアプリケーション番号を一時的に表示します。" #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "ドックが非表示なら一時的に表示" #: Settings.ui.h:8 msgid "If using autohide, the dock will appear for a short time when triggering the shortcut." msgstr "ドックが表示されていない状態のとき、ショーカットキーで一時的にドックを表示します。" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "上記設定のためのショートカットキー" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "表記法: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "非表示までのタイムアウト (秒)" #: Settings.ui.h:12 msgid "When set to minimize, double clicking minimizes all the windows of the application." msgstr "[ウィンドウの最小化] に設定したときは、アイコンをダブルクリックするとそのアプリケーションのウィンドウをすべて最小化します。" #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Shift + クリック時のアクション" #: Settings.ui.h:14 msgid "Raise window" msgstr "ウィンドウの再表示" #: Settings.ui.h:15 msgid "Minimize window" msgstr "ウィンドウの最小化" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "新しいウィンドウを開く" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "ウィンドウの切り替え" #: Settings.ui.h:18 msgid "Minimize or overview" msgstr "ウィンドウの最小化またはオーバービュー" #: Settings.ui.h:19 msgid "Show window previews" msgstr "ウィンドウのプレビュー表示" #: Settings.ui.h:20 msgid "Quit" msgstr "終了" #: Settings.ui.h:21 msgid "Behavior for Middle-Click." msgstr "中ボタンをクリックしたときの動作を設定します。" #: Settings.ui.h:22 msgid "Middle-Click action" msgstr "中ボタンクリック時のアクション" #: Settings.ui.h:23 msgid "Behavior for Shift+Middle-Click." msgstr "Shift を押しながら中ボタンをクリックしたときの動作を設定します。" #: Settings.ui.h:24 msgid "Shift+Middle-Click action" msgstr "Shift + 中ボタンクリック時のアクション" #: Settings.ui.h:25 msgid "Show the dock on" msgstr "ドックを表示するモニター" #: Settings.ui.h:26 msgid "Show on all monitors." msgstr "すべてのモニターで表示" #: Settings.ui.h:27 msgid "Position on screen" msgstr "表示位置" #: Settings.ui.h:29 msgid "Bottom" msgstr "下" #: Settings.ui.h:30 msgid "Top" msgstr "上" #: Settings.ui.h:32 msgid "Hide the dock when it obstructs a window of the current application. More refined settings are available." msgstr "開いているウィンドウの邪魔にならないようドックの表示/非表示を自動的に切り替えます。より洗練された表示設定も可能です。" #: Settings.ui.h:33 msgid "Intelligent autohide" msgstr "インテリジェント表示" #: Settings.ui.h:34 msgid "Dock size limit" msgstr "ドックサイズの上限" #: Settings.ui.h:35 msgid "Panel mode: extend to the screen edge" msgstr "パネルモード(画面の端までドックを拡張)" #: Settings.ui.h:36 msgid "Icon size limit" msgstr "アイコンサイズの上限" #: Settings.ui.h:37 msgid "Fixed icon size: scroll to reveal other icons" msgstr "アイコンサイズの固定(隠れたアイコンはスクロールで表示)" #: Settings.ui.h:38 msgid "Position and size" msgstr "位置とサイズ" #: Settings.ui.h:39 msgid "Show favorite applications" msgstr "お気に入りアプリケーションの表示" #: Settings.ui.h:40 msgid "Show running applications" msgstr "実行中アプリケーションの表示" #: Settings.ui.h:41 msgid "Isolate workspaces." msgstr "現在のワークスペースのみ表示" #: Settings.ui.h:42 msgid "Isolate monitors." msgstr "現在のモニターのみ表示" #: Settings.ui.h:43 msgid "Show open windows previews." msgstr "ウィンドウのプレビューを右クリックで表示可能にする" #: Settings.ui.h:44 msgid "If disabled, these settings are accessible from gnome-tweak-tool or the extension website." msgstr "オフにしたときは gnome-tweak-tool または拡張機能ウェブサイトを経由してこの設定ダイアログにアクセスします。" #: Settings.ui.h:45 msgid "Show Applications icon" msgstr "[アプリケーションを表示する] アイコンの表示" #: Settings.ui.h:46 msgid "Move the applications button at the beginning of the dock." msgstr "ドックの先頭(最上段または左端)に表示" #: Settings.ui.h:47 msgid "Animate Show Applications." msgstr "アニメーションしながらアプリケーション一覧を表示" #: Settings.ui.h:48 msgid "Launchers" msgstr "ランチャー" #: Settings.ui.h:49 msgid "Enable Super+(0-9) as shortcuts to activate apps. It can also be used together with Shift and Ctrl." msgstr "" "スーパーキーと番号 (0-9) を同時に押すことでアプリケーションのアクティブ化を可能にします。\n" "Shift または Ctrl キーをスーパーキーとともに押しても機能します。" #: Settings.ui.h:50 msgid "Use keyboard shortcuts to activate apps" msgstr "アプリのアクティブ化にキーボードショートカットを使用" #: Settings.ui.h:51 msgid "Behaviour when clicking on the icon of a running application." msgstr "実行中アプリケーションのアイコンをクリックしたときの動作を設定します。" #: Settings.ui.h:52 msgid "Click action" msgstr "クリック時のアクション" #: Settings.ui.h:53 msgid "Minimize" msgstr "ウィンドウの最小化" #: Settings.ui.h:54 msgid "Behaviour when scrolling on the icon of an application." msgstr "実行中アプリケーションのアイコン上でスクロールしたときの動作を設定します。" #: Settings.ui.h:55 msgid "Scroll action" msgstr "スクロール時のアクション" #: Settings.ui.h:56 msgid "Do nothing" msgstr "何もしない" #: Settings.ui.h:57 msgid "Switch workspace" msgstr "ワークスペースの切り替え" #: Settings.ui.h:58 msgid "Behavior" msgstr "動作" #: Settings.ui.h:59 msgid "Few customizations meant to integrate the dock with the default GNOME theme. Alternatively, specific options can be enabled below." msgstr "この設定がオンのときは、お使いのGNOMEテーマとの調和を図るためカスタマイズは無効になります。オフのときには以下のカスタマイズが可能です。" #: Settings.ui.h:60 msgid "Use built-in theme" msgstr "ビルトインテーマの使用" #: Settings.ui.h:61 msgid "Save space reducing padding and border radius." msgstr "境界線の太さとパディングを減らして表示域を小さくします。" #: Settings.ui.h:62 msgid "Shrink the dash" msgstr "Dash の縮小表示" #: Settings.ui.h:63 msgid "Show a dot for each windows of the application." msgstr "アプリケーションウィンドウの数をドットで表示します。" #: Settings.ui.h:64 msgid "Show windows counter indicators" msgstr "ウィンドウ数インジケーターの表示" #: Settings.ui.h:65 msgid "Set the background color for the dash." msgstr "Dash の背景色を設定します" #: Settings.ui.h:66 msgid "Customize the dash color" msgstr "Dash 背景色の設定" #: Settings.ui.h:67 msgid "Tune the dash background opacity." msgstr "Dash 背景の不透明度を調整します。" #: Settings.ui.h:68 msgid "Customize opacity" msgstr "不透明度の調整" #: Settings.ui.h:69 msgid "Opacity" msgstr "不透明度" #: Settings.ui.h:70 msgid "Force straight corner\n" msgstr "角を丸めない\n" #: Settings.ui.h:72 msgid "Appearance" msgstr "外観" #: Settings.ui.h:73 msgid "version: " msgstr "バージョン: " #: Settings.ui.h:74 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Dash をドック化してアクティビティ画面以外でも Dash 操作を可能にします。" #: Settings.ui.h:75 msgid "Created by" msgstr "作者:" #: Settings.ui.h:76 msgid "Webpage" msgstr "ウェブページ" #: Settings.ui.h:77 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "このプログラムに保証は一切ありません。\n" "詳しくは GNU一般公衆ライセンス(GPL)バージョン2 またはそれ以降のバージョンをご覧ください。" #: Settings.ui.h:79 msgid "About" msgstr "情報" #: Settings.ui.h:80 msgid "Show the dock by mouse hover on the screen edge." msgstr "ドックを表示したいとき、ポインターを画面端に移動するとドックが表示されます。" #: Settings.ui.h:81 msgid "Autohide" msgstr "オンデマンド表示" #: Settings.ui.h:82 msgid "Push to show: require pressure to show the dock" msgstr "押し込んで表示(画面外にポインターを移動するようにマウスを動かして表示)" #: Settings.ui.h:83 msgid "Enable in fullscreen mode" msgstr "フルスクリーンモード時でも表示" #: Settings.ui.h:84 msgid "Show the dock when it doesn't obstruct application windows." msgstr "ドックを常に表示しますが、アプリケーションウィンドウと重なるときは表示しません。" #: Settings.ui.h:85 msgid "Dodge windows" msgstr "ウィンドウ重なり防止" #: Settings.ui.h:86 msgid "All windows" msgstr "すべてのウィンドウが対象" #: Settings.ui.h:87 msgid "Only focused application's windows" msgstr "フォーカスされたアプリケーションのウィンドウが対象" #: Settings.ui.h:88 msgid "Only maximized windows" msgstr "最大化されたウィンドウが対象" #: Settings.ui.h:89 msgid "Animation duration (s)" msgstr "アニメーション表示時間 (秒)" #: Settings.ui.h:90 msgid "Show timeout (s)" msgstr "表示までのタイムアウト (秒)" #: Settings.ui.h:91 msgid "Pressure threshold" msgstr "押し込み量 (ピクセル)" dash-to-dock-extensions.gnome.org-v63/po/nb.po000066400000000000000000000266671326047523300214410ustar00rootroot00000000000000# Norwegian Bokmål translation for Dash to Dock. # Copyright (C) 2018 Michele # This file is distributed under the same license as the dash-to-dock package. # Harald H. , 2018. # msgid "" msgstr "" "Project-Id-Version: Dash-to-Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-02-28 09:47+0100\n" "PO-Revision-Date: 2018-03-02 11:02+0100\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.7.1\n" "Last-Translator: Harald H. \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Language: nb\n" #: prefs.js:131 msgid "Primary monitor" msgstr "Primærskjerm" #: prefs.js:140 prefs.js:147 msgid "Secondary monitor " msgstr "Sekundærskjerm" #: prefs.js:172 Settings.ui.h:26 msgid "Right" msgstr "Høyre" #: prefs.js:173 Settings.ui.h:23 msgid "Left" msgstr "Venstre" #: prefs.js:223 msgid "Intelligent autohide customization" msgstr "Tilpass intelligent autoskjul" #: prefs.js:230 prefs.js:415 prefs.js:472 msgid "Reset to defaults" msgstr "Tilbakestill til standard" #: prefs.js:408 msgid "Show dock and application numbers" msgstr "Vis dokk og programnumre" #: prefs.js:465 msgid "Customize middle-click behavior" msgstr "Tilpass oppførsel for mellomklikk" #: prefs.js:548 msgid "Customize running indicators" msgstr "Tilpass kjørende indikatorer" #: prefs.js:662 msgid "Cutomize opacity" msgstr "Tilpass gjennomsiktighet" #: appIcons.js:763 msgid "All Windows" msgstr "Alle vinduer" #. Translators: %s is "Settings", which is automatically translated. You #. can also translate the full message if this fits better your language. #: appIcons.js:1069 #, javascript-format msgid "Dash to Dock %s" msgstr "Dash to Dock %s" #: Settings.ui.h:1 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Når satt til minimer vil dobbeltklikking minimere alle åpne instanser av " "programmet." #: Settings.ui.h:2 msgid "Shift+Click action" msgstr "Handling for Shift + klikk" #: Settings.ui.h:3 msgid "Raise window" msgstr "Fremhev vindu" #: Settings.ui.h:4 msgid "Minimize window" msgstr "Minimer vindu" #: Settings.ui.h:5 msgid "Launch new instance" msgstr "Åpne ny instans" #: Settings.ui.h:6 msgid "Cycle through windows" msgstr "Veksle mellom vinduer" #: Settings.ui.h:7 msgid "Minimize or overview" msgstr "Minimer eller oversikt" #: Settings.ui.h:8 msgid "Show window previews" msgstr "Vis forhåndsvisning" #: Settings.ui.h:9 msgid "Quit" msgstr "Avslutt" #: Settings.ui.h:10 msgid "Behavior for Middle-Click." msgstr "Oppførsel for mellomklikk." #: Settings.ui.h:11 msgid "Middle-Click action" msgstr "Mellomklikk" #: Settings.ui.h:12 msgid "Behavior for Shift+Middle-Click." msgstr "Oppførsel for Shift + mellomklikk." #: Settings.ui.h:13 msgid "Shift+Middle-Click action" msgstr "Shift + mellomklikk" #: Settings.ui.h:14 msgid "Enable Unity7 like glossy backlit items" msgstr "Aktiver Unity7-lignende bakgrunnsglans" #: Settings.ui.h:15 msgid "Use dominant color" msgstr "Bruk dominerende farge" #: Settings.ui.h:16 msgid "Customize indicator style" msgstr "Tilpass indikatorstil" #: Settings.ui.h:17 msgid "Color" msgstr "Farge" #: Settings.ui.h:18 msgid "Border color" msgstr "Kantfarge" #: Settings.ui.h:19 msgid "Border width" msgstr "Kantbredde" #: Settings.ui.h:20 msgid "Show the dock on" msgstr "Vis dokken på" #: Settings.ui.h:21 msgid "Show on all monitors." msgstr "Vis på alle skjermer." #: Settings.ui.h:22 msgid "Position on screen" msgstr "Skjermposisjon" #: Settings.ui.h:24 msgid "Bottom" msgstr "Bunn" #: Settings.ui.h:25 msgid "Top" msgstr "Topp" #: Settings.ui.h:27 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Skjul dokken når den forstyrrer et aktivt programvindu. Flere innstillinger " "er tilgjengelig." #: Settings.ui.h:28 msgid "Intelligent autohide" msgstr "Intelligent autoskjul" #: Settings.ui.h:29 msgid "Dock size limit" msgstr "Maks dokkstørrelse" #: Settings.ui.h:30 msgid "Panel mode: extend to the screen edge" msgstr "Panelmodus: strekker seg til skjermkanten" #: Settings.ui.h:31 msgid "Icon size limit" msgstr "Ikonstørrelse" #: Settings.ui.h:32 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Fast ikonstørrelse: rull for vise andre ikoner" #: Settings.ui.h:33 msgid "Position and size" msgstr "Posisjon og størrelse" #: Settings.ui.h:34 msgid "Show favorite applications" msgstr "Vis favorittprogrammer" #: Settings.ui.h:35 msgid "Show running applications" msgstr "Vis kjørende programmer" #: Settings.ui.h:36 msgid "Isolate workspaces." msgstr "Isoler arbeidsområder." #: Settings.ui.h:37 msgid "Isolate monitors." msgstr "Isoler skjermer." #: Settings.ui.h:38 msgid "Show open windows previews." msgstr "Vis forhåndsvisning av åpne vinduer." #: Settings.ui.h:39 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Om deaktivert er disse innstillingene tilgjengelig i gnome-tweak-tool eller " "på nettsiden for utvidelser." #: Settings.ui.h:40 msgid "Show Applications icon" msgstr "Vis programmer ikon" #: Settings.ui.h:41 msgid "Move the applications button at the beginning of the dock." msgstr "Flytt programmer-knappen til starten av dokken." #: Settings.ui.h:42 msgid "Animate Show Applications." msgstr "Animere Vis programmer." #: Settings.ui.h:43 msgid "Launchers" msgstr "Utløsere" #: Settings.ui.h:44 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Bruk Super+(0-9) som snarvei for å aktivere apper. Den kan også brukes i " "kombinasjon med Shift og Ctrl." #: Settings.ui.h:45 msgid "Use keyboard shortcuts to activate apps" msgstr "Bruk tastatursnarveier for å åpne apper" #: Settings.ui.h:46 msgid "Behaviour when clicking on the icon of a running application." msgstr "Oppførsel når du klikker på ikonet for et åpent program." #: Settings.ui.h:47 msgid "Click action" msgstr "Klikkhandling" #: Settings.ui.h:48 msgid "Minimize" msgstr "Minimer" #: Settings.ui.h:49 msgid "Behaviour when scrolling on the icon of an application." msgstr "Oppførsel ved rulling over et programikon." #: Settings.ui.h:50 msgid "Scroll action" msgstr "Rullehandling" #: Settings.ui.h:51 msgid "Do nothing" msgstr "Ikke gjør noe" #: Settings.ui.h:52 msgid "Switch workspace" msgstr "Bytt arbeidsområde" #: Settings.ui.h:53 msgid "Behavior" msgstr "Oppførsel" #: Settings.ui.h:54 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Enkelte tilpasninger som forsøker å integrere dokken med det standard GNOME-" "temaet. Alternativt kan bestemte valg aktiveres nedenfor." #: Settings.ui.h:55 msgid "Use built-in theme" msgstr "Bruk innebygget tema" #: Settings.ui.h:56 msgid "Save space reducing padding and border radius." msgstr "Spar plass ved å redusere utfylling og kant-radius." #: Settings.ui.h:57 msgid "Shrink the dash" msgstr "Krymp dash" #: Settings.ui.h:58 msgid "Customize windows counter indicators" msgstr "Tilpass vinduenes nummer-indikatorer" #: Settings.ui.h:59 msgid "Default" msgstr "Standard" #: Settings.ui.h:60 msgid "Dots" msgstr "Prikker" #: Settings.ui.h:61 msgid "Squares" msgstr "Firkanter" #: Settings.ui.h:62 msgid "Dashes" msgstr "Streker" #: Settings.ui.h:63 msgid "Segmented" msgstr "Segmentert" #: Settings.ui.h:64 msgid "Solid" msgstr "Solid" #: Settings.ui.h:65 msgid "Ciliora" msgstr "Ciliora" #: Settings.ui.h:66 msgid "Metro" msgstr "Metro" #: Settings.ui.h:67 msgid "Set the background color for the dash." msgstr "Avgjør bakgrunnsfargen." #: Settings.ui.h:68 msgid "Customize the dash color" msgstr "Tilpass fargen" #: Settings.ui.h:69 msgid "Tune the dash background opacity." msgstr "Justere bakgrunnens gjennomsiktighet." #: Settings.ui.h:70 msgid "Customize opacity" msgstr "Tilpass gjennomsiktighet" #: Settings.ui.h:71 msgid "Fixed" msgstr "Fast" #: Settings.ui.h:72 msgid "Adaptive" msgstr "Adaptiv" #: Settings.ui.h:73 msgid "Dynamic" msgstr "Dynamisk" #: Settings.ui.h:74 msgid "Opacity" msgstr "Gjennomsiktighet" #: Settings.ui.h:75 msgid "Force straight corner\n" msgstr "Tving rette hjørner\n" #: Settings.ui.h:77 msgid "Appearance" msgstr "Utseende" #: Settings.ui.h:78 msgid "version: " msgstr "versjon: " #: Settings.ui.h:79 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Flytter dash ut av oversikten og omformer den til en dokk" #: Settings.ui.h:80 msgid "Created by" msgstr "Laget av" #: Settings.ui.h:81 msgid "Webpage" msgstr "Nettside" #: Settings.ui.h:82 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Dette programmet leveres med ABSOLUTT INGEN GARANTI.\n" "Se GNU " "General Public License, versjon 2 eller senere for detaljer." #: Settings.ui.h:84 msgid "About" msgstr "Om" #: Settings.ui.h:85 msgid "Customize minimum and maximum opacity values" msgstr "Tilpass verdier for minimum og maks gjennomsiktighet" #: Settings.ui.h:86 msgid "Minimum opacity" msgstr "Minimum gjennomsiktighet" #: Settings.ui.h:87 msgid "Maximum opacity" msgstr "Maksimum gjennomsiktighet" #: Settings.ui.h:88 msgid "Number overlay" msgstr "Nummerert overlag" #: Settings.ui.h:89 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "Midlertidig vis programnummer over ikoner, som svarer til snarveien." #: Settings.ui.h:90 msgid "Show the dock if it is hidden" msgstr "Vis dokken om den er skjult" #: Settings.ui.h:91 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Om autoskjul er i bruk vil dokken vises en kort stund når snarveien utløses." #: Settings.ui.h:92 msgid "Shortcut for the options above" msgstr "Snarvei for valgene ovenfor" #: Settings.ui.h:93 msgid "Syntax: , , , " msgstr "Syntaks: , , , " #: Settings.ui.h:94 msgid "Hide timeout (s)" msgstr "Skjuleperiode (s)" #: Settings.ui.h:95 msgid "Show the dock by mouse hover on the screen edge." msgstr "Vis dokken når musepekeren holdes langs skjermkanten." #: Settings.ui.h:96 msgid "Autohide" msgstr "Autoskjul" #: Settings.ui.h:97 msgid "Push to show: require pressure to show the dock" msgstr "Dytt for å vise: krev et økt trykk for å vise dokken" #: Settings.ui.h:98 msgid "Enable in fullscreen mode" msgstr "Aktiver i fullskjermmodus" #: Settings.ui.h:99 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Vis dokken når den ikke forstyrrer programvinduer." #: Settings.ui.h:100 msgid "Dodge windows" msgstr "Smett unna vinduer" #: Settings.ui.h:101 msgid "All windows" msgstr "Alle vinduer" #: Settings.ui.h:102 msgid "Only focused application's windows" msgstr "Kun fokuserte programvinduer" #: Settings.ui.h:103 msgid "Only maximized windows" msgstr "Kun maksimerte programvinduer" #: Settings.ui.h:104 msgid "Animation duration (s)" msgstr "Animasjonsvarighet (s)" #: Settings.ui.h:105 msgid "Show timeout (s)" msgstr "Visningslengde (s)" #: Settings.ui.h:106 msgid "Pressure threshold" msgstr "Trykkterskel" dash-to-dock-extensions.gnome.org-v63/po/nl.po000066400000000000000000000332361326047523300214410ustar00rootroot00000000000000# Translation for de # Copyright (C) 2014 Michele # This file is distributed under the same license as the dash-to-dock package. # Morris Jobke , 2014. # Jonatan Zeidler , 2012 # jonius , 2012 # Heimen Stoffels , 2015. # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2015-05-14 14:26+0200\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Nederlands \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Gtranslator 2.91.7\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Eerste beeldscherm" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Tweede beeldscherm" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Rechts" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Links" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Voorkeuren voor intelligente verbergmodus" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Herstellen naar standaardwaarden" #: prefs.js:386 #, fuzzy msgid "Show dock and application numbers" msgstr "Geopende applicaties weergeven" #: prefs.js:443 #, fuzzy msgid "Customize middle-click behavior" msgstr "Doorzichtigheid aanpassen" #: prefs.js:514 #, fuzzy msgid "Customize running indicators" msgstr "Geopende applicaties weergeven" #: appIcons.js:804 msgid "All Windows" msgstr "Vensters ontwijken" #: Settings.ui.h:1 #, fuzzy msgid "Customize indicator style" msgstr "Doorzichtigheid aanpassen" #: Settings.ui.h:2 msgid "Color" msgstr "" #: Settings.ui.h:3 msgid "Border color" msgstr "" #: Settings.ui.h:4 msgid "Border width" msgstr "" #: Settings.ui.h:5 msgid "Number overlay" msgstr "" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" #: Settings.ui.h:7 #, fuzzy msgid "Show the dock if it is hidden" msgstr "Het dock weergeven op" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "" #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Verberginterval (s)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Indien gekozen voor minimaliseren zal dubbelklikken alle vensters van de " "huidige applicatie minimaliseren." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Shift+Klik-actie" #: Settings.ui.h:14 #, fuzzy msgid "Raise window" msgstr "Venster minimalisren" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Venster minimalisren" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Nieuw proces openen" #: Settings.ui.h:17 #, fuzzy msgid "Cycle through windows" msgstr "Schakelen tussen vensters" #: Settings.ui.h:18 msgid "Quit" msgstr "" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "" #: Settings.ui.h:20 #, fuzzy msgid "Middle-Click action" msgstr "Klikactie" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "" #: Settings.ui.h:22 #, fuzzy msgid "Shift+Middle-Click action" msgstr "Shift+Klik-actie" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Het dock weergeven op" #: Settings.ui.h:24 #, fuzzy msgid "Show on all monitors." msgstr "Tweede beeldscherm" #: Settings.ui.h:25 msgid "Position on screen" msgstr "Positie op het scherm" #: Settings.ui.h:27 msgid "Bottom" msgstr "Onderaan" #: Settings.ui.h:28 msgid "Top" msgstr "Bovenaan" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Het dock verbergen wanneer het een venster van de huidige applicatie in de " "weg zit. Er zijn gedetailleerde instellingen hiervoor beschikbaar." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Intelligente verbergmodus" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Maximale dockgrootte" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Paneelmodus: uitrekken tot aan de schermrand" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Maximale pictogramgrootte" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "" "Vastgezette pictogramgrootte: scroll om meer pictogrammen weer te geven" #: Settings.ui.h:36 msgid "Position and size" msgstr "Positie en grootte" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Favoriete applicaties weergeven" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Geopende applicaties weergeven" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "" #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "" #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" #: Settings.ui.h:42 #, fuzzy msgid "Show Applications icon" msgstr "Applicaties weergeven-pictogram aan het begin" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Verplaatst de applicaties-knop naar het begin van het dock." #: Settings.ui.h:44 #, fuzzy msgid "Animate Show Applications." msgstr "Applicaties weergeven-pictogram aan het begin" #: Settings.ui.h:45 msgid "Launchers" msgstr "" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "" #: Settings.ui.h:48 #, fuzzy msgid "Behaviour when clicking on the icon of a running application." msgstr "Gedrag van het klikken op het pictogram van een geopende applicatie." #: Settings.ui.h:49 msgid "Click action" msgstr "Klikactie" #: Settings.ui.h:50 msgid "Minimize" msgstr "Minimaliseren" #: Settings.ui.h:51 #, fuzzy msgid "Minimize or overview" msgstr "Venster minimalisren" #: Settings.ui.h:52 #, fuzzy msgid "Behaviour when scrolling on the icon of an application." msgstr "Gedrag van het klikken op het pictogram van een geopende applicatie." #: Settings.ui.h:53 #, fuzzy msgid "Scroll action" msgstr "Klikactie" #: Settings.ui.h:54 msgid "Do nothing" msgstr "Niets doen" #: Settings.ui.h:55 #, fuzzy msgid "Switch workspace" msgstr "Nur eine Arbeitsfläche pro Scrollen weiterschalten" #: Settings.ui.h:56 msgid "Behavior" msgstr "Gedrag" #: Settings.ui.h:57 #, fuzzy msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Enkele aanpassingen die bedoeld zijn om het dock te integreren met het " "standaard GNOME-thema. In plaats daarvan kunt specifieke opties hieronder " "inschakelen." #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Ingebouwd thema gebruiken" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Bespaar ruimte door de radius van de dikte en rand te verkleinen." #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "De dash verkleinen" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Een stip weergeven voor elk venster van de applicatie." #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Indicatoren van de vensterteller weergeven" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "" #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "De doorzichtigheid van de dash-achtergrond aanpassen." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Doorzichtigheid aanpassen" #: Settings.ui.h:67 msgid "Opacity" msgstr "Doorzichtigheid" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "" #: Settings.ui.h:70 msgid "Appearance" msgstr "Uiterlijk" #: Settings.ui.h:71 msgid "version: " msgstr "versie:" #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "" "Verplaatst de dash naar buiten het activiteitenoverzicht zodat het een dock " "wordt" #: Settings.ui.h:73 msgid "Created by" msgstr "Gecreëerd door" #: Settings.ui.h:74 msgid "Webpage" msgstr "" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Dit programma wordt geleverd ZONDER ENIGE GARANTIE.\n" "Bekijk de GNU General Public License, versie 2 of nieuwer voor details." #: Settings.ui.h:77 msgid "About" msgstr "Over" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "Het dock weergeven door de muiscursor op de schermrand te plaatsen" #: Settings.ui.h:79 msgid "Autohide" msgstr "Automatisch verbergen" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "Weergeven middels druk: druk toepassen om het dock weer te geven" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Het dock weergeven wanneer het geen applicatievensters in de weg zit." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Vensters ontwijken" #: Settings.ui.h:84 msgid "All windows" msgstr "Vensters ontwijken" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "" #: Settings.ui.h:86 #, fuzzy msgid "Only maximized windows" msgstr "Venster minimalisren" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Animatieduur (s)" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Weergaveinterval (s)" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Drukwaarde (px)" #, fuzzy #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "Het gebied nabij de schermrand en de Applicaties weergeven-knop " #~ "zijn actief." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Van werkblad wisselen door te scrollen op het dock" #~ msgid "Only consider windows of the focused application" #~ msgstr "Alleen vensters van de huidige gefocuste applicatie overwegen" #~ msgid "Main Settings" #~ msgstr "Grundeinstellungen" #~ msgid "Dock Position" #~ msgstr "Dock-Position" #~ msgid "Dock is fixed and always visible" #~ msgstr "Das Dock hat eine feste Position und ist immer sichtbar" #~ msgid "Show delay [ms]" #~ msgstr "Einblendeverzögerung [ms]" #~ msgid "Hide delay [ms]" #~ msgstr "Ausblendeverzögerung [ms]" #~ msgid "Application based intellihide" #~ msgstr "Anwendungsbasiertes intelligentes Verstecken" #~ msgid "Show the dock on following monitor (if attached)" #~ msgstr "Zeige Dock auf folgendem Monitor (falls angeschlossen)" #~ msgid "Primary (default)" #~ msgstr "Primäranzeige (Standard)" #~ msgid "1" #~ msgstr "1" #~ msgid "2" #~ msgstr "2" #~ msgid "3" #~ msgstr "3" #~ msgid "4" #~ msgstr "4" #~ msgid "Max height" #~ msgstr "Maximale Höhe" #~ msgid "Expand (experimental and buggy)" #~ msgstr "Komplette Höhe (experimentell und fehlerbehaftet)" #~ msgid "Maximum icon size" #~ msgstr "Maximale Symbolgröße" #~ msgid "16" #~ msgstr "16" #~ msgid "24" #~ msgstr "24" #~ msgid "32" #~ msgstr "32" #~ msgid "48" #~ msgstr "48" #~ msgid "64" #~ msgstr "64" #~ msgid "Optional features" #~ msgstr "Optionale Funktionen" #~ msgid "Deadtime between each workspace switching [ms]" #~ msgstr "Stillstandszeit zwischen Arbeitsflächenwechsel [ms]" #~ msgid "Only a 1px wide area close to the screen edge is active" #~ msgstr "Nur einen 1 Pixel-breiten Bereich am Rand nutzen" #~ msgid "All the area of the dock is active" #~ msgstr "Den gesamten Bereich des Docks nutzen" #~ msgid "Customize actions on mouse click" #~ msgstr "Aktion bei Mausklick anpassen" #~ msgid "Action on clicking on running app" #~ msgstr "Aktion beim Klicken auf eine laufende Anwendung" #~ msgid "Minimize window on shift+click (double click for all app windows)" #~ msgstr "" #~ "Fenster mit Shift+Klick minimieren (Doppelklick für alle Fenster der " #~ "Anwendung)" #~ msgid "Appearence and Themes" #~ msgstr "Erscheinungsbild und Themen" #~ msgid "" #~ "A customized theme is built in the extension. This is meant to work with " #~ "the default Adwaita theme: the dash is shrunk to save space, its " #~ "background transparency reduced, and custom indicators for the number of " #~ "windows of each application are added." #~ msgstr "" #~ "Ein angepasstes Thema ist in dieser Erweiterung enthalten. Es ist für das " #~ "Vorgabe-Adwaita-Thema gedacht: Das Dash ist schmaler, um Platz zu sparen, " #~ "die Hintergrundtransparenz ist reduziert und für jede Anwendung wird ein " #~ "Indikator für die Anzahl der Fenster eingefügt." #~ msgid "" #~ "Alternatively, for a better integration with custom themes, each " #~ "customization can be applied indipendently" #~ msgstr "" #~ "Alternativ können für eine bessere Integration Anpassungen vorgenommen " #~ "werden" #~ msgid "Shrink the dash size by reducing padding" #~ msgstr "Das Dash schmaler machen durch Verkleinern des Abstands zum Rand" #~ msgid "Apply custom theme (work only with the default Adwaita theme)" #~ msgstr "" #~ "Benutzerdefiniertes Theme verwenden (funktioniert nur mit dem Standard-" #~ "Adwaita-Theme)" dash-to-dock-extensions.gnome.org-v63/po/pl.po000066400000000000000000000277651326047523300214550ustar00rootroot00000000000000# Polish translation for dash-to-dock GNOME Shell extension # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the dash-to-dock package. # # # Piotr Sokół , 2012, 2013, 2015, 2016, 2017. , 2017. # msgid "" msgstr "" "Project-Id-Version: 55\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-09-23 08:17+0200\n" "PO-Revision-Date: 2017-09-23 09:07+0200\n" "Last-Translator: Piotr Sokół \n" "Language-Team: polski <>\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bits\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Gtranslator 2.91.7\n" #: prefs.js:120 msgid "Primary monitor" msgstr "Podstawowy" #: prefs.js:129 prefs.js:136 msgid "Secondary monitor " msgstr "Drugorzędny " #: prefs.js:161 Settings.ui.h:34 msgid "Right" msgstr "Prawo" #: prefs.js:162 Settings.ui.h:31 msgid "Left" msgstr "Lewo" #: prefs.js:212 msgid "Intelligent autohide customization" msgstr "Dostosowanie automatycznego ukrywania" #: prefs.js:219 prefs.js:404 prefs.js:461 msgid "Reset to defaults" msgstr "Przywróć domyślne" #: prefs.js:397 msgid "Show dock and application numbers" msgstr "Wyświetlanie doku i numerów programów" #: prefs.js:454 msgid "Customize middle-click behavior" msgstr "Dostosowanie działania przycisków myszy" #: prefs.js:525 msgid "Customize running indicators" msgstr "Dostosowanie wskaźników okien" #: prefs.js:634 msgid "Cutomize opacity" msgstr "Dostosowanie nieprzejrzystości" #: appIcons.js:1144 msgid "All Windows" msgstr "Wszystkie okna" #. Translators: %s is "Settings", which is automatically translated. You #. can also translate the full message if this fits better your language. #: appIcons.js:1450 #, javascript-format msgid "Dash to Dock %s" msgstr "%s Dash to Dock" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Dostosowanie stylu wskaźników" #: Settings.ui.h:2 msgid "Color" msgstr "Kolor" #: Settings.ui.h:3 msgid "Border color" msgstr "Kolor obramowania" #: Settings.ui.h:4 msgid "Border width" msgstr "Szerokość obramowania" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Nakładka z numerem" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "Wyświetla chwilowo na ikonach numery programów powiązane ze skrótami" #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Wyświetlenie ukrytego doku" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "Wyświetla chwilowo dok po wciśnięciu skrótu klawiszowego" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Skrót klawiszowy dla powyższych poleceń" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Składnia: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Czas ukrywania (s)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Wybranie zminimalizowania okna, umożliwia minimalizowanie wszystkich okien " "programu dwukrotnym kliknięciem" #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Kliknięcia lewym przyciskiem + Shift" #: Settings.ui.h:14 msgid "Raise window" msgstr "Przywrócenie okna" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Zminimalizowanie okna" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Otwarcie nowego okna" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Przełączenie pomiędzy oknami" #: Settings.ui.h:18 msgid "Minimize or overview" msgstr "Zminimalizowanie lub ekran podglądu" #: Settings.ui.h:19 msgid "Show window previews" msgstr "Wyświetlenie podglądu okien" #: Settings.ui.h:20 msgid "Quit" msgstr "Zakończenie działania" #: Settings.ui.h:21 msgid "Behavior for Middle-Click." msgstr "Konfiguruje działanie kliknięcia środkowym przyciskiem myszy" #: Settings.ui.h:22 msgid "Middle-Click action" msgstr "Kliknięcie środkowym przyciskiem" #: Settings.ui.h:23 msgid "Behavior for Shift+Middle-Click." msgstr "" "Konfiguruje działanie kliknięcia środkowym przyciskiem myszy z przytrzymanym " "klawiszem Shift" #: Settings.ui.h:24 msgid "Shift+Middle-Click action" msgstr "Kliknięcie środkowym przyciskiem + Shift" #: Settings.ui.h:25 msgid "Customize minimum and maximum opacity values" msgstr "Dostosowanie minimalnej i maksymalnej wartości nieprzejrzystości" #: Settings.ui.h:26 msgid "Minimum opacity" msgstr "Minimalna nieprzejrzystość" #: Settings.ui.h:27 msgid "Maximum opacity" msgstr "Maksymalna nieprzejrzystość" #: Settings.ui.h:28 msgid "Show the dock on" msgstr "Ekran wyświetlania doku" #: Settings.ui.h:29 msgid "Show on all monitors." msgstr "Na wszystkich ekranach" #: Settings.ui.h:30 msgid "Position on screen" msgstr "Położenie na ekranie" #: Settings.ui.h:32 msgid "Bottom" msgstr "Dół" #: Settings.ui.h:33 msgid "Top" msgstr "Góra" #: Settings.ui.h:35 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Ukrywa dok jeśli zakrywa okno bieżącego programu. Dostępnych jest więcej " "szczegółowych opcji." #: Settings.ui.h:36 msgid "Intelligent autohide" msgstr "Inteligentne ukrywanie" #: Settings.ui.h:37 msgid "Dock size limit" msgstr "Ograniczenie rozmiaru doku" #: Settings.ui.h:38 msgid "Panel mode: extend to the screen edge" msgstr "Tryb panelu: rozciągnięcie do krawędzi ekranu" #: Settings.ui.h:39 msgid "Icon size limit" msgstr "Ograniczenie rozmiaru ikon" #: Settings.ui.h:40 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Ustalony rozmiar ikon: odsłanianie ikon przewijaniem" #: Settings.ui.h:41 msgid "Position and size" msgstr "Położenie i rozmiar" #: Settings.ui.h:42 msgid "Show favorite applications" msgstr "Ulubione programy" #: Settings.ui.h:43 msgid "Show running applications" msgstr "Uruchomione programy" #: Settings.ui.h:44 msgid "Isolate workspaces." msgstr "Izolowanie obszarów roboczych" #: Settings.ui.h:45 msgid "Isolate monitors." msgstr "Izolowanie ekranów" #: Settings.ui.h:46 msgid "Show open windows previews." msgstr "Podgląd otwartych okien" #: Settings.ui.h:47 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Przełącza widoczność przycisku programów. Można też skonfigurować za pomocą " "narzędzia dostrajania lub witryny internetowej z rozszerzeniami." #: Settings.ui.h:48 msgid "Show Applications icon" msgstr "Przycisk Wyświetl programy" #: Settings.ui.h:49 msgid "Move the applications button at the beginning of the dock." msgstr "Przemieszczenie przycisku programów na początek doku" #: Settings.ui.h:50 msgid "Animate Show Applications." msgstr "Animowanie przycisku Wyświetl programy" #: Settings.ui.h:51 msgid "Launchers" msgstr "Aktywatory" #: Settings.ui.h:52 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Używa skrótu Super+(0-9) do uruchomienia aktywatorów. Można użyć z " "modyfikatorem Shift lub Ctrl." #: Settings.ui.h:53 msgid "Use keyboard shortcuts to activate apps" msgstr "Uruchamianie aktywatorów skrótami klawiszowymi" #: Settings.ui.h:54 msgid "Behaviour when clicking on the icon of a running application." msgstr "Określa działanie kliknięcia ikony uruchomionego programu" #: Settings.ui.h:55 msgid "Click action" msgstr "Działanie kliknięcia" #: Settings.ui.h:56 msgid "Minimize" msgstr "Zminimalizowanie okna" #: Settings.ui.h:57 msgid "Behaviour when scrolling on the icon of an application." msgstr "Określa działanie przewijania kółkiem ikony programu" #: Settings.ui.h:58 msgid "Scroll action" msgstr "Działanie przewijania" #: Settings.ui.h:59 msgid "Do nothing" msgstr "Brak" #: Settings.ui.h:60 msgid "Switch workspace" msgstr "Przełączenie obszaru roboczego" #: Settings.ui.h:61 msgid "Behavior" msgstr "Zachowanie" #: Settings.ui.h:62 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Integruje dok z domyślnym stylem GNOME przy użyciu kilku ustawień. " "Opcjonalnie ustawienia te można określić poniżej." #: Settings.ui.h:63 msgid "Use built-in theme" msgstr "Użycie zintegrowanego stylu" #: Settings.ui.h:64 msgid "Save space reducing padding and border radius." msgstr "" "Zmniejsza zajmowaną powierzchnię redukując\n" "odległość od krawędzi i jej zaokrąglenie" #: Settings.ui.h:65 msgid "Shrink the dash" msgstr "Zmniejszenie kokpitu" #: Settings.ui.h:66 msgid "Show a dot for each windows of the application." msgstr "Wyświetla kropkę dla każdego okna programu" #: Settings.ui.h:67 msgid "Show windows counter indicators" msgstr "Wskaźniki ilości okien" #: Settings.ui.h:68 msgid "Set the background color for the dash." msgstr "Ustala wybrany kolor tła kokpitu" #: Settings.ui.h:69 msgid "Customize the dash color" msgstr "Kolor kokpitu" #: Settings.ui.h:70 msgid "Tune the dash background opacity." msgstr "Modyfikuje zaciemnienie tła kokpitu" #: Settings.ui.h:71 msgid "Customize opacity" msgstr "Dostosowanie nieprzejrzystości" #: Settings.ui.h:72 msgid "Default" msgstr "Domyślna" #: Settings.ui.h:73 msgid "Fixed" msgstr "Ustalona" #: Settings.ui.h:74 msgid "Adaptive" msgstr "Adaptacyjna" #: Settings.ui.h:75 msgid "Dynamic" msgstr "Dynamiczna" #: Settings.ui.h:76 msgid "Opacity" msgstr "Nieprzejrzystość" #: Settings.ui.h:77 msgid "Enable Unity7 like glossy backlit items" msgstr "Podświetlenie elementów w stylu Unity7" #: Settings.ui.h:78 msgid "Force straight corner\n" msgstr "Kąty proste narożników\n" #: Settings.ui.h:80 msgid "Appearance" msgstr "Wygląd" #: Settings.ui.h:81 msgid "version: " msgstr "wersja: " #: Settings.ui.h:82 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Przemieszcza kokpit z widoku podglądu do doku" #: Settings.ui.h:83 msgid "Created by" msgstr "Autor:" #: Settings.ui.h:84 msgid "Webpage" msgstr "Strona internetowa" #: Settings.ui.h:85 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Niniejszy program rozpowszechniany jest bez " "jakiejkolwiek gwarancji.\n" "Więcej informacji: Powszechna licencja publiczna GNU, wersja 2 lub późniejsza." #: Settings.ui.h:87 msgid "About" msgstr "O programie" #: Settings.ui.h:88 msgid "Show the dock by mouse hover on the screen edge." msgstr "Wyświetla dok po przemieszczeniu wskaźnika myszy do krawędzi ekranu" #: Settings.ui.h:89 msgid "Autohide" msgstr "Automatyczne ukrywanie" #: Settings.ui.h:90 msgid "Push to show: require pressure to show the dock" msgstr "Wymagany nacisk do wyświetlenia doku" #: Settings.ui.h:91 msgid "Enable in fullscreen mode" msgstr "Wyświetlanie na pełnym ekranie" #: Settings.ui.h:92 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Wyświetla dok jeśli nie zakrywa okien programu" #: Settings.ui.h:93 msgid "Dodge windows" msgstr "Ukrywanie przed oknami" #: Settings.ui.h:94 msgid "All windows" msgstr "Wszystkie okna" #: Settings.ui.h:95 msgid "Only focused application's windows" msgstr "Tylko aktywne okna programu" #: Settings.ui.h:96 msgid "Only maximized windows" msgstr "Tylko zmaksymalizowane okna" #: Settings.ui.h:97 msgid "Animation duration (s)" msgstr "Czas animacji (s)" #: Settings.ui.h:98 msgid "Show timeout (s)" msgstr "Czas wyświetlania (s)" #: Settings.ui.h:99 msgid "Pressure threshold" msgstr "Próg nacisku" dash-to-dock-extensions.gnome.org-v63/po/pt.po000066400000000000000000000240471326047523300214530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Carlos Alberto Junior Spohr Poletto , 2012. # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2012-12-20 20:45+1100\n" "Last-Translator: Carlos Alberto Junior Spohr Poletto com>\n" "Language-Team: Carlos Alberto Junior Spohr Poletto \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Portuguese\n" "X-Poedit-Country: Portugal\n" #: prefs.js:113 msgid "Primary monitor" msgstr "" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "" #: prefs.js:386 #, fuzzy msgid "Show dock and application numbers" msgstr "Mostrar aplicações em execução" #: prefs.js:443 #, fuzzy msgid "Customize middle-click behavior" msgstr "Alterar a opacidade do fundo do dock" #: prefs.js:514 #, fuzzy msgid "Customize running indicators" msgstr "Mostrar aplicações em execução" #: appIcons.js:804 msgid "All Windows" msgstr "" #: Settings.ui.h:1 #, fuzzy msgid "Customize indicator style" msgstr "Alterar a opacidade do fundo do dock" #: Settings.ui.h:2 msgid "Color" msgstr "" #: Settings.ui.h:3 msgid "Border color" msgstr "" #: Settings.ui.h:4 msgid "Border width" msgstr "" #: Settings.ui.h:5 msgid "Number overlay" msgstr "" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "" #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "" #: Settings.ui.h:14 #, fuzzy msgid "Raise window" msgstr "Minimizar" #: Settings.ui.h:15 #, fuzzy msgid "Minimize window" msgstr "Minimizar" #: Settings.ui.h:16 #, fuzzy msgid "Launch new instance" msgstr "Abrir uma nova janela" #: Settings.ui.h:17 #, fuzzy msgid "Cycle through windows" msgstr "Percorrer janelas de aplicativos" #: Settings.ui.h:18 msgid "Quit" msgstr "" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "" #: Settings.ui.h:20 msgid "Middle-Click action" msgstr "" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "" #: Settings.ui.h:22 msgid "Shift+Middle-Click action" msgstr "" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "" #: Settings.ui.h:24 msgid "Show on all monitors." msgstr "" #: Settings.ui.h:25 msgid "Position on screen" msgstr "" #: Settings.ui.h:27 msgid "Bottom" msgstr "" #: Settings.ui.h:28 msgid "Top" msgstr "" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" #: Settings.ui.h:31 #, fuzzy msgid "Intelligent autohide" msgstr "Ocultação inteligente" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "" #: Settings.ui.h:36 msgid "Position and size" msgstr "" #: Settings.ui.h:37 #, fuzzy msgid "Show favorite applications" msgstr "Mostrar ícones das aplicações favoritas" #: Settings.ui.h:38 #, fuzzy msgid "Show running applications" msgstr "Mostrar aplicações em execução" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "" #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "" #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" #: Settings.ui.h:42 #, fuzzy msgid "Show Applications icon" msgstr "Mostrar aplicações em execução" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "" #: Settings.ui.h:44 #, fuzzy msgid "Animate Show Applications." msgstr "Mostrar aplicações em execução" #: Settings.ui.h:45 msgid "Launchers" msgstr "" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "" #: Settings.ui.h:49 msgid "Click action" msgstr "" #: Settings.ui.h:50 msgid "Minimize" msgstr "Minimizar" #: Settings.ui.h:51 #, fuzzy msgid "Minimize or overview" msgstr "Minimizar" #: Settings.ui.h:52 msgid "Behaviour when scrolling on the icon of an application." msgstr "" #: Settings.ui.h:53 msgid "Scroll action" msgstr "" #: Settings.ui.h:54 #, fuzzy msgid "Do nothing" msgstr "Não faça nada (padrão)" #: Settings.ui.h:55 #, fuzzy msgid "Switch workspace" msgstr "Trocar de espaço de trabalho um por vez" #: Settings.ui.h:56 msgid "Behavior" msgstr "" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "" #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "" #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "" #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "" #: Settings.ui.h:65 #, fuzzy msgid "Tune the dash background opacity." msgstr "Alterar a opacidade do fundo do dock" #: Settings.ui.h:66 #, fuzzy msgid "Customize opacity" msgstr "Alterar a opacidade do fundo do dock" #: Settings.ui.h:67 msgid "Opacity" msgstr "Opacidade" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "" #: Settings.ui.h:70 msgid "Appearance" msgstr "" #: Settings.ui.h:71 msgid "version: " msgstr "" #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "" #: Settings.ui.h:73 msgid "Created by" msgstr "" #: Settings.ui.h:74 msgid "Webpage" msgstr "" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" #: Settings.ui.h:77 msgid "About" msgstr "" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "" #: Settings.ui.h:79 msgid "Autohide" msgstr "Masquage automatique" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "" #: Settings.ui.h:83 msgid "Dodge windows" msgstr "" #: Settings.ui.h:84 msgid "All windows" msgstr "" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "" #: Settings.ui.h:86 #, fuzzy msgid "Only maximized windows" msgstr "Minimizar" #: Settings.ui.h:87 #, fuzzy msgid "Animation duration (s)" msgstr "Tempo da animação [ms]" #: Settings.ui.h:88 msgid "0.000" msgstr "" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "" #, fuzzy #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Trocar de espaço de trabalho quando scrolar o mouse sobre o dock" #~ msgid "Main Settings" #~ msgstr "Configurações principais" #~ msgid "Dock is fixed and always visible" #~ msgstr "O Dock está fixo e sempre visível" #~ msgid "Show delay [ms]" #~ msgstr "Mostrar delay [ms]" #~ msgid "Hide delay [ms]" #~ msgstr "Ocultar delay [ms]" #~ msgid "Application based intellihide" #~ msgstr "Ocultação inteligente por aplicação" #~ msgid "Show the dock on following monitor (if attached)" #~ msgstr "Mostrar o dock nos monitores abaixo (se anexados)" #~ msgid "Primary (default)" #~ msgstr "Primário (por padrão)" #~ msgid "1" #~ msgstr "1" #~ msgid "2" #~ msgstr "2" #~ msgid "3" #~ msgstr "3" #~ msgid "4" #~ msgstr "4" #~ msgid "Max height" #~ msgstr "Altura máxima" #~ msgid "Expand (experimental and buggy)" #~ msgstr "Expandir (experimental e bugada)" #~ msgid "Maximum icon size" #~ msgstr "Tamanho máximo dos ícones" #~ msgid "16" #~ msgstr "16" #~ msgid "24" #~ msgstr "24" #~ msgid "32" #~ msgstr "32" #~ msgid "48" #~ msgstr "48" #~ msgid "64" #~ msgstr "64" #~ msgid "Optional features" #~ msgstr "Recursos opcionais" #~ msgid "Only a 1px wide area close to the screen edge is active" #~ msgstr "" #~ "Somente uma área de 1px de largura na borda da tela quando estiver ativa" #~ msgid "All the area of the dock is active" #~ msgstr "Toda a área quando o dock estiver ativo" #~ msgid "Customize actions on mouse click" #~ msgstr "Alterar configurações do click do mouse" #~ msgid "Action on clicking on running app" #~ msgstr "Ações de clique em aplicações em execução" #~ msgid "Minimize window on shift+click (double click for all app windows)" #~ msgstr "" #~ "Minimizar a janela com shift+click (clique duplo para todas as janelas de " #~ "aplicação)" #~ msgid "Only when in autohide" #~ msgstr "Somente quando estiver em auto-esconder" dash-to-dock-extensions.gnome.org-v63/po/pt_BR.po000066400000000000000000000326001326047523300220300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Carlos Alberto Junior Spohr Poletto , 2012. # Fábio Nogueira , 2016. # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2017-04-16 23:10-0300\n" "Last-Translator: Fábio Nogueira \n" "Language-Team: Português do Brasil\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.1\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Monitor primário" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Monitor secundário" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Direita" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Esquerda" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Configuração da ocultação inteligente" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Restaurar o padrão" #: prefs.js:386 msgid "Show dock and application numbers" msgstr "Exibir o dock e os números dos aplicativos" #: prefs.js:443 msgid "Customize middle-click behavior" msgstr "Customizar o comportamento do clique do botão do meio" #: prefs.js:514 msgid "Customize running indicators" msgstr "Customizar os indicadores de execução" #: appIcons.js:804 msgid "All Windows" msgstr "Todas as Janelas" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Customizar o estilo do indicador" #: Settings.ui.h:2 msgid "Color" msgstr "Cor" #: Settings.ui.h:3 msgid "Border color" msgstr "Cor da borda" #: Settings.ui.h:4 msgid "Border width" msgstr "Tamanho da borda" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Sobreposição de número" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Mostrar temporariamente os números dos aplicativos sobre os ícones, " "correspondentes ao atalho." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Exibir o dock se este estiver oculto" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Se utilizar a ocultação, o dock será exibido por um curto período de tempo " "ao acionar o atalho." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Atalho para as opções acima" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Sintaxe: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Ocultar tempo limite [s]" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Quando minimizar, o duplo clique minizará todas as janelas dos aplicativos" #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Ação do Shift+Clique" #: Settings.ui.h:14 msgid "Raise window" msgstr "Aumentar janela" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Minimizar janela" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Iniciar nova instância" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Percorrer através das janelas" #: Settings.ui.h:18 msgid "Quit" msgstr "Sair" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "Comportamento do Clique do botão do meio." #: Settings.ui.h:20 msgid "Middle-Click action" msgstr "Ação do clique do botão do meio" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "Comportamento para Shift + Clique do botão do meio." #: Settings.ui.h:22 msgid "Shift+Middle-Click action" msgstr "Ação do Shift+Clique do botão do meio" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Exibir o dock" #: Settings.ui.h:24 #, fuzzy msgid "Show on all monitors." msgstr "Monitor secundário" #: Settings.ui.h:25 msgid "Position on screen" msgstr "Posição na tela" #: Settings.ui.h:27 msgid "Bottom" msgstr "Embaixo" #: Settings.ui.h:28 msgid "Top" msgstr "Em cima" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Ocultar o dock quando o mesmo sobrepor a janela do aplicativo em uso. " "Definições mais aperfeiçoadas estão disponíveis." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Ocultação inteligente" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Tamanho limite do dock" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Modo do painel: estender até a borda da tela" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Tamanho limite do ícone" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Tamanho do ícone fixo: use o scroll do mouse para revelar outro ícone" #: Settings.ui.h:36 msgid "Position and size" msgstr "Posição e tamanho" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Mostrar aplicativos favoritos" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Mostrar aplicativos em execução" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "Isolar espaços de trabalho." #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "Mostrar pré-visualizações de janelas abertas." #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Se desabilitado, essas configurações estão acessíveis através do gnome-tweak-" "tool ou no site da extensão." #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "Exibir ícone dos Aplicativos" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Mover o botão de aplicativos para o início do dock." #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "Mostrar aplicativos com efeitos." #: Settings.ui.h:45 msgid "Launchers" msgstr "Lançadores" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Habilita tecla Super+(0-9) como atalhos para ativar aplicativos. Também pode " "ser usado junto com Shift e Ctrl." #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "Usar atalhos de teclado para ativar aplicativos" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "Comportamento ao clicar sobre o ícone de um aplicativo em execução." #: Settings.ui.h:49 msgid "Click action" msgstr "Ação do clique" #: Settings.ui.h:50 msgid "Minimize" msgstr "Minimizar" #: Settings.ui.h:51 #, fuzzy msgid "Minimize or overview" msgstr "Minimizar janela" #: Settings.ui.h:52 msgid "Behaviour when scrolling on the icon of an application." msgstr "Comportamento ao rolar sobre o ícone de um aplicativo." #: Settings.ui.h:53 msgid "Scroll action" msgstr "Ação da rolagem" #: Settings.ui.h:54 msgid "Do nothing" msgstr "Não fazer nada" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "Alternar espaço de trabalho" #: Settings.ui.h:56 msgid "Behavior" msgstr "Comportamento" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Algumas personalizações se destinam a integrar o dock com o tema padrão do " "GNOME. Alternativamente, as opções específicas podem ser ativadas abaixo." #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Usar o tema do sistema" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Economizar espaço reduzindo preenchimento e a borda arredondada" #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "Encolher o dash" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Mostrar um ponto para cada janela do aplicativo" #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Mostrar indicadores de contador de janelas" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "Define a cor de fundo para o dash." #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "Customizar a cor do dash" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "Ajustar a opacidade do fundo do dash." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Customizar opacidade" #: Settings.ui.h:67 msgid "Opacity" msgstr "Opacidade" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "Forçar canto reto\n" #: Settings.ui.h:70 msgid "Appearance" msgstr "Aparência" #: Settings.ui.h:71 msgid "version: " msgstr "versão:" #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Mover o dash para fora da visão geral transformando-o em dock" #: Settings.ui.h:73 msgid "Created by" msgstr "Criado por" #: Settings.ui.h:74 msgid "Webpage" msgstr "Página Web" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Este programa é distribuido SEM QUALQUER GARANTIA.\n" "Veja em GNU General Public License, versão 2 ou posterior para maiores " "detalhes." #: Settings.ui.h:77 msgid "About" msgstr "Sobre" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "Mostrar o dock quando o mouse pairar sobre a tela." #: Settings.ui.h:79 msgid "Autohide" msgstr "Ocultação" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "Empurrar para mostrar: requer pressão para mostrar o dock" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "Habilitar modo tela cheia" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Mostrar o dock quando nenhum aplicativo sobrepor o mesmo." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Esconder janela" #: Settings.ui.h:84 msgid "All windows" msgstr "Todas as janelas" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "Apenas janelas de aplicativos em foco" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "Somente janelas maximizadas" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Tempo da animação [s]" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Mostrar tempo limite [s]" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Limite de pressão" #~ msgid "New Window" #~ msgstr "Nova janela" #~ msgid "Launch using Dedicated Graphics Card" #~ msgstr "Inicia utilizando uma placa gráfica dedicada" #~ msgid "Remove from Favorites" #~ msgstr "Remover dos favoritos" #~ msgid "Add to Favorites" #~ msgstr "Adicionar aos favoritos" #~ msgid "Show Details" #~ msgstr "Exibir detalhes" #~ msgid "Windows" #~ msgstr "Janelas" #~ msgid "Settings" #~ msgstr "Configurações" #~ msgid "Dash" #~ msgstr "Dash" #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "Com o tamanho do ícone fixo, somente a borda do dock e o ícone Mostrar " #~ "aplicativos são ativados." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "" #~ "Trocar de área de trabalho quando usar o scroll do mouse sobre o dock" #~ msgid "Only consider windows of the focused application" #~ msgstr "Considere apenas janelas de aplicativos em uso." #~ msgid "Dock is fixed and always visible" #~ msgstr "O Dock está fixo e sempre visível" #~ msgid "Show delay [ms]" #~ msgstr "Mostrar delay [ms]" #~ msgid "Hide delay [ms]" #~ msgstr "Ocultar delay [ms]" #~ msgid "Application based intellihide" #~ msgstr "Ocultação inteligente por aplicação" #~ msgid "Show the dock on following monitor (if attached)" #~ msgstr "Mostrar o dock nos monitores abaixo (se anexados)" #~ msgid "Primary (default)" #~ msgstr "Primário (por padrão)" #~ msgid "1" #~ msgstr "1" #~ msgid "2" #~ msgstr "2" #~ msgid "3" #~ msgstr "3" #~ msgid "4" #~ msgstr "4" #~ msgid "Max height" #~ msgstr "Altura máxima" #~ msgid "Expand (experimental and buggy)" #~ msgstr "Expandir (experimental e bugada)" #~ msgid "Maximum icon size" #~ msgstr "Tamanho máximo dos ícones" #~ msgid "16" #~ msgstr "16" #~ msgid "24" #~ msgstr "24" #~ msgid "32" #~ msgstr "32" #~ msgid "48" #~ msgstr "48" #~ msgid "64" #~ msgstr "64" #~ msgid "Optional features" #~ msgstr "Recursos opcionais" #~ msgid "Only a 1px wide area close to the screen edge is active" #~ msgstr "" #~ "Somente uma área de 1px de largura na borda da tela quando estiver ativa" #~ msgid "All the area of the dock is active" #~ msgstr "Toda a área quando o dock estiver ativo" #~ msgid "Customize actions on mouse click" #~ msgstr "Alterar configurações do click do mouse" #~ msgid "Action on clicking on running app" #~ msgstr "Ações de clique em aplicações em execução" #~ msgid "Minimize window on shift+click (double click for all app windows)" #~ msgstr "" #~ "Minimizar a janela com shift+click (clique duplo para todas as janelas de " #~ "aplicação)" #~ msgid "Only when in autohide" #~ msgstr "Somente quando estiver em auto-esconder" dash-to-dock-extensions.gnome.org-v63/po/ru.po000066400000000000000000000463241326047523300214600ustar00rootroot00000000000000# Russian translation for dash-to-dock GNOME Shell extension # Ivan Komaritsyn , 2015, 2016. # msgid "" msgstr "" "Project-Id-Version: dash-to-dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-02 11:24-0300\n" "PO-Revision-Date: 2018-03-02 11:33-0300\n" "Last-Translator: Ivan Komaritsyn \n" "Language-Team: \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" "X-Generator: Gtranslator 2.91.7\n" #: prefs.js:131 msgid "Primary monitor" msgstr "Основной монитор" #: prefs.js:140 prefs.js:147 msgid "Secondary monitor " msgstr "Дополнительный монитор" #: prefs.js:172 Settings.ui.h:26 msgid "Right" msgstr "Справа" #: prefs.js:173 Settings.ui.h:23 msgid "Left" msgstr "Слева" #: prefs.js:223 msgid "Intelligent autohide customization" msgstr "Настройка автоскрытия" #: prefs.js:230 prefs.js:415 prefs.js:472 msgid "Reset to defaults" msgstr "Сбросить настройки" #: prefs.js:408 msgid "Show dock and application numbers" msgstr "Показывать количество запущенных приложений" #: prefs.js:465 msgid "Customize middle-click behavior" msgstr "Настройка действий для средней кнопки мыши" #: prefs.js:548 msgid "Customize running indicators" msgstr "Настройка индикаторов запуска" #: prefs.js:662 msgid "Cutomize opacity" msgstr "Настроить прозрачность" #: appIcons.js:763 msgid "All Windows" msgstr "Все окна" #. Translators: %s is "Settings", which is automatically translated. You #. can also translate the full message if this fits better your language. #: appIcons.js:1069 #, javascript-format msgid "Dash to Dock %s" msgstr "" #: Settings.ui.h:1 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Если установлено на «Минимизировать», то двойной клик минимизирует все окна " "данного приложения." #: Settings.ui.h:2 msgid "Shift+Click action" msgstr "Действие по Shift+Click" #: Settings.ui.h:3 msgid "Raise window" msgstr "Показать окно" #: Settings.ui.h:4 msgid "Minimize window" msgstr "Минимизировать окно" #: Settings.ui.h:5 msgid "Launch new instance" msgstr "Открыть новое окно" #: Settings.ui.h:6 msgid "Cycle through windows" msgstr "Переключить окно приложения" #: Settings.ui.h:7 msgid "Minimize or overview" msgstr "Минимизация или обзор" #: Settings.ui.h:8 msgid "Show window previews" msgstr "Показать миниатюры окон" #: Settings.ui.h:9 msgid "Quit" msgstr "Выйти" #: Settings.ui.h:10 msgid "Behavior for Middle-Click." msgstr "Действие по нажатию средней кнопки мыши." #: Settings.ui.h:11 msgid "Middle-Click action" msgstr "Действие по Middle-Click" #: Settings.ui.h:12 msgid "Behavior for Shift+Middle-Click." msgstr "Действие по нажатию Shift + средняя кнопка мыши." #: Settings.ui.h:13 msgid "Shift+Middle-Click action" msgstr "Действие по Shift+Middle-Click" #: Settings.ui.h:14 msgid "Enable Unity7 like glossy backlit items" msgstr "Включить подсветку элементов как в Unity7" #: Settings.ui.h:15 msgid "Use dominant color" msgstr "Использовать доминирующий цвет" #: Settings.ui.h:16 msgid "Customize indicator style" msgstr "Настроить стиль индикатора" #: Settings.ui.h:17 msgid "Color" msgstr "Цвет" #: Settings.ui.h:18 msgid "Border color" msgstr "Цвет границы" #: Settings.ui.h:19 msgid "Border width" msgstr "Ширина границы" #: Settings.ui.h:20 msgid "Show the dock on" msgstr "Показывать Док на" #: Settings.ui.h:21 msgid "Show on all monitors." msgstr "Показывать на всех мониторах." #: Settings.ui.h:22 msgid "Position on screen" msgstr "Расположение на экране" #: Settings.ui.h:24 msgid "Bottom" msgstr "Снизу" #: Settings.ui.h:25 msgid "Top" msgstr "Сверху" #: Settings.ui.h:27 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Скрывать Док, если он перекрывается окном активного приложения. Доступны " "дополнительные настройки." #: Settings.ui.h:28 msgid "Intelligent autohide" msgstr "Интеллектуальное скрытие" #: Settings.ui.h:29 msgid "Dock size limit" msgstr "Ограничение размера Дока" #: Settings.ui.h:30 msgid "Panel mode: extend to the screen edge" msgstr "Режим панели: Док растянут по всей стороне экрана" #: Settings.ui.h:31 msgid "Icon size limit" msgstr "Ограничение размера иконок" #: Settings.ui.h:32 msgid "Fixed icon size: scroll to reveal other icons" msgstr "" "Фиксированный размер иконок: используйте прокрутку для доступа к нужному " "приложению" #: Settings.ui.h:33 msgid "Position and size" msgstr "Положение и размер" #: Settings.ui.h:34 msgid "Show favorite applications" msgstr "Показывать избранные приложения" #: Settings.ui.h:35 msgid "Show running applications" msgstr "Показывать запущенные приложения" #: Settings.ui.h:36 msgid "Isolate workspaces." msgstr "Для текущего рабочего стола." #: Settings.ui.h:37 msgid "Isolate monitors." msgstr "Изолировать мониторы." #: Settings.ui.h:38 msgid "Show open windows previews." msgstr "Показывать миниатюры открытых окон." #: Settings.ui.h:39 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Если отключено, то эти настройки доступны в gnome-tweak-tool или через сайт " "дополнений." #: Settings.ui.h:40 msgid "Show Applications icon" msgstr "Показывать иконку «Приложения»" #: Settings.ui.h:41 msgid "Move the applications button at the beginning of the dock." msgstr "Расположить кнопку «Приложения» с другой стороны Дока." #: Settings.ui.h:42 msgid "Animate Show Applications." msgstr "Анимация при показе «Приложений»" #: Settings.ui.h:43 msgid "Launchers" msgstr "Команды" #: Settings.ui.h:44 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Включить сочетания клавиш Super+(0-9) для выбора приложений. Также может " "быть использовано совместно с Shift и Ctrl." #: Settings.ui.h:45 msgid "Use keyboard shortcuts to activate apps" msgstr "Использовать сочетания клавиш для выбора приложений" #: Settings.ui.h:46 msgid "Behaviour when clicking on the icon of a running application." msgstr "Поведение при нажатии на иконку запущенного приложения." #: Settings.ui.h:47 msgid "Click action" msgstr "Действие по нажатию" #: Settings.ui.h:48 msgid "Minimize" msgstr "Минимизировать" #: Settings.ui.h:49 msgid "Behaviour when scrolling on the icon of an application." msgstr "Поведение при прокрутке на иконке приложения." #: Settings.ui.h:50 msgid "Scroll action" msgstr "Действие при прокрутке" #: Settings.ui.h:51 msgid "Do nothing" msgstr "Ничего не делать" #: Settings.ui.h:52 msgid "Switch workspace" msgstr "Переключить рабочий стол" #: Settings.ui.h:53 msgid "Behavior" msgstr "Поведение" #: Settings.ui.h:54 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Сбалансированные настройки для интеграции Дока с темой Gnome по умолчанию. " "Ниже можно установить настройки вручную." #: Settings.ui.h:55 msgid "Use built-in theme" msgstr "Использовать встроенную тему" #: Settings.ui.h:56 msgid "Save space reducing padding and border radius." msgstr "" "Экономия рабочего пространства за счёт уменьшения промежутков и " "использования скругленных углов." #: Settings.ui.h:57 msgid "Shrink the dash" msgstr "Сжать Док" #: Settings.ui.h:58 msgid "Customize windows counter indicators" msgstr "Настроить индикаторы количества окон" #: Settings.ui.h:59 msgid "Default" msgstr "По умолчанию" #: Settings.ui.h:60 msgid "Dots" msgstr "Точки" #: Settings.ui.h:61 msgid "Squares" msgstr "Квадраты" #: Settings.ui.h:62 msgid "Dashes" msgstr "Линии" #: Settings.ui.h:63 msgid "Segmented" msgstr "Сегменты" #: Settings.ui.h:64 msgid "Solid" msgstr "Слитно" #: Settings.ui.h:65 msgid "Ciliora" msgstr "" #: Settings.ui.h:66 msgid "Metro" msgstr "Метро" #: Settings.ui.h:67 msgid "Set the background color for the dash." msgstr "Вобор цвета фона для панели." #: Settings.ui.h:68 msgid "Customize the dash color" msgstr "Настроить цвет Дока" #: Settings.ui.h:69 msgid "Tune the dash background opacity." msgstr "Настройка прозрачности фона Дока." #: Settings.ui.h:70 msgid "Customize opacity" msgstr "Настроить прозрачность" #: Settings.ui.h:71 msgid "Fixed" msgstr "Постоянная" #: Settings.ui.h:72 msgid "Adaptive" msgstr "Адаптивная" #: Settings.ui.h:73 msgid "Dynamic" msgstr "Динамическая" #: Settings.ui.h:74 msgid "Opacity" msgstr "Непрозрачность" #: Settings.ui.h:75 msgid "Force straight corner\n" msgstr "Не скруглять углы\n" #: Settings.ui.h:77 msgid "Appearance" msgstr "Внешний вид" #: Settings.ui.h:78 msgid "version: " msgstr "версия: " #: Settings.ui.h:79 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Показывает панель из режима «Обзор» в виде дока" #: Settings.ui.h:80 msgid "Created by" msgstr "Автор" #: Settings.ui.h:81 msgid "Webpage" msgstr "Домашняя страница" #: Settings.ui.h:82 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Эта программа распространяется БЕЗ КАКИХ ЛИБО " "ГАРАНТИЙ.\n" "Смотри GNU General Public License, версия 2 или позднее для информации." #: Settings.ui.h:84 msgid "About" msgstr "О дополнении" #: Settings.ui.h:85 msgid "Customize minimum and maximum opacity values" msgstr "Настройка минимального и максимального значения прозрачности" #: Settings.ui.h:86 msgid "Minimum opacity" msgstr "Минимальная прозрачность" #: Settings.ui.h:87 msgid "Maximum opacity" msgstr "Максимальная прозрачность" #: Settings.ui.h:88 msgid "Number overlay" msgstr "Отображение номера" #: Settings.ui.h:89 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Временно показывать номера приложений рядом с иконками, при нажатии " "сочетания клавиш." #: Settings.ui.h:90 msgid "Show the dock if it is hidden" msgstr "Показать Док, если он скрыт" #: Settings.ui.h:91 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Если используется автоматическое скрытие, то Док кратковреммено появится при " "обработке сочетания клавиш." #: Settings.ui.h:92 msgid "Shortcut for the options above" msgstr "Сочетания клавиш для указанных параметров" #: Settings.ui.h:93 msgid "Syntax: , , , " msgstr "Синтаксис: , , , " #: Settings.ui.h:94 msgid "Hide timeout (s)" msgstr "Задержка скрытия (сек.)" #: Settings.ui.h:95 msgid "Show the dock by mouse hover on the screen edge." msgstr "Показывать Док при подведении мыши к стороне экрана." #: Settings.ui.h:96 msgid "Autohide" msgstr "Автоматическое скрытие" #: Settings.ui.h:97 msgid "Push to show: require pressure to show the dock" msgstr "Давление для появления: требуется давление для открытия Дока" #: Settings.ui.h:98 msgid "Enable in fullscreen mode" msgstr "Включить для полноэкранного режима" #: Settings.ui.h:99 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Скрывать Док, когда он перекрыт окнами приложений" #: Settings.ui.h:100 msgid "Dodge windows" msgstr "Перекрытие окнами" #: Settings.ui.h:101 msgid "All windows" msgstr "Все окна" #: Settings.ui.h:102 msgid "Only focused application's windows" msgstr "Только активное окно приложения" #: Settings.ui.h:103 msgid "Only maximized windows" msgstr "Только развёрнутые окна" #: Settings.ui.h:104 msgid "Animation duration (s)" msgstr "Время анимации (сек.)" #: Settings.ui.h:105 msgid "Show timeout (s)" msgstr "Задержка открытия (сек.)" #: Settings.ui.h:106 msgid "Pressure threshold" msgstr "Порог давления" #~ msgid "Show a dot for each windows of the application." #~ msgstr "Отображает точку для каждого окна приложения." #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "При фиксированном размере иконок приложений активна только область иконки " #~ "«Приложения» и край дока." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Переключать рабочие столы при прокрутке на Доке" #~ msgid "Only consider windows of the focused application" #~ msgstr "Применить только к активным окнам приложений" #~ msgid "Main Settings" #~ msgstr "Основные настройки" #~ msgid "Dock Position" #~ msgstr "Расположение Дока" #~ msgid "Dock is fixed and always visible" #~ msgstr "Док зафиксирован и всегда виден" #~ msgid "Show delay [ms]" #~ msgstr "Задержка перед появлением [мс]" #~ msgid "Hide delay [ms]" #~ msgstr "Задержка перед скрытием [мс]" #~ msgid "Application based intellihide" #~ msgstr "Интеллектуальное скрытие действует только для активных окон" #~ msgid "Show the dock on following monitor (if attached)" #~ msgstr "Показывать Док на дополнительном мониторе (если подключен)" #~ msgid "Primary (default)" #~ msgstr "Главный (по умолчанию)" #~ msgid "1" #~ msgstr "1" #~ msgid "2" #~ msgstr "2" #~ msgid "3" #~ msgstr "3" #~ msgid "4" #~ msgstr "4" #~ msgid "Max height" #~ msgstr "Максимальная высота" #~ msgid "Expand (experimental and buggy)" #~ msgstr "Расширяемый (экспериментально и неустойчиво)" #~ msgid "Maximum icon size" #~ msgstr "Максимальный размер иконки" #~ msgid "16" #~ msgstr "16" #~ msgid "24" #~ msgstr "24" #~ msgid "32" #~ msgstr "32" #~ msgid "48" #~ msgstr "48" #~ msgid "64" #~ msgstr "64" #~ msgid "Optional features" #~ msgstr "Дополнительные функции" #~ msgid "Deadtime between each workspace switching [ms]" #~ msgstr "Задержка между каждым переключением [мс]" #~ msgid "Only a 1px wide area close to the screen edge is active" #~ msgstr "Активная область - 1 пиксель от края экрана" #~ msgid "All the area of the dock is active" #~ msgstr "Активен весь Док" #~ msgid "Customize actions on mouse click" #~ msgstr "Настроить действия по нажатию мыши" #~ msgid "Action on clicking on running app" #~ msgstr "Действие по нажатию на иконку запущенного приложения" #~ msgid "Minimize window on shift+click (double click for all app windows)" #~ msgstr "" #~ "Минимизировать окно при shift+click (двойное нажатие скрывает все окна " #~ "приложений)" #~ msgid "Make message tray insensitive to mouse events" #~ msgstr "Сделать область сообщений нечувствительной к мыши" #~ msgid "Appearence and Themes" #~ msgstr "Внешний вид и Темы" #~ msgid "" #~ "A customized theme is built in the extension. This is meant to work with " #~ "the default Adwaita theme: the dash is shrunk to save space, its " #~ "background transparency reduced, and custom indicators for the number of " #~ "windows of each application are added." #~ msgstr "" #~ "Тема встроена в расширение. Она оптимизирована для темы Adwaita по " #~ "умолчанию: Док уменьшен, чтобы сохранить пространство; прозрачность фона " #~ "снижена; включены индикаторы количества окон для каждого приложения." #~ msgid "" #~ "Alternatively, for a better integration with custom themes, each " #~ "customization can be applied indipendently" #~ msgstr "" #~ "Для большей интеграции с пользовательской темой, каждый параметр можно " #~ "настроить независимо" #~ msgid "Shrink the dash size by reducing padding" #~ msgstr "Уменьшить Док за счёт промежутков" dash-to-dock-extensions.gnome.org-v63/po/sk.po000066400000000000000000000245601326047523300214450ustar00rootroot00000000000000# Slovak translation of dash-to-dock. # Copyright (C) 2016 Dušan Kazik # This file is distributed under the same license as the PACKAGE package. # Dušan Kazik , 2015, 2016. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2016-07-15 12:48+0200\n" "Last-Translator: Dušan Kazik \n" "Language-Team: \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.7.1\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Hlavnom monitore" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Vedľajšom monitore" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Vpravo" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Vľavo" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Prispôsobenie inteligentného automatického skrývania" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Obnoviť pôvodné" #: prefs.js:386 #, fuzzy msgid "Show dock and application numbers" msgstr "Zobraziť spustené aplikácie" #: prefs.js:443 #, fuzzy msgid "Customize middle-click behavior" msgstr "Prispôsobenie štýlu indikátorov" #: prefs.js:514 msgid "Customize running indicators" msgstr "Prispôsobenie " #: appIcons.js:804 msgid "All Windows" msgstr "Všetky okná" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Prispôsobenie štýlu indikátorov" #: Settings.ui.h:2 msgid "Color" msgstr "Farba" #: Settings.ui.h:3 msgid "Border color" msgstr "Farba okraja" #: Settings.ui.h:4 msgid "Border width" msgstr "Šírka okraja" #: Settings.ui.h:5 msgid "Number overlay" msgstr "" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" #: Settings.ui.h:7 #, fuzzy msgid "Show the dock if it is hidden" msgstr "Zobraziť dok na" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "" #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Časový limit na skrytie (s)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Keď je nastavené na minimalizovanie, dvojklik minimalizuje všetky okná " "aplikácie." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Akcia Shift+Kliknutie" #: Settings.ui.h:14 #, fuzzy msgid "Raise window" msgstr "Minimalizovať okno" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Minimalizovať okno" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Spustiť novú inštanciu" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Striedať okná" #: Settings.ui.h:18 msgid "Quit" msgstr "" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "" #: Settings.ui.h:20 #, fuzzy msgid "Middle-Click action" msgstr "Akcia po kliknutí" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "" #: Settings.ui.h:22 #, fuzzy msgid "Shift+Middle-Click action" msgstr "Akcia Shift+Kliknutie" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Zobraziť dok na" #: Settings.ui.h:24 #, fuzzy msgid "Show on all monitors." msgstr "Vedľajšom monitore" #: Settings.ui.h:25 msgid "Position on screen" msgstr "Pozícia na obrazovke" #: Settings.ui.h:27 msgid "Bottom" msgstr "Na spodku" #: Settings.ui.h:28 msgid "Top" msgstr "Na vrchu" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Skryť dok, keď zasahuje do okna aktuálnej aplikácie. Sú dostupné " "podrobnejšie nastavenia." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Inteligentné automatické skrývanie" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Limit veľkosti doku" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Režim panelu: roztiahnutie k hranám obrazovky" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Limit veľkosti ikôn" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Pevná veľkosť ikôn: rolovaním odhalíte ostatné ikony" #: Settings.ui.h:36 msgid "Position and size" msgstr "Pozícia a veľkosť" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Zobraziť obľúbené aplikácie" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Zobraziť spustené aplikácie" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "Oddelené pracovné priestory." #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "" #: Settings.ui.h:41 #, fuzzy msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Ak je voľba zakázaná, nastavenia sú dostupné z nástroja na vyladenie " "nastavení prostredia Gnome alebo webovej stránky rozšírenia." #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "Zobraziť ikonu Aplikácie" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Premiestni tlačidlo aplikácií na začiatok doku." #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "Animovať položku Zobraziť aplikácie." #: Settings.ui.h:45 msgid "Launchers" msgstr "" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "Správanie pri kliknutí na ikonu spustenej aplikácie." #: Settings.ui.h:49 msgid "Click action" msgstr "Akcia po kliknutí" #: Settings.ui.h:50 msgid "Minimize" msgstr "Minimalizovať" #: Settings.ui.h:51 #, fuzzy msgid "Minimize or overview" msgstr "Minimalizovať okno" #: Settings.ui.h:52 #, fuzzy msgid "Behaviour when scrolling on the icon of an application." msgstr "Správanie pri kliknutí na ikonu spustenej aplikácie." #: Settings.ui.h:53 #, fuzzy msgid "Scroll action" msgstr "Akcia po kliknutí" #: Settings.ui.h:54 msgid "Do nothing" msgstr "Nevykonať nič" #: Settings.ui.h:55 #, fuzzy msgid "Switch workspace" msgstr "Oddelené pracovné priestory." #: Settings.ui.h:56 msgid "Behavior" msgstr "Správanie" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Niekoľko úprav na integrovanie doku s predvolenou témou prostredia GNOME. " "Alternatívne môžu byť povolené špecifické voľby nižšie." #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Použiť zabudovanú tému" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Ušetrí miesto zmenšením rádiusu odsadenia a okrajov." #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "Zmenšiť panel" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Zobrazí bodku za každé okno aplikácie." #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Zobraziť indikátory počítadiel okien" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "Nastaví farbu pozadia panelu." #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "Prispôsobenie farby panelu" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "Vyladí krytie pozadia panelu." #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Prispôsobenie krytia" #: Settings.ui.h:67 msgid "Opacity" msgstr "Krytie" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "" #: Settings.ui.h:70 msgid "Appearance" msgstr "Vzhľad" #: Settings.ui.h:71 msgid "version: " msgstr "Verzia: c" #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Presunie panel z prehľadu transformovaním do doku" #: Settings.ui.h:73 msgid "Created by" msgstr "Vytvoril" #: Settings.ui.h:74 msgid "Webpage" msgstr "Webová stránka" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Tento program je ABSOLÚTNE BEZ ZÁRUKY.\n" "Pre viac podrobností si pozrite Licenciu GNU General Public, verzie 2 alebo novšiu." #: Settings.ui.h:77 msgid "About" msgstr "O rozšírení" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "Zobrazí dok prejdením myši na hranu obrazovky." #: Settings.ui.h:79 msgid "Autohide" msgstr "Automatické skrytie" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "Zobraziť stlačením: vyžaduje tlak na zobrazenie doku" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "Povoliť v režime na celú obrazovku" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Zobrazí dok, keď nebude zasahovať do okien aplikácií." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Vyhýbať sa oknám" #: Settings.ui.h:84 msgid "All windows" msgstr "Všetky okná" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "Iba zamerané okná aplikácií" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "Iba maximalizované okná" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Trvanie animácie (s)" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Zobraziť časový limit (s)" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Medza tlaku" #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "S pevnou veľkosťou ikon je aktívna iba hrana doku a ikona Zobraziť " #~ "aplikácie." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Prepínať pracovné priestory rolovaním na doku" dash-to-dock-extensions.gnome.org-v63/po/sr.po000066400000000000000000000332751326047523300214570ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-09-16 13:45+0200\n" "PO-Revision-Date: 2017-09-20 18:59+0200\n" "Last-Translator: Слободан Терзић \n" "Language-Team: \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.3\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: prefs.js:113 msgid "Primary monitor" msgstr "примарном монитору" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "секундарном монитору" #: prefs.js:154 Settings.ui.h:31 msgid "Right" msgstr "десно" #: prefs.js:155 Settings.ui.h:28 msgid "Left" msgstr "лево" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Поставке интелигентног аутоматског сакривања" #: prefs.js:212 prefs.js:397 prefs.js:454 msgid "Reset to defaults" msgstr "Поврати основно" #: prefs.js:390 msgid "Show dock and application numbers" msgstr "Прикажи док и бројеве програма" #: prefs.js:447 msgid "Customize middle-click behavior" msgstr "Прилагоћавање понашања средњег клика" #: prefs.js:518 msgid "Customize running indicators" msgstr "Прилагођавање индикатора покренутих" #: appIcons.js:1144 msgid "All Windows" msgstr "Сви прозори" #. Translators: %s is "Settings", which is automatically translated. You #. can also translate the full message if this fits better your language. #: appIcons.js:1450 #, javascript-format msgid "Dash to Dock %s" msgstr "%s плоче/панела" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Прилагоћавање стила индикатора" #: Settings.ui.h:2 msgid "Color" msgstr "Боја" #: Settings.ui.h:3 msgid "Border color" msgstr "Боја ивице" #: Settings.ui.h:4 msgid "Border width" msgstr "Ширина ивице" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Бројне налепнице" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" "Привремено прикажи бројеве програма изнад иконица, према припадајућој " "пречици." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Прикажи док уколико је сакривен" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Уколико се користи аутоматско сакривање, док ће се приказати на тренутак при " "окидању пречице." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Пречица за горе наведене опције" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Синтакса: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Застој скривања" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Кад је постављено на минимизовање, дупли клик минимизује све прозоре " "програма." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Радња шифт+клика" #: Settings.ui.h:14 msgid "Raise window" msgstr "издигни прозор" #: Settings.ui.h:15 msgid "Minimize window" msgstr "минимизуј прозор" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "покрени нови примерак" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "кружење кроз прозоре" #: Settings.ui.h:18 msgid "Minimize or overview" msgstr "минимиуј или преглед" #: Settings.ui.h:19 msgid "Show window previews" msgstr "прикажи сличице прозора" #: Settings.ui.h:20 msgid "Quit" msgstr "напусти" #: Settings.ui.h:21 msgid "Behavior for Middle-Click." msgstr "Понашање средњег клика." #: Settings.ui.h:22 msgid "Middle-Click action" msgstr "Радња средњег клика" #: Settings.ui.h:23 msgid "Behavior for Shift+Middle-Click." msgstr "Пoнашање шифт+средњег клика." #: Settings.ui.h:24 msgid "Shift+Middle-Click action" msgstr "Радња шифт+средњегклика" #: Settings.ui.h:25 msgid "Show the dock on" msgstr "Прикажи док на" #: Settings.ui.h:26 msgid "Show on all monitors." msgstr "Прикажи на свим мониторима." #: Settings.ui.h:27 msgid "Position on screen" msgstr "Позиција на екрану" #: Settings.ui.h:29 msgid "Bottom" msgstr "дно" #: Settings.ui.h:30 msgid "Top" msgstr "врх" #: Settings.ui.h:32 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Сакриј док када је на путу прозора тренутног програма. Доступне су финије " "поставке." #: Settings.ui.h:33 msgid "Intelligent autohide" msgstr "Интелигентно аутоматско сакривање" #: Settings.ui.h:34 msgid "Dock size limit" msgstr "Ограничење величине дока" #: Settings.ui.h:35 msgid "Panel mode: extend to the screen edge" msgstr "Режим панела: проширен до ивица екрана" #: Settings.ui.h:36 msgid "Icon size limit" msgstr "Ограничење величине иконица" #: Settings.ui.h:37 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Устаљена величина иконица: клизајте за друге иконе" #: Settings.ui.h:38 msgid "Position and size" msgstr "Позиција и величина" #: Settings.ui.h:39 msgid "Show favorite applications" msgstr "Приказ омиљених програма" #: Settings.ui.h:40 msgid "Show running applications" msgstr "Приказ покренутих програма" #: Settings.ui.h:41 msgid "Isolate workspaces." msgstr "Изолуј радне просторе." #: Settings.ui.h:42 msgid "Isolate monitors." msgstr "Изолуј мониторе." #: Settings.ui.h:43 msgid "Show open windows previews." msgstr "Прикажи сличице отворених прозора." #: Settings.ui.h:44 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Уколико је онемогућено, ове поставке су доступне кроз алатку за лицкање или " "веб сајт проширења." #: Settings.ui.h:45 msgid "Show Applications icon" msgstr "Приказ иконице Прикажи програме" #: Settings.ui.h:46 msgid "Move the applications button at the beginning of the dock." msgstr "Помери дугме програма на почетак дока." #: Settings.ui.h:47 msgid "Animate Show Applications." msgstr "Анимирај приказ програма." #: Settings.ui.h:48 msgid "Launchers" msgstr "Покретачи" #: Settings.ui.h:49 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Укључује Супер+(0-9) као пречице за активацију програма. Такође је могуће " "користити уз shift и ctrl." #: Settings.ui.h:50 msgid "Use keyboard shortcuts to activate apps" msgstr "Активирај програме пречицама тастатуре" #: Settings.ui.h:51 msgid "Behaviour when clicking on the icon of a running application." msgstr "Понашање при клику на покренути програм." #: Settings.ui.h:52 msgid "Click action" msgstr "Радња клика" #: Settings.ui.h:53 msgid "Minimize" msgstr "минимизуј" #: Settings.ui.h:54 msgid "Behaviour when scrolling on the icon of an application." msgstr "Понашање при клизању на иконицу покренутог програма." #: Settings.ui.h:55 msgid "Scroll action" msgstr "Радња клизања на иконицу" #: Settings.ui.h:56 msgid "Do nothing" msgstr "ништа" #: Settings.ui.h:57 msgid "Switch workspace" msgstr "пребаци радни простор" #: Settings.ui.h:58 msgid "Behavior" msgstr "Понашање" #: Settings.ui.h:59 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Неколико поставки намењених уграђивању дока у основну тему Гнома. " "Алтернативно, посебне поставке се могу уредити испод." #: Settings.ui.h:60 msgid "Use built-in theme" msgstr "Користи уграђену тему" #: Settings.ui.h:61 msgid "Save space reducing padding and border radius." msgstr "Чува простор сужавањем попуне и опсега ивица." #: Settings.ui.h:62 msgid "Shrink the dash" msgstr "Скупи плочу" #: Settings.ui.h:63 msgid "Show a dot for each windows of the application." msgstr "Приказује тачку за сваки прозор програма." #: Settings.ui.h:64 msgid "Show windows counter indicators" msgstr "Приказ индикаторa бројача прозора." #: Settings.ui.h:65 msgid "Set the background color for the dash." msgstr "Постави позадинску боју плоче." #: Settings.ui.h:66 msgid "Customize the dash color" msgstr "Прилагоди боју плоче" #: Settings.ui.h:67 msgid "Tune the dash background opacity." msgstr "Прилагоди прозирност позадине плоче." #: Settings.ui.h:68 msgid "Customize opacity" msgstr "Прилагоћавање прозирности" #: Settings.ui.h:69 msgid "Opacity" msgstr "Прозирност" #: Settings.ui.h:70 msgid "Enable Unity7 like glossy backlit items" msgstr "Укључи позадинске ефекте попут Unity7" #: Settings.ui.h:71 msgid "Force straight corner\n" msgstr "Наметни равне углове\n" #: Settings.ui.h:73 msgid "Appearance" msgstr "Изглед" #: Settings.ui.h:74 msgid "version: " msgstr "верзија: " #: Settings.ui.h:75 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Помера плочу из глобалног приказа, претварајући је у док" #: Settings.ui.h:76 msgid "Created by" msgstr "Направи" #: Settings.ui.h:77 msgid "Webpage" msgstr "Веб страница" #: Settings.ui.h:78 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Овај програм се доставља БЕЗ ИКАКВИХ ГАРАНЦИЈА.\n" "Погледајте ГНУову Општу Јавну лиценцу, верзија 2 или каснија, за детаље." #: Settings.ui.h:80 msgid "About" msgstr "О програму" #: Settings.ui.h:81 msgid "Show the dock by mouse hover on the screen edge." msgstr "Прикажи док прелазом миша пеко ивице екрана." #: Settings.ui.h:82 msgid "Autohide" msgstr "Аутоматско сакривање" #: Settings.ui.h:83 msgid "Push to show: require pressure to show the dock" msgstr "Приказ притиском: захтева притисак за приказ дока" #: Settings.ui.h:84 msgid "Enable in fullscreen mode" msgstr "Омогући у целоекранском режиму" #: Settings.ui.h:85 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Приказује док када није на путу прозорима програма." #: Settings.ui.h:86 msgid "Dodge windows" msgstr "Избегавање розора" #: Settings.ui.h:87 msgid "All windows" msgstr "Сви прозори" #: Settings.ui.h:88 msgid "Only focused application's windows" msgstr "Само прозор фокусираног програма" #: Settings.ui.h:89 msgid "Only maximized windows" msgstr "Само максимизовани прозори" #: Settings.ui.h:90 msgid "Animation duration (s)" msgstr "Трајање(а) анимације" #: Settings.ui.h:91 msgid "Show timeout (s)" msgstr "Застој приказивања" #: Settings.ui.h:92 msgid "Pressure threshold" msgstr "Праг притиска" #~ msgid "0.000" #~ msgstr "0,000" #, fuzzy #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "Ако се иконе преклапају на доку, приказује се само икона Прикажи " #~ "програме." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Промена радног простора клизањем по доку" #~ msgid "Only consider windows of the focused application" #~ msgstr "Разматрај само прозор фокусираног програма" dash-to-dock-extensions.gnome.org-v63/po/sr@latin.po000066400000000000000000000263741326047523300226110ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-09-16 13:45+0200\n" "PO-Revision-Date: 2017-09-20 18:56+0200\n" "Last-Translator: Slobodan Terzić \n" "Language-Team: \n" "Language: sr@latin\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.3\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: prefs.js:113 msgid "Primary monitor" msgstr "primarnom monitoru" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "sekundarnom monitoru" #: prefs.js:154 Settings.ui.h:31 msgid "Right" msgstr "desno" #: prefs.js:155 Settings.ui.h:28 msgid "Left" msgstr "levo" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Postavke inteligentnog automatskog sakrivanja" #: prefs.js:212 prefs.js:397 prefs.js:454 msgid "Reset to defaults" msgstr "Povrati osnovno" #: prefs.js:390 msgid "Show dock and application numbers" msgstr "Prikaži dok i brojeve programa" #: prefs.js:447 msgid "Customize middle-click behavior" msgstr "Prilagoćavanje ponašanja srednjeg klika" #: prefs.js:518 msgid "Customize running indicators" msgstr "Prilagođavanje indikatora pokrenutih" #: appIcons.js:1144 msgid "All Windows" msgstr "Svi prozori" #. Translators: %s is "Settings", which is automatically translated. You #. can also translate the full message if this fits better your language. #: appIcons.js:1450 #, javascript-format msgid "Dash to Dock %s" msgstr "%s ploče/panela" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Prilagoćavanje stila indikatora" #: Settings.ui.h:2 msgid "Color" msgstr "Boja" #: Settings.ui.h:3 msgid "Border color" msgstr "Boja ivice" #: Settings.ui.h:4 msgid "Border width" msgstr "Širina ivice" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Brojne nalepnice" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to the " "shortcut." msgstr "" "Privremeno prikaži brojeve programa iznad ikonica, prema pripadajućoj prečici." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Prikaži dok ukoliko je sakriven" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Ukoliko se koristi automatsko sakrivanje, dok će se prikazati na trenutak pri " "okidanju prečice." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Prečica za gore navedene opcije" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Sintaksa: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Zastoj skrivanja" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Kad je postavljeno na minimizovanje, dupli klik minimizuje sve prozore " "programa." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Radnja šift+klika" #: Settings.ui.h:14 msgid "Raise window" msgstr "izdigni prozor" #: Settings.ui.h:15 msgid "Minimize window" msgstr "minimizuj prozor" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "pokreni novi primerak" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "kruženje kroz prozore" #: Settings.ui.h:18 msgid "Minimize or overview" msgstr "minimiuj ili pregled" #: Settings.ui.h:19 msgid "Show window previews" msgstr "prikaži sličice prozora" #: Settings.ui.h:20 msgid "Quit" msgstr "napusti" #: Settings.ui.h:21 msgid "Behavior for Middle-Click." msgstr "Ponašanje srednjeg klika." #: Settings.ui.h:22 msgid "Middle-Click action" msgstr "Radnja srednjeg klika" #: Settings.ui.h:23 msgid "Behavior for Shift+Middle-Click." msgstr "Ponašanje šift+srednjeg klika." #: Settings.ui.h:24 msgid "Shift+Middle-Click action" msgstr "Radnja šift+srednjegklika" #: Settings.ui.h:25 msgid "Show the dock on" msgstr "Prikaži dok na" #: Settings.ui.h:26 msgid "Show on all monitors." msgstr "Prikaži na svim monitorima." #: Settings.ui.h:27 msgid "Position on screen" msgstr "Pozicija na ekranu" #: Settings.ui.h:29 msgid "Bottom" msgstr "dno" #: Settings.ui.h:30 msgid "Top" msgstr "vrh" #: Settings.ui.h:32 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Sakrij dok kada je na putu prozora trenutnog programa. Dostupne su finije " "postavke." #: Settings.ui.h:33 msgid "Intelligent autohide" msgstr "Inteligentno automatsko sakrivanje" #: Settings.ui.h:34 msgid "Dock size limit" msgstr "Ograničenje veličine doka" #: Settings.ui.h:35 msgid "Panel mode: extend to the screen edge" msgstr "Režim panela: proširen do ivica ekrana" #: Settings.ui.h:36 msgid "Icon size limit" msgstr "Ograničenje veličine ikonica" #: Settings.ui.h:37 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Ustaljena veličina ikonica: klizajte za druge ikone" #: Settings.ui.h:38 msgid "Position and size" msgstr "Pozicija i veličina" #: Settings.ui.h:39 msgid "Show favorite applications" msgstr "Prikaz omiljenih programa" #: Settings.ui.h:40 msgid "Show running applications" msgstr "Prikaz pokrenutih programa" #: Settings.ui.h:41 msgid "Isolate workspaces." msgstr "Izoluj radne prostore." #: Settings.ui.h:42 msgid "Isolate monitors." msgstr "Izoluj monitore." #: Settings.ui.h:43 msgid "Show open windows previews." msgstr "Prikaži sličice otvorenih prozora." #: Settings.ui.h:44 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Ukoliko je onemogućeno, ove postavke su dostupne kroz alatku za lickanje ili " "veb sajt proširenja." #: Settings.ui.h:45 msgid "Show Applications icon" msgstr "Prikaz ikonice Prikaži programe" #: Settings.ui.h:46 msgid "Move the applications button at the beginning of the dock." msgstr "Pomeri dugme programa na početak doka." #: Settings.ui.h:47 msgid "Animate Show Applications." msgstr "Animiraj prikaz programa." #: Settings.ui.h:48 msgid "Launchers" msgstr "Pokretači" #: Settings.ui.h:49 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Uključuje Super+(0-9) kao prečice za aktivaciju programa. Takođe je moguće " "koristiti uz shift i ctrl." #: Settings.ui.h:50 msgid "Use keyboard shortcuts to activate apps" msgstr "Aktiviraj programe prečicama tastature" #: Settings.ui.h:51 msgid "Behaviour when clicking on the icon of a running application." msgstr "Ponašanje pri kliku na pokrenuti program." #: Settings.ui.h:52 msgid "Click action" msgstr "Radnja klika" #: Settings.ui.h:53 msgid "Minimize" msgstr "minimizuj" #: Settings.ui.h:54 msgid "Behaviour when scrolling on the icon of an application." msgstr "Ponašanje pri klizanju na ikonicu pokrenutog programa." #: Settings.ui.h:55 msgid "Scroll action" msgstr "Radnja klizanja na ikonicu" #: Settings.ui.h:56 msgid "Do nothing" msgstr "ništa" #: Settings.ui.h:57 msgid "Switch workspace" msgstr "prebaci radni prostor" #: Settings.ui.h:58 msgid "Behavior" msgstr "Ponašanje" #: Settings.ui.h:59 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Nekoliko postavki namenjenih ugrađivanju doka u osnovnu temu Gnoma. " "Alternativno, posebne postavke se mogu urediti ispod." #: Settings.ui.h:60 msgid "Use built-in theme" msgstr "Koristi ugrađenu temu" #: Settings.ui.h:61 msgid "Save space reducing padding and border radius." msgstr "Čuva prostor sužavanjem popune i opsega ivica." #: Settings.ui.h:62 msgid "Shrink the dash" msgstr "Skupi ploču" #: Settings.ui.h:63 msgid "Show a dot for each windows of the application." msgstr "Prikazuje tačku za svaki prozor programa." #: Settings.ui.h:64 msgid "Show windows counter indicators" msgstr "Prikaz indikatora brojača prozora." #: Settings.ui.h:65 msgid "Set the background color for the dash." msgstr "Postavi pozadinsku boju ploče." #: Settings.ui.h:66 msgid "Customize the dash color" msgstr "Prilagodi boju ploče" #: Settings.ui.h:67 msgid "Tune the dash background opacity." msgstr "Prilagodi prozirnost pozadine ploče." #: Settings.ui.h:68 msgid "Customize opacity" msgstr "Prilagoćavanje prozirnosti" #: Settings.ui.h:69 msgid "Opacity" msgstr "Prozirnost" #: Settings.ui.h:70 msgid "Enable Unity7 like glossy backlit items" msgstr "Uključi pozadinske efekte poput Unity7" #: Settings.ui.h:71 msgid "Force straight corner\n" msgstr "Nametni ravne uglove\n" #: Settings.ui.h:73 msgid "Appearance" msgstr "Izgled" #: Settings.ui.h:74 msgid "version: " msgstr "verzija: " #: Settings.ui.h:75 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Pomera ploču iz globalnog prikaza, pretvarajući je u dok" #: Settings.ui.h:76 msgid "Created by" msgstr "Napravi" #: Settings.ui.h:77 msgid "Webpage" msgstr "Veb stranica" #: Settings.ui.h:78 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Ovaj program se dostavlja BEZ IKAKVIH GARANCIJA.\n" "Pogledajte GNUovu Opštu Javnu licencu, verzija 2 ili kasnija, za detalje." #: Settings.ui.h:80 msgid "About" msgstr "O programu" #: Settings.ui.h:81 msgid "Show the dock by mouse hover on the screen edge." msgstr "Prikaži dok prelazom miša peko ivice ekrana." #: Settings.ui.h:82 msgid "Autohide" msgstr "Automatsko sakrivanje" #: Settings.ui.h:83 msgid "Push to show: require pressure to show the dock" msgstr "Prikaz pritiskom: zahteva pritisak za prikaz doka" #: Settings.ui.h:84 msgid "Enable in fullscreen mode" msgstr "Omogući u celoekranskom režimu" #: Settings.ui.h:85 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Prikazuje dok kada nije na putu prozorima programa." #: Settings.ui.h:86 msgid "Dodge windows" msgstr "Izbegavanje rozora" #: Settings.ui.h:87 msgid "All windows" msgstr "Svi prozori" #: Settings.ui.h:88 msgid "Only focused application's windows" msgstr "Samo prozor fokusiranog programa" #: Settings.ui.h:89 msgid "Only maximized windows" msgstr "Samo maksimizovani prozori" #: Settings.ui.h:90 msgid "Animation duration (s)" msgstr "Trajanje(a) animacije" #: Settings.ui.h:91 msgid "Show timeout (s)" msgstr "Zastoj prikazivanja" #: Settings.ui.h:92 msgid "Pressure threshold" msgstr "Prag pritiska" #~ msgid "0.000" #~ msgstr "0,000" #, fuzzy #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "Ako se ikone preklapaju na doku, prikazuje se samo ikona Prikaži " #~ "programe." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Promena radnog prostora klizanjem po doku" #~ msgid "Only consider windows of the focused application" #~ msgstr "Razmatraj samo prozor fokusiranog programa" dash-to-dock-extensions.gnome.org-v63/po/sv.po000066400000000000000000000304511326047523300214540ustar00rootroot00000000000000# Swedish translation for dash-to-dock. # Copyright © 2016 dash-to-dock's COPYRIGHT HOLDER # This file is distributed under the same license as the dash-to-dock package. # Anders Jonsson , 2016. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-09 11:45+0100\n" "PO-Revision-Date: 2018-03-09 14:14+0100\n" "Last-Translator: Morgan Antonsson \n" "Language-Team: \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.8\n" #: prefs.js:131 msgid "Primary monitor" msgstr "Primär skärm" #: prefs.js:140 prefs.js:147 msgid "Secondary monitor " msgstr "Sekundär skärm " #: prefs.js:172 Settings.ui.h:26 msgid "Right" msgstr "Höger" #: prefs.js:173 Settings.ui.h:23 msgid "Left" msgstr "Vänster" #: prefs.js:223 msgid "Intelligent autohide customization" msgstr "Anpassning av intelligent automatiskt döljande" #: prefs.js:230 prefs.js:415 prefs.js:472 msgid "Reset to defaults" msgstr "Återställ till standardvärden" #: prefs.js:408 msgid "Show dock and application numbers" msgstr "Visa docka och programnummer" #: prefs.js:465 msgid "Customize middle-click behavior" msgstr "Anpassa mellanklicksbeteende" #: prefs.js:548 msgid "Customize running indicators" msgstr "Anpassa körningsindikatorer" #: prefs.js:662 msgid "Cutomize opacity" msgstr "Anpassa opacitet" #: appIcons.js:763 msgid "All Windows" msgstr "Alla fönster" #. Translators: %s is "Settings", which is automatically translated. You #. can also translate the full message if this fits better your language. #: appIcons.js:1069 #, javascript-format msgid "Dash to Dock %s" msgstr "%s för Dash to Dock" #: Settings.ui.h:1 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Då inställd till minimera så minimerar dubbelklick alla fönster för " "programmet." #: Settings.ui.h:2 msgid "Shift+Click action" msgstr "Skift+klick-åtgärd" #: Settings.ui.h:3 msgid "Raise window" msgstr "Höj fönster" #: Settings.ui.h:4 msgid "Minimize window" msgstr "Minimera fönster" #: Settings.ui.h:5 msgid "Launch new instance" msgstr "Starta ny instans" #: Settings.ui.h:6 msgid "Cycle through windows" msgstr "Växla mellan fönster" #: Settings.ui.h:7 msgid "Minimize or overview" msgstr "Minimera eller visa översikt" #: Settings.ui.h:8 msgid "Show window previews" msgstr "Visa förhandsgranskningar av fönster" #: Settings.ui.h:9 msgid "Quit" msgstr "Avsluta" #: Settings.ui.h:10 msgid "Behavior for Middle-Click." msgstr "Beteende för mellanklick" #: Settings.ui.h:11 msgid "Middle-Click action" msgstr "Åtgärd för mellanklick" #: Settings.ui.h:12 msgid "Behavior for Shift+Middle-Click." msgstr "Beteende för skift+mellanklick." #: Settings.ui.h:13 msgid "Shift+Middle-Click action" msgstr "Åtgärd för skift+mellanklick" #: Settings.ui.h:14 msgid "Enable Unity7 like glossy backlit items" msgstr "Aktivera bakgrundsbelysta blanka knappar" #: Settings.ui.h:15 msgid "Use dominant color" msgstr "Använd dominerande färg" #: Settings.ui.h:16 msgid "Customize indicator style" msgstr "Anpassa indikatorstil" #: Settings.ui.h:17 msgid "Color" msgstr "Färg" #: Settings.ui.h:18 msgid "Border color" msgstr "Kantfärg" #: Settings.ui.h:19 msgid "Border width" msgstr "Kantbredd" #: Settings.ui.h:20 msgid "Show the dock on" msgstr "Visa dockan på" #: Settings.ui.h:21 msgid "Show on all monitors." msgstr "Visa på alla skärmar." #: Settings.ui.h:22 msgid "Position on screen" msgstr "Position på skärmen" #: Settings.ui.h:24 msgid "Bottom" msgstr "Nederkant" #: Settings.ui.h:25 msgid "Top" msgstr "Överkant" #: Settings.ui.h:27 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Dölj dockan då den är i vägen för ett fönster för det aktuella programmet. " "Mer förfinade inställningar finns tillgängliga." #: Settings.ui.h:28 msgid "Intelligent autohide" msgstr "Intelligent automatiskt döljande" #: Settings.ui.h:29 msgid "Dock size limit" msgstr "Storleksgräns för docka" #: Settings.ui.h:30 msgid "Panel mode: extend to the screen edge" msgstr "Panelläge: sträck ut till skärmkanten" #: Settings.ui.h:31 msgid "Icon size limit" msgstr "Storleksgräns för ikoner" #: Settings.ui.h:32 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Fast ikonstorlek: rulla för att visa dolda ikoner" #: Settings.ui.h:33 msgid "Position and size" msgstr "Position och storlek" #: Settings.ui.h:34 msgid "Show favorite applications" msgstr "Visa favoritprogram" #: Settings.ui.h:35 msgid "Show running applications" msgstr "Visa körande program" #: Settings.ui.h:36 msgid "Isolate workspaces." msgstr "Visa endast arbetsytans fönster." #: Settings.ui.h:37 msgid "Isolate monitors." msgstr "Visa endast skärmens fönster." #: Settings.ui.h:38 msgid "Show open windows previews." msgstr "Visa förhandsgranskningar av öppna fönster." #: Settings.ui.h:39 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Om inaktiverad är dessa inställningar tillgängliga från justeringsverktyg " "eller webbplatsen för utökningar." #: Settings.ui.h:40 msgid "Show Applications icon" msgstr "Visa Program-ikon" #: Settings.ui.h:41 msgid "Move the applications button at the beginning of the dock." msgstr "Flytta programknappen till början på dockan." #: Settings.ui.h:42 msgid "Animate Show Applications." msgstr "Animera Visa program." #: Settings.ui.h:43 msgid "Launchers" msgstr "Programstartare" #: Settings.ui.h:44 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Använd Super+(0-9) som tangentbordsgenvägar för att aktivera program. De kan " "även användas tillsammans med skift- och kontrolltangenterna." #: Settings.ui.h:45 msgid "Use keyboard shortcuts to activate apps" msgstr "Använd tangentbordsgenvägar för att aktivera program" #: Settings.ui.h:46 msgid "Behaviour when clicking on the icon of a running application." msgstr "Beteende då ikonen för ett körande program klickas." #: Settings.ui.h:47 msgid "Click action" msgstr "Klickåtgärd" #: Settings.ui.h:48 msgid "Minimize" msgstr "Minimera" #: Settings.ui.h:49 msgid "Behaviour when scrolling on the icon of an application." msgstr "Beteende vid rullning över programikon." #: Settings.ui.h:50 msgid "Scroll action" msgstr "Rullåtgärd" #: Settings.ui.h:51 msgid "Do nothing" msgstr "Gör ingenting" #: Settings.ui.h:52 msgid "Switch workspace" msgstr "Byt arbetsyta" #: Settings.ui.h:53 msgid "Behavior" msgstr "Beteende" #: Settings.ui.h:54 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Några anpassningar för att integrera dockan med GNOME:s standardtema. " "Alternativt kan specifika alternativ aktiveras nedan." #: Settings.ui.h:55 msgid "Use built-in theme" msgstr "Använd inbyggt tema" #: Settings.ui.h:56 msgid "Save space reducing padding and border radius." msgstr "Spara utrymme genom att minska utfyllnad och kantradie." #: Settings.ui.h:57 msgid "Shrink the dash" msgstr "Krymp snabbstartspanelen" #: Settings.ui.h:58 msgid "Customize windows counter indicators" msgstr "Anpassa räknare för öppna fönster" #: Settings.ui.h:59 msgid "Default" msgstr "Standard" #: Settings.ui.h:60 msgid "Dots" msgstr "Prickar" #: Settings.ui.h:61 msgid "Squares" msgstr "Kvadrater" #: Settings.ui.h:62 msgid "Dashes" msgstr "Streck" #: Settings.ui.h:63 msgid "Segmented" msgstr "Segment" #: Settings.ui.h:64 msgid "Solid" msgstr "Solid" #: Settings.ui.h:65 msgid "Ciliora" msgstr "" #: Settings.ui.h:66 msgid "Metro" msgstr "" #: Settings.ui.h:67 msgid "Set the background color for the dash." msgstr "Ställ in bakgrundsfärg för snabbstartspanelen." #: Settings.ui.h:68 msgid "Customize the dash color" msgstr "Anpassa färgen för snabbstartspanelen" #: Settings.ui.h:69 msgid "Tune the dash background opacity." msgstr "Justera opacitet för bakgrunden till snabbstartspanelen." #: Settings.ui.h:70 msgid "Customize opacity" msgstr "Anpassa opacitet" #: Settings.ui.h:71 msgid "Fixed" msgstr "Fast" #: Settings.ui.h:72 msgid "Adaptive" msgstr "Adaptiv" #: Settings.ui.h:73 msgid "Dynamic" msgstr "Dynamisk" #: Settings.ui.h:74 msgid "Opacity" msgstr "Opacitet" #: Settings.ui.h:75 msgid "Force straight corner\n" msgstr "Tvinga räta hörn\n" #: Settings.ui.h:77 msgid "Appearance" msgstr "Utseende" #: Settings.ui.h:78 msgid "version: " msgstr "version: " #: Settings.ui.h:79 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "" "Flyttar snabbstartspanelen från översiktsvyn och förvandlar den till en docka" #: Settings.ui.h:80 msgid "Created by" msgstr "Skapat av" #: Settings.ui.h:81 msgid "Webpage" msgstr "Webbsida" #: Settings.ui.h:82 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Detta program kommer HELT UTAN GARANTI.\n" "Se GNU " "General Public License, version 2 eller senare för detaljer." #: Settings.ui.h:84 msgid "About" msgstr "Om" #: Settings.ui.h:85 msgid "Customize minimum and maximum opacity values" msgstr "Anpassa minsta och högsta värden för opacitet" #: Settings.ui.h:86 msgid "Minimum opacity" msgstr "Minsta opacitet" #: Settings.ui.h:87 msgid "Maximum opacity" msgstr "Högsta opacitet" #: Settings.ui.h:88 msgid "Number overlay" msgstr "Nummermarkeringar" #: Settings.ui.h:89 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "Visa tillfälligt programmens tangentbordsgenvägsnummer ovanpå dess ikoner." #: Settings.ui.h:90 msgid "Show the dock if it is hidden" msgstr "Visa dockan om den är dold" #: Settings.ui.h:91 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Om automatiskt döljande är aktiverat kommer dockan att synas tillfälligt när " "tangentbordsgenvägen triggas." #: Settings.ui.h:92 msgid "Shortcut for the options above" msgstr "Tangentbordsgenväg för alternativen ovan." #: Settings.ui.h:93 msgid "Syntax: , , , " msgstr "Syntax: , , , " #: Settings.ui.h:94 msgid "Hide timeout (s)" msgstr "Tidsgräns för att dölja (s)" #: Settings.ui.h:95 msgid "Show the dock by mouse hover on the screen edge." msgstr "Visa dockan genom att hålla muspekaren över skärmkanten." #: Settings.ui.h:96 msgid "Autohide" msgstr "Dölj automatiskt" #: Settings.ui.h:97 msgid "Push to show: require pressure to show the dock" msgstr "Tryck för att visa: kräv tryck för att visa dockan" #: Settings.ui.h:98 msgid "Enable in fullscreen mode" msgstr "Aktivera i helskärmsläge" #: Settings.ui.h:99 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Visa dockan då den inte är i vägen för programfönster." #: Settings.ui.h:100 msgid "Dodge windows" msgstr "Undvik fönster" #: Settings.ui.h:101 msgid "All windows" msgstr "Alla fönster" #: Settings.ui.h:102 msgid "Only focused application's windows" msgstr "Endast fokuserade programs fönster" #: Settings.ui.h:103 msgid "Only maximized windows" msgstr "Endast maximerade fönster" #: Settings.ui.h:104 msgid "Animation duration (s)" msgstr "Längd på animering (s)" #: Settings.ui.h:105 msgid "Show timeout (s)" msgstr "Tidsgräns för att visa (s)" #: Settings.ui.h:106 msgid "Pressure threshold" msgstr "Tröskelvärde för tryck" #~ msgid "Show a dot for each windows of the application." #~ msgstr "Visa en punkt för varje fönster för programmet." #~ msgid "0.000" #~ msgstr "0.000" #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "Med fast ikonstorlek är endast kanten på dockan och Visa program-" #~ "ikonen aktiva." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Växla arbetsyta genom att rulla på dockan" dash-to-dock-extensions.gnome.org-v63/po/tr.po000066400000000000000000000245621326047523300214570ustar00rootroot00000000000000# Turkish Translation. # Copyright (C) 2015 # This file is distributed under the same license with main package. # Mustafa Akgün , 2015. # Çağatay Yiğit Şahin , 2016. # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2016-09-04 21:25+0300\n" "Last-Translator: Çağatay Yiğit Şahin \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Gtranslator 2.91.7\n" "Plural-Forms: nplurals=1; plural=0;\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Ana Ekran" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "İkincil Ekran" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "Sağ" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "Sol" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Akıllı otomatik saklama ayarları" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "Öntanımlı ayarlara geri dön" #: prefs.js:386 #, fuzzy msgid "Show dock and application numbers" msgstr "Çalışan uygulamaları göster" #: prefs.js:443 #, fuzzy msgid "Customize middle-click behavior" msgstr "Panel biçemini ayarla" #: prefs.js:514 msgid "Customize running indicators" msgstr "Çalışan uygulamaları göster" #: appIcons.js:804 msgid "All Windows" msgstr "Bütün pencereler" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Panel biçemini ayarla" #: Settings.ui.h:2 msgid "Color" msgstr "Renk" #: Settings.ui.h:3 msgid "Border color" msgstr "Çerçeve rengi" #: Settings.ui.h:4 msgid "Border width" msgstr "Çerçeve genişliği" #: Settings.ui.h:5 msgid "Number overlay" msgstr "" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "" #: Settings.ui.h:7 #, fuzzy msgid "Show the dock if it is hidden" msgstr "Panelde göster" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "" #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Gecikme zaman aşımı(s)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "En küçüğe ayarlandığında, tüm uygulama pencerelerini küçültmek için çift " "tıklayın." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Shift+Tıkla hareketi" #: Settings.ui.h:14 #, fuzzy msgid "Raise window" msgstr "Pencereyi küçült" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Pencereyi küçült" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Yeni durumu başlat" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Penceler döngüsü" #: Settings.ui.h:18 msgid "Quit" msgstr "" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "" #: Settings.ui.h:20 #, fuzzy msgid "Middle-Click action" msgstr "Hareket için tıkla" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "" #: Settings.ui.h:22 #, fuzzy msgid "Shift+Middle-Click action" msgstr "Shift+Tıkla hareketi" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Panelde göster" #: Settings.ui.h:24 #, fuzzy msgid "Show on all monitors." msgstr "İkincil Ekran" #: Settings.ui.h:25 msgid "Position on screen" msgstr "Ekrandaki konumu" #: Settings.ui.h:27 msgid "Bottom" msgstr "Alt" #: Settings.ui.h:28 msgid "Top" msgstr "Üst" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Etkin uygulamanın penceresini engellediğinde paneli gizle. Daha ileri " "ayarlar mevcuttur." #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "Akıllı otogizleme" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Panel ölçü sınırı" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "Panel modu: Ekran köşelerine genişlet" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "Simge ölçü sınırı" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "Sabit simge ölçüsü: Diğer simgeleri görmek için kaydır" #: Settings.ui.h:36 msgid "Position and size" msgstr "Konum ve ölçü" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "Kullanılan uygulamaları göster" #: Settings.ui.h:38 msgid "Show running applications" msgstr "Çalışan uygulamaları göster" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "" #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "" #: Settings.ui.h:41 #, fuzzy msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Eğer engellenmiş ise, bu ayarlara Gnome-tweak-tool ile veya Gnome extension " "sitesinden ulaşılabilir." #: Settings.ui.h:42 #, fuzzy msgid "Show Applications icon" msgstr "Uygulamaları Göster simgesini göster" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "Uygulamalar düğmesini panelin başlangıcına taşı " #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "Uygulamaları Göster simgesini göster" #: Settings.ui.h:45 msgid "Launchers" msgstr "" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "Çalışan uygulama simgesine tıkladığındaki davranış" #: Settings.ui.h:49 msgid "Click action" msgstr "Hareket için tıkla" #: Settings.ui.h:50 msgid "Minimize" msgstr "Küçült" #: Settings.ui.h:51 #, fuzzy msgid "Minimize or overview" msgstr "Pencereyi küçült" #: Settings.ui.h:52 #, fuzzy msgid "Behaviour when scrolling on the icon of an application." msgstr "Çalışan uygulama simgesine tıkladığındaki davranış" #: Settings.ui.h:53 #, fuzzy msgid "Scroll action" msgstr "Hareket için tıkla" #: Settings.ui.h:54 msgid "Do nothing" msgstr "Hiçbir şey yapma" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "" #: Settings.ui.h:56 msgid "Behavior" msgstr "Davranış" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Varsayılan GNOME temasıyla bütünleşme için birkaç kişiselleştirme. Tercihen, " "belirli ayarlar aşağıdan etkinleştirilebilir" #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "Varsayılan temayı kullan" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "Yer kazanmak için dolguyu ve kenar çevresini azalt." #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "Paneli daralt" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "Uygulamanın her penceresi için bir nokta göster" #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "Pencere sayacını göster" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "" #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "Panel arkaplanının saydamlığını ayarla" #: Settings.ui.h:66 msgid "Customize opacity" msgstr "Saydamlığı ayarla" #: Settings.ui.h:67 msgid "Opacity" msgstr "Saydamlık" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "" #: Settings.ui.h:70 msgid "Appearance" msgstr "Görünüm" #: Settings.ui.h:71 msgid "version: " msgstr "Sürüm: " #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Paneli genel görünümden ana ekrana taşır" #: Settings.ui.h:73 msgid "Created by" msgstr "Tarafından oluşturulmuştur:" #: Settings.ui.h:74 msgid "Webpage" msgstr "Web sayfası" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Bu yazılım kesinlikle garantisiz olarak gelmektedir..\n" "Detayları görüntülemek için GNU Genel Halk Lisansı, sürüm 2 veya üstü " "tıklayın" #: Settings.ui.h:77 msgid "About" msgstr "Hakkında" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "Fare Ekran köşeleri üzerinde iken paneli göster. " #: Settings.ui.h:79 msgid "Autohide" msgstr "Otogizleme" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "Göstermek için it: Panelin gösterilmesi icin etki gerektirir." #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "Tam ekran modunda etkinleştir" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Uygulama penceresini engellemediğinde paneli göster." #: Settings.ui.h:83 msgid "Dodge windows" msgstr "Pencereleri atlat" #: Settings.ui.h:84 msgid "All windows" msgstr "Bütün pencereler" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "Sadece odaklanan uygulamanın pencereleri" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "Sadece büyütülen pencereler" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "Animasyon süresi(s)" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "Zaman aşımını göster(s)" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "Etki eşiği" #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "Simge boyutu sabitlenmişse, sadece panelin kenarları ve Uygulamaları " #~ "Göster simgesi etkindir." #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "Panel üzerinde kaydırarak çalışma alanını değiştir" #~ msgid "Only consider windows of the focused application" #~ msgstr "Sadece açık olan uygulama penceresini dikkate al" dash-to-dock-extensions.gnome.org-v63/po/uk_UA.po000066400000000000000000000426631326047523300220400ustar00rootroot00000000000000# Ukrainian translation for dash-to-dock GNOME Shell extension # msgid "" msgstr "" "Project-Id-Version: dash-to-dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-08-28 10:52+0300\n" "PO-Revision-Date: 2018-01-03 17:00+0200\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 2.0.5\n" "Last-Translator: \n" "Language: uk_UA\n" #: prefs.js:113 msgid "Primary monitor" msgstr "Головний монітор" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "Додатковий монітор " #: prefs.js:154 Settings.ui.h:31 msgid "Right" msgstr "Праворуч" #: prefs.js:155 Settings.ui.h:28 msgid "Left" msgstr "Ліворуч" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "Налаштувати розумне приховування" #: prefs.js:212 prefs.js:397 prefs.js:454 msgid "Reset to defaults" msgstr "Скинути налаштування" #: prefs.js:390 msgid "Show dock and application numbers" msgstr "Показувати кількість активних додатків" #: prefs.js:447 msgid "Customize middle-click behavior" msgstr "Налаштування дій середньої кнопки миші" #: prefs.js:518 msgid "Customize running indicators" msgstr "Налаштування індикатора пускача" #: appIcons.js:1131 msgid "All Windows" msgstr "Усі вікна" #. Translators: %s is "Settings", which is automatically translated. You #. can also translate the full message if this fits better your language. #: appIcons.js:1429 #, javascript-format msgid "Dash to Dock %s" msgstr "" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "Налаштувати вигляд індикатора" #: Settings.ui.h:2 msgid "Color" msgstr "Колір" #: Settings.ui.h:3 msgid "Border color" msgstr "Колір контуру" #: Settings.ui.h:4 msgid "Border width" msgstr "Товщина контуру" #: Settings.ui.h:5 msgid "Number overlay" msgstr "Відображення номеру" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "Тимчасово показувати номери програм за сполученням клавіш." #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "Показувати Док, якщо він прихований" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "" "Док з'явиться за сполученням клавіш, якщо використовується автоматичне " "приховування." #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "Сполучення клавіш для вказаних параметрів" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "Синтаксис: , , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "Затримка приховування (сек.)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "" "Якщо встановлено на \"Мінімізувати\", подвійний клік мінімізує усі вікна " "програми." #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Дія за Shift+Click" #: Settings.ui.h:14 msgid "Raise window" msgstr "Показати вікно" #: Settings.ui.h:15 msgid "Minimize window" msgstr "Мінімізувати вікно" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "Відкрити нове вікно" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "Переключити вікно програми" #: Settings.ui.h:18 msgid "Minimize or overview" msgstr "Мінімізувати або відобразити" #: Settings.ui.h:19 msgid "Show window previews" msgstr "Показувати мініатюри вікон" #: Settings.ui.h:20 msgid "Quit" msgstr "Вийти" #: Settings.ui.h:21 msgid "Behavior for Middle-Click." msgstr "Дія при натисканні середньої кнопки миші." #: Settings.ui.h:22 msgid "Middle-Click action" msgstr "Дія за Middle-Click" #: Settings.ui.h:23 msgid "Behavior for Shift+Middle-Click." msgstr "Поведінка за Shift+Middle-Click." #: Settings.ui.h:24 msgid "Shift+Middle-Click action" msgstr "Дія за Shift+Middle-Click" #: Settings.ui.h:25 msgid "Show the dock on" msgstr "Показувати Док на" #: Settings.ui.h:26 msgid "Show on all monitors." msgstr "Показувати Док на усіх моніторах." #: Settings.ui.h:27 msgid "Position on screen" msgstr "Позиція на екрані" #: Settings.ui.h:29 msgid "Bottom" msgstr "Знизу" #: Settings.ui.h:30 msgid "Top" msgstr "Зверху" #: Settings.ui.h:32 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "Приховувати Док якщо він перекривається вікном активної програми. Доступні " "додаткові налаштування." #: Settings.ui.h:33 msgid "Intelligent autohide" msgstr "Делікатне приховування" #: Settings.ui.h:34 msgid "Dock size limit" msgstr "Обмеження розміру Дока" #: Settings.ui.h:35 msgid "Panel mode: extend to the screen edge" msgstr "Режим панелі: Док заповнює активну сторону екрану" #: Settings.ui.h:36 msgid "Icon size limit" msgstr "Обмеження розміру піктограм" #: Settings.ui.h:37 msgid "Fixed icon size: scroll to reveal other icons" msgstr "" "Фіксований розмір піктограм: використайте коліщатко миші, щоб виявити інші " "піктограми" #: Settings.ui.h:38 msgid "Position and size" msgstr "Позиція та розмір" #: Settings.ui.h:39 msgid "Show favorite applications" msgstr "Показувати закріплені програми" #: Settings.ui.h:40 msgid "Show running applications" msgstr "Показувати запущені програми" #: Settings.ui.h:41 msgid "Isolate workspaces." msgstr "Обмежити робочим простором." #: Settings.ui.h:42 msgid "Isolate monitors." msgstr "Обмежити монітором." #: Settings.ui.h:43 msgid "Show open windows previews." msgstr "Показувати мініатюри відкритих вікон." #: Settings.ui.h:44 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "" "Якщо відключено, ці налаштування доступні з \"gnome-tweak-tool\" або з сайту " "додатків." #: Settings.ui.h:45 msgid "Show Applications icon" msgstr "Показувати піктограму Програми" #: Settings.ui.h:46 msgid "Move the applications button at the beginning of the dock." msgstr "Кнопка \"Програми\" з іншої сторони Дока." #: Settings.ui.h:47 msgid "Animate Show Applications." msgstr "Анімувати показ програм." #: Settings.ui.h:48 msgid "Launchers" msgstr "Пускачі" #: Settings.ui.h:49 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "Активувати сполучення клавіш Super+(0-9) щоб вибрати програму. Можливе " "використання разом з Shift та Ctrl." #: Settings.ui.h:50 msgid "Use keyboard shortcuts to activate apps" msgstr "Використовувати сполучення клавіш для вибору програми" #: Settings.ui.h:51 msgid "Behaviour when clicking on the icon of a running application." msgstr "Поведінка при натисканні на піктограму активної програми." #: Settings.ui.h:52 msgid "Click action" msgstr "Дія при натисканні" #: Settings.ui.h:53 msgid "Minimize" msgstr "Мінімізувати" #: Settings.ui.h:54 msgid "Behaviour when scrolling on the icon of an application." msgstr "Поведінка при прокручуванні на піктограмі програми." #: Settings.ui.h:55 msgid "Scroll action" msgstr "Дія при прокручуванні" #: Settings.ui.h:56 msgid "Do nothing" msgstr "Нічого" #: Settings.ui.h:57 msgid "Switch workspace" msgstr "Переключити робочій простір" #: Settings.ui.h:58 msgid "Behavior" msgstr "Поведінка" #: Settings.ui.h:59 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "Збалансовані налаштування для інтеграції Дока з оформленням Gnome по " "замовчуванню. Нижче можна встановити власні параметри." #: Settings.ui.h:60 msgid "Use built-in theme" msgstr "Використовувати стандартне оформлення" #: Settings.ui.h:61 msgid "Save space reducing padding and border radius." msgstr "" "Економія робочого простору за рахунок зменшення проміжків та застосування " "заокруглених кутів." #: Settings.ui.h:62 msgid "Shrink the dash" msgstr "Стиснути Док" #: Settings.ui.h:63 msgid "Show a dot for each windows of the application." msgstr "Показує точку для кожного вікна програми." #: Settings.ui.h:64 msgid "Show windows counter indicators" msgstr "Показує індикатори кількості вікон" #: Settings.ui.h:65 msgid "Set the background color for the dash." msgstr "Встановити колір фону." #: Settings.ui.h:66 msgid "Customize the dash color" msgstr "Змінити колір фону" #: Settings.ui.h:67 msgid "Tune the dash background opacity." msgstr "Застосувати прозорість фону." #: Settings.ui.h:68 msgid "Customize opacity" msgstr "Налаштувати прозорість" #: Settings.ui.h:69 msgid "Opacity" msgstr "Непрозорість" #: Settings.ui.h:70 msgid "Enable Unity7 like glossy backlit items" msgstr "Застосувати підсвічування елементів як в Unity7" #: Settings.ui.h:71 msgid "Force straight corner\n" msgstr "Прямі кути\n" #: Settings.ui.h:73 msgid "Appearance" msgstr "Зовнішній вигляд" #: Settings.ui.h:74 msgid "version: " msgstr "версія: " #: Settings.ui.h:75 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "Відображає панель з режиму \"Огляд\" у вигляді Дока" #: Settings.ui.h:76 msgid "Created by" msgstr "Автор" #: Settings.ui.h:77 msgid "Webpage" msgstr "Домашня сторінка" #: Settings.ui.h:78 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "Цей додаток розповсюджується БЕЗ БУДЬ ЯКИХ ГАРАНТИЙ.\n" "Дивись GNU General Public License, версія 2 або пізніше для детальної " "інформації." #: Settings.ui.h:80 msgid "About" msgstr "Про додаток" #: Settings.ui.h:81 msgid "Show the dock by mouse hover on the screen edge." msgstr "Показувати Док якщо курсор наблизиться до краю екрану." #: Settings.ui.h:82 msgid "Autohide" msgstr "Автоматично приховувати" #: Settings.ui.h:83 msgid "Push to show: require pressure to show the dock" msgstr "Тиск для показу: потрібне сильніше притискання для відкриття Дока" #: Settings.ui.h:84 msgid "Enable in fullscreen mode" msgstr "Застосувати для повноекранного режиму" #: Settings.ui.h:85 msgid "Show the dock when it doesn't obstruct application windows." msgstr "Показати Док, якщо він не заважає вікну програми у фокусі." #: Settings.ui.h:86 msgid "Dodge windows" msgstr "Перекривання вікнами" #: Settings.ui.h:87 msgid "All windows" msgstr "Усі вікна" #: Settings.ui.h:88 msgid "Only focused application's windows" msgstr "Тільки вікна програми у фокусі" #: Settings.ui.h:89 msgid "Only maximized windows" msgstr "Тільки розгорнуті вікна" #: Settings.ui.h:90 msgid "Animation duration (s)" msgstr "Час анімації (сек.)" #: Settings.ui.h:91 msgid "Show timeout (s)" msgstr "Затримка показу (сек.)" #: Settings.ui.h:92 msgid "Pressure threshold" msgstr "Поріг притискання" msgid "" "With fixed icon size, only the edge of the dock and the Show " "Applications icon are active." msgstr "" "При фіксованому розмірі піктограм програм активна тільки область піктограми " "«Програми» та край Дока." msgid "Switch workspace by scrolling on the dock" msgstr "Змінити робочий простір при прокрутці на Доку" msgid "Only consider windows of the focused application" msgstr "Застосувати тільки до вікон програм у фокусі" msgid "Main Settings" msgstr "Загальні налаштування" msgid "Dock Position" msgstr "Позиція Дока" msgid "Dock is fixed and always visible" msgstr "Док зафіксовано та завжди на екрані" msgid "Show delay [ms]" msgstr "Затримка перед появою [мс]" msgid "Hide delay [ms]" msgstr "Затримка перед приховуванням [мс]" msgid "Application based intellihide" msgstr "Делікатне приховування діє тільки для активних вікон" msgid "Show the dock on following monitor (if attached)" msgstr "Показувати Док на додатковому моніторі (якщо під'єднано)" msgid "Primary (default)" msgstr "Головний (за замовчуванням)" msgid "1" msgstr "1" msgid "2" msgstr "2" msgid "3" msgstr "3" msgid "4" msgstr "4" msgid "Max height" msgstr "Максимальна висота" msgid "Expand (experimental and buggy)" msgstr "Розширюється (експериментальна, можливі помилки)" msgid "Maximum icon size" msgstr "Максимальній розмір піктограми" msgid "16" msgstr "16" msgid "24" msgstr "24" msgid "32" msgstr "32" msgid "48" msgstr "48" msgid "64" msgstr "64" msgid "Optional features" msgstr "Додаткові функції" msgid "Deadtime between each workspace switching [ms]" msgstr "Затримка між кожним перемиканням [мс]" msgid "Only a 1px wide area close to the screen edge is active" msgstr "Активна лише область розміром з 1 піксель, близька до краю екрана" msgid "All the area of the dock is active" msgstr "Вся площа Доку активна" msgid "Customize actions on mouse click" msgstr "Налаштувати дії на клік мишею" msgid "Action on clicking on running app" msgstr "Дія при натисканні на запущену програму" msgid "Minimize window on shift+click (double click for all app windows)" msgstr "" "Мінімізувати вікно за shift+click (подвійне натискання приховує усі вікна " "програм)" msgid "Make message tray insensitive to mouse events" msgstr "Зробити область повідомлень нечутливою до миші" msgid "Appearence and Themes" msgstr "Зовнішній вигляд та Теми" msgid "" "A customized theme is built in the extension. This is meant to work with the " "default Adwaita theme: the dash is shrunk to save space, its background " "transparency reduced, and custom indicators for the number of windows of " "each application are added." msgstr "" "Тема влаштована в додаток. Вона оптимізована для теми Adwaita: Док зменшено, " "щоб зберегти простір; прозорість фону знижено; активні індикатори кількості " "вікон для кожної програми." msgid "" "Alternatively, for a better integration with custom themes, each " "customization can be applied indipendently" msgstr "" "Для кращої інтеграцією з користувацькою темою, кожен параметр можна " "налаштувати незалежно" msgid "Shrink the dash size by reducing padding" msgstr "Зменшити Док за рахунок проміжків" dash-to-dock-extensions.gnome.org-v63/po/zh_CN.po000066400000000000000000000301011326047523300220150ustar00rootroot00000000000000# Simplified Chinese translation of dash-to-dock # Copyright (C) 2013 tuhaihe # This file is distributed under the same license as the dash-to-dock package. # tuhaihe <1132321739qq@gmail.com>, 2013. # 绿色圣光 , 2015, 2016, 2017. # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2017-08-03 22:49+0800\n" "Last-Translator: 绿色圣光 \n" "Language-Team: Chinese (Simplified) <>\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Gtranslator 2.91.7\n" "Plural-Forms: nplurals=1; plural=0;\n" #: prefs.js:113 msgid "Primary monitor" msgstr "主显示器" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "副显示器" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "右侧" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "左侧" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "智能自动隐藏自定义" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "重置为默认值" #: prefs.js:386 msgid "Show dock and application numbers" msgstr "显示 dock 和应用程序编号" #: prefs.js:443 msgid "Customize middle-click behavior" msgstr "自定义中键点击行为" #: prefs.js:514 msgid "Customize running indicators" msgstr "自定义“运行中”指示器" #: appIcons.js:804 msgid "All Windows" msgstr "所有窗口" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "自定义指示器样式" #: Settings.ui.h:2 msgid "Color" msgstr "颜色" #: Settings.ui.h:3 msgid "Border color" msgstr "边框颜色" #: Settings.ui.h:4 msgid "Border width" msgstr "边框宽度" #: Settings.ui.h:5 msgid "Number overlay" msgstr "编号覆盖" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "临时显示与快捷键对应的图标上的应用程序编号。" #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "若 dock 已隐藏,将其显示" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "如果使用了自动隐藏,dock 将在触发快捷键时短暂显示。" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "以上选项的快捷键" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "语法:" #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "隐藏超时时间(秒)" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "当设置为最小化时,双击会最小化应用程序的所有窗口。" #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Shift+点击动作" #: Settings.ui.h:14 msgid "Raise window" msgstr "提升窗口" #: Settings.ui.h:15 msgid "Minimize window" msgstr "最小化窗口" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "启动新实例" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "在窗口间循环" #: Settings.ui.h:18 msgid "Quit" msgstr "退出" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "中键点击的行为。" #: Settings.ui.h:20 msgid "Middle-Click action" msgstr "中键点击动作" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "Shift+中键点击的行为" #: Settings.ui.h:22 msgid "Shift+Middle-Click action" msgstr "Shift+中键点击动作" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "显示 dock 于" #: Settings.ui.h:24 msgid "Show on all monitors." msgstr "所有显示器上都显示。" #: Settings.ui.h:25 msgid "Position on screen" msgstr "屏幕中的位置" #: Settings.ui.h:27 msgid "Bottom" msgstr "底部" #: Settings.ui.h:28 msgid "Top" msgstr "顶部" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "" "当 dock 会挡住当前应用程序的某个窗口时,将其隐藏。点击右侧设置按钮可以设置更" "多细节。" #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "智能隐藏" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Dock 大小限制" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "面板模式:延伸到屏幕边缘" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "图标大小限制" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "固定图标大小:滚动显示其它图标" #: Settings.ui.h:36 msgid "Position and size" msgstr "位置和大小" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "显示收藏的应用程序" #: Settings.ui.h:38 msgid "Show running applications" msgstr "显示正在运行的应用程序" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "隔离工作区。" #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "显示打开窗口预览。" #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "禁用之后,可以通过 gnome-tweak-tool 或者扩展网站来访问这些设置。" #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "显示“应用程序”图标" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "将应用程序按钮移至 dock 的起始位置。" #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "动画“显示应用程序”。" #: Settings.ui.h:45 msgid "Launchers" msgstr "启动器" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "启用 Super+(0-9) 作为快捷键来激活应用。也可与 Shift 和 Ctrl 一起使用。" #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "使用键盘快捷键激活应用" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "点击一个正在运行的应用程序图标时的行为。" #: Settings.ui.h:49 msgid "Click action" msgstr "点击动作" #: Settings.ui.h:50 msgid "Minimize" msgstr "最小化" #: Settings.ui.h:51 msgid "Minimize or overview" msgstr "最小化或概览" #: Settings.ui.h:52 msgid "Behaviour when scrolling on the icon of an application." msgstr "在一个应用程序图标上滚动时的行为。" #: Settings.ui.h:53 msgid "Scroll action" msgstr "滚动动作" #: Settings.ui.h:54 msgid "Do nothing" msgstr "无动作" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "切换工作区" #: Settings.ui.h:56 msgid "Behavior" msgstr "行为" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "" "几个自定义项可以将 dock 整合到默认 GNOME 主题中。或者,也可以启动下面的几个特" "殊选项。" #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "使用内置主题" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "减小填充和边框半径以节省空间。" #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "收缩 dash" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "为应用程序的每个窗口显示一个点。" #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "显示窗口个数指示器" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "设置 dash 的背景颜色。" #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "自定义 dash 颜色" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "调整 dash 的背景透明度。" #: Settings.ui.h:66 msgid "Customize opacity" msgstr "自定义透明度" #: Settings.ui.h:67 msgid "Opacity" msgstr "不透明度" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "强制直角\n" #: Settings.ui.h:70 msgid "Appearance" msgstr "外观" #: Settings.ui.h:71 msgid "version: " msgstr "版本:" #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "让 dash 跳出概览之外,转化为一个 dock" #: Settings.ui.h:73 msgid "Created by" msgstr "作者:" #: Settings.ui.h:74 msgid "Webpage" msgstr "网站主页" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "本程序不提供任何担保。\n" "参见 GNU " "通用公共许可证,第二版或更高版本以了解更多细节。" #: Settings.ui.h:77 msgid "About" msgstr "关于" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "鼠标移至屏幕边缘时显示 dock" #: Settings.ui.h:79 msgid "Autohide" msgstr "自动隐藏" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "推压以显示:需要一定压力来显示 dock" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "在全屏模式下启用" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "在不妨碍应用程序窗口时,显示 dock。" #: Settings.ui.h:83 msgid "Dodge windows" msgstr "避开窗口" #: Settings.ui.h:84 msgid "All windows" msgstr "所有窗口" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "仅焦点程序窗口" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "仅最大化窗口" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "动画持续时间(秒)" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "显示超时时间(秒)" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "压力阈值" #~ msgid "" #~ "With fixed icon size, only the edge of the dock and the Show " #~ "Applications icon are active." #~ msgstr "" #~ "如果固定了图标大小,只有 dock 边缘和“显示应用程序”图标会激活该功" #~ "能。" #~ msgid "Switch workspace by scrolling on the dock" #~ msgstr "通过滚动 dock 来切换工作区" #~ msgid "Main Settings" #~ msgstr "主设置" #~ msgid "Dock is fixed and always visible" #~ msgstr "Dock 固定且总是可见" #~ msgid "Show delay [ms]" #~ msgstr "显示延迟(毫秒)" #~ msgid "Hide delay [ms]" #~ msgstr "隐藏延迟(毫秒)" #~ msgid "Application based intellihide" #~ msgstr "应用程序基于智能隐藏" #~ msgid "Show the dock on following monitor (if attached)" #~ msgstr "Dock 将在如下显示器显示(如果已连接)" #~ msgid "Primary (default)" #~ msgstr "主显示器(默认)" #~ msgid "1" #~ msgstr "1" #~ msgid "2" #~ msgstr "2" #~ msgid "3" #~ msgstr "3" #~ msgid "4" #~ msgstr "4" #~ msgid "Max height" #~ msgstr "最大高度" #~ msgid "Expand (experimental and buggy)" #~ msgstr "全部展开(实验阶段且存在问题)" #~ msgid "Maximum icon size" #~ msgstr "最大图标尺寸" #~ msgid "16" #~ msgstr "16" #~ msgid "24" #~ msgstr "24" #~ msgid "32" #~ msgstr "32" #~ msgid "48" #~ msgstr "48" #~ msgid "64" #~ msgstr "64" #~ msgid "Optional features" #~ msgstr "可选功能" #~ msgid "Only a 1px wide area close to the screen edge is active" #~ msgstr "仅当靠近屏幕边缘1像素宽区域时启用" #~ msgid "All the area of the dock is active" #~ msgstr "Dock 全部区域时启用" #~ msgid "Customize actions on mouse click" #~ msgstr "自定义鼠标点击动作" #~ msgid "Action on clicking on running app" #~ msgstr "点击正在运行程序的动作" #~ msgid "Minimize window on shift+click (double click for all app windows)" #~ msgstr "当按下“Shift+单击”(双击适用于全部程序窗口)时最小化窗口" #~ msgid "Only when in autohide" #~ msgstr "仅当自动隐藏时" dash-to-dock-extensions.gnome.org-v63/po/zh_TW.po000066400000000000000000000236741326047523300220700ustar00rootroot00000000000000# Traditional Chinese translation of dash-to-dock # Copyright (C) 2013 micheleg # This file is distributed under the same license as the dash-to-dock package. # Cheng-Chia Tseng , 2017 # msgid "" msgstr "" "Project-Id-Version: Dash to Dock\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-04 12:35+0100\n" "PO-Revision-Date: 2017-09-20 22:32+0800\n" "Last-Translator: Cheng-Chia Tseng \n" "Language-Team: Chinese (Traditional) <>\n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.3\n" "Plural-Forms: nplurals=1; plural=0;\n" #: prefs.js:113 msgid "Primary monitor" msgstr "主螢幕" #: prefs.js:122 prefs.js:129 msgid "Secondary monitor " msgstr "次螢幕" #: prefs.js:154 Settings.ui.h:29 msgid "Right" msgstr "右側" #: prefs.js:155 Settings.ui.h:26 msgid "Left" msgstr "左側" #: prefs.js:205 msgid "Intelligent autohide customization" msgstr "智慧型自動隱藏自訂" #: prefs.js:212 prefs.js:393 prefs.js:450 msgid "Reset to defaults" msgstr "重設回預設值" #: prefs.js:386 msgid "Show dock and application numbers" msgstr "顯示 Dock 和應用程式數目" #: prefs.js:443 msgid "Customize middle-click behavior" msgstr "自訂滑鼠中鍵行為" #: prefs.js:514 msgid "Customize running indicators" msgstr "自訂執行中指示器" #: appIcons.js:804 msgid "All Windows" msgstr "所有視窗" #: Settings.ui.h:1 msgid "Customize indicator style" msgstr "自訂指示器樣式" #: Settings.ui.h:2 msgid "Color" msgstr "色彩" #: Settings.ui.h:3 msgid "Border color" msgstr "邊緣色彩" #: Settings.ui.h:4 msgid "Border width" msgstr "邊緣寬度" #: Settings.ui.h:5 msgid "Number overlay" msgstr "數字覆層" #: Settings.ui.h:6 msgid "" "Temporarily show the application numbers over the icons, corresponding to " "the shortcut." msgstr "暫時顯示應用程式數目在圖示上,可對應到快捷鍵。" #: Settings.ui.h:7 msgid "Show the dock if it is hidden" msgstr "若隱藏時顯示 Dock" #: Settings.ui.h:8 msgid "" "If using autohide, the dock will appear for a short time when triggering the " "shortcut." msgstr "若使用自動隱藏,則觸發快捷鍵時 Dock 會出現一段時間。" #: Settings.ui.h:9 msgid "Shortcut for the options above" msgstr "上述選項的快捷鍵" #: Settings.ui.h:10 msgid "Syntax: , , , " msgstr "語法:, , , " #: Settings.ui.h:11 msgid "Hide timeout (s)" msgstr "隱藏等候時間" #: Settings.ui.h:12 msgid "" "When set to minimize, double clicking minimizes all the windows of the " "application." msgstr "當設定為最小化時,雙點滑鼠可將應用程式的所有視窗最小化。" #: Settings.ui.h:13 msgid "Shift+Click action" msgstr "Shift+滑鼠點按 動作" #: Settings.ui.h:14 msgid "Raise window" msgstr "擡升視窗" #: Settings.ui.h:15 msgid "Minimize window" msgstr "最小化視窗" #: Settings.ui.h:16 msgid "Launch new instance" msgstr "啟動新實體" #: Settings.ui.h:17 msgid "Cycle through windows" msgstr "在視窗之間循環" #: Settings.ui.h:18 msgid "Quit" msgstr "退出" #: Settings.ui.h:19 msgid "Behavior for Middle-Click." msgstr "滑鼠中鍵行為。" #: Settings.ui.h:20 msgid "Middle-Click action" msgstr "滑屬中鍵動作" #: Settings.ui.h:21 msgid "Behavior for Shift+Middle-Click." msgstr "Shift+滑鼠中鍵行為。" #: Settings.ui.h:22 msgid "Shift+Middle-Click action" msgstr "Shift+滑鼠中鍵動作" #: Settings.ui.h:23 msgid "Show the dock on" msgstr "Dock 顯示於" #: Settings.ui.h:24 msgid "Show on all monitors." msgstr "所有螢幕上都顯示。" #: Settings.ui.h:25 msgid "Position on screen" msgstr "螢幕上的位置" #: Settings.ui.h:27 msgid "Bottom" msgstr "下面" #: Settings.ui.h:28 msgid "Top" msgstr "上面" #: Settings.ui.h:30 msgid "" "Hide the dock when it obstructs a window of the current application. More " "refined settings are available." msgstr "當 Dock 會遮到目前應用程式的視窗時隱藏起來。有更多精細的設定可以調整。" #: Settings.ui.h:31 msgid "Intelligent autohide" msgstr "智慧型自動隱藏" #: Settings.ui.h:32 msgid "Dock size limit" msgstr "Dock 大小限制" #: Settings.ui.h:33 msgid "Panel mode: extend to the screen edge" msgstr "面板模式:延伸到螢幕邊緣" #: Settings.ui.h:34 msgid "Icon size limit" msgstr "圖示大小限制" #: Settings.ui.h:35 msgid "Fixed icon size: scroll to reveal other icons" msgstr "固定圖示大小:捲動滑鼠以揭開其他圖示" #: Settings.ui.h:36 msgid "Position and size" msgstr "位置與大小" #: Settings.ui.h:37 msgid "Show favorite applications" msgstr "顯示喜愛的應用程式" #: Settings.ui.h:38 msgid "Show running applications" msgstr "顯示執行中應用程式" #: Settings.ui.h:39 msgid "Isolate workspaces." msgstr "獨立工作區。" #: Settings.ui.h:40 msgid "Show open windows previews." msgstr "顯示開啟視窗的預覽。" #: Settings.ui.h:41 msgid "" "If disabled, these settings are accessible from gnome-tweak-tool or the " "extension website." msgstr "若停用,這些設定值可另外從 gnome-tweak-tool 或擴充套件網站存取。" #: Settings.ui.h:42 msgid "Show Applications icon" msgstr "顯示 應用程式 圖示" #: Settings.ui.h:43 msgid "Move the applications button at the beginning of the dock." msgstr "將應用程式按鈕移動到 Dock 的起頭。" #: Settings.ui.h:44 msgid "Animate Show Applications." msgstr "動畫方式顯示應用程式。" #: Settings.ui.h:45 msgid "Launchers" msgstr "啟動器" #: Settings.ui.h:46 msgid "" "Enable Super+(0-9) as shortcuts to activate apps. It can also be used " "together with Shift and Ctrl." msgstr "" "啟用 Super+(0-9) 作為快捷鍵來啓動程式。這也可以搭配 Shift 和 Ctrl 使用。" #: Settings.ui.h:47 msgid "Use keyboard shortcuts to activate apps" msgstr "使用鍵盤快捷鍵啟用程式" #: Settings.ui.h:48 msgid "Behaviour when clicking on the icon of a running application." msgstr "點按執行中應用程式圖示時的行為。" #: Settings.ui.h:49 msgid "Click action" msgstr "點按動作" #: Settings.ui.h:50 msgid "Minimize" msgstr "最小化" #: Settings.ui.h:51 msgid "Minimize or overview" msgstr "最小化或概覽" #: Settings.ui.h:52 msgid "Behaviour when scrolling on the icon of an application." msgstr "在應用程式的圖示上捲動滑鼠時的行為。" #: Settings.ui.h:53 msgid "Scroll action" msgstr "捲動動作" #: Settings.ui.h:54 msgid "Do nothing" msgstr "什麼都不做" #: Settings.ui.h:55 msgid "Switch workspace" msgstr "切換工作區" #: Settings.ui.h:56 msgid "Behavior" msgstr "行為" #: Settings.ui.h:57 msgid "" "Few customizations meant to integrate the dock with the default GNOME theme. " "Alternatively, specific options can be enabled below." msgstr "較少自訂可以讓 Dock 整合到預設 GNOME 主題。另外,下方可啟用特定選項。" #: Settings.ui.h:58 msgid "Use built-in theme" msgstr "使用內建主題" #: Settings.ui.h:59 msgid "Save space reducing padding and border radius." msgstr "節省空間減少襯邊與邊圓半徑。" #: Settings.ui.h:60 msgid "Shrink the dash" msgstr "縮小 Dash" #: Settings.ui.h:61 msgid "Show a dot for each windows of the application." msgstr "為應用程式的每個視窗顯示圓點。" #: Settings.ui.h:62 msgid "Show windows counter indicators" msgstr "顯示視窗角落指示器" #: Settings.ui.h:63 msgid "Set the background color for the dash." msgstr "設定 Dash 的背景色彩。" #: Settings.ui.h:64 msgid "Customize the dash color" msgstr "自訂 Dash 色彩" #: Settings.ui.h:65 msgid "Tune the dash background opacity." msgstr "調整 Dash 背景不透明性。" #: Settings.ui.h:66 msgid "Customize opacity" msgstr "自訂不透明性" #: Settings.ui.h:67 msgid "Opacity" msgstr "不透明" #: Settings.ui.h:68 msgid "Force straight corner\n" msgstr "強迫角落直角\n" #: Settings.ui.h:70 msgid "Appearance" msgstr "外觀" #: Settings.ui.h:71 msgid "version: " msgstr "版本:" #: Settings.ui.h:72 msgid "Moves the dash out of the overview transforming it in a dock" msgstr "將 Dash 移出概覽轉變成 Dock" #: Settings.ui.h:73 msgid "Created by" msgstr "作者" #: Settings.ui.h:74 msgid "Webpage" msgstr "網頁" #: Settings.ui.h:75 msgid "" "This program comes with ABSOLUTELY NO WARRANTY.\n" "See the GNU General Public License, version 2 or later for details." msgstr "" "本程式「絕無任何擔保」。\n" "請見 GNU " "通用公眾授權第 2 版,或後續版本 深入瞭解更多細節。" #: Settings.ui.h:77 msgid "About" msgstr "關於" #: Settings.ui.h:78 msgid "Show the dock by mouse hover on the screen edge." msgstr "滑鼠停駐在螢幕邊緣時顯示 Dock。" #: Settings.ui.h:79 msgid "Autohide" msgstr "自動隱藏" #: Settings.ui.h:80 msgid "Push to show: require pressure to show the dock" msgstr "推擠才顯示:需要一些壓力才會顯示 Dock" #: Settings.ui.h:81 msgid "Enable in fullscreen mode" msgstr "於全螢幕模式下啟用" #: Settings.ui.h:82 msgid "Show the dock when it doesn't obstruct application windows." msgstr "當 Dock 不會遮到應用程式視窗時顯示。" #: Settings.ui.h:83 msgid "Dodge windows" msgstr "躲避視窗" #: Settings.ui.h:84 msgid "All windows" msgstr "所有視窗" #: Settings.ui.h:85 msgid "Only focused application's windows" msgstr "僅焦點中的應用程式視窗" #: Settings.ui.h:86 msgid "Only maximized windows" msgstr "僅最大化的視窗" #: Settings.ui.h:87 msgid "Animation duration (s)" msgstr "動畫時間長度" #: Settings.ui.h:88 msgid "0.000" msgstr "0.000" #: Settings.ui.h:89 msgid "Show timeout (s)" msgstr "顯示等候秒數" #: Settings.ui.h:90 msgid "Pressure threshold" msgstr "壓力閾值" dash-to-dock-extensions.gnome.org-v63/prefs.js000066400000000000000000001146251326047523300215310ustar00rootroot00000000000000// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const GObject = imports.gi.GObject; const Gtk = imports.gi.Gtk; const Gdk = imports.gi.Gdk; const Lang = imports.lang; const Mainloop = imports.mainloop; // Use __ () and N__() for the extension gettext domain, and reuse // the shell domain with the default _() and N_() const Gettext = imports.gettext.domain('dashtodock'); const __ = Gettext.gettext; const N__ = function(e) { return e }; const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); const Convenience = Me.imports.convenience; const SCALE_UPDATE_TIMEOUT = 500; const DEFAULT_ICONS_SIZES = [ 128, 96, 64, 48, 32, 24, 16 ]; const TransparencyMode = { DEFAULT: 0, FIXED: 1, ADAPTIVE: 2, DYNAMIC: 3 }; const RunningIndicatorStyle = { DEFAULT: 0, DOTS: 1, SQUARES: 2, DASHES: 3, SEGMENTED: 4, SOLID: 5, CILIORA: 6, METRO: 7 }; /** * This function was copied from the activities-config extension * https://github.com/nls1729/acme-code/tree/master/activities-config * by Norman L. Smith. */ function cssHexString(css) { let rrggbb = '#'; let start; for (let loop = 0; loop < 3; loop++) { let end = 0; let xx = ''; for (let loop = 0; loop < 2; loop++) { while (true) { let x = css.slice(end, end + 1); if ((x == '(') || (x == ',') || (x == ')')) break; end++; } if (loop == 0) { end++; start = end; } } xx = parseInt(css.slice(start, end)).toString(16); if (xx.length == 1) xx = '0' + xx; rrggbb += xx; css = css.slice(end); } return rrggbb; } function setShortcut(settings) { let shortcut_text = settings.get_string('shortcut-text'); let [key, mods] = Gtk.accelerator_parse(shortcut_text); if (Gtk.accelerator_valid(key, mods)) { let shortcut = Gtk.accelerator_name(key, mods); settings.set_strv('shortcut', [shortcut]); } else { settings.set_strv('shortcut', []); } } const Settings = new Lang.Class({ Name: 'DashToDock.Settings', _init: function() { this._settings = Convenience.getSettings('org.gnome.shell.extensions.dash-to-dock'); this._rtl = (Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL); this._builder = new Gtk.Builder(); this._builder.set_translation_domain(Me.metadata['gettext-domain']); this._builder.add_from_file(Me.path + '/Settings.ui'); this.widget = new Gtk.ScrolledWindow({ hscrollbar_policy: Gtk.PolicyType.NEVER }); this._notebook = this._builder.get_object('settings_notebook'); this.widget.add(this._notebook); // Set a reasonable initial window height this.widget.connect('realize', Lang.bind(this, function() { let window = this.widget.get_toplevel(); let [default_width, default_height] = window.get_default_size(); window.resize(default_width, 650); })); // Timeout to delay the update of the settings this._dock_size_timeout = 0; this._icon_size_timeout = 0; this._opacity_timeout = 0; this._bindSettings(); this._builder.connect_signals_full(Lang.bind(this, this._connector)); }, /** * Connect signals */ _connector: function(builder, object, signal, handler) { object.connect(signal, Lang.bind(this, this._SignalHandler[handler])); }, _bindSettings: function() { // Position and size panel // Monitor options this._monitors = []; // Build options based on the number of monitors and the current settings. let n_monitors = Gdk.Screen.get_default().get_n_monitors(); let primary_monitor = Gdk.Screen.get_default().get_primary_monitor(); let monitor = this._settings.get_int('preferred-monitor'); // Add primary monitor with index 0, because in GNOME Shell the primary monitor is always 0 this._builder.get_object('dock_monitor_combo').append_text(__('Primary monitor')); this._monitors.push(0); // Add connected monitors let ctr = 0; for (let i = 0; i < n_monitors; i++) { if (i !== primary_monitor) { ctr++; this._monitors.push(ctr); this._builder.get_object('dock_monitor_combo').append_text(__('Secondary monitor ') + ctr); } } // If one of the external monitor is set as preferred, show it even if not attached if ((monitor >= n_monitors) && (monitor !== primary_monitor)) { this._monitors.push(monitor) this._builder.get_object('dock_monitor_combo').append_text(__('Secondary monitor ') + ++ctr); } this._builder.get_object('dock_monitor_combo').set_active(this._monitors.indexOf(monitor)); // Position option let position = this._settings.get_enum('dock-position'); switch (position) { case 0: this._builder.get_object('position_top_button').set_active(true); break; case 1: this._builder.get_object('position_right_button').set_active(true); break; case 2: this._builder.get_object('position_bottom_button').set_active(true); break; case 3: this._builder.get_object('position_left_button').set_active(true); break; } if (this._rtl) { /* Left is Right in rtl as a setting */ this._builder.get_object('position_left_button').set_label(__('Right')); this._builder.get_object('position_right_button').set_label(__('Left')); } // Intelligent autohide options this._settings.bind('dock-fixed', this._builder.get_object('intelligent_autohide_switch'), 'active', Gio.SettingsBindFlags.INVERT_BOOLEAN); this._settings.bind('dock-fixed', this._builder.get_object('intelligent_autohide_button'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN); this._settings.bind('autohide', this._builder.get_object('autohide_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('autohide-in-fullscreen', this._builder.get_object('autohide_enable_in_fullscreen_checkbutton'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('require-pressure-to-show', this._builder.get_object('require_pressure_checkbutton'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('intellihide', this._builder.get_object('intellihide_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('animation-time', this._builder.get_object('animation_duration_spinbutton'), 'value', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('hide-delay', this._builder.get_object('hide_timeout_spinbutton'), 'value', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('show-delay', this._builder.get_object('show_timeout_spinbutton'), 'value', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('pressure-threshold', this._builder.get_object('pressure_threshold_spinbutton'), 'value', Gio.SettingsBindFlags.DEFAULT); //this._builder.get_object('animation_duration_spinbutton').set_value(this._settings.get_double('animation-time')); // Create dialog for intelligent autohide advanced settings this._builder.get_object('intelligent_autohide_button').connect('clicked', Lang.bind(this, function() { let dialog = new Gtk.Dialog({ title: __('Intelligent autohide customization'), transient_for: this.widget.get_toplevel(), use_header_bar: true, modal: true }); // GTK+ leaves positive values for application-defined response ids. // Use +1 for the reset action dialog.add_button(__('Reset to defaults'), 1); let box = this._builder.get_object('intelligent_autohide_advanced_settings_box'); dialog.get_content_area().add(box); this._settings.bind('intellihide', this._builder.get_object('intellihide_mode_box'), 'sensitive', Gio.SettingsBindFlags.GET); // intellihide mode let intellihideModeRadioButtons = [ this._builder.get_object('all_windows_radio_button'), this._builder.get_object('focus_application_windows_radio_button'), this._builder.get_object('maximized_windows_radio_button') ]; intellihideModeRadioButtons[this._settings.get_enum('intellihide-mode')].set_active(true); this._settings.bind('autohide', this._builder.get_object('require_pressure_checkbutton'), 'sensitive', Gio.SettingsBindFlags.GET); this._settings.bind('autohide', this._builder.get_object('autohide_enable_in_fullscreen_checkbutton'), 'sensitive', Gio.SettingsBindFlags.GET); this._settings.bind('require-pressure-to-show', this._builder.get_object('show_timeout_spinbutton'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN); this._settings.bind('require-pressure-to-show', this._builder.get_object('show_timeout_label'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN); this._settings.bind('require-pressure-to-show', this._builder.get_object('pressure_threshold_spinbutton'), 'sensitive', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('require-pressure-to-show', this._builder.get_object('pressure_threshold_label'), 'sensitive', Gio.SettingsBindFlags.DEFAULT); dialog.connect('response', Lang.bind(this, function(dialog, id) { if (id == 1) { // restore default settings for the relevant keys let keys = ['intellihide', 'autohide', 'intellihide-mode', 'autohide-in-fullscreen', 'require-pressure-to-show', 'animation-time', 'show-delay', 'hide-delay', 'pressure-threshold']; keys.forEach(function(val) { this._settings.set_value(val, this._settings.get_default_value(val)); }, this); intellihideModeRadioButtons[this._settings.get_enum('intellihide-mode')].set_active(true); } else { // remove the settings box so it doesn't get destroyed; dialog.get_content_area().remove(box); dialog.destroy(); } return; })); dialog.show_all(); })); // size options this._builder.get_object('dock_size_scale').set_value(this._settings.get_double('height-fraction')); this._builder.get_object('dock_size_scale').add_mark(0.9, Gtk.PositionType.TOP, null); let icon_size_scale = this._builder.get_object('icon_size_scale'); icon_size_scale.set_range(8, DEFAULT_ICONS_SIZES[0]); icon_size_scale.set_value(this._settings.get_int('dash-max-icon-size')); DEFAULT_ICONS_SIZES.forEach(function(val) { icon_size_scale.add_mark(val, Gtk.PositionType.TOP, val.toString()); }); // Corrent for rtl languages if (this._rtl) { // Flip value position: this is not done automatically this._builder.get_object('dock_size_scale').set_value_pos(Gtk.PositionType.LEFT); icon_size_scale.set_value_pos(Gtk.PositionType.LEFT); // I suppose due to a bug, having a more than one mark and one above a value of 100 // makes the rendering of the marks wrong in rtl. This doesn't happen setting the scale as not flippable // and then manually inverting it icon_size_scale.set_flippable(false); icon_size_scale.set_inverted(true); } this._settings.bind('icon-size-fixed', this._builder.get_object('icon_size_fixed_checkbutton'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('extend-height', this._builder.get_object('dock_size_extend_checkbutton'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('extend-height', this._builder.get_object('dock_size_scale'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN); // Apps panel this._settings.bind('show-running', this._builder.get_object('show_running_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('isolate-workspaces', this._builder.get_object('application_button_isolation_button'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('isolate-monitors', this._builder.get_object('application_button_monitor_isolation_button'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('show-windows-preview', this._builder.get_object('windows_preview_button'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('multi-monitor', this._builder.get_object('multi_monitor_button'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('show-favorites', this._builder.get_object('show_favorite_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('show-show-apps-button', this._builder.get_object('show_applications_button_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('show-apps-at-top', this._builder.get_object('application_button_first_button'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('show-show-apps-button', this._builder.get_object('application_button_first_button'), 'sensitive', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('animate-show-apps', this._builder.get_object('application_button_animation_button'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('show-show-apps-button', this._builder.get_object('application_button_animation_button'), 'sensitive', Gio.SettingsBindFlags.DEFAULT); // Behavior panel this._settings.bind('hot-keys', this._builder.get_object('hot_keys_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('hot-keys', this._builder.get_object('overlay_button'), 'sensitive', Gio.SettingsBindFlags.DEFAULT); this._builder.get_object('click_action_combo').set_active(this._settings.get_enum('click-action')); this._builder.get_object('click_action_combo').connect('changed', Lang.bind (this, function(widget) { this._settings.set_enum('click-action', widget.get_active()); })); this._builder.get_object('scroll_action_combo').set_active(this._settings.get_enum('scroll-action')); this._builder.get_object('scroll_action_combo').connect('changed', Lang.bind (this, function(widget) { this._settings.set_enum('scroll-action', widget.get_active()); })); this._builder.get_object('shift_click_action_combo').connect('changed', Lang.bind (this, function(widget) { this._settings.set_enum('shift-click-action', widget.get_active()); })); this._builder.get_object('middle_click_action_combo').connect('changed', Lang.bind (this, function(widget) { this._settings.set_enum('middle-click-action', widget.get_active()); })); this._builder.get_object('shift_middle_click_action_combo').connect('changed', Lang.bind (this, function(widget) { this._settings.set_enum('shift-middle-click-action', widget.get_active()); })); // Create dialog for number overlay options this._builder.get_object('overlay_button').connect('clicked', Lang.bind(this, function() { let dialog = new Gtk.Dialog({ title: __('Show dock and application numbers'), transient_for: this.widget.get_toplevel(), use_header_bar: true, modal: true }); // GTK+ leaves positive values for application-defined response ids. // Use +1 for the reset action dialog.add_button(__('Reset to defaults'), 1); let box = this._builder.get_object('box_overlay_shortcut'); dialog.get_content_area().add(box); this._builder.get_object('overlay_switch').set_active(this._settings.get_boolean('hotkeys-overlay')); this._builder.get_object('show_dock_switch').set_active(this._settings.get_boolean('hotkeys-show-dock')); // We need to update the shortcut 'strv' when the text is modified this._settings.connect('changed::shortcut-text', Lang.bind(this, function() {setShortcut(this._settings);})); this._settings.bind('shortcut-text', this._builder.get_object('shortcut_entry'), 'text', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('hotkeys-overlay', this._builder.get_object('overlay_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('hotkeys-show-dock', this._builder.get_object('show_dock_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('shortcut-timeout', this._builder.get_object('timeout_spinbutton'), 'value', Gio.SettingsBindFlags.DEFAULT); dialog.connect('response', Lang.bind(this, function(dialog, id) { if (id == 1) { // restore default settings for the relevant keys let keys = ['shortcut-text', 'hotkeys-overlay', 'hotkeys-show-dock', 'shortcut-timeout']; keys.forEach(function(val) { this._settings.set_value(val, this._settings.get_default_value(val)); }, this); } else { // remove the settings box so it doesn't get destroyed; dialog.get_content_area().remove(box); dialog.destroy(); } return; })); dialog.show_all(); })); // Create dialog for middle-click options this._builder.get_object('middle_click_options_button').connect('clicked', Lang.bind(this, function() { let dialog = new Gtk.Dialog({ title: __('Customize middle-click behavior'), transient_for: this.widget.get_toplevel(), use_header_bar: true, modal: true }); // GTK+ leaves positive values for application-defined response ids. // Use +1 for the reset action dialog.add_button(__('Reset to defaults'), 1); let box = this._builder.get_object('box_middle_click_options'); dialog.get_content_area().add(box); this._builder.get_object('shift_click_action_combo').set_active(this._settings.get_enum('shift-click-action')); this._builder.get_object('middle_click_action_combo').set_active(this._settings.get_enum('middle-click-action')); this._builder.get_object('shift_middle_click_action_combo').set_active(this._settings.get_enum('shift-middle-click-action')); this._settings.bind('shift-click-action', this._builder.get_object('shift_click_action_combo'), 'active-id', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('middle-click-action', this._builder.get_object('middle_click_action_combo'), 'active-id', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('shift-middle-click-action', this._builder.get_object('shift_middle_click_action_combo'), 'active-id', Gio.SettingsBindFlags.DEFAULT); dialog.connect('response', Lang.bind(this, function(dialog, id) { if (id == 1) { // restore default settings for the relevant keys let keys = ['shift-click-action', 'middle-click-action', 'shift-middle-click-action']; keys.forEach(function(val) { this._settings.set_value(val, this._settings.get_default_value(val)); }, this); this._builder.get_object('shift_click_action_combo').set_active(this._settings.get_enum('shift-click-action')); this._builder.get_object('middle_click_action_combo').set_active(this._settings.get_enum('middle-click-action')); this._builder.get_object('shift_middle_click_action_combo').set_active(this._settings.get_enum('shift-middle-click-action')); } else { // remove the settings box so it doesn't get destroyed; dialog.get_content_area().remove(box); dialog.destroy(); } return; })); dialog.show_all(); })); // Appearance Panel this._settings.bind('apply-custom-theme', this._builder.get_object('customize_theme'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN | Gio.SettingsBindFlags.GET); this._settings.bind('apply-custom-theme', this._builder.get_object('builtin_theme_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('custom-theme-shrink', this._builder.get_object('shrink_dash_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); // Running indicators this._builder.get_object('running_indicators_combo').set_active( this._settings.get_enum('running-indicator-style') ); this._builder.get_object('running_indicators_combo').connect( 'changed', Lang.bind (this, function(widget) { this._settings.set_enum('running-indicator-style', widget.get_active()); }) ); if (this._settings.get_enum('running-indicator-style') == RunningIndicatorStyle.DEFAULT) this._builder.get_object('running_indicators_advance_settings_button').set_sensitive(false); this._settings.connect('changed::running-indicator-style', Lang.bind(this, function() { if (this._settings.get_enum('running-indicator-style') == RunningIndicatorStyle.DEFAULT) this._builder.get_object('running_indicators_advance_settings_button').set_sensitive(false); else this._builder.get_object('running_indicators_advance_settings_button').set_sensitive(true); })); // Create dialog for running indicators advanced settings this._builder.get_object('running_indicators_advance_settings_button').connect('clicked', Lang.bind(this, function() { let dialog = new Gtk.Dialog({ title: __('Customize running indicators'), transient_for: this.widget.get_toplevel(), use_header_bar: true, modal: true }); let box = this._builder.get_object('running_dots_advance_settings_box'); dialog.get_content_area().add(box); this._settings.bind('running-indicator-dominant-color', this._builder.get_object('dominant_color_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('custom-theme-customize-running-dots', this._builder.get_object('dot_style_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('custom-theme-customize-running-dots', this._builder.get_object('dot_style_settings_box'), 'sensitive', Gio.SettingsBindFlags.DEFAULT); let rgba = new Gdk.RGBA(); rgba.parse(this._settings.get_string('custom-theme-running-dots-color')); this._builder.get_object('dot_color_colorbutton').set_rgba(rgba); this._builder.get_object('dot_color_colorbutton').connect('notify::color', Lang.bind(this, function(button) { let rgba = button.get_rgba(); let css = rgba.to_string(); let hexString = cssHexString(css); this._settings.set_string('custom-theme-running-dots-color', hexString); })); rgba.parse(this._settings.get_string('custom-theme-running-dots-border-color')); this._builder.get_object('dot_border_color_colorbutton').set_rgba(rgba); this._builder.get_object('dot_border_color_colorbutton').connect('notify::color', Lang.bind(this, function(button) { let rgba = button.get_rgba(); let css = rgba.to_string(); let hexString = cssHexString(css); this._settings.set_string('custom-theme-running-dots-border-color', hexString); })); this._settings.bind('custom-theme-running-dots-border-width', this._builder.get_object('dot_border_width_spin_button'), 'value', Gio.SettingsBindFlags.DEFAULT); dialog.connect('response', Lang.bind(this, function(dialog, id) { // remove the settings box so it doesn't get destroyed; dialog.get_content_area().remove(box); dialog.destroy(); return; })); dialog.show_all(); })); this._settings.bind('custom-background-color', this._builder.get_object('custom_background_color_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); this._settings.bind('custom-background-color', this._builder.get_object('custom_background_color'), 'sensitive', Gio.SettingsBindFlags.DEFAULT); let rgba = new Gdk.RGBA(); rgba.parse(this._settings.get_string('background-color')); this._builder.get_object('custom_background_color').set_rgba(rgba); this._builder.get_object('custom_background_color').connect('notify::color', Lang.bind(this, function(button) { let rgba = button.get_rgba(); let css = rgba.to_string(); let hexString = cssHexString(css); this._settings.set_string('background-color', hexString); })); // Opacity this._builder.get_object('customize_opacity_combo').set_active( this._settings.get_enum('transparency-mode') ); this._builder.get_object('customize_opacity_combo').connect( 'changed', Lang.bind (this, function(widget) { this._settings.set_enum('transparency-mode', widget.get_active()); }) ); this._builder.get_object('custom_opacity_scale').set_value(this._settings.get_double('background-opacity')); if (this._settings.get_enum('transparency-mode') !== TransparencyMode.FIXED) this._builder.get_object('custom_opacity_scale').set_sensitive(false); this._settings.connect('changed::transparency-mode', Lang.bind(this, function() { if (this._settings.get_enum('transparency-mode') !== TransparencyMode.FIXED) this._builder.get_object('custom_opacity_scale').set_sensitive(false); else this._builder.get_object('custom_opacity_scale').set_sensitive(true); })); if (this._settings.get_enum('transparency-mode') !== TransparencyMode.ADAPTIVE && this._settings.get_enum('transparency-mode') !== TransparencyMode.DYNAMIC) { this._builder.get_object('dynamic_opacity_button').set_sensitive(false); } this._settings.connect('changed::transparency-mode', Lang.bind(this, function() { if (this._settings.get_enum('transparency-mode') !== TransparencyMode.ADAPTIVE && this._settings.get_enum('transparency-mode') !== TransparencyMode.DYNAMIC) { this._builder.get_object('dynamic_opacity_button').set_sensitive(false); } else { this._builder.get_object('dynamic_opacity_button').set_sensitive(true); } })); // Create dialog for transparency advanced settings this._builder.get_object('dynamic_opacity_button').connect('clicked', Lang.bind(this, function() { let dialog = new Gtk.Dialog({ title: __('Cutomize opacity'), transient_for: this.widget.get_toplevel(), use_header_bar: true, modal: true }); let box = this._builder.get_object('advanced_transparency_dialog'); dialog.get_content_area().add(box); this._settings.bind( 'customize-alphas', this._builder.get_object('customize_alphas_switch'), 'active', Gio.SettingsBindFlags.DEFAULT ); this._settings.bind( 'customize-alphas', this._builder.get_object('min_alpha_scale'), 'sensitive', Gio.SettingsBindFlags.DEFAULT ); this._settings.bind( 'customize-alphas', this._builder.get_object('max_alpha_scale'), 'sensitive', Gio.SettingsBindFlags.DEFAULT ); this._builder.get_object('min_alpha_scale').set_value( this._settings.get_double('min-alpha') ); this._builder.get_object('max_alpha_scale').set_value( this._settings.get_double('max-alpha') ); dialog.connect('response', Lang.bind(this, function(dialog, id) { // remove the settings box so it doesn't get destroyed; dialog.get_content_area().remove(box); dialog.destroy(); return; })); dialog.show_all(); })); this._settings.bind('unity-backlit-items', this._builder.get_object('unity_backlit_items_switch'), 'active', Gio.SettingsBindFlags.DEFAULT ); this._settings.bind('force-straight-corner', this._builder.get_object('force_straight_corner_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); // About Panel this._builder.get_object('extension_version').set_label(Me.metadata.version.toString()); }, /** * Object containing all signals defined in the glade file */ _SignalHandler: { dock_display_combo_changed_cb: function(combo) { this._settings.set_int('preferred-monitor', this._monitors[combo.get_active()]); }, position_top_button_toggled_cb: function(button) { if (button.get_active()) this._settings.set_enum('dock-position', 0); }, position_right_button_toggled_cb: function(button) { if (button.get_active()) this._settings.set_enum('dock-position', 1); }, position_bottom_button_toggled_cb: function(button) { if (button.get_active()) this._settings.set_enum('dock-position', 2); }, position_left_button_toggled_cb: function(button) { if (button.get_active()) this._settings.set_enum('dock-position', 3); }, icon_size_combo_changed_cb: function(combo) { this._settings.set_int('dash-max-icon-size', this._allIconSizes[combo.get_active()]); }, dock_size_scale_format_value_cb: function(scale, value) { return Math.round(value*100)+ ' %'; }, dock_size_scale_value_changed_cb: function(scale) { // Avoid settings the size consinuosly if (this._dock_size_timeout > 0) Mainloop.source_remove(this._dock_size_timeout); this._dock_size_timeout = Mainloop.timeout_add(SCALE_UPDATE_TIMEOUT, Lang.bind(this, function() { this._settings.set_double('height-fraction', scale.get_value()); this._dock_size_timeout = 0; return GLib.SOURCE_REMOVE; })); }, icon_size_scale_format_value_cb: function(scale, value) { return value+ ' px'; }, icon_size_scale_value_changed_cb: function(scale) { // Avoid settings the size consinuosly if (this._icon_size_timeout > 0) Mainloop.source_remove(this._icon_size_timeout); this._icon_size_timeout = Mainloop.timeout_add(SCALE_UPDATE_TIMEOUT, Lang.bind(this, function() { this._settings.set_int('dash-max-icon-size', scale.get_value()); this._icon_size_timeout = 0; return GLib.SOURCE_REMOVE; })); }, custom_opacity_scale_value_changed_cb: function(scale) { // Avoid settings the opacity consinuosly as it's change is animated if (this._opacity_timeout > 0) Mainloop.source_remove(this._opacity_timeout); this._opacity_timeout = Mainloop.timeout_add(SCALE_UPDATE_TIMEOUT, Lang.bind(this, function() { this._settings.set_double('background-opacity', scale.get_value()); this._opacity_timeout = 0; return GLib.SOURCE_REMOVE; })); }, min_opacity_scale_value_changed_cb: function(scale) { // Avoid settings the opacity consinuosly as it's change is animated if (this._opacity_timeout > 0) Mainloop.source_remove(this._opacity_timeout); this._opacity_timeout = Mainloop.timeout_add(SCALE_UPDATE_TIMEOUT, Lang.bind(this, function() { this._settings.set_double('min-alpha', scale.get_value()); this._opacity_timeout = 0; return GLib.SOURCE_REMOVE; })); }, max_opacity_scale_value_changed_cb: function(scale) { // Avoid settings the opacity consinuosly as it's change is animated if (this._opacity_timeout > 0) Mainloop.source_remove(this._opacity_timeout); this._opacity_timeout = Mainloop.timeout_add(SCALE_UPDATE_TIMEOUT, Lang.bind(this, function() { this._settings.set_double('max-alpha', scale.get_value()); this._opacity_timeout = 0; return GLib.SOURCE_REMOVE; })); }, custom_opacity_scale_format_value_cb: function(scale, value) { return Math.round(value*100) + ' %'; }, min_opacity_scale_format_value_cb: function(scale, value) { return Math.round(value*100) + ' %'; }, max_opacity_scale_format_value_cb: function(scale, value) { return Math.round(value*100) + ' %'; }, all_windows_radio_button_toggled_cb: function(button) { if (button.get_active()) this._settings.set_enum('intellihide-mode', 0); }, focus_application_windows_radio_button_toggled_cb: function(button) { if (button.get_active()) this._settings.set_enum('intellihide-mode', 1); }, maximized_windows_radio_button_toggled_cb: function(button) { if (button.get_active()) this._settings.set_enum('intellihide-mode', 2); } } }); function init() { Convenience.initTranslations(); } function buildPrefsWidget() { let settings = new Settings(); let widget = settings.widget; widget.show_all(); return widget; } dash-to-dock-extensions.gnome.org-v63/schemas/000077500000000000000000000000001326047523300214665ustar00rootroot00000000000000dash-to-dock-extensions.gnome.org-v63/schemas/org.gnome.shell.extensions.dash-to-dock.gschema.xml000066400000000000000000000562671326047523300333110ustar00rootroot00000000000000 'LEFT' Dock position Dock is shown on the Left, Right, Top or Bottom side of the screen. 0.2 Animation time Sets the time duration of the autohide effect. 0.25 Show delay Sets the delay after the mouse reaches the screen border before showing the dock. 0.20 Show delay Sets the delay after the mouse left the dock before hiding it. false Set a custom dash background background color Sets the color for the dash background. "#ffffff" Dash background color. Customize the background color of the dash. 'DEFAULT' Transparency mode for the dock FIXED: constant transparency. ADAPTIVE: lock state with the top panel when not hidden. DYNAMIC: dock takes the opaque style only when windows are close to it. 'DEFAULT' ... DEFAULT: .... DOTS: .... false Use application icon dominant color for the indicator color false Manually set the min and max opacity For Adaptive and Dynamic modes, the min/max opacity values will be given by 'min-alpha' and 'max-alpha'. 0.2 Opacity of the dash background when free-floating Sets the opacity of the dash background when no windows are close. 0.8 Opacity of the dash background when windows are close. Sets the opacity of the dash background when windows are close. 0.8 Opacity of the dash background Sets the opacity of the dash background when in autohide mode. true Dock dodges windows Enable or disable intellihide mode 'FOCUS_APPLICATION_WINDOWS' Define which windows are considered for intellihide. true Dock shown on mouse over Enable or disable autohide mode true Require pressure to show dash Enable or disable requiring pressure to show the dash 100 Pressure threshold Sets how much pressure is needed to show the dash. false Enable autohide in fullscreen mode. Enable autohide in fullscreen mode. false Dock always visible Dock is always visible true Switch workspace by scrolling over the dock Add the possibility to switch workspace by mouse scrolling over the dock. 48 Maximum dash icon size Set the allowed maximum dash icon size. Allowed range: 16..64. false Fixed icon size Keep the icon size fived by scrolling the dock. false Apply custom theme Apply customization to the dash appearance false TODO TODO false Customize the style of the running application indicators. Customize the style of the running application indicators. "#ffffff" Running application indicators color Customize the color of the running application indicators. "#ffffff" Running application indicators border color. Customize the border color of the running application indicators. 0 Running application indicators border width. Customize the border width of the running application indicators. true Show running apps Show or hide running appplications icons in the dash false Provide workspace isolation Dash shows only windows from the currentworkspace false Provide monitor isolation Dash shows only windows from the monitor true Show preview of the open windows Replace open windows list with windows previews true Show favorites apps Show or hide favorite appplications icons in the dash true Show applications button Show appplications button in the dash false Show application button at top Show appplication button at top of the dash true Animate Show Applications from the desktop Animate Show Applications from the desktop true Basic compatibility with bolt extensions Make the extension work properly when bolt extensions is enabled 0.90 Dock max height (fraction of available space) false Extend the dock container to all the available height -1 Monitor on which putting the dock Set on which monitor to put the dock, use -1 for the primary one false Enable multi-monitor docks Show a dock on every monitor true Minimize on shift+click true Activate only one window 'cycle-windows' Action when clicking on a running app Set the action that is executed when clicking on the icon of a running application 'do-nothing' Action when scrolling app Set the action that is executed when scrolling on the application icon 'minimize' Action when shit+clicking on a running app Set the action that is executed when shift+clicking on the icon of a running application 'launch' Action when clicking on a running app Set the action that is executed when middle-clicking on the icon of a running application 'launch' Action when clicking on a running app Set the action that is executed when shift+middle-clicking on the icon of a running application true Super Hot-Keys Launch and switch between dash items using Super+(0-9) true Show the dock when using the hotkeys The dock will be quickly shown so that the number-overlay is visible and app activation is easier "<Super>q" Keybinding to show the dock and the number overlay. Behavior depends on hotkeys-show-dock and hotkeys-overlay. q']]]> Keybinding to show the dock and the number overlay. Behavior depends on hotkeys-show-dock and hotkeys-overlay. 2 Timeout to hide the dock Sets the time duration before the dock is hidden again. true Show the dock when using the hotkeys The dock will be quickly shown so that the number-overlay is visible and app activation is easier 1']]]> Keybinding to launch 1st dash app Keybinding to launch 1st app. 2']]]> Keybinding to launch 2nd dash app Keybinding to launch 2nd app. 3']]]> Keybinding to launch 3rd dash app Keybinding to launch 3rd app. 4']]]> Keybinding to launch 4th dash app Keybinding to launch 4th app. 5']]]> Keybinding to launch 5th dash app Keybinding to launch 5th app. 6']]]> Keybinding to launch 6th dash app Keybinding to launch 6th app. 7']]]> Keybinding to launch 7th dash app Keybinding to launch 7th app. 8']]]> Keybinding to launch 8th dash app Keybinding to launch 8th app. 9']]]> Keybinding to launch 9th dash app Keybinding to launch 9th app. 0']]]> Keybinding to launch 10th dash app Keybinding to launch 10th app. 1']]]> Keybinding to trigger 1st dash app with shift behavior Keybinding to trigger 1st app with shift behavior. 2']]]> Keybinding to trigger 2nd dash app with shift behavior Keybinding to trigger 2nd app with shift behavior. 3']]]> Keybinding to trigger 3rd dash app with shift behavior Keybinding to trigger 3rd app with shift behavior. 4']]]> Keybinding to trigger 4th dash app with shift behavior Keybinding to trigger 4th app with shift behavior. 5']]]> Keybinding to trigger 5th dash app with shift behavior Keybinding to trigger 5th app with shift behavior. 6']]]> Keybinding to trigger 6th dash app with shift behavior Keybinding to trigger 6th app with shift behavior. 7']]]> Keybinding to trigger 7th dash app with shift behavior Keybinding to trigger 7th app with shift behavior. 8']]]> Keybinding to trigger 8th dash app with shift behavior Keybinding to trigger 8th app with shift behavior. 9']]]> Keybinding to trigger 9th dash app with shift behavior Keybinding to trigger 9th app with shift behavior. 0']]]> Keybinding to trigger 10th dash app with shift behavior Keybinding to trigger 10th app with shift behavior. 1']]]> Keybinding to trigger 1st dash app Keybinding to either show or launch the 1st application in the dash. 2']]]> Keybinding to trigger 2nd dash app Keybinding to either show or launch the 2nd application in the dash. 3']]]> Keybinding to trigger 3rd dash app Keybinding to either show or launch the 3rd application in the dash. 4']]]> Keybinding to trigger 4th dash app Keybinding to either show or launch the 4th application in the dash. 5']]]> Keybinding to trigger 5th dash app Keybinding to either show or launch the 5th application in the dash. 6']]]> Keybinding to trigger 6th dash app Keybinding to either show or launch the 6th application in the dash. 7']]]> Keybinding to trigger 7th dash app Keybinding to either show or launch the 7th application in the dash. 8']]]> Keybinding to trigger 8th dash app Keybinding to either show or launch the 8th application in the dash. 9']]]> Keybinding to trigger 9th dash app Keybinding to either show or launch the 9th application in the dash. 0']]]> Keybinding to trigger 10th dash app Keybinding to either show or launch the 10th application in the dash. false Force straight corners in dash Make the borders in the dash non rounded false Enable unity7 like glossy backlit items Emulate the unity7 backlit glossy items behaviour dash-to-dock-extensions.gnome.org-v63/stylesheet.css000066400000000000000000000104241326047523300227470ustar00rootroot00000000000000/* Shrink the dash by reducing padding and border radius */ #dashtodockContainer.shrink #dash, #dashtodockContainer.dashtodock #dash { border:1px; padding:0px; } #dashtodockContainer.shrink.left #dash, #dashtodockContainer.dashtodock.left #dash { border-left: 0px; border-radius: 0px 9px 9px 0px; } #dashtodockContainer.shrink.right #dash, #dashtodockContainer.dashtodock.right #dash { border-right: 0px; border-radius: 9px 0px 0px 9px; } #dashtodockContainer.shrink.top #dash, #dashtodockContainer.dashtodock.top #dash { border-top: 0px; border-radius: 0px 0px 9px 9px; } #dashtodockContainer.shrink.bottom #dash, #dashtodockContainer.dashtodock.bottom #dash { border-bottom: 0px; border-radius: 9px 9px 0px 0px; } #dashtodockContainer.straight-corner #dash, #dashtodockContainer.shrink.straight-corner #dash { border-radius: 0px; } /* Scrollview style */ .bottom #dashtodockDashScrollview, .top #dashtodockDashScrollview { -st-hfade-offset: 24px; } .left #dashtodockDashScrollview, .right #dashtodockDashScrollview { -st-vfade-offset: 24px; } #dashtodockContainer.running-dots .dash-item-container > StButton, #dashtodockContainer.dashtodock .dash-item-container > StButton { transition-duration: 250; background-size: contain; } #dashtodockContainer.shrink .dash-item-container > StButton, #dashtodockContainer.dashtodock .dash-item-container > StButton { padding: 1px 2px; } /* Dash height extended to the whole available vertical space */ #dashtodockContainer.extended.top #dash, #dashtodockContainer.extended.right #dash, #dashtodockContainer.extended.bottom #dash, #dashtodockContainer.extended.left #dash { border-radius: 0; } #dashtodockContainer.extended.top #dash, #dashtodockContainer.extended.bottom #dash { border-left:0px; border-right:0px; } #dashtodockContainer.extended.right #dash, #dashtodockContainer.extended.left #dash { border-top:0px; border-bottom:0px; } /* Running and focused application style */ #dashtodockContainer.running-dots .app-well-app.running > .overview-icon, #dashtodockContainer.dashtodock .app-well-app.running > .overview-icon { background-image:none; } #dashtodockContainer.running-dots .app-well-app.focused .overview-icon, #dashtodockContainer.dashtodock .app-well-app.focused .overview-icon { background-color: rgba(238, 238, 236, 0.2); } #dashtodockContainer.dashtodock #dash { background: #2e3436; } /* Only alpha value is used */ #dashtodockContainer.opaque { background-color: rgba(0, 0, 0, 0.8); border-color: rgba(0, 0, 0, 0.4); transition-duration: 300ms; } /* Only alpha value is used */ #dashtodockContainer.transparent { background-color: rgba(0, 0, 0, 0.2); border-color: rgba(0, 0, 0, 0.1); transition-duration: 500ms; } #dashtodockContainer .number-overlay { color: rgba(255,255,255,1); background-color: rgba(0,0,0,0.8); text-align: center; } #dashtodockContainer .notification-badge { color: rgba(255,255,255,1); background-color: rgba(255,0,0,1.0); padding: 0.2em 0.5em; border-radius: 1em; font-weight: bold; text-align: center; margin: 2px; } #dashtodockPreviewSeparator.popup-separator-menu-item-horizontal { width: 1px; height: auto; border-right-width: 1px; margin: 32px 0px; } .dashtodock-app-well-preview-menu-item { padding: 1em 1em 0.5em 1em; } #dashtodockContainer .metro .overview-icon{ border-radius: 0px; } #dashtodockContainer.bottom .metro.running2.focused, #dashtodockContainer.bottom .metro.running3.focused, #dashtodockContainer.bottom .metro.running4.focused, #dashtodockContainer.top .metro.running2.focused, #dashtodockContainer.top .metro.running3.focused, #dashtodockContainer.top .metro.running4.focused { background-image: url('./media/highlight_stacked_bg.svg'); background-position: 0px 0px; background-size: contain; } #dashtodockContainer.left .metro.running2.focused, #dashtodockContainer.left .metro.running3.focused, #dashtodockContainer.left .metro.running4.focused, #dashtodockContainer.right .metro.running2.focused, #dashtodockContainer.right .metro.running3.focused, #dashtodockContainer.right .metro.running4.focused { background-image: url('./media/highlight_stacked_bg_h.svg'); background-position: 0px 0px; background-size: contain; }dash-to-dock-extensions.gnome.org-v63/theming.js000066400000000000000000000623141326047523300220420ustar00rootroot00000000000000// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; const Signals = imports.signals; const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const St = imports.gi.St; const Mainloop = imports.mainloop; const AppDisplay = imports.ui.appDisplay; const AppFavorites = imports.ui.appFavorites; const Dash = imports.ui.dash; const DND = imports.ui.dnd; const IconGrid = imports.ui.iconGrid; const Main = imports.ui.main; const PopupMenu = imports.ui.popupMenu; const Tweener = imports.ui.tweener; const Util = imports.misc.util; const Workspace = imports.ui.workspace; const Me = imports.misc.extensionUtils.getCurrentExtension(); const Dock = Me.imports.docking; const Utils = Me.imports.utils; /* * DEFAULT: transparency given by theme * FIXED: constant transparency chosen by user * ADAPTIVE: apply 'transparent' style to dock AND panel when * no windows are close to the dock OR panel. * When dock is hidden, the dock 'transparent' style only * apply to itself. * DYNAMIC: apply 'transparent' style when no windows are close to the dock * */ const TransparencyMode = { DEFAULT: 0, FIXED: 1, ADAPTIVE: 2, DYNAMIC: 3 }; /** * Manage theme customization and custom theme support */ var ThemeManager = new Lang.Class({ Name: 'DashToDock.ThemeManager', _init: function(settings, dock) { this._settings = settings; this._signalsHandler = new Utils.GlobalSignalsHandler(); this._bindSettingsChanges(); this._actor = dock.actor; this._dash = dock.dash; // initialize colors with generic values this._customizedBackground = {red: 0, green: 0, blue: 0, alpha: 0}; this._customizedBorder = {red: 0, green: 0, blue: 0, alpha: 0}; this._transparency = new Transparency(this._settings, dock); this._signalsHandler.add([ // When theme changes re-obtain default background color St.ThemeContext.get_for_stage (global.stage), 'changed', Lang.bind(this, this.updateCustomTheme) ], [ // update :overview pseudoclass Main.overview, 'showing', Lang.bind(this, this._onOverviewShowing) ], [ Main.overview, 'hiding', Lang.bind(this, this._onOverviewHiding) ]); this._updateCustomStyleClasses(); // destroy themeManager when the managed actor is destroyed (e.g. extension unload) // in order to disconnect signals this._actor.connect('destroy', Lang.bind(this, this.destroy)); }, destroy: function() { this._signalsHandler.destroy(); this._transparency.destroy(); }, _onOverviewShowing: function() { this._actor.add_style_pseudo_class('overview'); }, _onOverviewHiding: function() { this._actor.remove_style_pseudo_class('overview'); }, _updateDashOpacity: function() { let newAlpha = this._settings.get_double('background-opacity'); let [backgroundColor, borderColor] = this._getDefaultColors(); if (backgroundColor==null) return; // Get the background and border alphas. We check the background alpha // for a minimum of .001 to prevent division by 0 errors let backgroundAlpha = Math.max(Math.round(backgroundColor.alpha/2.55)/100, .001); let borderAlpha = Math.round(borderColor.alpha/2.55)/100; // The border and background alphas should remain in sync // We also limit the borderAlpha to a maximum of 1 (full opacity) borderAlpha = Math.min((borderAlpha/backgroundAlpha)*newAlpha, 1); this._customizedBackground = 'rgba(' + backgroundColor.red + ',' + backgroundColor.green + ',' + backgroundColor.blue + ',' + newAlpha + ')'; this._customizedBorder = 'rgba(' + borderColor.red + ',' + borderColor.green + ',' + borderColor.blue + ',' + borderAlpha + ')'; }, _getDefaultColors: function() { // Prevent shell crash if the actor is not on the stage. // It happens enabling/disabling repeatedly the extension if (!this._dash._container.get_stage()) return [null, null]; // Remove custom style let oldStyle = this._dash._container.get_style(); this._dash._container.set_style(null); let themeNode = this._dash._container.get_theme_node(); this._dash._container.set_style(oldStyle); let backgroundColor = themeNode.get_background_color(); // Just in case the theme has different border colors .. // We want to find the inside border-color of the dock because it is // the side most visible to the user. We do this by finding the side // opposite the position let position = Utils.getPosition(this._settings); let side = position + 2; if (side > 3) side = Math.abs(side - 4); let borderColor = themeNode.get_border_color(side); return [backgroundColor, borderColor]; }, _updateDashColor: function() { // Retrieve the color. If needed we will adjust it before passing it to // this._transparency. let [backgroundColor, borderColor] = this._getDefaultColors(); if (backgroundColor==null) return; if (this._settings.get_boolean('custom-background-color')) { // When applying a custom color, we need to check the alpha value, // if not the opacity will always be overridden by the color below. // Note that if using 'adaptive' or 'dynamic' transparency modes, // the opacity will be set by the opaque/transparent styles anyway. let newAlpha = Math.round(backgroundColor.alpha/2.55)/100; if (this._settings.get_enum('transparency-mode') == TransparencyMode.FIXED) newAlpha = this._settings.get_double('background-opacity'); backgroundColor = Clutter.color_from_string(this._settings.get_string('background-color'))[1]; this._customizedBackground = 'rgba(' + backgroundColor.red + ',' + backgroundColor.green + ',' + backgroundColor.blue + ',' + newAlpha + ')'; this._customizedBorder = this._customizedBackground; } this._transparency.setColor(backgroundColor); }, _updateCustomStyleClasses: function() { if (this._settings.get_boolean('apply-custom-theme')) this._actor.add_style_class_name('dashtodock'); else this._actor.remove_style_class_name('dashtodock'); if (this._settings.get_boolean('custom-theme-shrink')) this._actor.add_style_class_name('shrink'); else this._actor.remove_style_class_name('shrink'); if (this._settings.get_enum('running-indicator-style') !== 0) this._actor.add_style_class_name('running-dots'); else this._actor.remove_style_class_name('running-dots'); // If not the built-in theme option is not selected if (!this._settings.get_boolean('apply-custom-theme')) { if (this._settings.get_boolean('force-straight-corner')) this._actor.add_style_class_name('straight-corner'); else this._actor.remove_style_class_name('straight-corner'); } else { this._actor.remove_style_class_name('straight-corner'); } }, updateCustomTheme: function() { this._updateCustomStyleClasses(); this._updateDashOpacity(); this._updateDashColor(); this._adjustTheme(); this._dash._redisplay(); }, /** * Reimported back and adapted from atomdock */ _adjustTheme: function() { // Prevent shell crash if the actor is not on the stage. // It happens enabling/disabling repeatedly the extension if (!this._dash._container.get_stage()) return; // Remove prior style edits this._dash._container.set_style(null); this._transparency.disable(); // If built-in theme is enabled do nothing else if (this._settings.get_boolean('apply-custom-theme')) return; let newStyle = ''; let position = Utils.getPosition(this._settings); if (!this._settings.get_boolean('custom-theme-shrink')) { // obtain theme border settings let themeNode = this._dash._container.get_theme_node(); let borderColor = themeNode.get_border_color(St.Side.TOP); let borderWidth = themeNode.get_border_width(St.Side.TOP); let borderRadius = themeNode.get_border_radius(St.Corner.TOPRIGHT); // We're copying border and corner styles to left border and top-left // corner, also removing bottom border and bottom-right corner styles let borderInner = ''; let borderRadiusValue = ''; let borderMissingStyle = ''; if (this._rtl && (position != St.Side.RIGHT)) borderMissingStyle = 'border-right: ' + borderWidth + 'px solid ' + borderColor.to_string() + ';'; else if (!this._rtl && (position != St.Side.LEFT)) borderMissingStyle = 'border-left: ' + borderWidth + 'px solid ' + borderColor.to_string() + ';'; switch (position) { case St.Side.LEFT: borderInner = 'border-left'; borderRadiusValue = '0 ' + borderRadius + 'px ' + borderRadius + 'px 0;'; break; case St.Side.RIGHT: borderInner = 'border-right'; borderRadiusValue = borderRadius + 'px 0 0 ' + borderRadius + 'px;'; break; case St.Side.TOP: borderInner = 'border-top'; borderRadiusValue = '0 0 ' + borderRadius + 'px ' + borderRadius + 'px;'; break; case St.Side.BOTTOM: borderInner = 'border-bottom'; borderRadiusValue = borderRadius + 'px ' + borderRadius + 'px 0 0;'; break; } newStyle = borderInner + ': none;' + 'border-radius: ' + borderRadiusValue + borderMissingStyle; // I do call set_style possibly twice so that only the background gets the transition. // The transition-property css rules seems to be unsupported this._dash._container.set_style(newStyle); } // Customize background let fixedTransparency = this._settings.get_enum('transparency-mode') == TransparencyMode.FIXED; let defaultTransparency = this._settings.get_enum('transparency-mode') == TransparencyMode.DEFAULT; if (!defaultTransparency && !fixedTransparency) { this._transparency.enable(); } else if (!defaultTransparency || this._settings.get_boolean('custom-background-color')) { newStyle = newStyle + 'background-color:'+ this._customizedBackground + '; ' + 'border-color:'+ this._customizedBorder + '; ' + 'transition-delay: 0s; transition-duration: 0.250s;'; this._dash._container.set_style(newStyle); } }, _bindSettingsChanges: function() { let keys = ['transparency-mode', 'customize-alphas', 'min-alpha', 'max-alpha', 'background-opacity', 'custom-background-color', 'background-color', 'apply-custom-theme', 'custom-theme-shrink', 'custom-theme-running-dots', 'extend-height', 'force-straight-corner']; keys.forEach(function(key) { this._signalsHandler.add([ this._settings, 'changed::' + key, Lang.bind(this, this.updateCustomTheme) ]); }, this); } }); /** * The following class is based on the following upstream commit: * https://git.gnome.org/browse/gnome-shell/commit/?id=447bf55e45b00426ed908b1b1035f472c2466956 * Transparency when free-floating */ const Transparency = new Lang.Class({ Name: 'DashToDock.Transparency', _init: function(settings, dock) { this._settings = settings; this._dash = dock.dash; this._actor = this._dash._container; this._dockActor = dock.actor; this._dock = dock; this._panel = Main.panel; this._position = Utils.getPosition(this._settings); this._backgroundColor = '0,0,0'; this._transparentAlpha = '0.2'; this._opaqueAlpha = '1'; this._transparentAlphaBorder = '0.1'; this._opaqueAlphaBorder = '0.5'; this._transparentTransition = '0ms'; this._opaqueTransition = '0ms'; this._updateStyles(); this._signalsHandler = new Utils.GlobalSignalsHandler(); this._injectionsHandler = new Utils.InjectionsHandler(); this._trackedWindows = new Map(); }, enable: function() { // ensure I never double-register/inject // although it should never happen this.disable(); this._signalsHandler.addWithLabel('transparency', [ global.window_group, 'actor-added', Lang.bind(this, this._onWindowActorAdded) ], [ global.window_group, 'actor-removed', Lang.bind(this, this._onWindowActorRemoved) ], [ global.window_manager, 'switch-workspace', Lang.bind(this, this._updateSolidStyle) ], [ Main.overview, 'hiding', Lang.bind(this, this._updateSolidStyle) ], [ Main.overview, 'showing', Lang.bind(this, this._updateSolidStyle) ]); // Window signals global.get_window_actors().forEach(function(win) { // An irrelevant window actor ('Gnome-shell') produces an error when the signals are // disconnected, therefore do not add signals to it. if (win.get_meta_window().get_wm_class() !== 'Gnome-shell') this._onWindowActorAdded(null, win); }, this); if (this._settings.get_enum('transparency-mode') === TransparencyMode.ADAPTIVE) this._enableAdaptive(); if (this._actor.get_stage()) this._updateSolidStyle(); this.emit('transparency-enabled'); }, disable: function() { this._disableAdaptive(); // ensure I never double-register/inject // although it should never happen this._signalsHandler.removeWithLabel('transparency'); for (let key of this._trackedWindows.keys()) this._trackedWindows.get(key).forEach(id => { key.disconnect(id); }); this._trackedWindows.clear(); this.emit('transparency-disabled'); }, destroy: function() { this.disable(); this._signalsHandler.destroy(); this._injectionsHandler.destroy(); }, _onWindowActorAdded: function(container, metaWindowActor) { let signalIds = []; ['allocation-changed', 'notify::visible'].forEach(s => { signalIds.push(metaWindowActor.connect(s, Lang.bind(this, this._updateSolidStyle))); }); this._trackedWindows.set(metaWindowActor, signalIds); }, _onWindowActorRemoved: function(container, metaWindowActor) { if (!this._trackedWindows.get(metaWindowActor)) return; this._trackedWindows.get(metaWindowActor).forEach(id => { metaWindowActor.disconnect(id); }); this._trackedWindows.delete(metaWindowActor); this._updateSolidStyle(); }, _updateSolidStyle: function() { let isNear = this._dockIsNear() || this._panelIsNear(); if (isNear) { this._actor.set_style(this._opaque_style); if (this._panel._updateSolidStyle && this._adaptiveEnabled) { if (this._settings.get_boolean('dock-fixed') || this._panelIsNear()) this._panel._addStyleClassName('solid'); else this._panel._removeStyleClassName('solid'); } } else { this._actor.set_style(this._transparent_style); if (this._panel._updateSolidStyle && this._adaptiveEnabled) this._panel._removeStyleClassName('solid'); } this.emit('solid-style-updated', isNear); }, _dockIsNear: function() { if (this._dockActor.has_style_pseudo_class('overview')) return false; /* Get all the windows in the active workspace that are in the primary monitor and visible */ let activeWorkspace = global.screen.get_active_workspace(); let dash = this._dash; let windows = activeWorkspace.list_windows().filter(function(metaWindow) { return metaWindow.get_monitor() === dash._monitorIndex && metaWindow.showing_on_its_workspace() && metaWindow.get_window_type() != Meta.WindowType.DESKTOP; }); /* Check if at least one window is near enough to the panel. * If the dock is hidden, we need to account for the space it would take * up when it slides out. This is avoid an ugly transition. * */ let factor = 0; if (!this._settings.get_boolean('dock-fixed') && this._dock.getDockState() == Dock.State.HIDDEN) factor = 1; let [leftCoord, topCoord] = this._actor.get_transformed_position(); let threshold; if (this._position === St.Side.LEFT) threshold = leftCoord + this._actor.get_width() * (factor + 1); else if (this._position === St.Side.RIGHT) threshold = leftCoord - this._actor.get_width() * factor; else if (this._position === St.Side.TOP) threshold = topCoord + this._actor.get_height() * (factor + 1); else threshold = topCoord - this._actor.get_height() * factor; let scale = St.ThemeContext.get_for_stage(global.stage).scale_factor; let isNearEnough = windows.some(Lang.bind(this, function(metaWindow) { let coord; if (this._position === St.Side.LEFT) { coord = metaWindow.get_frame_rect().x; return coord < threshold + 5 * scale; } else if (this._position === St.Side.RIGHT) { coord = metaWindow.get_frame_rect().x + metaWindow.get_frame_rect().width; return coord > threshold - 5 * scale; } else if (this._position === St.Side.TOP) { coord = metaWindow.get_frame_rect().y; return coord < threshold + 5 * scale; } else { coord = metaWindow.get_frame_rect().y + metaWindow.get_frame_rect().height; return coord > threshold - 5 * scale; } })); return isNearEnough; }, _panelIsNear: function() { if (!this._panel._updateSolidStyle || this._settings.get_enum('transparency-mode') !== TransparencyMode.ADAPTIVE) return false; if (this._panel.actor.has_style_pseudo_class('overview') || !Main.sessionMode.hasWindows) { this._panel._removeStyleClassName('solid'); return false; } /* Get all the windows in the active workspace that are in the * primary monitor and visible */ let activeWorkspace = global.screen.get_active_workspace(); let windows = activeWorkspace.list_windows().filter(function(metaWindow) { return metaWindow.is_on_primary_monitor() && metaWindow.showing_on_its_workspace() && metaWindow.get_window_type() != Meta.WindowType.DESKTOP; }); /* Check if at least one window is near enough to the panel */ let [, panelTop] = this._panel.actor.get_transformed_position(); let panelBottom = panelTop + this._panel.actor.get_height(); let scale = St.ThemeContext.get_for_stage(global.stage).scale_factor; let isNearEnough = windows.some(Lang.bind(this._panel, function(metaWindow) { let verticalPosition = metaWindow.get_frame_rect().y; return verticalPosition < panelBottom + 5 * scale; })); return isNearEnough; }, _updateStyles: function() { this._getAlphas(); this._transparent_style = 'background-color: rgba(' + this._backgroundColor + ', ' + this._transparentAlpha + ');' + 'border-color: rgba(' + this._backgroundColor + ', ' + this._transparentAlphaBorder + ');' + 'transition-duration: ' + this._transparentTransition + 'ms;'; this._opaque_style = 'background-color: rgba(' + this._backgroundColor + ', ' + this._opaqueAlpha + ');' + 'border-color: rgba(' + this._backgroundColor + ',' + this._opaqueAlphaBorder + ');' + 'transition-duration: ' + this._opaqueTransition + 'ms;'; this.emit('styles-updated'); }, setColor: function(color) { this._backgroundColor = color.red + ',' + color.green + ',' + color.blue; this._updateStyles(); }, _getAlphas: function() { // Create dummy object and add to the uiGroup to get it to the stage let dummyObject = new St.Bin({ name: 'dashtodockContainer', }); Main.uiGroup.add_child(dummyObject); dummyObject.add_style_class_name('opaque'); let themeNode = dummyObject.get_theme_node(); this._opaqueAlpha = themeNode.get_background_color().alpha / 255; this._opaqueAlphaBorder = themeNode.get_border_color(0).alpha / 255; this._opaqueTransition = themeNode.get_transition_duration(); dummyObject.add_style_class_name('transparent'); themeNode = dummyObject.get_theme_node(); this._transparentAlpha = themeNode.get_background_color().alpha / 255; this._transparentAlphaBorder = themeNode.get_border_color(0).alpha / 255; this._transparentTransition = themeNode.get_transition_duration(); Main.uiGroup.remove_child(dummyObject); if (this._settings.get_boolean('customize-alphas')) { this._opaqueAlpha = this._settings.get_double('max-alpha'); this._opaqueAlphaBorder = this._opaqueAlpha / 2; this._transparentAlpha = this._settings.get_double('min-alpha'); this._transparentAlphaBorder = this._transparentAlpha / 2; } if (this._settings.get_enum('transparency-mode') === TransparencyMode.ADAPTIVE && this._panel._updateSolidStyle) { themeNode = this._panel.actor.get_theme_node(); if (this._panel.actor.has_style_class_name('solid')) { this._opaqueTransition = themeNode.get_transition_duration(); this._panel._removeStyleClassName('solid'); themeNode = this._panel.actor.get_theme_node(); this._transparentTransition = themeNode.get_transition_duration(); this._panel._addStyleClassName('solid'); } else { this._transparentTransition = themeNode.get_transition_duration(); this._panel._addStyleClassName('solid'); themeNode = this._panel.actor.get_theme_node(); this._opaqueTransition = themeNode.get_transition_duration(); this._panel._removeStyleClassName('solid'); } } }, _enableAdaptive: function() { if (!this._panel._updateSolidStyle || this._dash._monitorIndex !== Main.layoutManager.primaryIndex) return; this._adaptiveEnabled = true; function UpdateSolidStyle() { return; } this._injectionsHandler.addWithLabel('adaptive', [ this._panel, '_updateSolidStyle', UpdateSolidStyle ]); // Once we injected the new function, we need to disconnect and // reconnect all window signals. for (let key of this._panel._trackedWindows.keys()) this._panel._trackedWindows.get(key).forEach(id => { key.disconnect(id); }); for (let win of this._panel._trackedWindows.keys()) this._panel._onWindowActorAdded(null, win); }, _disableAdaptive: function() { if (!this._adaptiveEnabled) return; this._injectionsHandler.removeWithLabel('adaptive'); this._adaptiveEnabled = false; // Once we removed the injection, we need to disconnect and // reconnect all window signals. for (let key of this._panel._trackedWindows.keys()) this._panel._trackedWindows.get(key).forEach(id => { key.disconnect(id); }); for (let win of this._panel._trackedWindows.keys()) this._panel._onWindowActorAdded(null, win); } }); Signals.addSignalMethods(Transparency.prototype); dash-to-dock-extensions.gnome.org-v63/utils.js000066400000000000000000000154371326047523300215530ustar00rootroot00000000000000const Clutter = imports.gi.Clutter; const Lang = imports.lang; const St = imports.gi.St; /** * Simplify global signals and function injections handling * abstract class */ const BasicHandler = new Lang.Class({ Name: 'DashToDock.BasicHandler', _init: function() { this._storage = new Object(); }, add: function(/* unlimited 3-long array arguments */) { // Convert arguments object to array, concatenate with generic let args = Array.concat('generic', Array.slice(arguments)); // Call addWithLabel with ags as if they were passed arguments this.addWithLabel.apply(this, args); }, destroy: function() { for( let label in this._storage ) this.removeWithLabel(label); }, addWithLabel: function(label /* plus unlimited 3-long array arguments*/) { if (this._storage[label] == undefined) this._storage[label] = new Array(); // Skip first element of the arguments for (let i = 1; i < arguments.length; i++) { let item = this._storage[label]; item.push(this._create(arguments[i])); } }, removeWithLabel: function(label) { if (this._storage[label]) { for (let i = 0; i < this._storage[label].length; i++) this._remove(this._storage[label][i]); delete this._storage[label]; } }, // Virtual methods to be implemented by subclass /** * Create single element to be stored in the storage structure */ _create: function(item) { throw new Error('no implementation of _create in ' + this); }, /** * Correctly delete single element */ _remove: function(item) { throw new Error('no implementation of _remove in ' + this); } }); /** * Manage global signals */ var GlobalSignalsHandler = new Lang.Class({ Name: 'DashToDock.GlobalSignalHandler', Extends: BasicHandler, _create: function(item) { let object = item[0]; let event = item[1]; let callback = item[2] let id = object.connect(event, callback); return [object, id]; }, _remove: function(item) { item[0].disconnect(item[1]); } }); /** * Color manipulation utilities */ var ColorUtils = { // Darken or brigthen color by a fraction dlum // Each rgb value is modified by the same fraction. // Return "#rrggbb" string ColorLuminance: function(r, g, b, dlum) { let rgbString = '#'; rgbString += Math.round(Math.min(Math.max(r*(1+dlum), 0), 255)).toString(16); rgbString += Math.round(Math.min(Math.max(g*(1+dlum), 0), 255)).toString(16); rgbString += Math.round(Math.min(Math.max(b*(1+dlum), 0), 255)).toString(16); return rgbString; }, // Convert hsv ([0-1, 0-1, 0-1]) to rgb ([0-255, 0-255, 0-255]). // Following algorithm in https://en.wikipedia.org/wiki/HSL_and_HSV // here with h = [0,1] instead of [0, 360] // Accept either (h,s,v) independently or {h:h, s:s, v:v} object. // Return {r:r, g:g, b:b} object. HSVtoRGB: function(h, s, v) { if (arguments.length === 1) { s = h.s; v = h.v; h = h.h; } let r,g,b; let c = v*s; let h1 = h*6; let x = c*(1 - Math.abs(h1 % 2 - 1)); let m = v - c; if (h1 <=1) r = c + m, g = x + m, b = m; else if (h1 <=2) r = x + m, g = c + m, b = m; else if (h1 <=3) r = m, g = c + m, b = x + m; else if (h1 <=4) r = m, g = x + m, b = c + m; else if (h1 <=5) r = x + m, g = m, b = c + m; else r = c + m, g = m, b = x + m; return { r: Math.round(r * 255), g: Math.round(g * 255), b: Math.round(b * 255) }; }, // Convert rgb ([0-255, 0-255, 0-255]) to hsv ([0-1, 0-1, 0-1]). // Following algorithm in https://en.wikipedia.org/wiki/HSL_and_HSV // here with h = [0,1] instead of [0, 360] // Accept either (r,g,b) independently or {r:r, g:g, b:b} object. // Return {h:h, s:s, v:v} object. RGBtoHSV: function (r, g, b) { if (arguments.length === 1) { r = r.r; g = r.g; b = r.b; } let h,s,v; let M = Math.max(r, g, b); let m = Math.min(r, g, b); let c = M - m; if (c == 0) h = 0; else if (M == r) h = ((g-b)/c) % 6; else if (M == g) h = (b-r)/c + 2; else h = (r-g)/c + 4; h = h/6; v = M/255; if (M !== 0) s = c/M; else s = 0; return { h: h, s: s, v: v }; } }; /** * Manage function injection: both instances and prototype can be overridden * and restored */ var InjectionsHandler = new Lang.Class({ Name: 'DashToDock.InjectionsHandler', Extends: BasicHandler, _create: function(item) { let object = item[0]; let name = item[1]; let injectedFunction = item[2]; let original = object[name]; object[name] = injectedFunction; return [object, name, injectedFunction, original]; }, _remove: function(item) { let object = item[0]; let name = item[1]; let original = item[3]; object[name] = original; } }); /** * Return the actual position reverseing left and right in rtl */ function getPosition(settings) { let position = settings.get_enum('dock-position'); if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) { if (position == St.Side.LEFT) position = St.Side.RIGHT; else if (position == St.Side.RIGHT) position = St.Side.LEFT; } return position; } function drawRoundedLine(cr, x, y, width, height, isRoundLeft, isRoundRight, stroke, fill) { if (height > width) { y += Math.floor((height - width) / 2.0); height = width; } height = 2.0 * Math.floor(height / 2.0); var leftRadius = isRoundLeft ? height / 2.0 : 0.0; var rightRadius = isRoundRight ? height / 2.0 : 0.0; cr.moveTo(x + width - rightRadius, y); cr.lineTo(x + leftRadius, y); if (isRoundLeft) cr.arcNegative(x + leftRadius, y + leftRadius, leftRadius, -Math.PI/2, Math.PI/2); else cr.lineTo(x, y + height); cr.lineTo(x + width - rightRadius, y + height); if (isRoundRight) cr.arcNegative(x + width - rightRadius, y + rightRadius, rightRadius, Math.PI/2, -Math.PI/2); else cr.lineTo(x + width, y); cr.closePath(); if (fill != null) { cr.setSource(fill); cr.fillPreserve(); } if (stroke != null) cr.setSource(stroke); cr.stroke(); } dash-to-dock-extensions.gnome.org-v63/windowPreview.js000066400000000000000000000546431326047523300232660ustar00rootroot00000000000000/* * Credits: * This file is based on code from the Dash to Panel extension by Jason DeRose * and code from the Taskbar extension by Zorin OS * Some code was also adapted from the upstream Gnome Shell source code. */ const Clutter = imports.gi.Clutter; const GLib = imports.gi.GLib; const Lang = imports.lang; const St = imports.gi.St; const Mainloop = imports.mainloop; const Main = imports.ui.main; const Gtk = imports.gi.Gtk; const Params = imports.misc.params; const PopupMenu = imports.ui.popupMenu; const Tweener = imports.ui.tweener; const Workspace = imports.ui.workspace; const Me = imports.misc.extensionUtils.getCurrentExtension(); const Utils = Me.imports.utils; const PREVIEW_MAX_WIDTH = 250; const PREVIEW_MAX_HEIGHT = 150; const WindowPreviewMenu = new Lang.Class({ Name: 'WindowPreviewMenu', Extends: PopupMenu.PopupMenu, _init: function(source, settings) { this._dtdSettings = settings; let side = Utils.getPosition(settings); this.parent(source.actor, 0.5, side); // We want to keep the item hovered while the menu is up this.blockSourceEvents = true; this._source = source; this._app = this._source.app; let monitorIndex = this._source.monitorIndex; this.actor.add_style_class_name('app-well-menu'); this.actor.set_style('max-width: ' + (Main.layoutManager.monitors[monitorIndex].width - 22) + 'px; ' + 'max-height: ' + (Main.layoutManager.monitors[monitorIndex].height - 22) + 'px;'); this.actor.hide(); // Chain our visibility and lifecycle to that of the source this._mappedId = this._source.actor.connect('notify::mapped', Lang.bind(this, function () { if (!this._source.actor.mapped) this.close(); })); this._destroyId = this._source.actor.connect('destroy', Lang.bind(this, this.destroy)); Main.uiGroup.add_actor(this.actor); // Change the initialized side where required. this._arrowSide = side; this._boxPointer._arrowSide = side; this._boxPointer._userArrowSide = side; this._previewBox = new WindowPreviewList(this._source, this._dtdSettings); this.addMenuItem(this._previewBox); }, _redisplay: function() { this._previewBox._shownInitially = false; this._previewBox._redisplay(); }, popup: function() { let windows = this._source.getInterestingWindows(); if (windows.length > 0) { this._redisplay(); this.open(); this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); this._source.emit('sync-tooltip'); } }, destroy: function () { if (this._mappedId) this._source.actor.disconnect(this._mappedId); if (this._destroyId) this._source.actor.disconnect(this._destroyId); this.parent(); } }); const WindowPreviewList = new Lang.Class({ Name: 'WindowPreviewMenuSection', Extends: PopupMenu.PopupMenuSection, _init: function(source, settings) { this._dtdSettings = settings; this.parent(); this.actor = new St.ScrollView({ name: 'dashtodockWindowScrollview', hscrollbar_policy: Gtk.PolicyType.NEVER, vscrollbar_policy: Gtk.PolicyType.NEVER, enable_mouse_scrolling: true }); this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent )); let position = Utils.getPosition(this._dtdSettings); this.isHorizontal = position == St.Side.BOTTOM || position == St.Side.TOP; this.box.set_vertical(!this.isHorizontal); this.box.set_name('dashtodockWindowList'); this.actor.add_actor(this.box); this.actor._delegate = this; this._shownInitially = false; this._source = source; this.app = source.app; this._redisplayId = Main.initializeDeferredWork(this.actor, Lang.bind(this, this._redisplay)); this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); this._stateChangedId = this.app.connect('windows-changed', Lang.bind(this, this._queueRedisplay)); }, _queueRedisplay: function () { Main.queueDeferredWork(this._redisplayId); }, _onScrollEvent: function(actor, event) { // Event coordinates are relative to the stage but can be transformed // as the actor will only receive events within his bounds. let stage_x, stage_y, ok, event_x, event_y, actor_w, actor_h; [stage_x, stage_y] = event.get_coords(); [ok, event_x, event_y] = actor.transform_stage_point(stage_x, stage_y); [actor_w, actor_h] = actor.get_size(); // If the scroll event is within a 1px margin from // the relevant edge of the actor, let the event propagate. if (event_y >= actor_h - 2) return Clutter.EVENT_PROPAGATE; // Skip to avoid double events mouse if (event.is_pointer_emulated()) return Clutter.EVENT_STOP; let adjustment, delta; if (this.isHorizontal) adjustment = this.actor.get_hscroll_bar().get_adjustment(); else adjustment = this.actor.get_vscroll_bar().get_adjustment(); let increment = adjustment.step_increment; switch ( event.get_scroll_direction() ) { case Clutter.ScrollDirection.UP: delta = -increment; break; case Clutter.ScrollDirection.DOWN: delta = +increment; break; case Clutter.ScrollDirection.SMOOTH: let [dx, dy] = event.get_scroll_delta(); delta = dy*increment; delta += dx*increment; break; } adjustment.set_value(adjustment.get_value() + delta); return Clutter.EVENT_STOP; }, _onDestroy: function() { this.app.disconnect(this._stateChangedId); this._stateChangedId = 0; }, _createPreviewItem: function(window) { let preview = new WindowPreviewMenuItem(window); return preview; }, _redisplay: function () { // Remove separator let nonWinItem = this._getMenuItems().filter(function(actor) { return !actor._window; }); for (let i = 0; i < nonWinItem.length; i++) { let item = nonWinItem[i]; item.destroy(); } let children = this._getMenuItems().filter(function(actor) { return actor._window; }); // Windows currently on the menu let oldWin = children.map(function(actor) { return actor._window; }); // All app windows let newWin = this._source.getInterestingWindows().sort(this.sortWindowsCompareFunction); let addedItems = []; let removedActors = []; let newIndex = 0; let oldIndex = 0; while (newIndex < newWin.length || oldIndex < oldWin.length) { // No change at oldIndex/newIndex if (oldWin[oldIndex] && oldWin[oldIndex] == newWin[newIndex]) { oldIndex++; newIndex++; continue; } // Window removed at oldIndex if (oldWin[oldIndex] && newWin.indexOf(oldWin[oldIndex]) == -1) { removedActors.push(children[oldIndex]); oldIndex++; continue; } // Window added at newIndex if (newWin[newIndex] && oldWin.indexOf(newWin[newIndex]) == -1) { addedItems.push({ item: this._createPreviewItem(newWin[newIndex]), pos: newIndex }); newIndex++; continue; } // Window moved let insertHere = newWin[newIndex + 1] && newWin[newIndex + 1] == oldWin[oldIndex]; let alreadyRemoved = removedActors.reduce(function(result, actor) { let removedWin = actor._window; return result || removedWin == newWin[newIndex]; }, false); if (insertHere || alreadyRemoved) { addedItems.push({ item: this._createPreviewItem(newWin[newIndex]), pos: newIndex + removedActors.length }); newIndex++; } else { removedActors.push(children[oldIndex]); oldIndex++; } } for (let i = 0; i < addedItems.length; i++) this.addMenuItem(addedItems[i].item, addedItems[i].pos); for (let i = 0; i < removedActors.length; i++) { let item = removedActors[i]; if (this._shownInitially) item._animateOutAndDestroy(); else item.actor.destroy(); } // Separate windows from other workspaces let ws_index = global.screen.get_active_workspace_index(); let separator_index = 0; for (let i = 0; i < newWin.length; i++) if (newWin[i].get_workspace().index() == ws_index) separator_index++; if (separator_index > 0 && separator_index !== newWin.length) { let separatorItem = new PopupMenu.PopupSeparatorMenuItem(); if (this.isHorizontal) { separatorItem._separator.set_x_expand(false); separatorItem._separator.set_y_expand(true); separatorItem._separator.set_name('dashtodockPreviewSeparator'); separatorItem._separator.add_style_class_name('popup-separator-menu-item-horizontal'); separatorItem._separator.set_x_align(Clutter.ActorAlign.CENTER); separatorItem._separator.set_y_align(Clutter.ActorAlign.FILL); } this.addMenuItem(separatorItem, separator_index); } // Skip animations on first run when adding the initial set // of items, to avoid all items zooming in at once let animate = this._shownInitially; if (!this._shownInitially) this._shownInitially = true; for (let i = 0; i < addedItems.length; i++) addedItems[i].item.show(animate); // Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=692744 // Without it, StBoxLayout may use a stale size cache this.box.queue_relayout(); if (newWin.length < 1) this._getTopMenu().close(~0); // As for upstream: // St.ScrollView always requests space horizontally for a possible vertical // scrollbar if in AUTOMATIC mode. Doing better would require implementation // of width-for-height in St.BoxLayout and St.ScrollView. This looks bad // when we *don't* need it, so turn off the scrollbar when that's true. // Dynamic changes in whether we need it aren't handled properly. let needsScrollbar = this._needsScrollbar(); let scrollbar_policy = needsScrollbar ? Gtk.PolicyType.AUTOMATIC : Gtk.PolicyType.NEVER; if (this.isHorizontal) this.actor.hscrollbar_policy = scrollbar_policy; else this.actor.vscrollbar_policy = scrollbar_policy; if (needsScrollbar) this.actor.add_style_pseudo_class('scrolled'); else this.actor.remove_style_pseudo_class('scrolled'); }, _needsScrollbar: function() { let topMenu = this._getTopMenu(); let topThemeNode = topMenu.actor.get_theme_node(); if (this.isHorizontal) { let [topMinWidth, topNaturalWidth] = topMenu.actor.get_preferred_width(-1); let topMaxWidth = topThemeNode.get_max_width(); return topMaxWidth >= 0 && topNaturalWidth >= topMaxWidth; } else { let [topMinHeight, topNaturalHeight] = topMenu.actor.get_preferred_height(-1); let topMaxHeight = topThemeNode.get_max_height(); return topMaxHeight >= 0 && topNaturalHeight >= topMaxHeight; } }, isAnimatingOut: function() { return this.actor.get_children().reduce(function(result, actor) { return result || actor.animatingOut; }, false); }, sortWindowsCompareFunction: function(windowA, windowB) { let ws_index = global.screen.get_active_workspace_index(); let winA_inActiveWS = windowA.get_workspace().index() == ws_index; let winB_inActiveWS = windowB.get_workspace().index() == ws_index; // Only change the order if winA is not in the current WS, while winB is if (!winA_inActiveWS && winB_inActiveWS) return 1; return 0; } }); const WindowPreviewMenuItem = new Lang.Class({ Name: 'WindowPreviewMenuItem', Extends: PopupMenu.PopupBaseMenuItem, _init: function(window, params) { this._window = window; this._destroyId = 0; this._windowAddedId = 0; this.parent(params); // We don't want this: it adds spacing on the left of the item. this.actor.remove_child(this._ornamentLabel); this.actor.add_style_class_name('dashtodock-app-well-preview-menu-item'); this._cloneBin = new St.Bin(); this._cloneBin.set_size(PREVIEW_MAX_WIDTH, PREVIEW_MAX_HEIGHT); // TODO: improve the way the closebutton is layout. Just use some padding // for the moment. this._cloneBin.set_style('padding-bottom: 0.5em'); this.closeButton = new St.Button({ style_class: 'window-close', x_expand: true, y_expand: true}); this.closeButton.set_x_align(Clutter.ActorAlign.END); this.closeButton.set_y_align(Clutter.ActorAlign.START); this.closeButton.opacity = 0; this.closeButton.connect('clicked', Lang.bind(this, this._closeWindow)); let overlayGroup = new Clutter.Actor({layout_manager: new Clutter.BinLayout() }); overlayGroup.add_actor(this._cloneBin); overlayGroup.add_actor(this.closeButton); let label = new St.Label({ text: window.get_title()}); label.set_style('max-width: '+PREVIEW_MAX_WIDTH +'px'); let labelBin = new St.Bin({ child: label, x_align: St.Align.MIDDLE}); this._windowTitleId = this._window.connect('notify::title', Lang.bind(this, function() { label.set_text(this._window.get_title()); })); let box = new St.BoxLayout({ vertical: true, reactive:true, x_expand:true }); box.add(overlayGroup); box.add(labelBin); this.actor.add_actor(box); this.actor.connect('enter-event', Lang.bind(this, this._onEnter)); this.actor.connect('leave-event', Lang.bind(this, this._onLeave)); this.actor.connect('key-focus-in', Lang.bind(this, this._onEnter)); this.actor.connect('key-focus-out', Lang.bind(this, this._onLeave)); this._cloneTexture(window); }, _cloneTexture: function(metaWin){ let mutterWindow = metaWin.get_compositor_private(); // Newly-created windows are added to a workspace before // the compositor finds out about them... // Moreover sometimes they return an empty texture, thus as a workarounf also check for it size if (!mutterWindow || !mutterWindow.get_texture() || !mutterWindow.get_texture().get_size()[0]) { let id = Mainloop.idle_add(Lang.bind(this, function () { // Check if there's still a point in getting the texture, // otherwise this could go on indefinitely if (this.actor && metaWin.get_workspace()) this._cloneTexture(metaWin); return GLib.SOURCE_REMOVE; })); GLib.Source.set_name_by_id(id, '[dash-to-dock] this._cloneTexture'); return; } let windowTexture = mutterWindow.get_texture(); let [width, height] = windowTexture.get_size(); let scale = Math.min(1.0, PREVIEW_MAX_WIDTH/width, PREVIEW_MAX_HEIGHT/height); let clone = new Clutter.Clone ({ source: windowTexture, reactive: true, width: width * scale, height: height * scale }); // when the source actor is destroyed, i.e. the window closed, first destroy the clone // and then destroy the menu item (do this animating out) this._destroyId = mutterWindow.connect('destroy', Lang.bind(this, function() { clone.destroy(); this._destroyId = 0; // avoid to try to disconnect this signal from mutterWindow in _onDestroy(), // as the object was just destroyed this._animateOutAndDestroy(); })); this._clone = clone; this._mutterWindow = mutterWindow; this._cloneBin.set_child(this._clone); }, _windowCanClose: function() { return this._window.can_close() && !this._hasAttachedDialogs(); }, _closeWindow: function(actor) { this._workspace = this._window.get_workspace(); // This mechanism is copied from the workspace.js upstream code // It forces window activation if the windows don't get closed, // for instance because asking user confirmation, by monitoring the opening of // such additional confirmation window this._windowAddedId = this._workspace.connect('window-added', Lang.bind(this, this._onWindowAdded)); this.deleteAllWindows(); }, deleteAllWindows: function() { // Delete all windows, starting from the bottom-most (most-modal) one //let windows = this._window.get_compositor_private().get_children(); let windows = this._clone.get_children(); for (let i = windows.length - 1; i >= 1; i--) { let realWindow = windows[i].source; let metaWindow = realWindow.meta_window; metaWindow.delete(global.get_current_time()); } this._window.delete(global.get_current_time()); }, _onWindowAdded: function(workspace, win) { let metaWindow = this._window; if (win.get_transient_for() == metaWindow) { workspace.disconnect(this._windowAddedId); this._windowAddedId = 0; // use an idle handler to avoid mapping problems - // see comment in Workspace._windowAdded let id = Mainloop.idle_add(Lang.bind(this, function() { this.emit('activate'); return GLib.SOURCE_REMOVE; })); GLib.Source.set_name_by_id(id, '[dash-to-dock] this.emit'); } }, _hasAttachedDialogs: function() { // count trasient windows let n=0; this._window.foreach_transient(function(){n++;}); return n>0; }, _onEnter: function() { this._showCloseButton(); return Clutter.EVENT_PROPAGATE; }, _onLeave: function() { if (!this._cloneBin.has_pointer && !this.closeButton.has_pointer) this._hideCloseButton(); return Clutter.EVENT_PROPAGATE; }, _idleToggleCloseButton: function() { this._idleToggleCloseId = 0; if (!this._cloneBin.has_pointer && !this.closeButton.has_pointer) this._hideCloseButton(); return GLib.SOURCE_REMOVE; }, _showCloseButton: function() { if (this._windowCanClose()) { this.closeButton.show(); Tweener.addTween(this.closeButton, { opacity: 255, time: Workspace.CLOSE_BUTTON_FADE_TIME, transition: 'easeOutQuad' }); } }, _hideCloseButton: function() { Tweener.addTween(this.closeButton, { opacity: 0, time: Workspace.CLOSE_BUTTON_FADE_TIME, transition: 'easeInQuad' }); }, show: function(animate) { let fullWidth = this.actor.get_width(); this.actor.opacity = 0; this.actor.set_width(0); let time = animate ? 0.25 : 0; Tweener.addTween(this.actor, { opacity: 255, width: fullWidth, time: time, transition: 'easeInOutQuad' }); }, _animateOutAndDestroy: function() { Tweener.addTween(this.actor, { opacity: 0, time: 0.25, }); Tweener.addTween(this.actor, { height: 0, width: 0, time: 0.25, delay: 0.25, onCompleteScope: this, onComplete: function() { this.actor.destroy(); } }); }, activate: function() { this._getTopMenu().close(); Main.activateWindow(this._window); }, _onDestroy: function() { this.parent(); if (this._windowAddedId > 0) { this._workspace.disconnect(this._windowAddedId); this._windowAddedId = 0; } if (this._destroyId > 0) { this._mutterWindow.disconnect(this._destroyId); this._destroyId = 0; } if (this._windowTitleId > 0) { this._window.disconnect(this._windowTitleId); this._windowTitleId = 0; } } });