99 Commits

Author SHA1 Message Date
6b4c75ad83
Docs: Add newer, cut down and commented panel.js from Gnome Shell 42.5 2022-10-22 19:14:54 +02:00
91b472c4fe
Docs: Add doc. holding some setup instructions and tips for a GSE Dev VM
Add this document to provide some setup instructions and tips for making
the most of a Gnome Shell Extensions Development VM.
2022-10-22 01:25:11 +02:00
37ece04211
Rename docs/panel.js to include source branch and date
Do this in preparation for the addition of more `panel.js` files from
other branches/tags and dates.
2022-10-21 19:27:59 +02:00
d4af68313f
Other: Bump version to 3 v3 2021-07-05 11:03:15 +02:00
10b491c252
Update: Handle the Dropbox client better
The Dropbox client appends its PID to the id, which gets used for the
application name in `handleAppIndicatorKStatusNotifierItemItem`. This
resulted in the creation of a new entry for the Dropbox client on
basically every Dropbox client start, which would fill up the extensions
settings and would also result in the user effectively not being able to
set the position for the Dropbox client permanently.
This commit fixes these issues by removing the PID (and the hypen before
it) for the Dropbox client application name.
2021-07-05 10:58:10 +02:00
03fb3355b4
Fix: Extension crashing, when no associatedRole can be found
There are situations, where no `associatedRole` for a given
`indicatorContainer` can be found (e.g. the GameMode GNOME Shell
Extension seems to cause such a situation, when you have it enabled and
lock and unlock GNOME).
Previously this would crash the extension. With this fix, those
`indicatorContainer`s just get ignored.
2021-07-05 10:06:51 +02:00
e76b24e813
Feature: Add forget action for top bar items
This forget action removes the top bar item from the top bar order
representation, which is present in the settings, and then saves the top
bar order.
This action is intended for forgetting top bar items, which aren't
present in the top bar anymore, so that the user can clean up their
settings.
So if an item isn't in the top bar at the time of action activation,
activating the action removes it from the saved top bar order. If an
item is in the top bar at the time of action activation, the item
position just gets lost (since it gets automatically re-added to the top
bar order).
2021-07-05 08:41:08 +02:00
309e2c07b9
Refactor: Let PrefsBoxOrderItemRow handle item association
Let `PrefsBoxOrderItemRow` handle the association of itself with an item
itself.
Doing so makes the code cleaner, since the association isn't done
externally anymore.
2021-07-05 07:58:01 +02:00
bd69f816eb
Refactor: Move logic for saving box order to PrefsBoxOrderListBox
Move the logic for saving the box order represented by a
`PrefsBoxOrderListBox` (and its `PrefsBoxOrderItemRows`) to the
`PrefsBoxOrderListBox` class.
This makes the code cleaner and allows for easy reuse of the logic in
the future.
2021-07-05 07:46:08 +02:00
28fb67ad4d
Refactor: Create custom class for prefs box order GtkListBoxes
Create a custom class (`PrefsBoxOrderListBox`) for GtkListBoxes, which
are used in the preferences window for holding box order settings.
Having a custom class for these GtkListBoxes is useful, since it can
hold logic related to box order settings. Future commits will bring more
of this logic into this class.
2021-07-05 07:22:19 +02:00
edfa50f254
Update: Scroll preferences window content on Drag-and-Drop
Scroll the content of the preferences window on Drag-and-Drop, when the
mouse is in the upper or lower part of the content of the preferences
window.
This helps a user, who has e.g. a lot of items, but the preferences
window with a low height, to easily move any item to any position.
2021-07-04 05:16:32 +02:00
a4ea0c630a
Update: Make the preferences window content scrollable
Previously it could happen that the preferences window got larger than
the height of the screen (e.g. when having a bunch of items and a low
vertical screen resolution).
Fix this, by making the preferences window content scrollable.

Also introduce a nice default window size.
2021-07-04 02:20:56 +02:00
8bda3ea0ab
Other: Bump version to 2 v2 2021-06-22 00:03:37 +02:00
689a8107e2
Fix: Fix incorrect ordering
There was an issue where, when you started Gnome Shell, the icons
weren't corrently ordered. It seems that this issue was caused by a
combination of the following two things:

1. When determining the insertion index in `determineInsertionIndex` (in
   `getPositionAndBoxOverwrite` in `_overwritePanelAddToPanelBox`) the
   `boxOrder` got set to `boxOrders.something`, which doesn't make much
   sense considering that the `index` was determined by using
   `resolvedBoxOrders.something`.
   So set `boxOrder` to `resolvedBoxOrders.something` instead, to obtain
   an `insertionIndex`, which makes sense.
2. Ordering the `right` panel box from right to left (in
   `_orderTopBarItems`) seemed to cause issues (, which are probably
   caused by the indices not making sense with the children box counts
   at insertion time).
   Therefore and also because the regular (left-to-right) ordering seems
   to work just fine even for the case described in the comment (, which
   provides the reason for right-to-left ordering,) just use regular
   ordering for all boxes.

Fixing these two things may also fix other incorrect ordering behaviour
at other times.
2021-06-22 00:00:04 +02:00
0eee0e8ef9
Other: Wrap comments longer than 80 characters at 80 characters 2021-06-21 21:37:58 +02:00
d4514219ed
Fix: Use correct child count when ordering right box
Previously the `panelBoxChildCount` would just be the child count of the
right box before new items got added, which would result in incorrect
indices for new child insertions being used (in
`panel.insert_child_at_index`), since `panelBoxChildCount` would just
account for the current children, not for new ones.

This resulted in the following issue:
When you used the settings to move an item from e.g. the middle box to
the right box, the right box would get ordered incorrectly.

So fix this issue by getting the max of the right boxes current children
and the `validBoxOrder.length`.
2021-06-21 21:26:26 +02:00
65304a9894
Docs: Add documentation on how to create a new tag 2021-06-21 19:32:45 +02:00
e45d438d61
Other: Add template for message of annotated git tags
Inspired by:
https://drewdevault.com/2021/05/19/How-to-write-release-notes.html
2021-06-21 18:57:40 +02:00
49c46bf33f
Update: Don't create object as result of init() being called
Create `this.settings` on enable instead of on init/creation, so that no
objects get created as a result of `init()` being called.

See here for the relevant review:
https://extensions.gnome.org/review/25308
And for the relevant documentation:
https://wiki.gnome.org/Projects/GnomeShell/Extensions/Review#Only_use_.60init.28.29.60_for_initialization
2021-06-21 18:46:34 +02:00
569fc6a683
Update: Set Panel._originalAddToPanelBox to undefined on disable
Clean up more on disable by setting `Panel._originalAddToPanelBox` to
`undefined`.
v1
2021-06-19 22:47:07 +02:00
cc2098b597
Build: Add script for packaging this extension 2021-06-19 22:26:23 +02:00
aba4d06f73
Other: Ignore gschemas.compiled files, since they're not source code 2021-06-19 22:11:01 +02:00
a7513cc6c2
Docs: Describe what "New" in old commit messages means
Since I apparently used "New" in old commit messages instead of
"Feature", add relevant information to the `CONTRIBUTING.md`.
2021-06-19 21:53:56 +02:00
3431b12c47
Feature: Add repo url to metadata.json 2021-06-19 21:53:08 +02:00
e69997b487
Refactor: Move logic for creation of special box orders into own class
Move the logic for the creation of special box orders
(`createValidBoxOrder` and `createRestrictedValidBoxOrder`) into an own
class.
Moving this logic into an own class makes the `Extension` class lighter.
2021-05-27 06:44:36 +02:00
158a4b584e
Refactor: Move AppIndicator/KStatusNotifierItem logic into an own class
Move the AppIndicator/KStatusNotifierItem logic
(`handleAppIndicatorKStatusNotifierItemItem`, `createResolvedBoxOrder`
and `_applicationRoleMap`) into an own class.
Moving this logic into an own class makes the `Extension` class lighter.

Introduce for the new file a new directory `src/extensionModules`.
2021-05-27 01:25:54 +02:00
1f8305a2f0
Refactor: Move some classes from src/prefs.js into own files
Introduce for these new files a new directory `src/prefsModules`.
2021-05-27 00:17:41 +02:00
b0ebe468aa
Feature: Add initial preferences dialog
Add an initial preferences dialog, which allows the user to easily
reorder the Gnome Shell top bar items.
2021-05-25 00:24:44 +02:00
a3f5ad96f4
Fix: Consider all boxes, when adding items to box orders
Fix the following issues:

1. Let's assume we have a default (reduced) Gnome Shell top bar like
   this:
   - left box: activities, appMenu
   - center box: dateMenu
   - right box: keyboard, aggregateMenu
   And now assume, we changed the (reduced) configured box orders to
   define the top bar like this (while the extension wasn't running for
   this test case):
   - left box: activites, keyboard, appMenu
   - center box: dateMenu
   - right box: aggreateMenu
   Now for the old version of this extension, the following would
   happen:
   The extension would put the "keyboard" into the configured right box
   order on extension start, despite it being already in the configured
   left box order.
   This would happen, because the extension would look at each box
   individually at startup to determine if new items should be added to
   its box order.
   And therefore it would add "keyboard" to the configured right box
   order, leading to the (reduced) corrupted box orders looking like
   this:
   - left box: activites, keyboard, appMenu
   - center box: dateMenu
   - right box: keyboard, aggreateMenu
   And then, since the extension orders the top bar initially on start,
   the extension would put the "keyboard" item into the right box (since
   the right box would get ordered after the left box).
   (And even if the config situation were different, so that the
   originally configured box would have been ordered after the wrongly
   configured box, the configured box orders would have still been
   corrupted.)

   Fix this issue by considering all top bar boxes in
   `_createUpdatedBoxOrder/s`.

2. Let's assume we have the default (reduced) configured box orders like
   this:
   - left box:
   - center box:
   - right box: appindicator-kstatusnotifieritem-KeePassXC
   And now assume, we changed the (reduced) configured box orders to
   define the top bar like this (while the extension and the
   "KStatusNotifierItem/AppIndicator Support" extension weren't running
   for this test case):
   - left box: appindicator-kstatusnotifieritem-KeePassXC
   - center box:
   - right box:
   Now we would first start this extension and then the
   "KStatusNotifierItem/AppIndicator Support" extension.
   For the old version of this extension, the following would happen:
   The extension would have put the KeePassXC
   KStatusNotifierItem/AppIndicator into the configured right box order
   and the right box, leading to the (reduced) corrupted configured box
   orders looking like this:
   - left box: appindicator-kstatusnotifieritem-KeePassXC
   - center box:
   - right box: appindicator-kstatusnotifieritem-KeePassXC
   This would happen, because the logic for the `Panel._addToPanelBox`
   overwrite assumed that the new item should be added to the box the
   item addition initiator requested (even tho the item might be
   configured to go into another box).

   Fix this issue by considering all top bar boxes for the
   `Panel._addToPanelBox` overwrite.

One can see based on those two test cases, how those two issues create
problems.
So fix the issues as explained above and fix them together in this one
commit, since they are related.
2021-05-21 04:15:20 +02:00
4faf976155
Update: Handle permutations of outdated box orders getting saved better 2021-05-17 19:44:00 +02:00
c2c4237bd3
Refactor: Move creation of updated box order into own method
Move the creation of an updated box order into an own method, so that
this method can be used elsewhere in the future to easily get an updated
box order.
2021-05-17 19:37:05 +02:00
c55b9e2648
Feature: Make it possible to move items to other top bar boxes 2021-05-17 18:09:06 +02:00
b938d7a28f
Other: Introduce ESLint for code linting 2021-05-17 17:45:22 +02:00
0c845336e6
Other: License this project
License this project under the GNU General Public License version 3.
2021-05-17 14:37:57 +02:00
0b7a15e55c
Breaking: Handle AppIndicator/KStatusNotifierItem items better
Handle AppIndicator/KStatusNotifierItem items differently (and better)
for the following reasons:
- These items have a role, which isn't very helpful for identifying the
  associated application.
- These roles seem to be different for each application run.
- There can be multiple AppIndicator/KStatusNotifierItem items for the
  same application (multiple instances of that application running).
2021-05-17 13:16:29 +02:00
572c6b69c1
Refactor: Group "private" methods
Group "private" methods to make their purpose clearer.
2021-05-17 11:38:17 +02:00
a73ed96bda
Feature: Handle changes of configured box orders
Handle changes of configured box orders, by ordering the relevant top
bar items according to the configured box order, which changed.
2021-05-16 21:32:30 +02:00
fd21ecb189
Refactor: Move individual top bar box ordering into own method
Move the individual top bar box ordering into own method, so that this
method can be used elsewhere in the future to easily order a single box.
2021-05-16 20:17:17 +02:00
2f0ecddfc8
Other: Add .editorconfigs
Add `.editorconfig`s, to help maintain a consistent coding style.
Also apply the new style to existing files.
2021-05-16 20:05:58 +02:00
f581935f85
New: Overwrite Panel._addToPanelBox
Overwrite `Panel._addToPanelBox` of Gnome Shell `js/ui/panel.js` with a
custom method, which handles top bar item additions to make sure that
they are added in the correct position.
2021-05-14 13:19:27 +02:00
0fc62ae465
Refactor: Move valid box order creation into own method
Move the valid box order creation into an own method.
This makes the `_orderTopBarItems` method cleaner and allows other
methods to easily create valid box orders as well in the future.
2021-05-14 13:19:20 +02:00
0f3e1608a9
New: Order top bar items on enable
Order top bar items on extension enable according to the saved box
orders.
2021-05-14 13:18:35 +02:00
f8488a97f4
New: Add new top bar items to box orders on enable
Introduce box orders, which allow this extension to save the order top
bar items should be in.
On extension enable, save new top bar items to those box orders.
2021-05-14 13:18:35 +02:00
2851fe3aaa
Docs: Describe Panel._addToPanelBox logic
Describe what `Panel._addToPanelBox` does with the role and indicator it
gets.
2021-05-14 13:18:35 +02:00
821d849668
New: Add initial bare-bones extension source code
I'm using version 1 for the first development phase (like what major
version zero (0.y.z) is in Semantic Versioning 2.0.0), so that the first
production version then gets version 2.
2021-05-14 13:18:35 +02:00
1c7cafaff9
Docs: Add initial About_the_Top_(Menu)Bar.md
Add background documentation/information regarding the top (menu)bar.
2021-05-14 13:18:35 +02:00
db0237792d
Docs: Add annotated and cut down panel.js
Add an annotated and cut down `js/ui/panel.js` from gnome-shell/master
as background documentation/information for this extension.
2021-05-14 13:18:35 +02:00
49388737a4
Other: Specify a textwidth of 80 for JavaScript
Specify a textwidth of 80 for code of this repo in `.js` files.
Also add VSCode workspace settings to specify a textwith of 80.
2021-05-14 13:18:30 +02:00
1f1a958555
Docs: Specify commit message format
Add initial `CONTRIBUTING.md` specifying the commit message format to
use.
2021-05-14 13:17:52 +02:00