Commit graph Top-Bar-Organizer/src
Author SHA1 Message Date
Michał T
6802c2f0f3 fix: don't wrap Panel._addToPanelBox twice
If `enable()` throws after `Panel._addToPanelBox` is overwritten, the
extension ends up in the error state and GNOME Shell never calls
`disable()`. Extensions are disabled and enabled on every screen lock,
so the next `enable()` saved the overwrite itself as
`_originalAddToPanelBox`. From then on the method called itself until
the stack overflowed, and the top bar came up empty after unlocking.

Only save the original method when it isn't saved yet, and make
`disable()` safe to call when `enable()` didn't finish.
2026-11-09 10:09:51 +01:00
Michał T
316be3851f fix: treat legacy tray icons like other items
The AppIndicator extension also adds legacy (XEmbed) tray icons, with
roles like "appindicator-legacy:<wm_class>:<pid>". They have no
`_indicator`, so `#handleAppIndicatorItem()` threw
"TypeError: appIndicator is undefined". As this runs inside the
overwritten `Panel._addToPanelBox`, the error broke whichever extension
was adding a top-bar item at the time, or Top Bar Organizer's own
`enable()`.

Only take the AppIndicator path when there is an `_indicator`.

Patch by yuri in #31.

Fixes #31
2026-11-09 10:09:51 +01:00
1216ebb994
other: bump to version 16 2026-03-24 03:04:19 +01:00
63d72f17f0
feature: support GNOME Shell version 50
Checked the source of 50.0 and tested in Fedora 44 Beta and there don't
seem to be any changes relevant to the functionality of this extension.
2026-03-24 03:03:27 +01:00
140c635081
other: bump to version 15 2025-10-03 17:23:05 +02:00
a92ef52034
feature: support GNOME Shell version 49
Checked the source of 49.0 and tested in Fedora 43 Beta and there don't
seem to be any changes relevant to the functionality of this extension.
2025-10-03 17:22:03 +02:00
a477d3b95a
fix: set selected visibility option to settings value on options open 2025-07-15 19:35:48 +02:00
bcb61b51ac
other: bump to version 14 2025-07-09 02:09:59 +02:00
fdbacdd683
feature: add settings UI for control. how to affect an items visibility
Add settings UI for controlling how the extension should affect a top
bar items visibility (whether to try to forcefully hide or show an item
or not affect its visibility at all).
2025-07-08 02:55:57 +02:00
0d51b81041
refactor: more nicely get the data for panelBox in #orderTopBarItems 2025-06-12 03:24:18 +02:00
114e1335d1
refactor: remove unneces. check for empty array in #getResolvedBoxOrder
Remove unnecessary check for empty array in #getResolvedBoxOrder as
nothing happens when the array is empty anyway.
2025-06-12 01:30:43 +02:00
1e87992081
refactor: directly create set of indicator cont. in getValidBoxOrder
Skip the unecessary intermediate variable and directly create a set.
Also remove the "ToDo: simplify" comment as I don't see how this logic
can be simplified more really.
2025-06-12 01:26:44 +02:00
5a09b1a2c8
refactor: switch to TypeScript
Aside from introducing a bunch of type annotations and other code
adjustments, also add explicit type checking where necessary.

Inline #associateItem into the constructor in PrefsBoxOrderItemRow as
the method sets this.item and:
> Note that the field needs to be initialized in the constructor itself.
> TypeScript does not analyze methods you invoke from the constructor to
> detect initializations, because a derived class might override those
> methods and fail to initialize the members.
https://www.typescriptlang.org/docs/handbook/2/classes.html

Explicitly ensure we actually have a Gdk.Drag in #setupDNDScroll in
PrefsPage and explicitly only scroll when a DND operation is properly
set up. Even tho previously not having a Gdk.Drag in #setupDNDScroll
would probably just error out the callback and probably be just fine
then, handling this explicitly is at least nicer.

Also see the guide on using TypeScript for GNOME Shell Extensions, which
was followed for this work to some degree:
https://gjs.guide/extensions/development/typescript.html
2025-06-12 00:56:10 +02:00
ff75debabc
fix: have onDrop handler methods correctly return booleans
Have the onDrop methods, used as handlers for Gtk.DropTarget drop
signals, return booleans as required by Gtk.DropTarget.
https://docs.gtk.org/gtk4/signal.DropTarget.drop.html
This change doesn't seem to have a practical impact, but its good to
follow the API correctly anyway.
2025-06-11 00:55:10 +02:00
979e770057
update: properly handle top bar items of Task Up UltraLite extension
Since the Task Up UltraLite extension creates a bunch of top bar items
as part of its functionality, the Top Bar Organizer settings would get
spammed with items, making them hard to navigate and making it
practically impossible to manage the top bar items of the Task Up
UltraLite extension itself. Therefore introduce functionality for
properly handling the Task Up UltraLite top bar items, by grouping them
internally and just exposing a single Top Bar Organizer settings item
for all the Task Up UltraLite items, which then allows to manage the
Task Up UltraLite top bar items nicely.

This fixes #25:
https://gitlab.gnome.org/june/top-bar-organizer/-/issues/25

Task Up UltraLite extension:
https://extensions.gnome.org/extension/7700/task-up-ultralite/
2025-06-10 03:54:30 +02:00
185a48c857
fix: use row title to make settings window not break for long item names
Use the title of the PrefsBoxOrderItemRow (AdwActionRow) for the item
name instead of a label in the prefix. Aside from generally being more
correct, item names now wrap correctly, avoiding the settings window
breaking (being cut off by default to the right with even the close
button not showing, until resizing) with long item names.
2025-06-09 19:53:12 +02:00
b17a805035
other: bump version to 13 2025-06-09 00:24:02 +02:00
9c847c0988
feature: support GNOME Shell version 48
Checked the source of 48.2 and tested in Fedora 42 and there don't seem
to be any changes relevant to the functionality of this extension.
2025-06-09 00:22:48 +02:00
f619ce4fa7
feature: make it possible to (forcefully) hide or show top bar items
This is only the core extension logic for now, settings UI still needs
to follow.
The logic only acts on the indicator container, not the indicator
itself, meaning that e.g. a screen recording indicator, which is hidden
on the indicator level, can be forcefully hidden, but not forcefully
shown. Because of that and because forcefully hiding it breaks controls
for screen recording, a potential settings implementation should exclude
visiblity controls for some elements like e.g. the screen recording
indicator.
2024-09-27 03:24:47 +02:00
80f394d2d4
refactor: move logic for loading and saving box orders to priv. methods
Move logic for loading and saving box orders from/to settings to private
methods to have more readable code.
2024-09-26 02:52:15 +02:00
cc088f443c
refactor: clearly dist. betw. an items role and the id used in settings
Clearly distinguish between an items role, which is present in GNOME
Shells top bar, call that a role, and the thing that is stored in the
settings for an item, call that an items settings identifier.
Refactor the code with these new names in mind to make it clearer.
Also make the comments clearer.
And finally simplify the code handling AppIndicator items by simply
using the items settings identifier as the key in the roles map and with
that getting rid of the confusing concept of a placeholder role, which
is only relevant for the box order stored in settings. Just declaring it
as an items settings identifier, which it is, is much clearer.
2024-09-26 02:23:28 +02:00
23baa41225
other: bump version to 12 2024-09-12 22:56:02 +02:00
07355dcf19
feature: support GNOME Shell version 47
Checked the source of 47.rc and tested in GNOME OS and there don't seem
to be any changes relevant to the functionality of this extension.
2024-09-12 22:55:05 +02:00
b358d2046d
other: bump version to 11 2024-09-11 03:58:32 +02:00
1870a9510a
other: update my name 2024-09-11 03:16:46 +02:00
e04ac8a3ee
feature: support GNOME Shell version 46
There don't seem to be any changes relevant to the functionality of this
extension.
2024-09-11 03:02:02 +02:00
126ebfa9db
Other: Bump version to 10 2023-10-05 15:21:39 +02:00
c25f24b72f
Other: Make ESLint ignore unused import 2023-10-05 15:06:47 +02:00
7f86e92e85
Refactor: Clean up unused import 2023-10-05 14:59:46 +02:00
d903274d73
Other: Require trailing commas for multiline for most
Require trailing commas for multiline for arrays, objects, imports and
exports and disallow trailing commas for functions.
Do this by updating the ESLint config and fixing new complaints.

The reason for this change are the resulting future cleaner version
diffs.

Also see:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas
https://eslint.org/docs/latest/rules/comma-dangle
2023-10-05 14:50:36 +02:00
5ea8f4aabe
Refactor: Move GObject.registerClass calls into static init. blocks
Do that since it standardizes the code and also is just cleaner.
2023-10-04 03:58:21 +02:00
a77c6d2f2b
Refactor: Install forget action using install_action as well 2023-10-04 03:58:10 +02:00
9b7ab0614c
Feature: Add move up and down buttons to make the prefs keyboard access.
Don't use CONSTRUCT_ONLY anymore to be able to use private properties
(or any properties at all it seems).
2023-10-04 03:57:42 +02:00
a1188d5684
Breaking: Migrate extension to the new ESM system of GNOME 45
Migrate with the help of, among others, the following resources:
https://blogs.gnome.org/shell-dev/2023/09/02/extensions-in-gnome-45/
https://gjs.guide/extensions/upgrading/gnome-shell-45.html

Only support GNOME Shell version 45, since only 45 is compatible with
the new ESM system.

Since panel._originalAddToPanelBox is no longer valid, just overwrite
using the prototype on disable.

Add "sourceType": "module" to eslintrc.yml to get rid of:
"Parsing error: 'import' and 'export' may appear only with 'sourceType:
module'"
See here:
https://eslint.org/docs/latest/use/configure/language-options#specifying-parser-options
2023-10-04 03:57:35 +02:00
ed10e7a14b
Other: Bump version to 9 2023-04-21 00:56:12 +02:00
0b3aff665a
Fix: Move provider add. to more correct place and remove prov. on dest.
See here for the relevant review:
https://extensions.gnome.org/review/40563
2023-04-21 00:46:59 +02:00
bf598f2a15
Other: Bump version to 8 2023-04-20 23:19:02 +02:00
51a89aec60
Feature: Support GNOME version 44 2023-04-20 23:17:06 +02:00
5c8523322b
Update: Improve drag handle styling by using GNOME Settings style
This also finally makes the style `<class name="drag-handle"/>` in
`prefs-box-order-item-row.ui` actually do something.
2023-04-20 12:33:30 +02:00
fa379607ee
Other: Bump version to 7 2023-02-07 12:52:03 +01:00
470ebf761d
Fix: Keep hidden items hidden 2023-02-07 12:52:03 +01:00
39face9957
Fix: Also interact with the panel, if the parent session mode is "user"
Top Bar Organizer used to only interact with the panel, when the current
session mode is "user". However Ubuntu uses "ubuntu" as its session
mode, which made Top Bar Organizer not work.
Fix this by also interacting with the panel, if the parent session mode
is "user".

See here for some docs on session modes:
https://gjs.guide/extensions/topics/session-modes.html
2023-02-07 12:52:03 +01:00
6bc40441a7
Other: Bump version to 6 2023-01-30 15:33:14 +01:00
40846915e7
Fix: Check, if signal handler is connected for handler id, before dc.
Do this to hopefully fix "No signal connection XX found" errors.
2023-01-30 15:28:58 +01:00
40cf8de1a8
Fix: Don't affect (or interact with) panel of unlock screen
The panel gets set to the state it should have for the unlock screen
before extension disable. Because of this the extension makes icons
show, which shouldn't show. So fix that by not ordering the panel, if
the current session mode isn't "user".
Also generally don't interact with the panel, if the current session
mode isn't "user".
2023-01-30 14:46:56 +01:00
680c2a97af
Other: Bump version to 5 2023-01-29 03:41:02 +01:00
1b5ba38617
Refactor: Rename this.settings to this._settings
Do this to indicate that this is a "private" field.
2023-01-29 03:24:17 +01:00
8586f095fc
Refactor: Reorder enable code and comment it, to make it more clear 2023-01-29 00:41:46 +01:00
d01fb434ee
Other: Remove unused typedef PositionAndBoxOverwrite 2023-01-29 00:34:53 +01:00
6e61014331
Refactor: Introduce #handleNewItemsAndOrderTopBar method
Introducing this method cleans up code, which did pretty much the same
thing, by replacing it with a call to this method.
2023-01-29 00:34:44 +01:00