├── .gitignore
├── LICENSE
├── POTFILES.in
├── README.md
├── appfolders-manager@maestroschan.fr.zip
├── appfolders-manager@maestroschan.fr
├── appfolderDialog.js
├── convenience.js
├── dragAndDrop.js
├── extension.js
├── locale
│ ├── appfolders-manager.pot
│ ├── be
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── de
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── el
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── fr
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── hr
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── hu
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── it
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── nl_NL
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── pl
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── pt_BR
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── ru
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── sr
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── sr@latin
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── tr
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ ├── uk_UA
│ │ └── LC_MESSAGES
│ │ │ ├── appfolders-manager.mo
│ │ │ └── appfolders-manager.po
│ └── zh_CN
│ │ └── LC_MESSAGES
│ │ ├── appfolders-manager.mo
│ │ └── appfolders-manager.po
├── metadata.json
├── prefs.js
├── schemas
│ ├── gschemas.compiled
│ └── org.gnome.shell.extensions.appfolders-manager.gschema.xml
└── stylesheet.css
├── build-a-zip.sh
├── install.sh
└── update-and-compile-translations.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | /_*
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 | {one line to give the program's name and a brief idea of what it does.}
635 | Copyright (C) {year} {name of author}
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | {project} Copyright (C) {year} {fullname}
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------
/POTFILES.in:
--------------------------------------------------------------------------------
1 | appfolders-manager@maestroschan.fr/extension.js
2 | appfolders-manager@maestroschan.fr/dragAndDrop.js
3 | appfolders-manager@maestroschan.fr/appfolderDialog.js
4 | appfolders-manager@maestroschan.fr/prefs.js
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Appfolders Management
2 |
3 | for GNOME Shell 3.28 to 3.32
4 |
5 | **After 3.33, GNOME Shell handles this feature natively.**
6 |
7 | [
](https://extensions.gnome.org/extension/1217/appfolders-manager/)
8 |
9 | A GNOME Shell extension allowing easy management of "appfolders" directly from the applications view.
10 |
11 | ### Available in :
12 |
13 | * Belarusian - [DeadMetaler](https://github.com/DeadMetaler)
14 | * Brazilian Portuguese - [Fábio Nogueira](https://github.com/frnogueira)
15 | * Croatian - [Milo Ivir](https://github.com/milotype)
16 | * English - [Romain T.](https://github.com/maoschanz/)
17 | * French - [Romain T.](https://github.com/maoschanz/)
18 | * German - [Marcel Hoppe](https://github.com/hobbypunk90)
19 | * Greek - [dirosis](https://github.com/dirosis)
20 | * Hungarian - [Balázs Úr](https://github.com/urbalazs)
21 | * Italian - [amivaleo](https://github.com/amivaleo)
22 | * Polish - [Piotr Komur](https://github.com/pkomur)
23 | * Russian - [DeadMetaler](https://github.com/DeadMetaler)
24 | * Serbian - [Slobodan Terzić](https://github.com/Faenriis)
25 | * Turkish - [Serdar Sağlam](https://github.com/TeknoMobil)
26 | * Ukrainian - [Igor Gordiichuk](https://github.com/IgorHordiichuk)
27 |
28 | A huge _thank you_ to all translators!
29 |
30 | ### Current version
31 |
32 | Features :
33 |
34 | * Create new folders
35 | * Delete folders
36 | * Rename folders
37 |
38 | * Add a category to a folder
39 | * Remove a category from a folder
40 |
41 | * Add applications to folders
42 | * Remove applications from folders
43 |
44 | 
45 |
46 | 
47 |
48 | (categories are defined by a [freedesktop standard](https://standards.freedesktop.org/menu-spec/latest/apa.html), see [this section](https://standards.freedesktop.org/menu-spec/latest/apas02.html) to learn more about additional categories available)
49 |
50 | Drag-and-drop is possible.
51 |
52 | ### Installation
53 |
54 | #### Recommended way to do
55 |
56 | Install it from [extensions.gnome.org](https://extensions.gnome.org/extension/1217/appfolders-manager/) or from *GNOME Software*.
57 |
58 | #### Manual installation
59 |
60 | - Download the .zip archive and extract files in `~/.local/share/gnome-shell/extensions/appfolders-manager@maestroschan.fr`
61 | - Restart GNOME Shell.
62 | - Enable the extension.
63 |
64 | ### See also
65 |
66 | - [a GTK+ application which manages appfolders](https://github.com/muflone/gnome-appfolders-manager)
67 | - [the "official" way to do it for GNOME 3.14 to 3.32](https://wiki.gnome.org/Apps/Software)
68 |
69 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr.zip
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/appfolderDialog.js:
--------------------------------------------------------------------------------
1 | // appfolderDialog.js
2 | // GPLv3
3 |
4 | const Signals = imports.signals;
5 | const Config = imports.misc.config;
6 |
7 | const Clutter = imports.gi.Clutter;
8 | const Gio = imports.gi.Gio;
9 | const St = imports.gi.St;
10 | const Gtk = imports.gi.Gtk;
11 |
12 | const Main = imports.ui.main;
13 | const ModalDialog = imports.ui.modalDialog;
14 | const PopupMenu = imports.ui.popupMenu;
15 | const ShellEntry = imports.ui.shellEntry;
16 |
17 | const ExtensionUtils = imports.misc.extensionUtils;
18 | const Me = ExtensionUtils.getCurrentExtension();
19 | const Extension = Me.imports.extension;
20 |
21 | const Gettext = imports.gettext.domain('appfolders-manager');
22 | const _ = Gettext.gettext;
23 |
24 | let FOLDER_SCHEMA;
25 | let FOLDER_LIST;
26 |
27 | //------------------------------------------------------------------------------
28 |
29 | // This is a modal dialog for creating a new folder, or renaming or modifying
30 | // categories of existing folders.
31 | var AppfolderDialog = class AppfolderDialog {
32 |
33 | // build a new dialog. If folder is null, the dialog will be for creating a
34 | // new folder, else app is null, and the dialog will be for editing an
35 | // existing folder
36 | constructor (folder, app, id) {
37 | this._folder = folder;
38 | this._app = app;
39 | this._id = id;
40 | this.super_dialog = new ModalDialog.ModalDialog({ destroyOnClose: true });
41 |
42 | FOLDER_SCHEMA = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
43 | FOLDER_LIST = FOLDER_SCHEMA.get_strv('folder-children');
44 |
45 | let nameSection = this._buildNameSection();
46 | let categoriesSection = this._buildCategoriesSection();
47 |
48 | this.super_dialog.contentLayout.style = 'spacing: 20px';
49 | this.super_dialog.contentLayout.add(nameSection, {
50 | x_fill: false,
51 | x_align: St.Align.START,
52 | y_align: St.Align.START
53 | });
54 | if (Extension.SETTINGS.get_boolean('categories')) {
55 | this.super_dialog.contentLayout.add(categoriesSection, {
56 | x_fill: false,
57 | x_align: St.Align.START,
58 | y_align: St.Align.START
59 | });
60 | }
61 |
62 | if (this._folder == null) {
63 | this.super_dialog.setButtons([
64 | { action: this.destroy.bind(this),
65 | label: _("Cancel"),
66 | key: Clutter.Escape },
67 |
68 | { action: this._apply.bind(this),
69 | label: _("Create"),
70 | key: Clutter.Return }
71 | ]);
72 | } else {
73 | this.super_dialog.setButtons([
74 | { action: this.destroy.bind(this),
75 | label: _("Cancel"),
76 | key: Clutter.Escape },
77 |
78 | { action: this._deleteFolder.bind(this),
79 | label: _("Delete"),
80 | key: Clutter.Delete },
81 |
82 | { action: this._apply.bind(this),
83 | label: _("Apply"),
84 | key: Clutter.Return }
85 | ]);
86 | }
87 |
88 | this._nameEntryText.connect('key-press-event', (o, e) => {
89 | let symbol = e.get_key_symbol();
90 |
91 | if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
92 | this.super_dialog.popModal();
93 | this._apply();
94 | }
95 | });
96 | }
97 |
98 | // build the section of the UI handling the folder's name and returns it.
99 | _buildNameSection () {
100 | let nameSection = new St.BoxLayout({
101 | style: 'spacing: 5px;',
102 | vertical: true,
103 | x_expand: true,
104 | natural_width_set: true,
105 | natural_width: 350,
106 | });
107 |
108 | let nameLabel = new St.Label({
109 | text: _("Folder's name:"),
110 | style: 'font-weight: bold;',
111 | });
112 | nameSection.add(nameLabel, { y_align: St.Align.START });
113 |
114 | this._nameEntry = new St.Entry({
115 | x_expand: true,
116 | });
117 | this._nameEntryText = null; ///???
118 | this._nameEntryText = this._nameEntry.clutter_text;
119 |
120 | nameSection.add(this._nameEntry, { y_align: St.Align.START });
121 | ShellEntry.addContextMenu(this._nameEntry);
122 | this.super_dialog.setInitialKeyFocus(this._nameEntryText);
123 |
124 | if (this._folder != null) {
125 | this._nameEntryText.set_text(this._folder.get_string('name'));
126 | }
127 |
128 | return nameSection;
129 | }
130 |
131 | // build the section of the UI handling the folder's categories and returns it.
132 | _buildCategoriesSection () {
133 | let categoriesSection = new St.BoxLayout({
134 | style: 'spacing: 5px;',
135 | vertical: true,
136 | x_expand: true,
137 | natural_width_set: true,
138 | natural_width: 350,
139 | });
140 |
141 | let categoriesLabel = new St.Label({
142 | text: _("Categories:"),
143 | style: 'font-weight: bold;',
144 | });
145 | categoriesSection.add(categoriesLabel, {
146 | x_fill: false,
147 | x_align: St.Align.START,
148 | y_align: St.Align.START,
149 | });
150 |
151 | let categoriesBox = new St.BoxLayout({
152 | style: 'spacing: 5px;',
153 | vertical: false,
154 | x_expand: true,
155 | });
156 |
157 | // at the left, how to add categories
158 | let addCategoryBox = new St.BoxLayout({
159 | style: 'spacing: 5px;',
160 | vertical: true,
161 | x_expand: true,
162 | });
163 |
164 | this._categoryEntry = new St.Entry({
165 | can_focus: true,
166 | x_expand: true,
167 | hint_text: _("Other category?"),
168 | secondary_icon: new St.Icon({
169 | icon_name: 'list-add-symbolic',
170 | icon_size: 16,
171 | style_class: 'system-status-icon',
172 | y_align: Clutter.ActorAlign.CENTER,
173 | }),
174 | });
175 | ShellEntry.addContextMenu(this._categoryEntry, null);
176 | this._categoryEntry.connect('secondary-icon-clicked', this._addCategory.bind(this));
177 |
178 | this._categoryEntryText = null; ///???
179 | this._categoryEntryText = this._categoryEntry.clutter_text;
180 | this._catSelectButton = new SelectCategoryButton(this);
181 |
182 | addCategoryBox.add(this._catSelectButton.actor, { y_align: St.Align.CENTER });
183 | addCategoryBox.add(this._categoryEntry, { y_align: St.Align.START });
184 | categoriesBox.add(addCategoryBox, {
185 | x_fill: true,
186 | x_align: St.Align.START,
187 | y_align: St.Align.START,
188 | });
189 |
190 | // at the right, a list of categories
191 | this.listContainer = new St.BoxLayout({
192 | vertical: true,
193 | x_expand: true,
194 | });
195 | this.noCatLabel = new St.Label({ text: _("No category") });
196 | this.listContainer.add_actor(this.noCatLabel);
197 | categoriesBox.add(this.listContainer, {
198 | x_fill: true,
199 | x_align: St.Align.END,
200 | y_align: St.Align.START,
201 | });
202 |
203 | categoriesSection.add(categoriesBox, {
204 | x_fill: true,
205 | x_align: St.Align.START,
206 | y_align: St.Align.START,
207 | });
208 |
209 | // Load categories is necessary even if no this._folder, because it
210 | // initializes the value of this._categories
211 | this._loadCategories();
212 |
213 | return categoriesSection;
214 | }
215 |
216 | open () {
217 | this.super_dialog.open();
218 | }
219 |
220 | // returns if a folder id already exists
221 | _alreadyExists (folderId) {
222 | for(var i = 0; i < FOLDER_LIST.length; i++) {
223 | if (FOLDER_LIST[i] == folderId) {
224 | // this._showError( _("This appfolder already exists.") );
225 | return true;
226 | }
227 | }
228 | return false;
229 | }
230 |
231 | destroy () {
232 | if (Extension.DEBUG) {
233 | log('[AppfolderDialog v2] destroying dialog');
234 | }
235 | this._catSelectButton.destroy(); // XXX crée des erreurs osef
236 | this.super_dialog.destroy(); // XXX crée des erreurs reloues ???
237 | }
238 |
239 | // Generates a valid folder id, which has no space, no dot, no slash, is not
240 | // empty, and doesn't already exist.
241 | _folderId (newName) {
242 | let folderId = this._removeChar(newName, " ");
243 | folderId = this._removeChar(folderId, ".");
244 | folderId = this._removeChar(folderId, "/");
245 | if(folderId == "") {
246 | folderId = "unnamedFolder";
247 | }
248 | if(this._alreadyExists(folderId)) {
249 | // probably unnecessary
250 | folderId = this._folderId(folderId + '_');
251 | }
252 | return folderId;
253 | }
254 |
255 | _removeChar(folderId, char) {
256 | let tmp0 = folderId.split(char);
257 | folderId = "";
258 | for(var i = 0; i < tmp0.length; i++) {
259 | folderId += tmp0[i];
260 | }
261 | return folderId;
262 | }
263 |
264 | // creates a folder from the data filled by the user (with no properties)
265 | _create () {
266 | let folderId = this._folderId(this._nameEntryText.get_text());
267 |
268 | FOLDER_LIST.push(folderId);
269 | FOLDER_SCHEMA.set_strv('folder-children', FOLDER_LIST);
270 |
271 | this._folder = new Gio.Settings({
272 | schema_id: 'org.gnome.desktop.app-folders.folder',
273 | path: '/org/gnome/desktop/app-folders/folders/' + folderId + '/'
274 | });
275 | // this._folder.set_string('name', this._nameEntryText.get_text()); //superflu
276 | // est-il nécessaire d'initialiser la clé apps à [] ??
277 | this._addToFolder();
278 | }
279 |
280 | // sets the name to the folder
281 | _applyName () {
282 | let newName = this._nameEntryText.get_text();
283 | this._folder.set_string('name', newName); // génère un bug ?
284 | return Clutter.EVENT_STOP;
285 | }
286 |
287 | // loads categories, as set in gsettings, to the UI
288 | _loadCategories () {
289 | if (this._folder == null) {
290 | this._categories = [];
291 | } else {
292 | this._categories = this._folder.get_strv('categories');
293 | if ((this._categories == null) || (this._categories.length == 0)) {
294 | this._categories = [];
295 | } else {
296 | this.noCatLabel.visible = false;
297 | }
298 | }
299 | this._categoriesButtons = [];
300 | for (var i = 0; i < this._categories.length; i++) {
301 | this._addCategoryBox(i);
302 | }
303 | }
304 |
305 | _addCategoryBox (i) {
306 | let aCategory = new AppCategoryBox(this, i);
307 | this.listContainer.add_actor(aCategory.super_box);
308 | }
309 |
310 | // adds a category to the UI (will be added to gsettings when pressing
311 | // "apply" only)
312 | _addCategory (entry, new_cat_name) {
313 | if (new_cat_name == null) {
314 | new_cat_name = this._categoryEntryText.get_text();
315 | }
316 | if (this._categories.indexOf(new_cat_name) != -1) {
317 | return;
318 | }
319 | if (new_cat_name == '') {
320 | return;
321 | }
322 | this._categories.push(new_cat_name);
323 | this._categoryEntryText.set_text('');
324 | this.noCatLabel.visible = false;
325 | this._addCategoryBox(this._categories.length-1);
326 | }
327 |
328 | // adds all categories to gsettings
329 | _applyCategories () {
330 | this._folder.set_strv('categories', this._categories);
331 | return Clutter.EVENT_STOP;
332 | }
333 |
334 | // Apply everything by calling methods above, and reload the view
335 | _apply () {
336 | if (this._app != null) {
337 | this._create();
338 | // this._addToFolder();
339 | }
340 | this._applyCategories();
341 | this._applyName();
342 | this.destroy();
343 |
344 | Main.overview.viewSelector.appDisplay._views[1].view._redisplay();
345 | if (Extension.DEBUG) {
346 | log('[AppfolderDialog v2] reload the view');
347 | }
348 | }
349 |
350 | // initializes the folder with its first app. This is not optional since
351 | // empty folders are not displayed. TODO use the equivalent method from
352 | // extension.js
353 | _addToFolder () {
354 | let content = this._folder.get_strv('apps');
355 | content.push(this._app);
356 | this._folder.set_strv('apps', content);
357 | }
358 |
359 | // Delete the folder, using the extension.js method
360 | _deleteFolder () {
361 | if (this._folder != null) {
362 | Extension.deleteFolder(this._id);
363 | }
364 | this.destroy();
365 | }
366 | };
367 |
368 | //------------------------------------------------------------------------------
369 |
370 | // Very complex way to have a menubutton for displaying a menu with standard
371 | // categories. Button part.
372 | class SelectCategoryButton {
373 | constructor (dialog) {
374 | this._dialog = dialog;
375 |
376 | let catSelectBox = new St.BoxLayout({
377 | vertical: false,
378 | x_expand: true,
379 | });
380 | let catSelectLabel = new St.Label({
381 | text: _("Select a category…"),
382 | x_align: Clutter.ActorAlign.START,
383 | y_align: Clutter.ActorAlign.CENTER,
384 | x_expand: true,
385 | });
386 | let catSelectIcon = new St.Icon({
387 | icon_name: 'pan-down-symbolic',
388 | icon_size: 16,
389 | style_class: 'system-status-icon',
390 | x_expand: false,
391 | x_align: Clutter.ActorAlign.END,
392 | y_align: Clutter.ActorAlign.CENTER,
393 | });
394 | catSelectBox.add(catSelectLabel, { y_align: St.Align.MIDDLE });
395 | catSelectBox.add(catSelectIcon, { y_align: St.Align.END });
396 | this.actor = new St.Button ({
397 | x_align: Clutter.ActorAlign.CENTER,
398 | y_align: Clutter.ActorAlign.CENTER,
399 | child: catSelectBox,
400 | style_class: 'button',
401 | style: 'padding: 5px 5px;',
402 | x_expand: true,
403 | y_expand: false,
404 | x_fill: true,
405 | y_fill: true,
406 | });
407 | this.actor.connect('button-press-event', this._onButtonPress.bind(this));
408 |
409 | this._menu = null;
410 | if (Config.PACKAGE_VERSION < '3.33') {
411 | // desesperate effort to get useless 3.34 compatibility
412 | this._menuManager = new PopupMenu.PopupMenuManager(this);
413 | } else {
414 | // main case
415 | this._menuManager = new PopupMenu.PopupMenuManager(this.actor);
416 | }
417 | }
418 |
419 | popupMenu () {
420 | this.actor.fake_release();
421 | if (!this._menu) {
422 | this._menu = new SelectCategoryMenu(this, this._dialog);
423 | this._menu.super_menu.connect('open-state-changed', (menu, isPoppedUp) => {
424 | if (!isPoppedUp) {
425 | this.actor.sync_hover();
426 | this.emit('menu-state-changed', false);
427 | }
428 | });
429 | this._menuManager.addMenu(this._menu.super_menu);
430 | }
431 | this.emit('menu-state-changed', true);
432 | this.actor.set_hover(true);
433 | this._menu.popup();
434 | this._menuManager.ignoreRelease();
435 | return false;
436 | }
437 |
438 | _onButtonPress (actor, event) {
439 | this.popupMenu();
440 | return Clutter.EVENT_STOP;
441 | }
442 |
443 | destroy () {
444 | if (this._menu) {
445 | this._menu.destroy();
446 | }
447 | // if uncommented with 3.28 XXX TypeError: this.parent is not a function
448 | // this.actor.destroy();
449 | }
450 | };
451 | Signals.addSignalMethods(SelectCategoryButton.prototype);
452 |
453 | //------------------------------------------------------------------------------
454 |
455 | // Very complex way to have a menubutton for displaying a menu with standard
456 | // categories. Menu part.
457 | class SelectCategoryMenu {
458 | constructor (source, dialog) {
459 | this.super_menu = new PopupMenu.PopupMenu(source.actor, 0.5, St.Side.RIGHT);
460 | this._source = source;
461 | this._dialog = dialog;
462 | this.super_menu.actor.add_style_class_name('app-well-menu');
463 | this._source.actor.connect('destroy', this.super_menu.destroy.bind(this));
464 |
465 | // We want to keep the item hovered while the menu is up //XXX used ??
466 | this.super_menu.blockSourceEvents = true;
467 |
468 | Main.uiGroup.add_actor(this.super_menu.actor);
469 |
470 | // This is a really terrible hack to overwrite _redisplay without
471 | // actually inheriting from PopupMenu.PopupMenu
472 | this.super_menu._redisplay = this._redisplay;
473 | this.super_menu._dialog = this._dialog;
474 | }
475 |
476 | _redisplay () {
477 | this.removeAll();
478 | let mainCategories = ['AudioVideo', 'Audio', 'Video', 'Development',
479 | 'Education', 'Game', 'Graphics', 'Network', 'Office', 'Science',
480 | 'Settings', 'System', 'Utility'];
481 | // XXX not translatable because they're ids not really labels
482 | for (var i=0; i {
486 | this._dialog._addCategory(null, labelItem);
487 | });
488 | this.addMenuItem(item);
489 | }
490 | }
491 |
492 | popup (activatingButton) {
493 | this.super_menu._redisplay();
494 | this.super_menu.open();
495 | }
496 |
497 | destroy () {
498 | this.super_menu.close(); // FIXME error in the logs but i don't care
499 | this.super_menu.destroy();
500 | }
501 | };
502 | Signals.addSignalMethods(SelectCategoryMenu.prototype);
503 |
504 | //------------------------------------------------------------------------------
505 |
506 | // This custom widget is a deletable row, displaying a category name.
507 | class AppCategoryBox {
508 | constructor (dialog, i) {
509 | this.super_box = new St.BoxLayout({
510 | vertical: false,
511 | style_class: 'appCategoryBox',
512 | });
513 | this._dialog = dialog;
514 | this.catName = this._dialog._categories[i];
515 | this.super_box.add_actor(new St.Label({
516 | text: this.catName,
517 | y_align: Clutter.ActorAlign.CENTER,
518 | x_align: Clutter.ActorAlign.CENTER,
519 | }));
520 | this.super_box.add_actor( new St.BoxLayout({ x_expand: true }) );
521 | this.deleteButton = new St.Button({
522 | x_expand: false,
523 | y_expand: true,
524 | style_class: 'appCategoryDeleteBtn',
525 | y_align: Clutter.ActorAlign.CENTER,
526 | x_align: Clutter.ActorAlign.CENTER,
527 | child: new St.Icon({
528 | icon_name: 'edit-delete-symbolic',
529 | icon_size: 16,
530 | style_class: 'system-status-icon',
531 | x_expand: false,
532 | y_expand: true,
533 | style: 'margin: 3px;',
534 | y_align: Clutter.ActorAlign.CENTER,
535 | x_align: Clutter.ActorAlign.CENTER,
536 | }),
537 | });
538 | this.super_box.add_actor(this.deleteButton);
539 | this.deleteButton.connect('clicked', this.removeFromList.bind(this));
540 | }
541 |
542 | removeFromList () {
543 | this._dialog._categories.splice(this._dialog._categories.indexOf(this.catName), 1);
544 | if (this._dialog._categories.length == 0) {
545 | this._dialog.noCatLabel.visible = true;
546 | }
547 | this.destroy();
548 | }
549 |
550 | destroy () {
551 | this.deleteButton.destroy();
552 | this.super_box.destroy();
553 | }
554 | };
555 |
556 | //------------------------------------------------------------------------------
557 |
558 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/convenience.js:
--------------------------------------------------------------------------------
1 | /* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */
2 | /*
3 | Copyright (c) 2011-2012, Giovanni Campagna
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 | * Redistributions of source code must retain the above copyright
8 | notice, this list of conditions and the following disclaimer.
9 | * Redistributions in binary form must reproduce the above copyright
10 | notice, this list of conditions and the following disclaimer in the
11 | documentation and/or other materials provided with the distribution.
12 | * Neither the name of the GNOME nor the
13 | names of its contributors may be used to endorse or promote products
14 | derived from this software without specific prior written permission.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 | */
27 |
28 | const Gettext = imports.gettext;
29 | const Gio = imports.gi.Gio;
30 |
31 | const Config = imports.misc.config;
32 | const ExtensionUtils = imports.misc.extensionUtils;
33 |
34 | /**
35 | * initTranslations:
36 | * @domain: (optional): the gettext domain to use
37 | *
38 | * Initialize Gettext to load translations from extensionsdir/locale.
39 | * If @domain is not provided, it will be taken from metadata['gettext-domain']
40 | */
41 | function initTranslations(domain) {
42 | let extension = ExtensionUtils.getCurrentExtension();
43 | domain = domain || extension.metadata['gettext-domain'];
44 |
45 | // check if this extension was built with "make zip-file", and thus
46 | // has the locale files in a subfolder
47 | // otherwise assume that extension has been installed in the
48 | // same prefix as gnome-shell
49 | let localeDir = extension.dir.get_child('locale');
50 | if (localeDir.query_exists(null))
51 | Gettext.bindtextdomain(domain, localeDir.get_path());
52 | else
53 | Gettext.bindtextdomain(domain, Config.LOCALEDIR);
54 | }
55 |
56 | /**
57 | * getSettings:
58 | * @schema: (optional): the GSettings schema id
59 | *
60 | * Builds and return a GSettings schema for @schema, using schema files
61 | * in extensionsdir/schemas. If @schema is not provided, it is taken from
62 | * metadata['settings-schema'].
63 | */
64 | function getSettings(schema) {
65 | let extension = ExtensionUtils.getCurrentExtension();
66 | schema = schema || extension.metadata['settings-schema'];
67 |
68 | const GioSSS = Gio.SettingsSchemaSource;
69 |
70 | // check if this extension was built with "make zip-file", and thus
71 | // has the schema files in a subfolder
72 | // otherwise assume that extension has been installed in the
73 | // same prefix as gnome-shell (and therefore schemas are available
74 | // in the standard folders)
75 | let schemaDir = extension.dir.get_child('schemas');
76 | let schemaSource;
77 | if (schemaDir.query_exists(null)) {
78 | schemaSource = GioSSS.new_from_directory(schemaDir.get_path(),
79 | GioSSS.get_default(),
80 | false);
81 | } else {
82 | schemaSource = GioSSS.get_default();
83 | }
84 |
85 | let schemaObj = schemaSource.lookup(schema, true);
86 | if (!schemaObj)
87 | throw new Error('Schema ' + schema + ' could not be found for extension '
88 | + extension.metadata.uuid + '. Please check your installation.');
89 |
90 | return new Gio.Settings({ settings_schema: schemaObj });
91 | }
92 |
93 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/dragAndDrop.js:
--------------------------------------------------------------------------------
1 | // dragAndDrop.js
2 | // GPLv3
3 |
4 | const DND = imports.ui.dnd;
5 | const AppDisplay = imports.ui.appDisplay;
6 | const Clutter = imports.gi.Clutter;
7 | const St = imports.gi.St;
8 | const Main = imports.ui.main;
9 | const Mainloop = imports.mainloop;
10 |
11 | const ExtensionUtils = imports.misc.extensionUtils;
12 | const Me = ExtensionUtils.getCurrentExtension();
13 | const Extension = Me.imports.extension;
14 |
15 | const CHANGE_PAGE_TIMEOUT = 400;
16 |
17 | const Gettext = imports.gettext.domain('appfolders-manager');
18 | const _ = Gettext.gettext;
19 |
20 | //------------------------------------------------------------------------------
21 |
22 | var OVERLAY_MANAGER;
23 |
24 | /* This method is called by extension.js' enable function. It does code injections
25 | * to AppDisplay.AppIcon, connecting it to DND-related signals.
26 | */
27 | function initDND () {
28 | OVERLAY_MANAGER = new OverlayManager();
29 | }
30 |
31 | //------------------------------------------------------------------------------
32 |
33 | /* Amazing! A singleton! It allows easy (and safer?) access to general methods,
34 | * managing other objects: it creates/updates/deletes all overlays (for folders,
35 | * pages, creation, removing).
36 | */
37 | class OverlayManager {
38 | constructor () {
39 | this.addActions = [];
40 | this.removeAction = new FolderActionArea('remove');
41 | this.createAction = new FolderActionArea('create');
42 | this.upAction = new NavigationArea('up');
43 | this.downAction = new NavigationArea('down');
44 |
45 | this.next_drag_should_recompute = true;
46 | this.current_width = 0;
47 | }
48 |
49 | on_drag_begin () {
50 | this.ensurePopdowned();
51 | this.ensureFolderOverlayActors();
52 | this.updateFoldersVisibility();
53 | this.updateState(true);
54 | }
55 |
56 | on_drag_end () {
57 | // force to compute new positions if a drop occurs
58 | this.next_drag_should_recompute = true;
59 | this.updateState(false);
60 | }
61 |
62 | on_drag_cancelled () {
63 | this.updateState(false);
64 | }
65 |
66 | updateArrowVisibility () {
67 | let grid = Main.overview.viewSelector.appDisplay._views[1].view._grid;
68 | if (grid.currentPage == 0) {
69 | this.upAction.setActive(false);
70 | } else {
71 | this.upAction.setActive(true);
72 | }
73 | if (grid.currentPage == grid._nPages -1) {
74 | this.downAction.setActive(false);
75 | } else {
76 | this.downAction.setActive(true);
77 | }
78 | this.upAction.show();
79 | this.downAction.show();
80 | }
81 |
82 | updateState (isDragging) {
83 | if (isDragging) {
84 | this.removeAction.show();
85 | if (this.openedFolder == null) {
86 | this.removeAction.setActive(false);
87 | } else {
88 | this.removeAction.setActive(true);
89 | }
90 | this.createAction.show();
91 | this.updateArrowVisibility();
92 | } else {
93 | this.hideAll();
94 | }
95 | }
96 |
97 | hideAll () {
98 | this.removeAction.hide();
99 | this.createAction.hide();
100 | this.upAction.hide();
101 | this.downAction.hide();
102 | this.hideAllFolders();
103 | }
104 |
105 | hideAllFolders () {
106 | for (var i = 0; i < this.addActions.length; i++) {
107 | this.addActions[i].hide();
108 | }
109 | }
110 |
111 | updateActorsPositions () {
112 | let monitor = Main.layoutManager.primaryMonitor;
113 | let viewSelector = Main.overview.viewSelector;
114 | this.topOfTheGrid = viewSelector.actor.get_parent().get_parent().get_allocation_box().y1;
115 | let temp = viewSelector.appDisplay._views[1].view.actor.get_parent();
116 | let bottomOfTheGrid = this.topOfTheGrid + temp.get_allocation_box().y2;
117 |
118 | let _availHeight = bottomOfTheGrid - this.topOfTheGrid;
119 | let _availWidth = viewSelector.appDisplay._views[1].view._grid.actor.width;
120 | let sideMargin = (monitor.width - _availWidth) / 2;
121 |
122 | let xMiddle = ( monitor.x + monitor.width ) / 2;
123 | let yMiddle = ( monitor.y + monitor.height ) / 2;
124 |
125 | // Positions of areas
126 | this.removeAction.setPosition( xMiddle , bottomOfTheGrid );
127 | this.createAction.setPosition( xMiddle, Main.overview._panelGhost.height );
128 | this.upAction.setPosition( 0, Main.overview._panelGhost.height );
129 | this.downAction.setPosition( 0, bottomOfTheGrid );
130 |
131 | // Sizes of areas
132 | this.removeAction.setSize(xMiddle, monitor.height - bottomOfTheGrid);
133 | this.createAction.setSize(xMiddle, this.topOfTheGrid - Main.overview._panelGhost.height);
134 | this.upAction.setSize(xMiddle, this.topOfTheGrid - Main.overview._panelGhost.height);
135 | this.downAction.setSize(xMiddle, monitor.height - bottomOfTheGrid);
136 |
137 | this.updateArrowVisibility();
138 | }
139 |
140 | ensureFolderOverlayActors () {
141 | // A folder was opened, and just closed.
142 | if (this.openedFolder != null) {
143 | this.updateActorsPositions();
144 | this.computeFolderOverlayActors();
145 | this.next_drag_should_recompute = true;
146 | return;
147 | }
148 |
149 | // The grid "moved" or the whole shit needs forced updating
150 | let allAppsGrid = Main.overview.viewSelector.appDisplay._views[1].view._grid;
151 | let new_width = allAppsGrid.actor.allocation.get_width();
152 | if (new_width != this.current_width || this.next_drag_should_recompute) {
153 | this.next_drag_should_recompute = false;
154 | this.updateActorsPositions();
155 | this.computeFolderOverlayActors();
156 | }
157 | }
158 |
159 | computeFolderOverlayActors () {
160 | let monitor = Main.layoutManager.primaryMonitor;
161 | let xMiddle = ( monitor.x + monitor.width ) / 2;
162 | let yMiddle = ( monitor.y + monitor.height ) / 2;
163 | let allAppsGrid = Main.overview.viewSelector.appDisplay._views[1].view._grid;
164 |
165 | let nItems = 0;
166 | let indexes = [];
167 | let folders = [];
168 | let x, y;
169 |
170 | Main.overview.viewSelector.appDisplay._views[1].view._allItems.forEach(function(icon) {
171 | if (icon.actor.visible) {
172 | if (icon instanceof AppDisplay.FolderIcon) {
173 | indexes.push(nItems);
174 | folders.push(icon);
175 | }
176 | nItems++;
177 | }
178 | });
179 |
180 | this.current_width = allAppsGrid.actor.allocation.get_width();
181 | let x_correction = (monitor.width - this.current_width)/2;
182 | let availHeightPerPage = (allAppsGrid.actor.height)/(allAppsGrid._nPages);
183 |
184 | for (var i = 0; i < this.addActions.length; i++) {
185 | this.addActions[i].actor.destroy();
186 | }
187 |
188 | for (var i = 0; i < indexes.length; i++) {
189 | let inPageIndex = indexes[i] % allAppsGrid._childrenPerPage;
190 | let page = Math.floor(indexes[i] / allAppsGrid._childrenPerPage);
191 | x = folders[i].actor.get_allocation_box().x1;
192 | y = folders[i].actor.get_allocation_box().y1;
193 |
194 | // Invalid coords (example: when dragging out of the folder) should
195 | // not produce a visible overlay, a negative page number is an easy
196 | // way to be sure it stays hidden.
197 | if (x == 0) {
198 | page = -1;
199 | }
200 | x = Math.floor(x + x_correction);
201 | y = y + this.topOfTheGrid;
202 | y = y - (page * availHeightPerPage);
203 |
204 | this.addActions[i] = new FolderArea(folders[i].id, x, y, page);
205 | }
206 | }
207 |
208 | updateFoldersVisibility () {
209 | let appView = Main.overview.viewSelector.appDisplay._views[1].view;
210 | for (var i = 0; i < this.addActions.length; i++) {
211 | if ((this.addActions[i].page == appView._grid.currentPage) && (!appView._currentPopup)) {
212 | this.addActions[i].show();
213 | } else {
214 | this.addActions[i].hide();
215 | }
216 | }
217 | }
218 |
219 | ensurePopdowned () {
220 | let appView = Main.overview.viewSelector.appDisplay._views[1].view;
221 | if (appView._currentPopup) {
222 | this.openedFolder = appView._currentPopup._source.id;
223 | appView._currentPopup.popdown();
224 | } else {
225 | this.openedFolder = null;
226 | }
227 | }
228 |
229 | goToPage (nb) {
230 | Main.overview.viewSelector.appDisplay._views[1].view.goToPage( nb );
231 | this.updateArrowVisibility();
232 | this.hideAllFolders();
233 | this.updateFoldersVisibility(); //load folders of the new page
234 | }
235 |
236 | destroy () {
237 | for (let i = 0; i > this.addActions.length; i++) {
238 | this.addActions[i].destroy();
239 | }
240 | this.removeAction.destroy();
241 | this.createAction.destroy();
242 | this.upAction.destroy();
243 | this.downAction.destroy();
244 | //log('OverlayManager destroyed');
245 | }
246 | };
247 |
248 | //------------------------------------------------------------------------------
249 |
250 | // Abstract overlay with very generic methods
251 | class DroppableArea {
252 |
253 | constructor (id) {
254 | this.id = id;
255 | this.styleClass = 'folderArea';
256 |
257 | this.actor = new St.BoxLayout ({
258 | width: 10,
259 | height: 10,
260 | visible: false,
261 | });
262 | this.actor._delegate = this;
263 |
264 | this.lock = true;
265 | this.use_frame = Extension.DEBUG;
266 | }
267 |
268 | setPosition (x, y) {
269 | let monitor = Main.layoutManager.primaryMonitor;
270 | this.actor.set_position(monitor.x + x, monitor.y + y);
271 | }
272 |
273 | setSize (w, h) {
274 | this.actor.width = w;
275 | this.actor.height = h;
276 | }
277 |
278 | hide () {
279 | this.actor.visible = false;
280 | this.lock = true;
281 | }
282 |
283 | show () {
284 | this.actor.visible = true;
285 | }
286 |
287 | setActive (active) {
288 | this._active = active;
289 | if (this._active) {
290 | this.actor.style_class = this.styleClass;
291 | } else {
292 | this.actor.style_class = 'insensitiveArea';
293 | }
294 | }
295 |
296 | destroy () {
297 | this.actor.destroy();
298 | }
299 | }
300 |
301 | /* Overlay representing an "action". Actions can be creating a folder, or
302 | * removing an app from a folder. These areas accept drop, and display a label.
303 | */
304 | class FolderActionArea extends DroppableArea {
305 | constructor (id) {
306 | super(id);
307 |
308 | let x, y, label;
309 |
310 | switch (this.id) {
311 | case 'create':
312 | label = _("Create a new folder");
313 | this.styleClass = 'shadowedAreaTop';
314 | break;
315 | case 'remove':
316 | label = '';
317 | this.styleClass = 'shadowedAreaBottom';
318 | break;
319 | default:
320 | label = 'invalid id';
321 | break;
322 | }
323 | if (this.use_frame) {
324 | this.styleClass = 'framedArea';
325 | }
326 | this.actor.style_class = this.styleClass;
327 |
328 | this.label = new St.Label({
329 | text: label,
330 | style_class: 'dropAreaLabel',
331 | x_expand: true,
332 | y_expand: true,
333 | x_align: Clutter.ActorAlign.CENTER,
334 | y_align: Clutter.ActorAlign.CENTER,
335 | });
336 | this.actor.add(this.label);
337 |
338 | this.setPosition(10, 10);
339 | Main.layoutManager.overviewGroup.add_actor(this.actor);
340 | }
341 |
342 | getRemoveLabel () {
343 | let label;
344 | if (OVERLAY_MANAGER.openedFolder == null) {
345 | label = '…';
346 | } else {
347 | let folder_schema = Extension.folderSchema (OVERLAY_MANAGER.openedFolder);
348 | label = folder_schema.get_string('name');
349 | }
350 | return (_("Remove from %s")).replace('%s', label);
351 | }
352 |
353 | setActive (active) {
354 | super.setActive(active);
355 | if (this.id == 'remove') {
356 | this.label.text = this.getRemoveLabel();
357 | }
358 | }
359 |
360 | handleDragOver (source, actor, x, y, time) {
361 | if (source instanceof AppDisplay.AppIcon && this._active) {
362 | return DND.DragMotionResult.MOVE_DROP;
363 | }
364 | Main.overview.endItemDrag(this);
365 | return DND.DragMotionResult.NO_DROP;
366 | }
367 |
368 | acceptDrop (source, actor, x, y, time) {
369 | if ((source instanceof AppDisplay.AppIcon) && (this.id == 'create')) {
370 | Extension.createNewFolder(source);
371 | Main.overview.endItemDrag(this);
372 | return true;
373 | }
374 | if ((source instanceof AppDisplay.AppIcon) && (this.id == 'remove')) {
375 | this.removeApp(source);
376 | Main.overview.endItemDrag(this);
377 | return true;
378 | }
379 | Main.overview.endItemDrag(this);
380 | return false;
381 | }
382 |
383 | removeApp (source) {
384 | let id = source.app.get_id();
385 | Extension.removeFromFolder(id, OVERLAY_MANAGER.openedFolder);
386 | OVERLAY_MANAGER.updateState(false);
387 | Main.overview.viewSelector.appDisplay._views[1].view._redisplay();
388 | }
389 |
390 | destroy () {
391 | this.label.destroy();
392 | super.destroy();
393 | }
394 | };
395 |
396 | /* Overlay reacting to hover, but isn't droppable. The goal is to go to an other
397 | * page of the grid while dragging an app.
398 | */
399 | class NavigationArea extends DroppableArea {
400 | constructor (id) {
401 | super(id);
402 |
403 | let x, y, i;
404 | switch (this.id) {
405 | case 'up':
406 | i = 'pan-up-symbolic';
407 | this.styleClass = 'shadowedAreaTop';
408 | break;
409 | case 'down':
410 | i = 'pan-down-symbolic';
411 | this.styleClass = 'shadowedAreaBottom';
412 | break;
413 | default:
414 | i = 'dialog-error-symbolic';
415 | break;
416 | }
417 | if (this.use_frame) {
418 | this.styleClass = 'framedArea';
419 | }
420 | this.actor.style_class = this.styleClass;
421 |
422 | this.actor.add(new St.Icon({
423 | icon_name: i,
424 | icon_size: 24,
425 | style_class: 'system-status-icon',
426 | x_expand: true,
427 | y_expand: true,
428 | x_align: Clutter.ActorAlign.CENTER,
429 | y_align: Clutter.ActorAlign.CENTER,
430 | }));
431 |
432 | this.setPosition(x, y);
433 | Main.layoutManager.overviewGroup.add_actor(this.actor);
434 | }
435 |
436 | handleDragOver (source, actor, x, y, time) {
437 | if (this.id == 'up' && this._active) {
438 | this.pageUp();
439 | return DND.DragMotionResult.CONTINUE;
440 | }
441 |
442 | if (this.id == 'down' && this._active) {
443 | this.pageDown();
444 | return DND.DragMotionResult.CONTINUE;
445 | }
446 |
447 | Main.overview.endItemDrag(this);
448 | return DND.DragMotionResult.NO_DROP;
449 | }
450 |
451 | pageUp () {
452 | if(this.lock && !this.timeoutSet) {
453 | this._timeoutId = Mainloop.timeout_add(CHANGE_PAGE_TIMEOUT, this.unlock.bind(this));
454 | this.timeoutSet = true;
455 | }
456 | if(!this.lock) {
457 | let currentPage = Main.overview.viewSelector.appDisplay._views[1].view._grid.currentPage;
458 | this.lock = true;
459 | OVERLAY_MANAGER.goToPage(currentPage - 1);
460 | }
461 | }
462 |
463 | pageDown () {
464 | if(this.lock && !this.timeoutSet) {
465 | this._timeoutId = Mainloop.timeout_add(CHANGE_PAGE_TIMEOUT, this.unlock.bind(this));
466 | this.timeoutSet = true;
467 | }
468 | if(!this.lock) {
469 | let currentPage = Main.overview.viewSelector.appDisplay._views[1].view._grid.currentPage;
470 | this.lock = true;
471 | OVERLAY_MANAGER.goToPage(currentPage + 1);
472 | }
473 | }
474 |
475 | acceptDrop (source, actor, x, y, time) {
476 | Main.overview.endItemDrag(this);
477 | return false;
478 | }
479 |
480 | unlock () {
481 | this.lock = false;
482 | this.timeoutSet = false;
483 | Mainloop.source_remove(this._timeoutId);
484 | }
485 | };
486 |
487 | /* This overlay is the area upon a folder. Position and visibility of the actor
488 | * is handled by exterior functions.
489 | * "this.id" is the folder's id, a string, as written in the gsettings key.
490 | * Dropping an app on this folder will add it to the folder
491 | */
492 | class FolderArea extends DroppableArea {
493 | constructor (id, asked_x, asked_y, page) {
494 | super(id);
495 | this.page = page;
496 |
497 | let grid = Main.overview.viewSelector.appDisplay._views[1].view._grid;
498 | this.actor.width = grid._getHItemSize();
499 | this.actor.height = grid._getVItemSize();
500 |
501 | if (this.use_frame) {
502 | this.styleClass = 'framedArea';
503 | this.actor.add(new St.Label({
504 | text: this.id,
505 | x_expand: true,
506 | y_expand: true,
507 | x_align: Clutter.ActorAlign.CENTER,
508 | y_align: Clutter.ActorAlign.CENTER,
509 | }));
510 | } else {
511 | this.styleClass = 'folderArea';
512 | this.actor.add(new St.Icon({
513 | icon_name: 'list-add-symbolic',
514 | icon_size: 24,
515 | style_class: 'system-status-icon',
516 | x_expand: true,
517 | y_expand: true,
518 | x_align: Clutter.ActorAlign.CENTER,
519 | y_align: Clutter.ActorAlign.CENTER,
520 | }));
521 | }
522 | if (this.use_frame) {
523 | this.styleClass = 'framedArea';
524 | }
525 | this.actor.style_class = this.styleClass;
526 |
527 | this.setPosition(asked_x, asked_y);
528 | Main.layoutManager.overviewGroup.add_actor(this.actor);
529 | }
530 |
531 | handleDragOver (source, actor, x, y, time) {
532 | if (source instanceof AppDisplay.AppIcon) {
533 | return DND.DragMotionResult.MOVE_DROP;
534 | }
535 | Main.overview.endItemDrag(this);
536 | return DND.DragMotionResult.NO_DROP;
537 | }
538 |
539 | acceptDrop (source, actor, x, y, time) { //FIXME recharger la vue ou au minimum les miniatures des dossiers
540 | if ((source instanceof AppDisplay.AppIcon) &&
541 | !Extension.isInFolder(source.id, this.id)) {
542 | Extension.addToFolder(source, this.id);
543 | Main.overview.endItemDrag(this);
544 | return true;
545 | }
546 | Main.overview.endItemDrag(this);
547 | return false;
548 | }
549 | };
550 |
551 | //------------------------------------------------------------------------------
552 |
553 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/extension.js:
--------------------------------------------------------------------------------
1 | // extension.js
2 | // GPLv3
3 |
4 | const Clutter = imports.gi.Clutter;
5 | const Gio = imports.gi.Gio;
6 | const St = imports.gi.St;
7 | const Main = imports.ui.main;
8 | const AppDisplay = imports.ui.appDisplay;
9 | const PopupMenu = imports.ui.popupMenu;
10 | const Meta = imports.gi.Meta;
11 | const Mainloop = imports.mainloop;
12 |
13 | const ExtensionUtils = imports.misc.extensionUtils;
14 | const Me = ExtensionUtils.getCurrentExtension();
15 | const Convenience = Me.imports.convenience;
16 |
17 | const AppfolderDialog = Me.imports.appfolderDialog;
18 | const DragAndDrop = Me.imports.dragAndDrop;
19 |
20 | const Gettext = imports.gettext.domain('appfolders-manager');
21 | const _ = Gettext.gettext;
22 |
23 | let FOLDER_SCHEMA;
24 | let FOLDER_LIST;
25 | let INIT_TIME;
26 | var SETTINGS = null;
27 | var DEBUG = false;
28 |
29 | function init () {
30 | Convenience.initTranslations();
31 | INIT_TIME = getTimeStamp();
32 | }
33 |
34 | function getTimeStamp () {
35 | let today = new Date();
36 | let str = today.getDate() + '' + today.getHours() + '' + today.getMinutes()
37 | + '' + today.getSeconds();
38 | return parseInt(str);
39 | }
40 |
41 | //------------------------------------------------------------------------------
42 | /* do not edit this section */
43 |
44 | function injectToFunction(parent, name, func) {
45 | let origin = parent[name];
46 | parent[name] = function() {
47 | let ret;
48 | ret = origin.apply(this, arguments);
49 | if (ret === undefined)
50 | ret = func.apply(this, arguments);
51 | return ret;
52 | }
53 | return origin;
54 | }
55 |
56 | function removeInjection(object, injection, name) {
57 | if (injection[name] === undefined)
58 | delete object[name];
59 | else
60 | object[name] = injection[name];
61 | }
62 |
63 | var injections=[];
64 |
65 | //------------------------------------------------------------------------------
66 |
67 | /* this function injects items (1 or 2 submenus) in AppIconMenu's _redisplay method. */
68 | function injectionInAppsMenus() {
69 | injections['_redisplay'] = injectToFunction(AppDisplay.AppIconMenu.prototype, '_redisplay', function() {
70 | let activePage = Main.overview.viewSelector.getActivePage();
71 | if (activePage == 2 || activePage == 3) {
72 | // ok
73 | } else {
74 | // page 1 is the windows overview, so appicons here are in the dash,
75 | // where menu items are not welcome
76 | return;
77 | }
78 |
79 | this._appendSeparator(); // TODO injecter ailleurs dans le menu?
80 |
81 | let mainAppView = Main.overview.viewSelector.appDisplay._views[1].view;
82 | FOLDER_LIST = FOLDER_SCHEMA.get_strv('folder-children');
83 |
84 | //----------------------------------------------------------------------
85 |
86 | let addto = new PopupMenu.PopupSubMenuMenuItem(_("Add to"));
87 |
88 | let newAppFolder = new PopupMenu.PopupMenuItem('+ ' + _("New AppFolder"));
89 | newAppFolder.connect('activate', () => {
90 | this._source._menuManager._grabHelper.ungrab({ actor: this.actor });
91 | // XXX broken scrolling ??
92 | // We can't popdown the folder immediately because the
93 | // AppDisplay.AppFolderPopup.popdown() method tries to ungrab
94 | // the global focus from the folder's popup actor, which isn't
95 | // having the focus since the menu is still open. Menus' animation
96 | // lasts ~0.25s so we will wait 0.30s before doing anything.
97 | let a = Mainloop.timeout_add(300, () => {
98 | if (mainAppView._currentPopup) {
99 | mainAppView._currentPopup.popdown();
100 | }
101 | createNewFolder(this._source);
102 | mainAppView._redisplay();
103 | Mainloop.source_remove(a);
104 | });
105 | });
106 | addto.menu.addMenuItem(newAppFolder);
107 |
108 | for (var i = 0 ; i < FOLDER_LIST.length ; i++) {
109 | let _folder = FOLDER_LIST[i];
110 | let shouldShow = !isInFolder( this._source.app.get_id(), _folder );
111 | let iFolderSchema = folderSchema(_folder);
112 | let item = new PopupMenu.PopupMenuItem( AppDisplay._getFolderName(iFolderSchema) );
113 | if (DEBUG) {
114 | shouldShow = true; //TODO ??? et l'exclusion ?
115 | }
116 | if(shouldShow) {
117 | item.connect('activate', () => {
118 | this._source._menuManager._grabHelper.ungrab({ actor: this.actor });
119 | // XXX broken scrolling ??
120 | // We can't popdown the folder immediatly because the
121 | // AppDisplay.AppFolderPopup.popdown() method tries to
122 | // ungrab the global focus from the folder's popup actor,
123 | // which isn't having the focus since the menu is still
124 | // open. Menus' animation lasts ~0.25s so we will wait 0.30s
125 | // before doing anything.
126 | let a = Mainloop.timeout_add(300, () => {
127 | if (mainAppView._currentPopup) {
128 | mainAppView._currentPopup.popdown();
129 | }
130 | addToFolder(this._source, _folder);
131 | mainAppView._redisplay();
132 | Mainloop.source_remove(a);
133 | });
134 | });
135 | addto.menu.addMenuItem(item);
136 | }
137 | }
138 | this.addMenuItem(addto);
139 |
140 | //----------------------------------------------------------------------
141 |
142 | let removeFrom = new PopupMenu.PopupSubMenuMenuItem(_("Remove from"));
143 | let shouldShow2 = false;
144 | for (var i = 0 ; i < FOLDER_LIST.length ; i++) {
145 | let _folder = FOLDER_LIST[i];
146 | let appId = this._source.app.get_id();
147 | let shouldShow = isInFolder(appId, _folder);
148 | let iFolderSchema = folderSchema(_folder);
149 | let item = new PopupMenu.PopupMenuItem( AppDisplay._getFolderName(iFolderSchema) );
150 |
151 | if (DEBUG) {
152 | shouldShow = true; //FIXME ??? et l'exclusion ?
153 | }
154 |
155 | if(shouldShow) {
156 | item.connect('activate', () => {
157 | this._source._menuManager._grabHelper.ungrab({ actor: this.actor });
158 | // XXX broken scrolling ??
159 | // We can't popdown the folder immediatly because the
160 | // AppDisplay.AppFolderPopup.popdown() method tries to
161 | // ungrab the global focus from the folder's popup actor,
162 | // which isn't having the focus since the menu is still
163 | // open. Menus' animation last ~0.25s so we will wait 0.30s
164 | // before doing anything.
165 | let a = Mainloop.timeout_add(300, () => {
166 | if (mainAppView._currentPopup) {
167 | mainAppView._currentPopup.popdown();
168 | }
169 | removeFromFolder(appId, _folder);
170 | mainAppView._redisplay();
171 | Mainloop.source_remove(a);
172 | });
173 | });
174 | removeFrom.menu.addMenuItem(item);
175 | shouldShow2 = true;
176 | }
177 | }
178 | if (shouldShow2) {
179 | this.addMenuItem(removeFrom);
180 | }
181 | });
182 | }
183 |
184 | //------------------------------------------------------------------------------
185 |
186 | function injectionInIcons() {
187 | // Right-click on a FolderIcon launches a new AppfolderDialog
188 | AppDisplay.FolderIcon = class extends AppDisplay.FolderIcon {
189 | constructor (id, path, parentView) {
190 | super(id, path, parentView);
191 | if (!this._isCustom) {
192 | this.actor.connect('button-press-event', this._onButtonPress.bind(this));
193 | }
194 | this._isCustom = true;
195 | }
196 |
197 | _onButtonPress (actor, event) {
198 | let button = event.get_button();
199 | if (button == 3) {
200 | let tmp = new Gio.Settings({
201 | schema_id: 'org.gnome.desktop.app-folders.folder',
202 | path: '/org/gnome/desktop/app-folders/folders/' + this.id + '/'
203 | });
204 | let dialog = new AppfolderDialog.AppfolderDialog(tmp, null, this.id);
205 | dialog.open();
206 | }
207 | return Clutter.EVENT_PROPAGATE;
208 | }
209 | };
210 |
211 | // Dragging an AppIcon triggers the DND mode
212 | AppDisplay.AppIcon = class extends AppDisplay.AppIcon {
213 | constructor (app, params) {
214 | super(app, params);
215 | if (!this._isCustom) {
216 | this._draggable.connect('drag-begin', this.onDragBeginExt.bind(this));
217 | this._draggable.connect('drag-cancelled', this.onDragCancelledExt.bind(this));
218 | this._draggable.connect('drag-end', this.onDragEndExt.bind(this));
219 | }
220 | this._isCustom = true;
221 | }
222 |
223 | onDragBeginExt () {
224 | if (Main.overview.viewSelector.getActivePage() != 2) {
225 | return;
226 | }
227 | this._removeMenuTimeout(); // why ?
228 | Main.overview.beginItemDrag(this);
229 | DragAndDrop.OVERLAY_MANAGER.on_drag_begin();
230 | }
231 |
232 | onDragEndExt () {
233 | Main.overview.endItemDrag(this);
234 | DragAndDrop.OVERLAY_MANAGER.on_drag_end();
235 | }
236 |
237 | onDragCancelledExt () {
238 | Main.overview.cancelledItemDrag(this);
239 | DragAndDrop.OVERLAY_MANAGER.on_drag_cancelled();
240 | }
241 | };
242 | }
243 |
244 | //------------------------------------------------------------------------------
245 | //---------------------------------- Generic -----------------------------------
246 | //--------------------------------- functions ----------------------------------
247 | //------------------------------------------------------------------------------
248 | /* These functions perform the requested actions but do not care about poping
249 | * down opened menu or opened folder, nor about hiding/showing/activating
250 | * dropping areas, nor about redisplaying the view.
251 | */
252 | function removeFromFolder (app_id, folder_id) {
253 | let folder_schema = folderSchema(folder_id);
254 | if ( isInFolder(app_id, folder_id) ) {
255 | let pastContent = folder_schema.get_strv('apps');
256 | let presentContent = [];
257 | for(var i=0; i {
276 | let tmp = [];
277 | FOLDER_LIST = FOLDER_SCHEMA.get_strv('folder-children');
278 | for(var j=0;j < FOLDER_LIST.length;j++){
279 | if(FOLDER_LIST[j] != folder_id) {
280 | tmp.push(FOLDER_LIST[j]);
281 | }
282 | }
283 |
284 | FOLDER_LIST = tmp;
285 | FOLDER_SCHEMA.set_strv('folder-children', FOLDER_LIST);
286 |
287 | // ?? XXX (ne fonctionne pas mieux hors du meta.later_add)
288 | if (SETTINGS.get_boolean('total-deletion')) {
289 | let folder_schema = folderSchema (folder_id);
290 | folder_schema.reset('apps'); // génère un bug volumineux ?
291 | folder_schema.reset('categories'); // génère un bug volumineux ?
292 | folder_schema.reset('excluded-apps'); // génère un bug volumineux ?
293 | folder_schema.reset('name'); // génère un bug volumineux ?
294 | }
295 | });
296 |
297 | return true;
298 | }
299 |
300 | //------------------------------------------------------------------------------
301 |
302 | function mergeFolders (folder_staying_id, folder_dying_id) {
303 | // this method is not used XXX
304 |
305 | let folder_dying_schema = folderSchema (folder_dying_id);
306 | let folder_staying_schema = folderSchema (folder_staying_id);
307 | let newerContent = folder_dying_schema.get_strv('categories');
308 | let presentContent = folder_staying_schema.get_strv('categories');
309 | for (var i=0; i 105) {
433 | Main.overview.viewSelector.appDisplay._views[1].view._redisplay();
434 | }
435 | // FIXME FIXME FIXME it works like shit, when it works
436 | }
437 |
438 | function disable () {
439 | AppDisplay.FolderIcon.prototype._onButtonPress = null;
440 | AppDisplay.FolderIcon.prototype.popupMenu = null;
441 |
442 | removeInjection(AppDisplay.AppIconMenu.prototype, injections, '_redisplay');
443 |
444 | // Overwrite the shit i did in FolderIcon
445 | AppDisplay.FolderIcon = class extends AppDisplay.FolderIcon {
446 | _onButtonPress (actor, event) {
447 | return Clutter.EVENT_PROPAGATE;
448 | }
449 | };
450 |
451 | // Overwrite the shit i did in AppIcon
452 | AppDisplay.AppIcon = class extends AppDisplay.AppIcon {
453 | onDragBeginExt () {}
454 | onDragEndExt () {}
455 | onDragCancelledExt () {}
456 | };
457 |
458 | DragAndDrop.OVERLAY_MANAGER.destroy();
459 | }
460 |
461 | //------------------------------------------------------------------------------
462 |
463 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/appfolders-manager.pot:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #, fuzzy
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: PACKAGE VERSION\n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 | "Last-Translator: FULL NAME \n"
14 | "Language-Team: LANGUAGE \n"
15 | "Language: \n"
16 | "MIME-Version: 1.0\n"
17 | "Content-Type: text/plain; charset=UTF-8\n"
18 | "Content-Transfer-Encoding: 8bit\n"
19 |
20 | #: appfolders-manager@maestroschan.fr/extension.js:83
21 | msgid "Add to"
22 | msgstr ""
23 |
24 | #: appfolders-manager@maestroschan.fr/extension.js:85
25 | msgid "New AppFolder"
26 | msgstr ""
27 |
28 | #: appfolders-manager@maestroschan.fr/extension.js:139
29 | msgid "Remove from"
30 | msgstr ""
31 |
32 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
33 | msgid "Create a new folder"
34 | msgstr ""
35 |
36 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
37 | #, javascript-format
38 | msgid "Remove from %s"
39 | msgstr ""
40 |
41 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
42 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
43 | msgid "Cancel"
44 | msgstr ""
45 |
46 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
47 | msgid "Create"
48 | msgstr ""
49 |
50 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
51 | msgid "Delete"
52 | msgstr ""
53 |
54 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
55 | msgid "Apply"
56 | msgstr ""
57 |
58 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
59 | msgid "Folder's name:"
60 | msgstr ""
61 |
62 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
63 | msgid "Categories:"
64 | msgstr ""
65 |
66 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
67 | msgid "Other category?"
68 | msgstr ""
69 |
70 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
71 | msgid "No category"
72 | msgstr ""
73 |
74 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
75 | msgid "Select a category…"
76 | msgstr ""
77 |
78 | #: appfolders-manager@maestroschan.fr/prefs.js:31
79 | msgid "Modifications will be effective after reloading the extension."
80 | msgstr ""
81 |
82 | #: appfolders-manager@maestroschan.fr/prefs.js:38
83 | msgid "Main settings"
84 | msgstr ""
85 |
86 | #: appfolders-manager@maestroschan.fr/prefs.js:39
87 | msgid "Categories"
88 | msgstr ""
89 |
90 | #: appfolders-manager@maestroschan.fr/prefs.js:46
91 | msgid "Delete all related settings when an appfolder is deleted"
92 | msgstr ""
93 |
94 | #: appfolders-manager@maestroschan.fr/prefs.js:48
95 | msgid "Use the right-click menus in addition to the drag-and-drop"
96 | msgstr ""
97 |
98 | #: appfolders-manager@maestroschan.fr/prefs.js:56
99 | msgid "Use categories"
100 | msgstr ""
101 |
102 | #: appfolders-manager@maestroschan.fr/prefs.js:59
103 | msgid "More informations about \"additional categories\""
104 | msgstr ""
105 |
106 | #: appfolders-manager@maestroschan.fr/prefs.js:74
107 | msgid "Report bugs or ideas"
108 | msgstr ""
109 |
110 | #: appfolders-manager@maestroschan.fr/prefs.js:85
111 | msgid ""
112 | "This extension can be deactivated once your applications are organized as "
113 | "wished."
114 | msgstr ""
115 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/be/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/be/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/be/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: \n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
11 | "PO-Revision-Date: 2018-12-30 14:03+0300\n"
12 | "Last-Translator: Максім Крапіўка \n"
13 | "Language-Team: \n"
14 | "Language: be\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "X-Generator: Poedit 2.2\n"
19 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
20 | "%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
21 |
22 | #: appfolders-manager@maestroschan.fr/extension.js:83
23 | msgid "Add to"
24 | msgstr "Дадаць у"
25 |
26 | #: appfolders-manager@maestroschan.fr/extension.js:85
27 | msgid "New AppFolder"
28 | msgstr "Новая папка праграм"
29 |
30 | #: appfolders-manager@maestroschan.fr/extension.js:139
31 | msgid "Remove from"
32 | msgstr "Выдаліць з"
33 |
34 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
35 | msgid "Create a new folder"
36 | msgstr "Стварыць новую папку"
37 |
38 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
39 | #, javascript-format
40 | msgid "Remove from %s"
41 | msgstr "Выдаліць з %s"
42 |
43 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
44 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
45 | msgid "Cancel"
46 | msgstr "Скасаваць"
47 |
48 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
49 | msgid "Create"
50 | msgstr ""
51 |
52 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
53 | msgid "Delete"
54 | msgstr "Выдаліць"
55 |
56 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
57 | msgid "Apply"
58 | msgstr "Дастасаваць"
59 |
60 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
61 | msgid "Folder's name:"
62 | msgstr "Назва папкі"
63 |
64 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
65 | msgid "Categories:"
66 | msgstr "Катэгорыі:"
67 |
68 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
69 | msgid "Other category?"
70 | msgstr "Іншая катэгорыя?"
71 |
72 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
73 | msgid "No category"
74 | msgstr "Без катэгорыі"
75 |
76 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
77 | msgid "Select a category…"
78 | msgstr "Выбраць катэгорыю..."
79 |
80 | #: appfolders-manager@maestroschan.fr/prefs.js:31
81 | msgid "Modifications will be effective after reloading the extension."
82 | msgstr "Змены ўступяць у сілу пасля перазагрузкі пашырэння."
83 |
84 | #: appfolders-manager@maestroschan.fr/prefs.js:38
85 | msgid "Main settings"
86 | msgstr "Галоўныя налады"
87 |
88 | #: appfolders-manager@maestroschan.fr/prefs.js:39
89 | msgid "Categories"
90 | msgstr "Катэгорыі"
91 |
92 | #: appfolders-manager@maestroschan.fr/prefs.js:46
93 | msgid "Delete all related settings when an appfolder is deleted"
94 | msgstr "Выдаляць усе звязаныя налады пры выдаленні папкі праграм"
95 |
96 | #: appfolders-manager@maestroschan.fr/prefs.js:48
97 | msgid "Use the right-click menus in addition to the drag-and-drop"
98 | msgstr ""
99 | "Выкарыстоўваць націсканне правай кнопкай мышы ў дадатак да перацягвання "
100 | "значкоў"
101 |
102 | #: appfolders-manager@maestroschan.fr/prefs.js:56
103 | msgid "Use categories"
104 | msgstr "Выкарыстоўваць катэгорыі"
105 |
106 | #: appfolders-manager@maestroschan.fr/prefs.js:59
107 | msgid "More informations about \"additional categories\""
108 | msgstr "Больш інфармацыі пра «дадатковыя» катэгорыі"
109 |
110 | #: appfolders-manager@maestroschan.fr/prefs.js:74
111 | msgid "Report bugs or ideas"
112 | msgstr "Паведаміць пра памылкі або ідэі"
113 |
114 | #: appfolders-manager@maestroschan.fr/prefs.js:85
115 | msgid ""
116 | "This extension can be deactivated once your applications are organized as "
117 | "wished."
118 | msgstr ""
119 | "Гэта пашырэнне можна адключыць, пасля таго як вы канчаткова наладзіце "
120 | "арганізацыю сваіх праграм."
121 |
122 | #~ msgid "Standard specification"
123 | #~ msgstr "Стандартная спецыфікацыя"
124 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/de/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/de/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/de/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: \n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
12 | "PO-Revision-Date: 2019-05-15 11:21+0200\n"
13 | "Last-Translator: Markus Neumeister\n"
14 | "Language-Team: https://github.com/hobbypunk90/appfolders-manager-gnome-"
15 | "extension\n"
16 | "Language: de\n"
17 | "MIME-Version: 1.0\n"
18 | "Content-Type: text/plain; charset=UTF-8\n"
19 | "Content-Transfer-Encoding: 8bit\n"
20 | "X-Generator: Poedit 2.0.6\n"
21 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
22 |
23 | #: appfolders-manager@maestroschan.fr/extension.js:83
24 | msgid "Add to"
25 | msgstr "Hinzufügen zu"
26 |
27 | #: appfolders-manager@maestroschan.fr/extension.js:85
28 | msgid "New AppFolder"
29 | msgstr "Neuer Ordner"
30 |
31 | #: appfolders-manager@maestroschan.fr/extension.js:139
32 | msgid "Remove from"
33 | msgstr "Löschen aus"
34 |
35 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
36 | msgid "Create a new folder"
37 | msgstr "Neuen Ordner erstellen"
38 |
39 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
40 | #, javascript-format
41 | msgid "Remove from %s"
42 | msgstr "Löschen aus %s"
43 |
44 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
45 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
46 | msgid "Cancel"
47 | msgstr "Abbrechen"
48 |
49 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
50 | msgid "Create"
51 | msgstr "Erstellen"
52 |
53 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
54 | msgid "Delete"
55 | msgstr "Löschen"
56 |
57 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
58 | msgid "Apply"
59 | msgstr "Anwenden"
60 |
61 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
62 | msgid "Folder's name:"
63 | msgstr "Ordner Name:"
64 |
65 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
66 | msgid "Categories:"
67 | msgstr "Kategorien:"
68 |
69 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
70 | msgid "Other category?"
71 | msgstr "Neue Kategorie?"
72 |
73 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
74 | msgid "No category"
75 | msgstr "Keine Kategorie"
76 |
77 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
78 | msgid "Select a category…"
79 | msgstr "Kategorie auswählen..."
80 |
81 | #: appfolders-manager@maestroschan.fr/prefs.js:31
82 | msgid "Modifications will be effective after reloading the extension."
83 | msgstr "Änderungen werden nach Neustart der Erweiterung übernommen."
84 |
85 | #: appfolders-manager@maestroschan.fr/prefs.js:38
86 | msgid "Main settings"
87 | msgstr "Einstellungen"
88 |
89 | #: appfolders-manager@maestroschan.fr/prefs.js:39
90 | msgid "Categories"
91 | msgstr "Kategorien"
92 |
93 | #: appfolders-manager@maestroschan.fr/prefs.js:46
94 | msgid "Delete all related settings when an appfolder is deleted"
95 | msgstr "Lösche alle Einstellungen, wenn ein Ordner gelöscht wird"
96 |
97 | #: appfolders-manager@maestroschan.fr/prefs.js:48
98 | msgid "Use the right-click menus in addition to the drag-and-drop"
99 | msgstr "Rechtsklick-Menü zusätzlich zu Drag-und-Drop benutzen"
100 |
101 | #: appfolders-manager@maestroschan.fr/prefs.js:56
102 | msgid "Use categories"
103 | msgstr "Kategorien benutzen"
104 |
105 | #: appfolders-manager@maestroschan.fr/prefs.js:59
106 | msgid "More informations about \"additional categories\""
107 | msgstr "Mehr Informationen über \"Zusätzliche Kategorien\""
108 |
109 | #: appfolders-manager@maestroschan.fr/prefs.js:74
110 | msgid "Report bugs or ideas"
111 | msgstr "Bugs oder Ideen übermittlen"
112 |
113 | #: appfolders-manager@maestroschan.fr/prefs.js:85
114 | msgid ""
115 | "This extension can be deactivated once your applications are organized as "
116 | "wished."
117 | msgstr ""
118 | "Diese Erweiterung kann deaktiviert werden, sobald die Anwendungen wie "
119 | "gewünscht organisiert wurden."
120 |
121 | #~ msgid "This appfolder already exists."
122 | #~ msgstr "Dieser Ordner existiert bereits."
123 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/el/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/el/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/el/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: \n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
12 | "PO-Revision-Date: 2017-05-29 23:26+0300\n"
13 | "Last-Translator: \n"
14 | "Language-Team: \n"
15 | "Language: el\n"
16 | "MIME-Version: 1.0\n"
17 | "Content-Type: text/plain; charset=UTF-8\n"
18 | "Content-Transfer-Encoding: 8bit\n"
19 | "X-Generator: Poedit 2.0.1\n"
20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
21 |
22 | #: appfolders-manager@maestroschan.fr/extension.js:83
23 | msgid "Add to"
24 | msgstr "Προσθήκη σε"
25 |
26 | #: appfolders-manager@maestroschan.fr/extension.js:85
27 | msgid "New AppFolder"
28 | msgstr "Νέος φάκελος"
29 |
30 | #: appfolders-manager@maestroschan.fr/extension.js:139
31 | msgid "Remove from"
32 | msgstr "Αφαίρεση από"
33 |
34 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
35 | msgid "Create a new folder"
36 | msgstr ""
37 |
38 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
39 | #, fuzzy, javascript-format
40 | msgid "Remove from %s"
41 | msgstr "Αφαίρεση από"
42 |
43 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
44 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
45 | msgid "Cancel"
46 | msgstr "Αναίρεση"
47 |
48 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
49 | msgid "Create"
50 | msgstr ""
51 |
52 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
53 | msgid "Delete"
54 | msgstr "Διαγραφή"
55 |
56 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
57 | msgid "Apply"
58 | msgstr ""
59 |
60 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
61 | msgid "Folder's name:"
62 | msgstr ""
63 |
64 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
65 | msgid "Categories:"
66 | msgstr ""
67 |
68 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
69 | msgid "Other category?"
70 | msgstr ""
71 |
72 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
73 | msgid "No category"
74 | msgstr ""
75 |
76 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
77 | msgid "Select a category…"
78 | msgstr ""
79 |
80 | #: appfolders-manager@maestroschan.fr/prefs.js:31
81 | msgid "Modifications will be effective after reloading the extension."
82 | msgstr ""
83 | "Οι τροποποιήσεις απαιτούν την επανεκκίνηση της επέκτασης για να "
84 | "λειτουργήσουν."
85 |
86 | #: appfolders-manager@maestroschan.fr/prefs.js:38
87 | msgid "Main settings"
88 | msgstr ""
89 |
90 | #: appfolders-manager@maestroschan.fr/prefs.js:39
91 | msgid "Categories"
92 | msgstr ""
93 |
94 | #: appfolders-manager@maestroschan.fr/prefs.js:46
95 | msgid "Delete all related settings when an appfolder is deleted"
96 | msgstr "Διαγραφή όλων των σχετικών ρυθμίσεων κατά την διαγραφή ενός φακέλου"
97 |
98 | #: appfolders-manager@maestroschan.fr/prefs.js:48
99 | msgid "Use the right-click menus in addition to the drag-and-drop"
100 | msgstr ""
101 |
102 | #: appfolders-manager@maestroschan.fr/prefs.js:56
103 | msgid "Use categories"
104 | msgstr ""
105 |
106 | #: appfolders-manager@maestroschan.fr/prefs.js:59
107 | msgid "More informations about \"additional categories\""
108 | msgstr ""
109 |
110 | #: appfolders-manager@maestroschan.fr/prefs.js:74
111 | msgid "Report bugs or ideas"
112 | msgstr ""
113 |
114 | #: appfolders-manager@maestroschan.fr/prefs.js:85
115 | msgid ""
116 | "This extension can be deactivated once your applications are organized as "
117 | "wished."
118 | msgstr ""
119 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/fr/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/fr/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/fr/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: \n"
4 | "Report-Msgid-Bugs-To: \n"
5 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
6 | "PO-Revision-Date: 2017-02-05 16:47+0100\n"
7 | "Last-Translator: \n"
8 | "Language-Team: \n"
9 | "Language: fr\n"
10 | "MIME-Version: 1.0\n"
11 | "Content-Type: text/plain; charset=UTF-8\n"
12 | "Content-Transfer-Encoding: 8bit\n"
13 | "X-Generator: Poedit 1.8.11\n"
14 | "Plural-Forms: nplurals=2; plural=(n > 1);\n"
15 |
16 | #: appfolders-manager@maestroschan.fr/extension.js:83
17 | msgid "Add to"
18 | msgstr "Ajouter à"
19 |
20 | #: appfolders-manager@maestroschan.fr/extension.js:85
21 | msgid "New AppFolder"
22 | msgstr "Nouvel AppFolder"
23 |
24 | #: appfolders-manager@maestroschan.fr/extension.js:139
25 | msgid "Remove from"
26 | msgstr "Retirer de"
27 |
28 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
29 | msgid "Create a new folder"
30 | msgstr "Créer un nouveau dossier"
31 |
32 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
33 | #, javascript-format
34 | msgid "Remove from %s"
35 | msgstr "Retirer de %s"
36 |
37 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
38 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
39 | msgid "Cancel"
40 | msgstr "Annuler"
41 |
42 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
43 | msgid "Create"
44 | msgstr "Créer"
45 |
46 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
47 | msgid "Delete"
48 | msgstr "Supprimer"
49 |
50 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
51 | msgid "Apply"
52 | msgstr "Appliquer"
53 |
54 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
55 | msgid "Folder's name:"
56 | msgstr "Nom du dossier :"
57 |
58 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
59 | msgid "Categories:"
60 | msgstr "Catégories :"
61 |
62 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
63 | msgid "Other category?"
64 | msgstr "Autre catégorie ?"
65 |
66 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
67 | msgid "No category"
68 | msgstr "Aucune catégorie"
69 |
70 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
71 | msgid "Select a category…"
72 | msgstr "Choisir une catégorie…"
73 |
74 | #: appfolders-manager@maestroschan.fr/prefs.js:31
75 | msgid "Modifications will be effective after reloading the extension."
76 | msgstr "Les modifications prendront effet après avoir rechargé l'extension"
77 |
78 | #: appfolders-manager@maestroschan.fr/prefs.js:38
79 | msgid "Main settings"
80 | msgstr "Réglages principaux"
81 |
82 | #: appfolders-manager@maestroschan.fr/prefs.js:39
83 | msgid "Categories"
84 | msgstr "Catégories"
85 |
86 | #: appfolders-manager@maestroschan.fr/prefs.js:46
87 | msgid "Delete all related settings when an appfolder is deleted"
88 | msgstr ""
89 | "Supprimer tous les réglages relatifs à un appfolder lors de sa suppression"
90 |
91 | #: appfolders-manager@maestroschan.fr/prefs.js:48
92 | msgid "Use the right-click menus in addition to the drag-and-drop"
93 | msgstr "Utiliser le menu du clic-droit en complément du glisser-déposer"
94 |
95 | #: appfolders-manager@maestroschan.fr/prefs.js:56
96 | msgid "Use categories"
97 | msgstr "Utiliser des catégories"
98 |
99 | #: appfolders-manager@maestroschan.fr/prefs.js:59
100 | msgid "More informations about \"additional categories\""
101 | msgstr "Plus d'informations à propos des \"catégories supplémentaires\""
102 |
103 | #: appfolders-manager@maestroschan.fr/prefs.js:74
104 | msgid "Report bugs or ideas"
105 | msgstr "Reporter un bug ou une idée"
106 |
107 | #: appfolders-manager@maestroschan.fr/prefs.js:85
108 | msgid ""
109 | "This extension can be deactivated once your applications are organized as "
110 | "wished."
111 | msgstr ""
112 | "Cette extension peut être désactivée une fois que vos applications sont "
113 | "organisées comme souhaité."
114 |
115 | #~ msgid "Standard specification"
116 | #~ msgstr "Spécification standard"
117 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/hr/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/hr/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/hr/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # Croatian translation of appfolders-manager.
2 | # Copyright (C) 2018-2020 Romain F. T.
3 | # This file is distributed under the same license as the appfolders-manager package.
4 | # Milo Ivir , 2020.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: appfolders-manager\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2020-01-24 21:58+0100\n"
11 | "PO-Revision-Date: 2020-01-25 01:39+0100\n"
12 | "Language-Team: \n"
13 | "MIME-Version: 1.0\n"
14 | "Content-Type: text/plain; charset=UTF-8\n"
15 | "Content-Transfer-Encoding: 8bit\n"
16 | "X-Generator: Poedit 1.8.12\n"
17 | "Last-Translator: Milo Ivir \n"
18 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
19 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
20 | "Language: hr\n"
21 |
22 | #: appfolders-manager@maestroschan.fr/extension.js:83
23 | msgid "Add to"
24 | msgstr "Dodaj u"
25 |
26 | #: appfolders-manager@maestroschan.fr/extension.js:85
27 | msgid "New AppFolder"
28 | msgstr "Nova mapa programa"
29 |
30 | #: appfolders-manager@maestroschan.fr/extension.js:139
31 | msgid "Remove from"
32 | msgstr "Ukloni iz"
33 |
34 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
35 | msgid "Create a new folder"
36 | msgstr "Stvori novu mapu"
37 |
38 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
39 | #, javascript-format
40 | msgid "Remove from %s"
41 | msgstr "Ukloni iz %s"
42 |
43 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
44 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
45 | msgid "Cancel"
46 | msgstr "Odustani"
47 |
48 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
49 | msgid "Create"
50 | msgstr "Stvori"
51 |
52 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
53 | msgid "Delete"
54 | msgstr "Izbriši"
55 |
56 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
57 | msgid "Apply"
58 | msgstr "Primijeni"
59 |
60 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
61 | msgid "Folder's name:"
62 | msgstr "Ime mape:"
63 |
64 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
65 | msgid "Categories:"
66 | msgstr "Kategorije:"
67 |
68 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
69 | msgid "Other category?"
70 | msgstr "Druga kategorija?"
71 |
72 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
73 | msgid "No category"
74 | msgstr "Nijedna kategorija"
75 |
76 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
77 | msgid "Select a category…"
78 | msgstr "Odaberi kategoriju …"
79 |
80 | #: appfolders-manager@maestroschan.fr/prefs.js:31
81 | msgid "Modifications will be effective after reloading the extension."
82 | msgstr "Promjene će se primijeniti nakon ponovnog pokretanja proširenja."
83 |
84 | #: appfolders-manager@maestroschan.fr/prefs.js:38
85 | msgid "Main settings"
86 | msgstr "Glavne postavke"
87 |
88 | #: appfolders-manager@maestroschan.fr/prefs.js:39
89 | msgid "Categories"
90 | msgstr "Kategorije"
91 |
92 | #: appfolders-manager@maestroschan.fr/prefs.js:46
93 | msgid "Delete all related settings when an appfolder is deleted"
94 | msgstr "Izbriši sve povezane postavke kad se briše mapa programa"
95 |
96 | #: appfolders-manager@maestroschan.fr/prefs.js:48
97 | msgid "Use the right-click menus in addition to the drag-and-drop"
98 | msgstr ""
99 | "Koristi funkciju desnog klika za izbornike dodatno uz funkciju povuci-i-"
100 | "ispusti"
101 |
102 | #: appfolders-manager@maestroschan.fr/prefs.js:56
103 | msgid "Use categories"
104 | msgstr "Koristi kategorije"
105 |
106 | #: appfolders-manager@maestroschan.fr/prefs.js:59
107 | msgid "More informations about \"additional categories\""
108 | msgstr "Daljnje informacije o „dodatnim kategorijama”"
109 |
110 | #: appfolders-manager@maestroschan.fr/prefs.js:74
111 | msgid "Report bugs or ideas"
112 | msgstr "Prijavi greške ili ideje"
113 |
114 | #: appfolders-manager@maestroschan.fr/prefs.js:85
115 | msgid ""
116 | "This extension can be deactivated once your applications are organized as "
117 | "wished."
118 | msgstr ""
119 | "Ovo proširenje se može deaktivirati nakon što su programi raspoređeni po "
120 | "želji."
121 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/hu/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/hu/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/hu/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # Hungarian translation for appfolders-manager.
2 | # Copyright (C) 2017 Free Software Foundation, Inc.
3 | # This file is distributed under the same license as the PACKAGE package.
4 | #
5 | # Balázs Úr , 2017.
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: appfolders-manager master\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
11 | "PO-Revision-Date: 2017-05-31 20:41+0100\n"
12 | "Last-Translator: Balázs Úr \n"
13 | "Language-Team: Hungarian \n"
14 | "Language: hu\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19 | "X-Generator: Lokalize 2.0\n"
20 |
21 | #: appfolders-manager@maestroschan.fr/extension.js:83
22 | msgid "Add to"
23 | msgstr "Hozzáadás ehhez"
24 |
25 | #: appfolders-manager@maestroschan.fr/extension.js:85
26 | msgid "New AppFolder"
27 | msgstr "Új alkalmazásmappa"
28 |
29 | #: appfolders-manager@maestroschan.fr/extension.js:139
30 | msgid "Remove from"
31 | msgstr "Eltávolítás innen"
32 |
33 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
34 | msgid "Create a new folder"
35 | msgstr ""
36 |
37 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
38 | #, fuzzy, javascript-format
39 | msgid "Remove from %s"
40 | msgstr "Eltávolítás innen"
41 |
42 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
43 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
44 | msgid "Cancel"
45 | msgstr "Mégse"
46 |
47 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
48 | msgid "Create"
49 | msgstr ""
50 |
51 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
52 | msgid "Delete"
53 | msgstr "Törlés"
54 |
55 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
56 | msgid "Apply"
57 | msgstr ""
58 |
59 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
60 | msgid "Folder's name:"
61 | msgstr ""
62 |
63 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
64 | msgid "Categories:"
65 | msgstr ""
66 |
67 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
68 | msgid "Other category?"
69 | msgstr ""
70 |
71 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
72 | msgid "No category"
73 | msgstr ""
74 |
75 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
76 | msgid "Select a category…"
77 | msgstr ""
78 |
79 | #: appfolders-manager@maestroschan.fr/prefs.js:31
80 | msgid "Modifications will be effective after reloading the extension."
81 | msgstr "A módosítások a kiterjesztés újratöltése után lépnek hatályba."
82 |
83 | #: appfolders-manager@maestroschan.fr/prefs.js:38
84 | msgid "Main settings"
85 | msgstr ""
86 |
87 | #: appfolders-manager@maestroschan.fr/prefs.js:39
88 | msgid "Categories"
89 | msgstr ""
90 |
91 | #: appfolders-manager@maestroschan.fr/prefs.js:46
92 | msgid "Delete all related settings when an appfolder is deleted"
93 | msgstr ""
94 | "Az összes kapcsolódó beállítás törlése, ha egy alkalmazásmappa törölve lesz"
95 |
96 | #: appfolders-manager@maestroschan.fr/prefs.js:48
97 | msgid "Use the right-click menus in addition to the drag-and-drop"
98 | msgstr ""
99 |
100 | #: appfolders-manager@maestroschan.fr/prefs.js:56
101 | msgid "Use categories"
102 | msgstr ""
103 |
104 | #: appfolders-manager@maestroschan.fr/prefs.js:59
105 | msgid "More informations about \"additional categories\""
106 | msgstr ""
107 |
108 | #: appfolders-manager@maestroschan.fr/prefs.js:74
109 | msgid "Report bugs or ideas"
110 | msgstr ""
111 |
112 | #: appfolders-manager@maestroschan.fr/prefs.js:85
113 | msgid ""
114 | "This extension can be deactivated once your applications are organized as "
115 | "wished."
116 | msgstr ""
117 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/it/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/it/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/it/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: \n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
11 | "PO-Revision-Date: 2019-08-19 17:21+0100\n"
12 | "Last-Translator: Albano Battistella\n"
13 | "Language-Team: \n"
14 | "Language: it_IT\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "X-Generator: Poedit 2.0.4\n"
19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20 |
21 | #: appfolders-manager@maestroschan.fr/extension.js:83
22 | msgid "Add to"
23 | msgstr "Aggiungi a"
24 |
25 | #: appfolders-manager@maestroschan.fr/extension.js:85
26 | msgid "New AppFolder"
27 | msgstr "Nuova AppFolder"
28 |
29 | #: appfolders-manager@maestroschan.fr/extension.js:139
30 | msgid "Remove from"
31 | msgstr "Rimuovi da"
32 |
33 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
34 | msgid "Create a new folder"
35 | msgstr "Crea nuova Cartella"
36 |
37 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
38 | #, fuzzy, javascript-format
39 | msgid "Remove from %s"
40 | msgstr "Rimuovi da"
41 |
42 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
43 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
44 | msgid "Cancel"
45 | msgstr "Annulla"
46 |
47 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
48 | msgid "Create"
49 | msgstr "Crea"
50 |
51 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
52 | msgid "Delete"
53 | msgstr "Elimina"
54 |
55 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
56 | msgid "Apply"
57 | msgstr "Applica"
58 |
59 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
60 | msgid "Folder's name:"
61 | msgstr "Nome Cartella:"
62 |
63 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
64 | msgid "Categories:"
65 | msgstr "Categorie:"
66 |
67 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
68 | msgid "Other category?"
69 | msgstr "Altra Categoria?"
70 |
71 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
72 | msgid "No category"
73 | msgstr "Nessuna Categoria"
74 |
75 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
76 | msgid "Select a category…"
77 | msgstr "Seleziona una categoria…"
78 |
79 | #: appfolders-manager@maestroschan.fr/prefs.js:31
80 | msgid "Modifications will be effective after reloading the extension."
81 | msgstr "Le modifiche avranno effetto dopo aver ricaricato l'estensione."
82 |
83 | #: appfolders-manager@maestroschan.fr/prefs.js:38
84 | msgid "Main settings"
85 | msgstr "Impostazioni Principali"
86 |
87 | #: appfolders-manager@maestroschan.fr/prefs.js:39
88 | msgid "Categories"
89 | msgstr "Categorie"
90 |
91 | #: appfolders-manager@maestroschan.fr/prefs.js:46
92 | msgid "Delete all related settings when an appfolder is deleted"
93 | msgstr "Elimina tutte le impostazioni dell'AppFolder quando viene rimossa"
94 |
95 | #: appfolders-manager@maestroschan.fr/prefs.js:48
96 | msgid "Use the right-click menus in addition to the drag-and-drop"
97 | msgstr "Utilizzare il menu di scelta rapida oltre al trascinamento della selezione"
98 |
99 | #: appfolders-manager@maestroschan.fr/prefs.js:56
100 | msgid "Use categories"
101 | msgstr "Usa aggiuntive"
102 |
103 | #: appfolders-manager@maestroschan.fr/prefs.js:59
104 | msgid "More informations about \"additional categories\""
105 | msgstr "Maggiori informazioni sulle \"categorie aggiuntive\""
106 |
107 | #: appfolders-manager@maestroschan.fr/prefs.js:74
108 | msgid "Report bugs or ideas"
109 | msgstr "Invia segnalazioni di bug o idee"
110 |
111 | #: appfolders-manager@maestroschan.fr/prefs.js:85
112 | msgid ""
113 | "This extension can be deactivated once your applications are organized as "
114 | "wished."
115 | msgstr ""
116 | "Questa estensione può essere disattivata dopo aver organizzato le applicazioni come "
117 | "desiderato."
118 |
119 | #~ msgid "Standard specification"
120 | #~ msgstr "Specifiche standard"
121 |
122 | #~ msgid "This appfolder already exists."
123 | #~ msgstr "Questa appfolder esiste già."
124 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/nl_NL/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/nl_NL/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/nl_NL/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: \n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
11 | "PO-Revision-Date: 2019-05-27 21:43+0200\n"
12 | "Last-Translator: Heimen Stoffels \n"
13 | "Language-Team: \n"
14 | "Language: nl_NL\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "X-Generator: Poedit 2.1.1\n"
19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20 |
21 | #: appfolders-manager@maestroschan.fr/extension.js:83
22 | msgid "Add to"
23 | msgstr "Toevoegen aan"
24 |
25 | #: appfolders-manager@maestroschan.fr/extension.js:85
26 | msgid "New AppFolder"
27 | msgstr "Nieuwe map"
28 |
29 | #: appfolders-manager@maestroschan.fr/extension.js:139
30 | msgid "Remove from"
31 | msgstr "Verwijderen uit"
32 |
33 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
34 | msgid "Create a new folder"
35 | msgstr "Nieuwe map creëren"
36 |
37 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
38 | #, javascript-format
39 | msgid "Remove from %s"
40 | msgstr "Verwijderen uit %s"
41 |
42 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
43 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
44 | msgid "Cancel"
45 | msgstr "Annuleren"
46 |
47 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
48 | msgid "Create"
49 | msgstr "Creëren"
50 |
51 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
52 | msgid "Delete"
53 | msgstr "Verwijderen"
54 |
55 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
56 | msgid "Apply"
57 | msgstr "Toepassen"
58 |
59 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
60 | msgid "Folder's name:"
61 | msgstr "Naam van de map:"
62 |
63 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
64 | msgid "Categories:"
65 | msgstr "Categorieën:"
66 |
67 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
68 | msgid "Other category?"
69 | msgstr "Andere categorie?"
70 |
71 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
72 | msgid "No category"
73 | msgstr "Geen categorie"
74 |
75 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
76 | msgid "Select a category…"
77 | msgstr "Kies een categorie…"
78 |
79 | #: appfolders-manager@maestroschan.fr/prefs.js:31
80 | msgid "Modifications will be effective after reloading the extension."
81 | msgstr "De wijzigingen worden toegepast na het herladen van de uitbreiding."
82 |
83 | #: appfolders-manager@maestroschan.fr/prefs.js:38
84 | msgid "Main settings"
85 | msgstr "Algemene instellingen"
86 |
87 | #: appfolders-manager@maestroschan.fr/prefs.js:39
88 | msgid "Categories"
89 | msgstr "Categorieën"
90 |
91 | #: appfolders-manager@maestroschan.fr/prefs.js:46
92 | msgid "Delete all related settings when an appfolder is deleted"
93 | msgstr "Mapinstellingen wissen na het verwijderen van een map"
94 |
95 | #: appfolders-manager@maestroschan.fr/prefs.js:48
96 | msgid "Use the right-click menus in addition to the drag-and-drop"
97 | msgstr "Rechtermuisknop gebruiken (naast slepen-en-neerzetten)"
98 |
99 | #: appfolders-manager@maestroschan.fr/prefs.js:56
100 | msgid "Use categories"
101 | msgstr "Categorieën gebruiken"
102 |
103 | #: appfolders-manager@maestroschan.fr/prefs.js:59
104 | msgid "More informations about \"additional categories\""
105 | msgstr "Meer informatie over 'aanvullende categorieën'"
106 |
107 | #: appfolders-manager@maestroschan.fr/prefs.js:74
108 | msgid "Report bugs or ideas"
109 | msgstr "Bugs melden of ideeën bespreken"
110 |
111 | #: appfolders-manager@maestroschan.fr/prefs.js:85
112 | msgid ""
113 | "This extension can be deactivated once your applications are organized as "
114 | "wished."
115 | msgstr ""
116 | "Deze uitbreiding kan worden uitgeschakeld zodra je toepassingen naar wens "
117 | "zijn ingedeeld."
118 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/pl/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/pl/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/pl/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: Appfolders Management (GNOME extension)\n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
12 | "PO-Revision-Date: 2019-05-19 18:23+0200\n"
13 | "Last-Translator: Alex \n"
14 | "Language-Team: Piotr Komur\n"
15 | "Language: pl\n"
16 | "MIME-Version: 1.0\n"
17 | "Content-Type: text/plain; charset=UTF-8\n"
18 | "Content-Transfer-Encoding: 8bit\n"
19 | "X-Generator: Poedit 2.2.1\n"
20 | "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
21 | "|| n%100>=20) ? 1 : 2);\n"
22 |
23 | #: appfolders-manager@maestroschan.fr/extension.js:83
24 | msgid "Add to"
25 | msgstr "Dodaj do folderu"
26 |
27 | #: appfolders-manager@maestroschan.fr/extension.js:85
28 | msgid "New AppFolder"
29 | msgstr "Nowy folder programów"
30 |
31 | #: appfolders-manager@maestroschan.fr/extension.js:139
32 | msgid "Remove from"
33 | msgstr "Usuń z folderu"
34 |
35 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
36 | msgid "Create a new folder"
37 | msgstr "Utwórz nowy folder"
38 |
39 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
40 | #, javascript-format
41 | msgid "Remove from %s"
42 | msgstr "Usuń z %s"
43 |
44 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
45 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
46 | msgid "Cancel"
47 | msgstr "Anuluj"
48 |
49 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
50 | msgid "Create"
51 | msgstr "Utwórz"
52 |
53 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
54 | msgid "Delete"
55 | msgstr "Usuń"
56 |
57 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
58 | msgid "Apply"
59 | msgstr "Zastosuj"
60 |
61 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
62 | msgid "Folder's name:"
63 | msgstr "Nazwa folderu:"
64 |
65 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
66 | msgid "Categories:"
67 | msgstr "Kategorie programów:"
68 |
69 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
70 | msgid "Other category?"
71 | msgstr "Nowa kategoria"
72 |
73 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
74 | msgid "No category"
75 | msgstr "Brak wybranych kategorii"
76 |
77 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
78 | msgid "Select a category…"
79 | msgstr "Wybierz kategorię…"
80 |
81 | #: appfolders-manager@maestroschan.fr/prefs.js:31
82 | msgid "Modifications will be effective after reloading the extension."
83 | msgstr "Zmiany będą aktywne po ponownym zrestartowaniu środowiska Gnome."
84 |
85 | #: appfolders-manager@maestroschan.fr/prefs.js:38
86 | msgid "Main settings"
87 | msgstr "Ustawienia"
88 |
89 | #: appfolders-manager@maestroschan.fr/prefs.js:39
90 | msgid "Categories"
91 | msgstr "Kategorie"
92 |
93 | #: appfolders-manager@maestroschan.fr/prefs.js:46
94 | msgid "Delete all related settings when an appfolder is deleted"
95 | msgstr "Usuń powiązane zmiany wraz z usunięciem folderu programów"
96 |
97 | #: appfolders-manager@maestroschan.fr/prefs.js:48
98 | msgid "Use the right-click menus in addition to the drag-and-drop"
99 | msgstr ""
100 | "Użyj menu pod prawym przyciskiem myszy w dodatku do metody \"przeciągnij i "
101 | "upuść\""
102 |
103 | #: appfolders-manager@maestroschan.fr/prefs.js:56
104 | msgid "Use categories"
105 | msgstr "Użyj standardowych kategorii"
106 |
107 | #: appfolders-manager@maestroschan.fr/prefs.js:59
108 | msgid "More informations about \"additional categories\""
109 | msgstr "Więcej informacji o \"standardowych kategoriach\""
110 |
111 | #: appfolders-manager@maestroschan.fr/prefs.js:74
112 | msgid "Report bugs or ideas"
113 | msgstr "Zgłoś błędy lub nowe funkcje"
114 |
115 | #: appfolders-manager@maestroschan.fr/prefs.js:85
116 | msgid ""
117 | "This extension can be deactivated once your applications are organized as "
118 | "wished."
119 | msgstr ""
120 | "Można dezaktywować to rozszerzenie po zakończeniu porządkowania programów w "
121 | "folderach."
122 |
123 | #~ msgid "Standard specification"
124 | #~ msgstr "Specyfikacja standardu"
125 |
126 | #~ msgid "This appfolder already exists."
127 | #~ msgstr "Folder o tej nazwie już istnieje."
128 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/pt_BR/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/pt_BR/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/pt_BR/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: \n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
11 | "PO-Revision-Date: 2019-02-10 11:19-0200\n"
12 | "Last-Translator: Fábio Nogueira \n"
13 | "Language-Team: \n"
14 | "Language: pt_BR\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "X-Generator: Poedit 2.2.1\n"
19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n"
20 |
21 | #: appfolders-manager@maestroschan.fr/extension.js:83
22 | msgid "Add to"
23 | msgstr "Adicionar para"
24 |
25 | #: appfolders-manager@maestroschan.fr/extension.js:85
26 | msgid "New AppFolder"
27 | msgstr "Nova AppFolder"
28 |
29 | #: appfolders-manager@maestroschan.fr/extension.js:139
30 | msgid "Remove from"
31 | msgstr "Remover de"
32 |
33 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
34 | msgid "Create a new folder"
35 | msgstr "Criar uma nova pasta"
36 |
37 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
38 | #, javascript-format
39 | msgid "Remove from %s"
40 | msgstr "Remover de %s"
41 |
42 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
43 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
44 | msgid "Cancel"
45 | msgstr "Cancelar"
46 |
47 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
48 | msgid "Create"
49 | msgstr "Criar"
50 |
51 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
52 | msgid "Delete"
53 | msgstr "Excluir"
54 |
55 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
56 | msgid "Apply"
57 | msgstr "Aplicar"
58 |
59 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
60 | msgid "Folder's name:"
61 | msgstr "Nome da pasta:"
62 |
63 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
64 | msgid "Categories:"
65 | msgstr "Categorias:"
66 |
67 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
68 | msgid "Other category?"
69 | msgstr "Outra categoria?"
70 |
71 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
72 | msgid "No category"
73 | msgstr "Nenhuma categoria"
74 |
75 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
76 | msgid "Select a category…"
77 | msgstr "Selecione uma categoria…"
78 |
79 | #: appfolders-manager@maestroschan.fr/prefs.js:31
80 | msgid "Modifications will be effective after reloading the extension."
81 | msgstr "As modificações entrarão em vigor depois de recarregar a extensão."
82 |
83 | #: appfolders-manager@maestroschan.fr/prefs.js:38
84 | msgid "Main settings"
85 | msgstr "Configurações principais"
86 |
87 | #: appfolders-manager@maestroschan.fr/prefs.js:39
88 | msgid "Categories"
89 | msgstr "Categorias"
90 |
91 | #: appfolders-manager@maestroschan.fr/prefs.js:46
92 | msgid "Delete all related settings when an appfolder is deleted"
93 | msgstr ""
94 | "Excluir todas as configurações relacionadas quando um appfolder for excluído"
95 |
96 | #: appfolders-manager@maestroschan.fr/prefs.js:48
97 | msgid "Use the right-click menus in addition to the drag-and-drop"
98 | msgstr "Use os menus do botão direito, além do arrastar e soltar"
99 |
100 | #: appfolders-manager@maestroschan.fr/prefs.js:56
101 | msgid "Use categories"
102 | msgstr "Usar categorias"
103 |
104 | #: appfolders-manager@maestroschan.fr/prefs.js:59
105 | msgid "More informations about \"additional categories\""
106 | msgstr "Mais informações sobre \"categorias adicionais\""
107 |
108 | #: appfolders-manager@maestroschan.fr/prefs.js:74
109 | msgid "Report bugs or ideas"
110 | msgstr "Comunicar erros ou ideias"
111 |
112 | #: appfolders-manager@maestroschan.fr/prefs.js:85
113 | msgid ""
114 | "This extension can be deactivated once your applications are organized as "
115 | "wished."
116 | msgstr ""
117 | "Esta extensão pode ser desativada assim que seus aplicativos forem "
118 | "organizados conforme desejado."
119 |
120 | #~ msgid "Standard specification"
121 | #~ msgstr "Especificação padrão"
122 |
123 | #~ msgid "This appfolder already exists."
124 | #~ msgstr "Esta appfolder já existe."
125 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/ru/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/ru/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/ru/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: PACKAGE VERSION\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 | "Last-Translator: Max Krapiŭka \n"
13 | "Language-Team: RUSSIAN \n"
14 | "Language: be\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: appfolders-manager@maestroschan.fr/extension.js:83
20 | msgid "Add to"
21 | msgstr "Добавить в"
22 |
23 | #: appfolders-manager@maestroschan.fr/extension.js:85
24 | msgid "New AppFolder"
25 | msgstr "Новая папка"
26 |
27 | #: appfolders-manager@maestroschan.fr/extension.js:139
28 | msgid "Remove from"
29 | msgstr "Удалить из"
30 |
31 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
32 | msgid "Create a new folder"
33 | msgstr ""
34 |
35 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
36 | #, fuzzy, javascript-format
37 | msgid "Remove from %s"
38 | msgstr "Удалить из"
39 |
40 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
41 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
42 | msgid "Cancel"
43 | msgstr "Отмена"
44 |
45 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
46 | msgid "Create"
47 | msgstr "Стварыць"
48 |
49 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
50 | msgid "Delete"
51 | msgstr "Удалить"
52 |
53 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
54 | msgid "Apply"
55 | msgstr ""
56 |
57 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
58 | msgid "Folder's name:"
59 | msgstr ""
60 |
61 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
62 | msgid "Categories:"
63 | msgstr ""
64 |
65 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
66 | #, fuzzy
67 | msgid "Other category?"
68 | msgstr "Удалить категорию"
69 |
70 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
71 | #, fuzzy
72 | msgid "No category"
73 | msgstr "Добавить категорию"
74 |
75 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
76 | #, fuzzy
77 | msgid "Select a category…"
78 | msgstr "Удалить категорию"
79 |
80 | #: appfolders-manager@maestroschan.fr/prefs.js:31
81 | msgid "Modifications will be effective after reloading the extension."
82 | msgstr "Изменения вступят в силу после перезагрузки расширения."
83 |
84 | #: appfolders-manager@maestroschan.fr/prefs.js:38
85 | msgid "Main settings"
86 | msgstr ""
87 |
88 | #: appfolders-manager@maestroschan.fr/prefs.js:39
89 | msgid "Categories"
90 | msgstr ""
91 |
92 | #: appfolders-manager@maestroschan.fr/prefs.js:46
93 | msgid "Delete all related settings when an appfolder is deleted"
94 | msgstr "Удалять все связанные настройки при удалении папки приложений."
95 |
96 | #: appfolders-manager@maestroschan.fr/prefs.js:48
97 | msgid "Use the right-click menus in addition to the drag-and-drop"
98 | msgstr ""
99 |
100 | #: appfolders-manager@maestroschan.fr/prefs.js:56
101 | #, fuzzy
102 | msgid "Use categories"
103 | msgstr "Дополнительные категории"
104 |
105 | #: appfolders-manager@maestroschan.fr/prefs.js:59
106 | msgid "More informations about \"additional categories\""
107 | msgstr "Больше информации про \"дополнительные категории\""
108 |
109 | #: appfolders-manager@maestroschan.fr/prefs.js:74
110 | msgid "Report bugs or ideas"
111 | msgstr "Сообщить об ошибках, предложить идеи"
112 |
113 | #: appfolders-manager@maestroschan.fr/prefs.js:85
114 | msgid ""
115 | "This extension can be deactivated once your applications are organized as "
116 | "wished."
117 | msgstr ""
118 | "Это расширение может быть деактивировано, после того как вы окончательно "
119 | "настроите организацию своих приложений."
120 |
121 | #~ msgid "Standard specification"
122 | #~ msgstr "Стандартная спецификация"
123 |
124 | #~ msgid "This appfolder already exists."
125 | #~ msgstr "Эта папка приложений уже существует"
126 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/sr/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/sr/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/sr/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: \n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
12 | "PO-Revision-Date: 2017-09-15 16:40+0200\n"
13 | "Last-Translator: \n"
14 | "Language-Team: \n"
15 | "Language: sr\n"
16 | "MIME-Version: 1.0\n"
17 | "Content-Type: text/plain; charset=UTF-8\n"
18 | "Content-Transfer-Encoding: 8bit\n"
19 | "X-Generator: Poedit 2.0.3\n"
20 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
21 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
22 |
23 | #: appfolders-manager@maestroschan.fr/extension.js:83
24 | msgid "Add to"
25 | msgstr "Додај у"
26 |
27 | #: appfolders-manager@maestroschan.fr/extension.js:85
28 | msgid "New AppFolder"
29 | msgstr "Нова фаскила програма"
30 |
31 | #: appfolders-manager@maestroschan.fr/extension.js:139
32 | msgid "Remove from"
33 | msgstr "Уклони ставку"
34 |
35 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
36 | msgid "Create a new folder"
37 | msgstr ""
38 |
39 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
40 | #, fuzzy, javascript-format
41 | msgid "Remove from %s"
42 | msgstr "Уклони ставку"
43 |
44 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
45 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
46 | msgid "Cancel"
47 | msgstr "Откажи"
48 |
49 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
50 | msgid "Create"
51 | msgstr "Направи"
52 |
53 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
54 | msgid "Delete"
55 | msgstr "Обриши"
56 |
57 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
58 | msgid "Apply"
59 | msgstr ""
60 |
61 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
62 | msgid "Folder's name:"
63 | msgstr ""
64 |
65 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
66 | msgid "Categories:"
67 | msgstr ""
68 |
69 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
70 | #, fuzzy
71 | msgid "Other category?"
72 | msgstr "Уклони категорију"
73 |
74 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
75 | #, fuzzy
76 | msgid "No category"
77 | msgstr "Додај категорију"
78 |
79 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
80 | #, fuzzy
81 | msgid "Select a category…"
82 | msgstr "Уклони категорију"
83 |
84 | #: appfolders-manager@maestroschan.fr/prefs.js:31
85 | msgid "Modifications will be effective after reloading the extension."
86 | msgstr "Измене ће ступити на снагу по поновном учитавању проширења."
87 |
88 | #: appfolders-manager@maestroschan.fr/prefs.js:38
89 | msgid "Main settings"
90 | msgstr ""
91 |
92 | #: appfolders-manager@maestroschan.fr/prefs.js:39
93 | msgid "Categories"
94 | msgstr ""
95 |
96 | #: appfolders-manager@maestroschan.fr/prefs.js:46
97 | msgid "Delete all related settings when an appfolder is deleted"
98 | msgstr "Обриши све припадајуће поставке при брисању проширења"
99 |
100 | #: appfolders-manager@maestroschan.fr/prefs.js:48
101 | msgid "Use the right-click menus in addition to the drag-and-drop"
102 | msgstr ""
103 |
104 | #: appfolders-manager@maestroschan.fr/prefs.js:56
105 | #, fuzzy
106 | msgid "Use categories"
107 | msgstr "Додатне категорије"
108 |
109 | #: appfolders-manager@maestroschan.fr/prefs.js:59
110 | msgid "More informations about \"additional categories\""
111 | msgstr ""
112 |
113 | #: appfolders-manager@maestroschan.fr/prefs.js:74
114 | msgid "Report bugs or ideas"
115 | msgstr ""
116 |
117 | #: appfolders-manager@maestroschan.fr/prefs.js:85
118 | msgid ""
119 | "This extension can be deactivated once your applications are organized as "
120 | "wished."
121 | msgstr ""
122 |
123 | #~ msgid "This appfolder already exists."
124 | #~ msgstr "Ова фасцикла програма већ постоји."
125 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/sr@latin/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/sr@latin/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/sr@latin/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | #
7 | msgid ""
8 | msgstr ""
9 | "Project-Id-Version: \n"
10 | "Report-Msgid-Bugs-To: \n"
11 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
12 | "PO-Revision-Date: 2017-09-15 16:40+0200\n"
13 | "Last-Translator: \n"
14 | "Language-Team: \n"
15 | "Language: sr@latin\n"
16 | "MIME-Version: 1.0\n"
17 | "Content-Type: text/plain; charset=UTF-8\n"
18 | "Content-Transfer-Encoding: 8bit\n"
19 | "X-Generator: Poedit 2.0.3\n"
20 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
21 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
22 |
23 | #: appfolders-manager@maestroschan.fr/extension.js:83
24 | msgid "Add to"
25 | msgstr "Dodaj u"
26 |
27 | #: appfolders-manager@maestroschan.fr/extension.js:85
28 | msgid "New AppFolder"
29 | msgstr "Nova faskila programa"
30 |
31 | #: appfolders-manager@maestroschan.fr/extension.js:139
32 | msgid "Remove from"
33 | msgstr "Ukloni stavku"
34 |
35 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
36 | msgid "Create a new folder"
37 | msgstr ""
38 |
39 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
40 | #, fuzzy, javascript-format
41 | msgid "Remove from %s"
42 | msgstr "Ukloni stavku"
43 |
44 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
45 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
46 | msgid "Cancel"
47 | msgstr "Otkaži"
48 |
49 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
50 | msgid "Create"
51 | msgstr "Napravi"
52 |
53 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
54 | msgid "Delete"
55 | msgstr "Obriši"
56 |
57 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
58 | msgid "Apply"
59 | msgstr ""
60 |
61 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
62 | msgid "Folder's name:"
63 | msgstr ""
64 |
65 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
66 | msgid "Categories:"
67 | msgstr ""
68 |
69 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
70 | #, fuzzy
71 | msgid "Other category?"
72 | msgstr "Ukloni kategoriju"
73 |
74 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
75 | #, fuzzy
76 | msgid "No category"
77 | msgstr "Dodaj kategoriju"
78 |
79 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
80 | #, fuzzy
81 | msgid "Select a category…"
82 | msgstr "Ukloni kategoriju"
83 |
84 | #: appfolders-manager@maestroschan.fr/prefs.js:31
85 | msgid "Modifications will be effective after reloading the extension."
86 | msgstr "Izmene će stupiti na snagu po ponovnom učitavanju proširenja."
87 |
88 | #: appfolders-manager@maestroschan.fr/prefs.js:38
89 | msgid "Main settings"
90 | msgstr ""
91 |
92 | #: appfolders-manager@maestroschan.fr/prefs.js:39
93 | msgid "Categories"
94 | msgstr ""
95 |
96 | #: appfolders-manager@maestroschan.fr/prefs.js:46
97 | msgid "Delete all related settings when an appfolder is deleted"
98 | msgstr "Obriši sve pripadajuće postavke pri brisanju proširenja"
99 |
100 | #: appfolders-manager@maestroschan.fr/prefs.js:48
101 | msgid "Use the right-click menus in addition to the drag-and-drop"
102 | msgstr ""
103 |
104 | #: appfolders-manager@maestroschan.fr/prefs.js:56
105 | #, fuzzy
106 | msgid "Use categories"
107 | msgstr "Dodatne kategorije"
108 |
109 | #: appfolders-manager@maestroschan.fr/prefs.js:59
110 | msgid "More informations about \"additional categories\""
111 | msgstr ""
112 |
113 | #: appfolders-manager@maestroschan.fr/prefs.js:74
114 | msgid "Report bugs or ideas"
115 | msgstr ""
116 |
117 | #: appfolders-manager@maestroschan.fr/prefs.js:85
118 | msgid ""
119 | "This extension can be deactivated once your applications are organized as "
120 | "wished."
121 | msgstr ""
122 |
123 | #~ msgid "This appfolder already exists."
124 | #~ msgstr "Ova fascikla programa već postoji."
125 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/tr/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/tr/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/tr/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # Uygulama klasörleme Türkçe çeviri.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # Serdar Sağlam , 2019.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: v13\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
11 | "PO-Revision-Date: 2019-01-19 12:10+0300\n"
12 | "Last-Translator: Serdar Sağlam \n"
13 | "Language-Team: Türkçe \n"
14 | "Language: tr\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 |
19 | #: appfolders-manager@maestroschan.fr/extension.js:83
20 | msgid "Add to"
21 | msgstr "Klasör Grubuna Taşı"
22 |
23 | #: appfolders-manager@maestroschan.fr/extension.js:85
24 | msgid "New AppFolder"
25 | msgstr "Yeni Klasör Grubu"
26 |
27 | #: appfolders-manager@maestroschan.fr/extension.js:139
28 | msgid "Remove from"
29 | msgstr "Buradan Kaldır"
30 |
31 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
32 | msgid "Create a new folder"
33 | msgstr "Yeni klasör oluştur"
34 |
35 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
36 | #, javascript-format
37 | msgid "Remove from %s"
38 | msgstr "Buradan Kaldır %s"
39 |
40 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
41 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
42 | msgid "Cancel"
43 | msgstr "İptal"
44 |
45 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
46 | msgid "Create"
47 | msgstr "Oluştur"
48 |
49 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
50 | msgid "Delete"
51 | msgstr "Sil"
52 |
53 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
54 | msgid "Apply"
55 | msgstr "Onayla"
56 |
57 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
58 | msgid "Folder's name:"
59 | msgstr "Klasör İsmi:"
60 |
61 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
62 | msgid "Categories:"
63 | msgstr "Kategoriler:"
64 |
65 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
66 | msgid "Other category?"
67 | msgstr "Diğer Kategori?"
68 |
69 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
70 | msgid "No category"
71 | msgstr "Kategori Yok"
72 |
73 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
74 | msgid "Select a category…"
75 | msgstr "Kategori Seç…"
76 |
77 | #: appfolders-manager@maestroschan.fr/prefs.js:31
78 | msgid "Modifications will be effective after reloading the extension."
79 | msgstr "Değişiklikler,eklenti yeniden başladıktan sonra etkili olacaktır."
80 |
81 | #: appfolders-manager@maestroschan.fr/prefs.js:38
82 | msgid "Main settings"
83 | msgstr "Ayarlar"
84 |
85 | #: appfolders-manager@maestroschan.fr/prefs.js:39
86 | msgid "Categories"
87 | msgstr "Kategoriler"
88 |
89 | #: appfolders-manager@maestroschan.fr/prefs.js:46
90 | msgid "Delete all related settings when an appfolder is deleted"
91 | msgstr "Bir klasör grubu silindiğinde tüm ilgili ayarları silin"
92 |
93 | #: appfolders-manager@maestroschan.fr/prefs.js:48
94 | msgid "Use the right-click menus in addition to the drag-and-drop"
95 | msgstr "Sürükle ve bırak işlevine ek olarak sağ tıklama menülerini kullanın"
96 |
97 | #: appfolders-manager@maestroschan.fr/prefs.js:56
98 | msgid "Use categories"
99 | msgstr "Kategorileri Kullan"
100 |
101 | #: appfolders-manager@maestroschan.fr/prefs.js:59
102 | msgid "More informations about \"additional categories\""
103 | msgstr "Hakkında daha fazla bilgi \"ek kategoriler\""
104 |
105 | #: appfolders-manager@maestroschan.fr/prefs.js:74
106 | msgid "Report bugs or ideas"
107 | msgstr "Yeni bir fikir veya hata bildirin"
108 |
109 | #: appfolders-manager@maestroschan.fr/prefs.js:85
110 | msgid ""
111 | "This extension can be deactivated once your applications are organized as "
112 | "wished."
113 | msgstr ""
114 | "Menüleri istediğiniz şekilde düzenlendiğinde bu uzantı devre dışı "
115 | "bırakılabilir."
116 |
117 | #~ msgid "Standard specification"
118 | #~ msgstr "Standart şartname"
119 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/uk_UA/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/uk_UA/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/uk_UA/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: \n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
11 | "PO-Revision-Date: 2019-07-31 13:15+0300\n"
12 | "Last-Translator: Igor Gordiichuk \n"
13 | "Language-Team: \n"
14 | "Language: uk_UA\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "X-Generator: Poedit 2.2.3\n"
19 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
20 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
21 |
22 | #: appfolders-manager@maestroschan.fr/extension.js:83
23 | msgid "Add to"
24 | msgstr "Додати до"
25 |
26 | #: appfolders-manager@maestroschan.fr/extension.js:85
27 | msgid "New AppFolder"
28 | msgstr "Нова тека програм"
29 |
30 | #: appfolders-manager@maestroschan.fr/extension.js:139
31 | msgid "Remove from"
32 | msgstr "Вилучити з"
33 |
34 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
35 | msgid "Create a new folder"
36 | msgstr "Створити нову теку"
37 |
38 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
39 | #, javascript-format
40 | msgid "Remove from %s"
41 | msgstr "Вилучити з %s"
42 |
43 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
44 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
45 | msgid "Cancel"
46 | msgstr "Скасувати"
47 |
48 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
49 | msgid "Create"
50 | msgstr "Створити"
51 |
52 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
53 | msgid "Delete"
54 | msgstr "Вилучити"
55 |
56 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
57 | msgid "Apply"
58 | msgstr "Застосовувати"
59 |
60 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
61 | msgid "Folder's name:"
62 | msgstr "Назва теки:"
63 |
64 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
65 | msgid "Categories:"
66 | msgstr "Категорії:"
67 |
68 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
69 | msgid "Other category?"
70 | msgstr "Інша категорія?"
71 |
72 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
73 | msgid "No category"
74 | msgstr "Без категорії"
75 |
76 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
77 | msgid "Select a category…"
78 | msgstr "Обрати категорію…"
79 |
80 | #: appfolders-manager@maestroschan.fr/prefs.js:31
81 | msgid "Modifications will be effective after reloading the extension."
82 | msgstr "Зміни буде застосовано після перезавантаження розширення."
83 |
84 | #: appfolders-manager@maestroschan.fr/prefs.js:38
85 | msgid "Main settings"
86 | msgstr "Основні налаштування"
87 |
88 | #: appfolders-manager@maestroschan.fr/prefs.js:39
89 | msgid "Categories"
90 | msgstr "Категорії"
91 |
92 | #: appfolders-manager@maestroschan.fr/prefs.js:46
93 | msgid "Delete all related settings when an appfolder is deleted"
94 | msgstr "Вилучити всі пов'язані налаштування, коли видаляється тека"
95 |
96 | #: appfolders-manager@maestroschan.fr/prefs.js:48
97 | msgid "Use the right-click menus in addition to the drag-and-drop"
98 | msgstr "Використовувати контекстне меню додатково до перетягування мишкою"
99 |
100 | #: appfolders-manager@maestroschan.fr/prefs.js:56
101 | msgid "Use categories"
102 | msgstr "Використати категорії"
103 |
104 | #: appfolders-manager@maestroschan.fr/prefs.js:59
105 | msgid "More informations about \"additional categories\""
106 | msgstr "Більше інформації про \"додаткові категорії\""
107 |
108 | #: appfolders-manager@maestroschan.fr/prefs.js:74
109 | msgid "Report bugs or ideas"
110 | msgstr "Повідомити про ваду або запропонувати ідею"
111 |
112 | #: appfolders-manager@maestroschan.fr/prefs.js:85
113 | msgid ""
114 | "This extension can be deactivated once your applications are organized as "
115 | "wished."
116 | msgstr "Це розширення можна деактивувати, якщо програми було впорядковано."
117 |
118 | #~ msgid "Standard specification"
119 | #~ msgstr "Стандартні категорії"
120 |
121 | #~ msgid "This appfolder already exists."
122 | #~ msgstr "Ця тека програм вже існує."
123 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/zh_CN/LC_MESSAGES/appfolders-manager.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/locale/zh_CN/LC_MESSAGES/appfolders-manager.mo
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/locale/zh_CN/LC_MESSAGES/appfolders-manager.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 | # This file is distributed under the same license as the PACKAGE package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: \n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2019-07-02 22:54+0200\n"
11 | "PO-Revision-Date: 2018-12-19 05:43+0200\n"
12 | "Last-Translator: Zodiac \n"
13 | "Language-Team: \n"
14 | "Language: zh_CN\n"
15 | "MIME-Version: 1.0\n"
16 | "Content-Type: text/plain; charset=UTF-8\n"
17 | "Content-Transfer-Encoding: 8bit\n"
18 | "X-Generator: Poedit 2.2\n"
19 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
20 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
21 |
22 | #: appfolders-manager@maestroschan.fr/extension.js:83
23 | msgid "Add to"
24 | msgstr "添加到"
25 |
26 | #: appfolders-manager@maestroschan.fr/extension.js:85
27 | msgid "New AppFolder"
28 | msgstr "新建App文件夹"
29 |
30 | #: appfolders-manager@maestroschan.fr/extension.js:139
31 | msgid "Remove from"
32 | msgstr "从以下移除"
33 |
34 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:312
35 | msgid "Create a new folder"
36 | msgstr "新建文件夹"
37 |
38 | #: appfolders-manager@maestroschan.fr/dragAndDrop.js:350
39 | #, fuzzy, javascript-format
40 | msgid "Remove from %s"
41 | msgstr "从以下移除 %s"
42 |
43 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:62
44 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:72
45 | msgid "Cancel"
46 | msgstr "取消"
47 |
48 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:66
49 | msgid "Create"
50 | msgstr "新建"
51 |
52 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:76
53 | msgid "Delete"
54 | msgstr "删除"
55 |
56 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:80
57 | msgid "Apply"
58 | msgstr "应用"
59 |
60 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:106
61 | msgid "Folder's name:"
62 | msgstr "文件夹名称:"
63 |
64 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:139
65 | msgid "Categories:"
66 | msgstr "目录:"
67 |
68 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:164
69 | msgid "Other category?"
70 | msgstr "其他目录?"
71 |
72 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:192
73 | msgid "No category"
74 | msgstr "没有此目录"
75 |
76 | #: appfolders-manager@maestroschan.fr/appfolderDialog.js:375
77 | #, fuzzy
78 | msgid "Select a category…"
79 | msgstr "选择一个目录..."
80 |
81 | #: appfolders-manager@maestroschan.fr/prefs.js:31
82 | msgid "Modifications will be effective after reloading the extension."
83 | msgstr "改变将会在重启扩展后生效。"
84 |
85 | #: appfolders-manager@maestroschan.fr/prefs.js:38
86 | msgid "Main settings"
87 | msgstr "主要设置"
88 |
89 | #: appfolders-manager@maestroschan.fr/prefs.js:39
90 | msgid "Categories"
91 | msgstr "目录"
92 |
93 | #: appfolders-manager@maestroschan.fr/prefs.js:46
94 | msgid "Delete all related settings when an appfolder is deleted"
95 | msgstr "删除App文件夹时同时也删除相关设置"
96 |
97 | #: appfolders-manager@maestroschan.fr/prefs.js:48
98 | msgid "Use the right-click menus in addition to the drag-and-drop"
99 | msgstr "除了拖放之外,还可以使用右键单击菜单"
100 |
101 | #: appfolders-manager@maestroschan.fr/prefs.js:56
102 | msgid "Use categories"
103 | msgstr "使用目录"
104 |
105 | #: appfolders-manager@maestroschan.fr/prefs.js:59
106 | msgid "More informations about \"additional categories\""
107 | msgstr "更多信息关于 \"附加目录\""
108 |
109 | #: appfolders-manager@maestroschan.fr/prefs.js:74
110 | msgid "Report bugs or ideas"
111 | msgstr "报告Bug或建议"
112 |
113 | #: appfolders-manager@maestroschan.fr/prefs.js:85
114 | msgid ""
115 | "This extension can be deactivated once your applications are organized as "
116 | "wished."
117 | msgstr "一旦您组织好了您的App,这个扩展就可以被停用了。"
118 |
119 | #~ msgid "Standard specification"
120 | #~ msgstr "标准规范"
121 |
122 | #~ msgid "This appfolder already exists."
123 | #~ msgstr "这个文件夹已经存在。"
124 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "_generated": "Generated by SweetTooth, do not edit",
3 | "description": "An easy way to arrange your applications in folders, directly from the applications grid. Create folders and add/remove apps using drag-and-drop, rename/delete them with a right-click.",
4 | "gettext-domain": "appfolders-manager",
5 | "name": "Appfolders Management extension",
6 | "shell-version": [
7 | "3.26",
8 | "3.28",
9 | "3.30",
10 | "3.32"
11 | ],
12 | "url": "https://github.com/maoschanz/appfolders-manager-gnome-extension",
13 | "uuid": "appfolders-manager@maestroschan.fr",
14 | "version": 0
15 | }
16 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/prefs.js:
--------------------------------------------------------------------------------
1 |
2 | const GObject = imports.gi.GObject;
3 | const Gtk = imports.gi.Gtk;
4 |
5 | const Gettext = imports.gettext.domain('appfolders-manager');
6 | const _ = Gettext.gettext;
7 |
8 | const ExtensionUtils = imports.misc.extensionUtils;
9 | const Me = ExtensionUtils.getCurrentExtension();
10 | const Convenience = Me.imports.convenience;
11 |
12 | //------------------------------------------------------------------------------
13 |
14 | const appfoldersManagerSettingsWidget = new GObject.Class({
15 | Name: 'appfoldersManager.Prefs.Widget',
16 | GTypeName: 'appfoldersManagerPrefsWidget',
17 | Extends: Gtk.Box,
18 |
19 | _init: function (params) {
20 | this.parent(params);
21 | this.margin = 30;
22 | this.spacing = 18;
23 | this.set_orientation(Gtk.Orientation.VERTICAL);
24 |
25 | this._settings = Convenience.getSettings('org.gnome.shell.extensions.appfolders-manager');
26 |
27 | // The goal of this bullshit is to force the boolean to appear in dconf
28 | this._settings.set_boolean('debug', this._settings.get_boolean('debug'));
29 |
30 | //----------------------------------------------------------------------
31 |
32 | let labelMain = new Gtk.Label({
33 | label: _("Modifications will be effective after reloading the extension."),
34 | use_markup: true,
35 | wrap: true,
36 | halign: Gtk.Align.START
37 | });
38 | this.add(labelMain);
39 |
40 | let generalSection = this.add_section(_("Main settings"));
41 | let categoriesSection = this.add_section(_("Categories"));
42 |
43 | //----------------------------------------------------------------------
44 |
45 | // let autoDeleteBox = this.build_switch('auto-deletion',
46 | // _("Delete automatically empty folders"));
47 | let deleteAllBox = this.build_switch('total-deletion',
48 | _("Delete all related settings when an appfolder is deleted"));
49 | let menusBox = this.build_switch('extend-menus',
50 | _("Use the right-click menus in addition to the drag-and-drop"));
51 |
52 | // this.add_row(autoDeleteBox, generalSection);
53 | this.add_row(deleteAllBox, generalSection);
54 | this.add_row(menusBox, generalSection);
55 |
56 | //----------------------------------------------------------------------
57 |
58 | let categoriesBox = this.build_switch('categories', _("Use categories"));
59 |
60 | let categoriesLinkButton = new Gtk.LinkButton({
61 | label: _("More informations about \"additional categories\""),
62 | uri: "https://standards.freedesktop.org/menu-spec/latest/apas02.html"
63 | });
64 |
65 | this.add_row(categoriesBox, categoriesSection);
66 | this.add_row(categoriesLinkButton, categoriesSection);
67 |
68 | //----------------------------------------------------------------------
69 |
70 | let aboutBox = new Gtk.Box({
71 | orientation: Gtk.Orientation.HORIZONTAL,
72 | spacing: 10
73 | });
74 | let about_label = new Gtk.Label({
75 | label: '(v' + Me.metadata.version.toString() + ')',
76 | halign: Gtk.Align.START
77 | });
78 | let url_button = new Gtk.LinkButton({
79 | label: _("Report bugs or ideas"),
80 | uri: Me.metadata.url.toString()
81 | });
82 | aboutBox.pack_start(url_button, false, false, 0);
83 | aboutBox.pack_end(about_label, false, false, 0);
84 |
85 | this.pack_end(aboutBox, false, false, 0);
86 |
87 | //----------------------------------------------------------------------
88 |
89 | let desacLabel = new Gtk.Label({
90 | label: _("This extension can be deactivated once your applications are organized as wished."),
91 | wrap: true,
92 | halign: Gtk.Align.CENTER
93 | });
94 | this.pack_end(desacLabel, false, false, 0);
95 | },
96 |
97 | add_section: function (titre) {
98 | let section = new Gtk.Box({
99 | orientation: Gtk.Orientation.VERTICAL,
100 | margin: 6,
101 | spacing: 6,
102 | });
103 |
104 | let frame = new Gtk.Frame({
105 | label: titre,
106 | label_xalign: 0.1,
107 | });
108 | frame.add(section);
109 | this.add(frame);
110 | return section;
111 | },
112 |
113 | add_row: function (filledbox, section) {
114 | section.add(filledbox);
115 | },
116 |
117 | build_switch: function (key, label) {
118 | let rowLabel = new Gtk.Label({
119 | label: label,
120 | halign: Gtk.Align.START,
121 | wrap: true,
122 | visible: true,
123 | });
124 |
125 | let rowSwitch = new Gtk.Switch({ valign: Gtk.Align.CENTER });
126 | rowSwitch.set_state(this._settings.get_boolean(key));
127 | rowSwitch.connect('notify::active', (widget) => {
128 | this._settings.set_boolean(key, widget.active);
129 | });
130 |
131 | let rowBox = new Gtk.Box({
132 | orientation: Gtk.Orientation.HORIZONTAL,
133 | spacing: 15,
134 | margin: 6,
135 | visible: true,
136 | });
137 | rowBox.pack_start(rowLabel, false, false, 0);
138 | rowBox.pack_end(rowSwitch, false, false, 0);
139 |
140 | return rowBox;
141 | },
142 | });
143 |
144 | //------------------------------------------------------------------------------
145 |
146 | function init() {
147 | Convenience.initTranslations();
148 | }
149 |
150 | // I guess this is like the "enable" in extension.js : something called each
151 | // time the user tries to access the settings' window
152 | function buildPrefsWidget () {
153 | let widget = new appfoldersManagerSettingsWidget();
154 | widget.show_all();
155 |
156 | return widget;
157 | }
158 |
159 | //------------------------------------------------------------------------------
160 |
161 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/schemas/gschemas.compiled:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maoschanz/appfolders-manager-gnome-extension/ca28768810bd2cf867a7529aa8b580a931946fc5/appfolders-manager@maestroschan.fr/schemas/gschemas.compiled
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/schemas/org.gnome.shell.extensions.appfolders-manager.gschema.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | true
6 | Complete deletion of an appfolder
7 | if a deleted appfolder should be 100% deleted (false = restauration is possible)
8 |
9 |
10 | true
11 | Use categories
12 | If the interface for managing categories should be shown.
13 |
14 |
15 | false
16 | Debug key
17 | this is not supposed to be activated by the user
18 |
19 |
20 | true
21 | Show items in right-click menus
22 | The legacy interface, with submenus in the right-click menu on application icons, can be shown in addition to the default drag-and-drop behavior.
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/appfolders-manager@maestroschan.fr/stylesheet.css:
--------------------------------------------------------------------------------
1 | .dropAreaLabel {
2 | font-size: 24px;
3 | font-weight: bold;
4 | }
5 |
6 | .framedArea {
7 | background-color: rgba(255,255,255,0.0);
8 | border-color: rgba(255,255,255,1.0);
9 | border-width: 1px;
10 | color: rgba(255, 255, 255, 1.0);
11 | }
12 |
13 | .shadowedAreaTop {
14 | background-gradient-start: rgba(0, 0, 0, 0.7);
15 | background-gradient-end: rgba(0, 0, 0, 0.1);
16 | background-gradient-direction: vertical;
17 | color: rgba(255, 255, 255, 1.0);
18 | }
19 |
20 | .shadowedAreaBottom {
21 | background-gradient-start: rgba(0, 0, 0, 0.1);
22 | background-gradient-end: rgba(0, 0, 0, 0.7);
23 | background-gradient-direction: vertical;
24 | color: rgba(255, 255, 255, 1.0);
25 | }
26 |
27 | .folderArea {
28 | background-gradient-start: rgba(0, 0, 0, 0.4);
29 | background-gradient-end: rgba(0, 0, 0, 0.0);
30 | background-gradient-direction: vertical;
31 | border-color: rgba(255,255,255,1.0);
32 | border-radius: 4px;
33 | border-width: 2px;
34 | color: rgba(255, 255, 255, 1.0);
35 | }
36 |
37 | .insensitiveArea {
38 | background-color: rgba(0, 0, 0, 0.1);
39 | color: rgba(100, 100, 100, 0.6);
40 | }
41 |
42 | .appCategoryBox {
43 | background-color: rgba(100, 100, 100, 0.3);
44 | border-radius: 3px;
45 | margin: 3px;
46 | padding: 2px;
47 | padding-left: 6px;
48 | }
49 |
50 | .appCategoryDeleteBtn {
51 | background-color: rgba(100, 100, 100, 0.3);
52 | border-radius: 3px;
53 | }
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/build-a-zip.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | #./update-and-compile-translations.sh --all
4 |
5 | cd appfolders-manager@maestroschan.fr
6 |
7 | glib-compile-schemas ./schemas
8 |
9 | zip ../appfolders-manager@maestroschan.fr.zip *.js
10 | zip ../appfolders-manager@maestroschan.fr.zip *.css
11 | zip ../appfolders-manager@maestroschan.fr.zip *json
12 |
13 | zip -r ../appfolders-manager@maestroschan.fr.zip schemas
14 | zip -r ../appfolders-manager@maestroschan.fr.zip locale
15 |
--------------------------------------------------------------------------------
/install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | if (( $EUID == 0 )); then
4 | if [ ! -d "/usr/share/gnome-shell/extensions" ]; then
5 | mkdir /usr/share/gnome-shell/extensions
6 | fi
7 | INSTALL_DIR="/usr/share/gnome-shell/extensions"
8 | else
9 | if [ ! -d "$HOME/.local/share/gnome-shell/extensions" ]; then
10 | mkdir $HOME/.local/share/gnome-shell/extensions
11 | fi
12 | INSTALL_DIR="$HOME/.local/share/gnome-shell/extensions"
13 | fi
14 |
15 | echo "Installing extension files in $INSTALL_DIR/appfolders-manager@maestroschan.fr"
16 | cp -r appfolders-manager@maestroschan.fr $INSTALL_DIR
17 |
18 | echo "Done."
19 | exit 0
20 |
21 |
--------------------------------------------------------------------------------
/update-and-compile-translations.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | EXTENSION_ID="appfolders-manager@maestroschan.fr"
4 | TRANSLATION_ID="appfolders-manager"
5 |
6 | #####
7 |
8 | if [ $# = 0 ]; then
9 | echo "No parameter, exiting now."
10 | echo ""
11 | echo "Parameters and options for this script:"
12 | echo " xx update only the language xx, and compile only xx"
13 | echo " --pot update the pot file"
14 | echo " --compile compile all languages (without updating them first)"
15 | echo " --all update all translations files, and compile them all"
16 | echo " --add xx add a .po file for the language xx"
17 | exit 1
18 | fi
19 |
20 | #####
21 |
22 | function update_pot () {
23 | echo "Generating .pot file..."
24 | xgettext --files-from=POTFILES.in --from-code=UTF-8 --output=$EXTENSION_ID/locale/$TRANSLATION_ID.pot
25 | }
26 |
27 | function update_lang () {
28 | echo "Updating translation for: $1"
29 | msgmerge $prefix/$1/LC_MESSAGES/$TRANSLATION_ID.po $prefix/$TRANSLATION_ID.pot > $prefix/$1/LC_MESSAGES/$TRANSLATION_ID.temp.po
30 | mv $prefix/$1/LC_MESSAGES/$TRANSLATION_ID.temp.po $prefix/$1/LC_MESSAGES/$TRANSLATION_ID.po
31 | }
32 |
33 | function compile_lang () {
34 | echo "Compiling translation for: $1"
35 | msgfmt $prefix/$1/LC_MESSAGES/$TRANSLATION_ID.po -o $prefix/$1/LC_MESSAGES/$TRANSLATION_ID.mo
36 | }
37 |
38 | function create_po () {
39 | mkdir -p $prefix/$1/LC_MESSAGES
40 | touch $prefix/$1/LC_MESSAGES/$TRANSLATION_ID.po
41 | echo "msgid \"\"
42 | msgstr \"\"
43 | \"Project-Id-Version: \\n\"
44 | \"Report-Msgid-Bugs-To: \\n\"
45 | \"POT-Creation-Date: 2019-07-02 18:58+0200\\n\"
46 | \"PO-Revision-Date: 2017-02-05 16:47+0100\\n\"
47 | \"Last-Translator: \\n\"
48 | \"Language-Team: \\n\"
49 | \"Language: $1\\n\"
50 | \"MIME-Version: 1.0\\n\"
51 | \"Content-Type: text/plain; charset=UTF-8\\n\"
52 | \"Content-Transfer-Encoding: 8bit\\n\"
53 | \"X-Generator: \\n\"
54 | \"Plural-Forms: nplurals=2; plural=(n > 1);\\n\"
55 | " > $prefix/$1/LC_MESSAGES/$TRANSLATION_ID.po
56 | update_lang $1
57 | }
58 |
59 | #####
60 |
61 | IFS='
62 | '
63 | liste=`ls ./$EXTENSION_ID/locale/`
64 | prefix="./$EXTENSION_ID/locale"
65 |
66 | #####
67 |
68 | if [ $1 = "--all" ]; then
69 | update_pot
70 | for lang_id in $liste
71 | do
72 | if [ "$lang_id" != "$TRANSLATION_ID.pot" ]; then
73 | update_lang $lang_id
74 | compile_lang $lang_id
75 | fi
76 | done
77 | elif [ $1 = "--pot" ]; then
78 | update_pot
79 | elif [ $1 = "--compile-only" ]; then
80 | for lang_id in $liste
81 | do
82 | if [ "$lang_id" != "$TRANSLATION_ID.pot" ]; then
83 | compile_lang $lang_id
84 | fi
85 | done
86 | elif [ $1 = "--add" ]; then
87 | create_po $2
88 | else
89 | for lang_id in $@
90 | do
91 | if [ "$lang_id" != "$TRANSLATION_ID.pot" ]; then
92 | update_lang $lang_id
93 | compile_lang $lang_id
94 | fi
95 | done
96 | fi
97 |
98 | exit 0
99 |
100 |
--------------------------------------------------------------------------------