Skip to content

Commit

Permalink
Fixed an issue that would cause the scroll direction to be inverted o…
Browse files Browse the repository at this point in the history
…n secondary monitors. (#683)

* Fixed an issue that would cause the scroll direction to be inverted on secondary monitors.

* Update import paths and tsconfig.
  • Loading branch information
Jas-SinghFSU authored Dec 31, 2024
1 parent 7204ba6 commit 210d5e2
Show file tree
Hide file tree
Showing 35 changed files with 49 additions and 97 deletions.
1 change: 0 additions & 1 deletion astal

This file was deleted.

2 changes: 1 addition & 1 deletion src/components/bar/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import {

import { WidgetContainer } from './shared/WidgetContainer';
import options from 'src/options';
import { App, Gtk } from 'astal/gtk3/index';
import { App, Gtk } from 'astal/gtk3';

import Astal from 'gi://Astal?version=3.0';
import { bind, Variable } from 'astal';
Expand Down
2 changes: 1 addition & 1 deletion src/components/bar/modules/battery/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import options from 'src/options';
import { BarBoxChild } from 'src/lib/types/bar.js';
import { runAsyncCommand, throttledScrollHandler } from 'src/components/bar/utils/helpers.js';
import Variable from 'astal/variable';
import { bind } from 'astal/binding.js';
import { bind } from 'astal';
import AstalBattery from 'gi://AstalBattery?version=0.1';
import { onMiddleClick, onPrimaryClick, onScroll, onSecondaryClick } from 'src/lib/shared/eventHandlers';
import { getBatteryIcon } from './helpers';
Expand Down
3 changes: 1 addition & 2 deletions src/components/bar/modules/bluetooth/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import options from 'src/options.js';
import { openMenu } from '../../utils/menu.js';
import { BarBoxChild } from 'src/lib/types/bar.js';
import { runAsyncCommand, throttledScrollHandler } from 'src/components/bar/utils/helpers.js';
import { bind } from 'astal/binding.js';
import Variable from 'astal/variable.js';
import { Variable, bind } from 'astal';
import { onMiddleClick, onPrimaryClick, onScroll, onSecondaryClick } from 'src/lib/shared/eventHandlers.js';
import AstalBluetooth from 'gi://AstalBluetooth?version=0.1';
import { Astal } from 'astal/gtk3';
Expand Down
3 changes: 1 addition & 2 deletions src/components/bar/modules/media/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ import options from 'src/options.js';
import { runAsyncCommand, throttledScrollHandler } from 'src/components/bar/utils/helpers.js';
import { generateMediaLabel } from './helpers/index.js';
import { mprisService } from 'src/lib/constants/services.js';
import Variable from 'astal/variable.js';
import { onMiddleClick, onPrimaryClick, onScroll, onSecondaryClick } from 'src/lib/shared/eventHandlers.js';
import { bind } from 'astal/binding.js';
import { bind, Variable } from 'astal';
import { BarBoxChild } from 'src/lib/types/bar.js';
import { Astal } from 'astal/gtk3';
import { activePlayer, mediaAlbum, mediaArtist, mediaTitle } from 'src/globals/media.js';
Expand Down
3 changes: 1 addition & 2 deletions src/components/bar/modules/menu/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ import { runAsyncCommand, throttledScrollHandler } from '../../utils/helpers.js'
import options from '../../../../options.js';
import { openMenu } from '../../utils/menu.js';
import { getDistroIcon } from '../../../../lib/utils.js';
import { bind } from 'astal/binding.js';
import Variable from 'astal/variable.js';
import { Variable, bind } from 'astal';
import { onMiddleClick, onPrimaryClick, onScroll, onSecondaryClick } from 'src/lib/shared/eventHandlers.js';
import { BarBoxChild } from 'src/lib/types/bar.js';
import { Astal } from 'astal/gtk3';
Expand Down
3 changes: 1 addition & 2 deletions src/components/bar/modules/systray/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import AstalTray from 'gi://AstalTray?version=0.1';
import { bind, Gio, Variable } from 'astal';
import { BarBoxChild } from 'src/lib/types/bar';
import { Gdk, Gtk } from 'astal/gtk3';
import { BindableChild } from 'astal/gtk3/astalify';

const systemtray = AstalTray.get_default();
const { ignore, customIcons } = options.bar.systray;
Expand Down Expand Up @@ -137,7 +136,7 @@ interface MenuCustomIconProps {

interface MenuEntryProps {
item: AstalTray.TrayItem;
child?: BindableChild;
child?: JSX.Element;
}

export { SysTray };
3 changes: 1 addition & 2 deletions src/components/bar/modules/volume/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ import { audioService } from 'src/lib/constants/services.js';
import { openMenu } from '../../utils/menu.js';
import options from 'src/options';
import { runAsyncCommand, throttledScrollHandler } from 'src/components/bar/utils/helpers.js';
import Variable from 'astal/variable.js';
import { bind } from 'astal/binding.js';
import { bind, Variable } from 'astal';
import { onMiddleClick, onPrimaryClick, onScroll, onSecondaryClick } from 'src/lib/shared/eventHandlers.js';
import { getIcon } from './helpers/index.js';
import { BarBoxChild } from 'src/lib/types/bar.js';
Expand Down
42 changes: 11 additions & 31 deletions src/components/bar/modules/workspaces/helpers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,21 +169,14 @@ function isWorkspaceIgnored(ignoredWorkspacesVariable: Variable<string>, workspa
* @param onlyActiveWorkspaces - Whether to only include active (occupied) workspaces when navigating.
* @param ignoredWorkspacesVariable - A Variable that contains the ignored workspaces pattern.
*/
function navigateWorkspace(
direction: 'next' | 'prev',
currentMonitorWorkspacesVariable: Variable<number[]>,
onlyActiveWorkspaces: boolean,
ignoredWorkspacesVariable: Variable<string>,
): void {
function navigateWorkspace(direction: 'next' | 'prev', ignoredWorkspacesVariable: Variable<string>): void {
const allHyprlandWorkspaces = hyprlandService.get_workspaces() || [];

const activeWorkspaceIds = allHyprlandWorkspaces
.filter((workspaceInstance) => hyprlandService.focusedMonitor.id === workspaceInstance.monitor?.id)
.map((workspaceInstance) => workspaceInstance.id);

const assignedOrOccupiedWorkspaces = onlyActiveWorkspaces
? activeWorkspaceIds
: currentMonitorWorkspacesVariable.get() || Array.from({ length: workspaces.get() }, (_, index) => index + 1);
const assignedOrOccupiedWorkspaces = activeWorkspaceIds.sort((a, b) => a - b);

if (assignedOrOccupiedWorkspaces.length === 0) {
return;
Expand Down Expand Up @@ -213,12 +206,8 @@ function navigateWorkspace(
* @param onlyActiveWorkspaces - Whether to only navigate among active (occupied) workspaces.
* @param ignoredWorkspacesVariable - A Variable that contains the ignored workspaces pattern.
*/
export function goToNextWorkspace(
currentMonitorWorkspacesVariable: Variable<number[]>,
onlyActiveWorkspaces: boolean,
ignoredWorkspacesVariable: Variable<string>,
): void {
navigateWorkspace('next', currentMonitorWorkspacesVariable, onlyActiveWorkspaces, ignoredWorkspacesVariable);
export function goToNextWorkspace(ignoredWorkspacesVariable: Variable<string>): void {
navigateWorkspace('next', ignoredWorkspacesVariable);
}

/**
Expand All @@ -228,12 +217,8 @@ export function goToNextWorkspace(
* @param onlyActiveWorkspaces - Whether to only navigate among active (occupied) workspaces.
* @param ignoredWorkspacesVariable - A Variable that contains the ignored workspaces pattern.
*/
export function goToPreviousWorkspace(
currentMonitorWorkspacesVariable: Variable<number[]>,
onlyActiveWorkspaces: boolean,
ignoredWorkspacesVariable: Variable<string>,
): void {
navigateWorkspace('prev', currentMonitorWorkspacesVariable, onlyActiveWorkspaces, ignoredWorkspacesVariable);
export function goToPreviousWorkspace(ignoredWorkspacesVariable: Variable<string>): void {
navigateWorkspace('prev', ignoredWorkspacesVariable);
}

/**
Expand Down Expand Up @@ -263,29 +248,24 @@ export function throttle<T extends (...args: unknown[]) => void>(func: T, limit:
* Creates throttled scroll handlers that navigate workspaces upon scrolling, respecting the configured scroll speed.
*
* @param scrollSpeed - The factor by which the scroll navigation is throttled.
* @param currentMonitorWorkspacesVariable - A Variable containing the current monitor's workspace numbers.
* @param onlyActiveWorkspaces - Whether to only navigate among active (occupied) workspaces.
*
* @returns An object containing two functions (`throttledScrollUp` and `throttledScrollDown`), both throttled.
*/
export function initThrottledScrollHandlers(
scrollSpeed: number,
currentMonitorWorkspacesVariable: Variable<number[]>,
onlyActiveWorkspaces: boolean = true,
): ThrottledScrollHandlers {
export function initThrottledScrollHandlers(scrollSpeed: number): ThrottledScrollHandlers {
const throttledScrollUp = throttle(() => {
if (reverse_scroll.get()) {
goToPreviousWorkspace(currentMonitorWorkspacesVariable, onlyActiveWorkspaces, ignored);
goToPreviousWorkspace(ignored);
} else {
goToNextWorkspace(currentMonitorWorkspacesVariable, onlyActiveWorkspaces, ignored);
goToNextWorkspace(ignored);
}
}, 200 / scrollSpeed);

const throttledScrollDown = throttle(() => {
if (reverse_scroll.get()) {
goToNextWorkspace(currentMonitorWorkspacesVariable, onlyActiveWorkspaces, ignored);
goToNextWorkspace(ignored);
} else {
goToPreviousWorkspace(currentMonitorWorkspacesVariable, onlyActiveWorkspaces, ignored);
goToPreviousWorkspace(ignored);
}
}, 200 / scrollSpeed);

Expand Down
19 changes: 5 additions & 14 deletions src/components/bar/modules/workspaces/index.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
import options from 'src/options';
import { initThrottledScrollHandlers, getWorkspacesForMonitor } from './helpers';
import { initThrottledScrollHandlers } from './helpers';
import { BarBoxChild } from 'src/lib/types/bar';
import { WorkspaceModule } from './workspaces';
import { bind, Variable } from 'astal';
import { GtkWidget } from 'src/lib/types/widget';
import { Astal, Gdk } from 'astal/gtk3';
import { isScrollDown, isScrollUp } from 'src/lib/utils';

const { workspaces, scroll_speed } = options.bar.workspaces;
const { scroll_speed } = options.bar.workspaces;

const Workspaces = (monitor = -1): BarBoxChild => {
const currentMonitorWorkspaces = Variable(getWorkspacesForMonitor(monitor));

workspaces.subscribe(() => {
currentMonitorWorkspaces.set(getWorkspacesForMonitor(monitor));
});

const component = (
<box className={'workspaces-box-container'}>
<WorkspaceModule monitor={monitor} />
Expand All @@ -35,18 +29,15 @@ const Workspaces = (monitor = -1): BarBoxChild => {
self.disconnect(scrollHandlers);
}

const { throttledScrollUp, throttledScrollDown } = initThrottledScrollHandlers(
scroll_speed,
currentMonitorWorkspaces,
);
const { throttledScrollUp, throttledScrollDown } = initThrottledScrollHandlers(scroll_speed);

scrollHandlers = self.connect('scroll-event', (_: GtkWidget, event: Gdk.Event) => {
if (isScrollUp(event)) {
throttledScrollDown();
throttledScrollUp();
}

if (isScrollDown(event)) {
throttledScrollUp();
throttledScrollDown();
}
});
});
Expand Down
3 changes: 1 addition & 2 deletions src/components/menus/audio/active/devices/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { BindableChild } from 'astal/gtk3/astalify';
import { audioService } from 'src/lib/constants/services';
import { SliderItem } from '../sliderItem/SliderItem';
import { ActiveDeviceMenu } from '..';
Expand All @@ -21,5 +20,5 @@ export const ActiveDevices = (): JSX.Element => {
};

interface ActiveDeviceContainerProps {
children?: BindableChild | BindableChild[];
children?: JSX.Element[];
}
3 changes: 1 addition & 2 deletions src/components/menus/audio/active/index.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { Gtk } from 'astal/gtk3';
import { ActiveDevices } from './devices/index.js';
import Variable from 'astal/variable.js';
import { ActivePlaybacks } from './playbacks/index.js';
import { bind } from 'astal/binding.js';
import { bind, Variable } from 'astal';
import { isPrimaryClick } from 'src/lib/utils.js';

export enum ActiveDeviceMenu {
Expand Down
2 changes: 1 addition & 1 deletion src/components/menus/audio/available/InputDevices.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { audioService } from 'src/lib/constants/services.js';
import { bind } from 'astal/binding.js';
import { bind } from 'astal';
import { AudioDevice } from './Device';
import { NotFoundButton } from './NotFoundButton';

Expand Down
2 changes: 1 addition & 1 deletion src/components/menus/audio/available/PlaybackDevices.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { audioService } from 'src/lib/constants/services.js';
import { bind } from 'astal/binding.js';
import { bind } from 'astal';
import { AudioDevice } from './Device';
import { NotFoundButton } from './NotFoundButton';

Expand Down
2 changes: 1 addition & 1 deletion src/components/menus/audio/index.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import DropdownMenu from '../shared/dropdown/index.js';
import { VolumeSliders } from './active/index.js';
import options from 'src/options.js';
import { bind } from 'astal/binding.js';
import { bind } from 'astal';
import { Gtk } from 'astal/gtk3';
import { AvailableDevices } from './available/index.js';
import { RevealerTransitionMap } from 'src/lib/constants/options.js';
Expand Down
3 changes: 1 addition & 2 deletions src/components/menus/bluetooth/devices/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import Variable from 'astal/variable.js';
import { bind } from 'astal/binding.js';
import { bind, Variable } from 'astal';
import { bluetoothService } from 'src/lib/constants/services.js';
import { getAvailableBluetoothDevices, getConnectedBluetoothDevices } from './helpers.js';
import { NoBluetoothDevices } from './NoBluetoothDevices.js';
Expand Down
2 changes: 1 addition & 1 deletion src/components/menus/bluetooth/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import DropdownMenu from '../shared/dropdown/index.js';
import { BluetoothDevices } from './devices/index.js';
import { Header } from './header/index.js';
import options from 'src/options.js';
import { bind } from 'astal/binding.js';
import { bind } from 'astal';
import { Gtk } from 'astal/gtk3';
import { RevealerTransitionMap } from 'src/lib/constants/options.js';

Expand Down
4 changes: 1 addition & 3 deletions src/components/menus/dashboard/directories/Sections.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { BindableChild } from 'astal/gtk3/astalify';

export const LeftSection = ({ children }: SectionProps): JSX.Element => {
return (
<box className={'section left'} vertical expand>
Expand All @@ -17,5 +15,5 @@ export const RightSection = ({ children }: SectionProps): JSX.Element => {
};

interface SectionProps {
children?: BindableChild | BindableChild[];
children?: JSX.Element | JSX.Element[];
}
3 changes: 1 addition & 2 deletions src/components/menus/dashboard/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ import { Controls } from './controls/index.js';
import { Stats } from './stats/index.js';
import { Directories } from './directories/index.js';
import options from 'src/options.js';
import { bind } from 'astal/binding.js';
import Variable from 'astal/variable.js';
import { bind, Variable } from 'astal';
import { RevealerTransitionMap } from 'src/lib/constants/options.js';

const { controls, shortcuts, stats, directories } = options.menus.dashboard;
Expand Down
2 changes: 1 addition & 1 deletion src/components/menus/dashboard/profile/helpers.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { App } from 'astal/gtk3';
import powermenu from '../../power/helpers/actions.js';
import { PowerOptions } from 'src/lib/types/options.js';
import { execAsync } from 'astal/process.js';
import { execAsync } from 'astal';
const { confirmation, shutdown, logout, sleep, reboot } = options.menus.dashboard.powermenu;

/**
Expand Down
6 changes: 2 additions & 4 deletions src/components/menus/dashboard/shortcuts/sections/Column.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { BindableChild } from 'astal/gtk3/astalify';

export const LeftColumn = ({ isVisible, children }: LeftColumnProps): JSX.Element => {
return (
<box className={`card-button-section-container ${isVisible ? 'visible' : ''}`}>
Expand All @@ -26,9 +24,9 @@ export const RightColumn = ({ children }: RightColumnProps): JSX.Element => {

interface LeftColumnProps {
isVisible?: boolean;
children?: BindableChild | BindableChild[];
children?: JSX.Element | JSX.Element[];
}

interface RightColumnProps {
children?: BindableChild | BindableChild[];
children?: JSX.Element | JSX.Element[];
}
2 changes: 1 addition & 1 deletion src/components/menus/energy/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import DropdownMenu from '../shared/dropdown/index.js';
import { EnergyProfiles } from './profiles/index.js';
import { Brightness } from './brightness/index.js';
import options from 'src/options.js';
import { bind } from 'astal/binding.js';
import { bind } from 'astal';
import { Gtk } from 'astal/gtk3';
import { RevealerTransitionMap } from 'src/lib/constants/options.js';

Expand Down
3 changes: 1 addition & 2 deletions src/components/menus/media/components/MediaContainer.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { getBackground } from './helpers.js';
import { Gtk } from 'astal/gtk3';
import { BindableChild } from 'astal/gtk3/astalify.js';

export const MediaContainer = ({ children }: MediaContainerProps): JSX.Element => {
return (
Expand All @@ -19,5 +18,5 @@ export const MediaContainer = ({ children }: MediaContainerProps): JSX.Element =
};

interface MediaContainerProps {
children?: BindableChild | BindableChild[];
children?: JSX.Element | JSX.Element[];
}
2 changes: 1 addition & 1 deletion src/components/menus/media/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { bind } from 'astal/binding.js';
import { bind } from 'astal';
import DropdownMenu from '../shared/dropdown/index.js';
import options from 'src/options.js';
import { MediaContainer } from './components/MediaContainer.js';
Expand Down
2 changes: 1 addition & 1 deletion src/components/menus/network/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import DropdownMenu from '../shared/dropdown/index.js';
import { Ethernet } from './ethernet/index.js';
import { Wifi } from './wifi/index.js';
import options from 'src/options.js';
import { bind } from 'astal/binding.js';
import { bind } from 'astal';
import { networkService } from 'src/lib/constants/services.js';
import { NoWifi } from './wifi/WirelessAPs/NoWifi.js';
import { RevealerTransitionMap } from 'src/lib/constants/options.js';
Expand Down
3 changes: 1 addition & 2 deletions src/components/menus/notifications/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ import { Controls } from './controls/index.js';
import { NotificationsContainer } from './notification/index.js';
import { NotificationPager } from './pager/index.js';
import options from 'src/options.js';
import Variable from 'astal/variable.js';
import { handlePageBoundaries } from './helpers.js';
import { bind } from 'astal/binding.js';
import { bind, Variable } from 'astal';
import { RevealerTransitionMap } from 'src/lib/constants/options.js';

const { transition } = options.menus;
Expand Down
3 changes: 1 addition & 2 deletions src/components/menus/notifications/notification/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import options from 'src/options.js';
import { filterNotifications } from 'src/lib/shared/notifications.js';
import AstalNotifd from 'gi://AstalNotifd?version=0.1';
import Variable from 'astal/variable.js';
import { Gtk } from 'astal/gtk3';
import { bind } from 'astal/binding.js';
import { bind, Variable } from 'astal';
import { notifdService } from 'src/lib/constants/services.js';
import { NotificationCard } from 'src/components/notifications/Notification.js';
import { Placeholder } from './Placeholder';
Expand Down
2 changes: 1 addition & 1 deletion src/components/menus/power/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import powermenu from './helpers/actions.js';
import options from 'src/options.js';
import { isPrimaryClick } from 'src/lib/utils.js';
import icons from 'src/lib/icons/icons.js';
import { bind } from 'astal/binding.js';
import { bind } from 'astal';
import { Gtk } from 'astal/gtk3';
import { RevealerTransitionMap } from 'src/lib/constants/options.js';

Expand Down
Loading

0 comments on commit 210d5e2

Please sign in to comment.