mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-12 08:42:13 -04:00
widgets: add openWith/toggleWith modes for dankbar widgets
This commit is contained in:
@@ -859,6 +859,70 @@ Item {
|
|||||||
return success ? `WIDGET_TOGGLE_SUCCESS: ${widgetId}` : `WIDGET_TOGGLE_FAILED: ${widgetId}`;
|
return success ? `WIDGET_TOGGLE_SUCCESS: ${widgetId}` : `WIDGET_TOGGLE_FAILED: ${widgetId}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openWith(widgetId: string, mode: string): string {
|
||||||
|
if (!widgetId)
|
||||||
|
return "ERROR: No widget ID specified";
|
||||||
|
if (!BarWidgetService.hasWidget(widgetId))
|
||||||
|
return `WIDGET_NOT_FOUND: ${widgetId}`;
|
||||||
|
|
||||||
|
const widget = BarWidgetService.getWidgetOnFocusedScreen(widgetId);
|
||||||
|
if (!widget)
|
||||||
|
return `WIDGET_NOT_AVAILABLE: ${widgetId}`;
|
||||||
|
if (typeof widget.openWithMode !== "function")
|
||||||
|
return `WIDGET_OPEN_WITH_NOT_SUPPORTED: ${widgetId}`;
|
||||||
|
|
||||||
|
widget.openWithMode(mode || "all");
|
||||||
|
return `WIDGET_OPEN_WITH_SUCCESS: ${widgetId} ${mode}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleWith(widgetId: string, mode: string): string {
|
||||||
|
if (!widgetId)
|
||||||
|
return "ERROR: No widget ID specified";
|
||||||
|
if (!BarWidgetService.hasWidget(widgetId))
|
||||||
|
return `WIDGET_NOT_FOUND: ${widgetId}`;
|
||||||
|
|
||||||
|
const widget = BarWidgetService.getWidgetOnFocusedScreen(widgetId);
|
||||||
|
if (!widget)
|
||||||
|
return `WIDGET_NOT_AVAILABLE: ${widgetId}`;
|
||||||
|
if (typeof widget.toggleWithMode !== "function")
|
||||||
|
return `WIDGET_TOGGLE_WITH_NOT_SUPPORTED: ${widgetId}`;
|
||||||
|
|
||||||
|
widget.toggleWithMode(mode || "all");
|
||||||
|
return `WIDGET_TOGGLE_WITH_SUCCESS: ${widgetId} ${mode}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function openQuery(widgetId: string, query: string): string {
|
||||||
|
if (!widgetId)
|
||||||
|
return "ERROR: No widget ID specified";
|
||||||
|
if (!BarWidgetService.hasWidget(widgetId))
|
||||||
|
return `WIDGET_NOT_FOUND: ${widgetId}`;
|
||||||
|
|
||||||
|
const widget = BarWidgetService.getWidgetOnFocusedScreen(widgetId);
|
||||||
|
if (!widget)
|
||||||
|
return `WIDGET_NOT_AVAILABLE: ${widgetId}`;
|
||||||
|
if (typeof widget.openWithQuery !== "function")
|
||||||
|
return `WIDGET_OPEN_QUERY_NOT_SUPPORTED: ${widgetId}`;
|
||||||
|
|
||||||
|
widget.openWithQuery(query || "");
|
||||||
|
return `WIDGET_OPEN_QUERY_SUCCESS: ${widgetId}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleQuery(widgetId: string, query: string): string {
|
||||||
|
if (!widgetId)
|
||||||
|
return "ERROR: No widget ID specified";
|
||||||
|
if (!BarWidgetService.hasWidget(widgetId))
|
||||||
|
return `WIDGET_NOT_FOUND: ${widgetId}`;
|
||||||
|
|
||||||
|
const widget = BarWidgetService.getWidgetOnFocusedScreen(widgetId);
|
||||||
|
if (!widget)
|
||||||
|
return `WIDGET_NOT_AVAILABLE: ${widgetId}`;
|
||||||
|
if (typeof widget.toggleWithQuery !== "function")
|
||||||
|
return `WIDGET_TOGGLE_QUERY_NOT_SUPPORTED: ${widgetId}`;
|
||||||
|
|
||||||
|
widget.toggleWithQuery(query || "");
|
||||||
|
return `WIDGET_TOGGLE_QUERY_SUCCESS: ${widgetId}`;
|
||||||
|
}
|
||||||
|
|
||||||
function list(): string {
|
function list(): string {
|
||||||
const widgets = BarWidgetService.getRegisteredWidgetIds();
|
const widgets = BarWidgetService.getRegisteredWidgetIds();
|
||||||
if (widgets.length === 0)
|
if (widgets.length === 0)
|
||||||
|
|||||||
@@ -8,10 +8,39 @@ DankPopout {
|
|||||||
|
|
||||||
layerNamespace: "dms:app-launcher"
|
layerNamespace: "dms:app-launcher"
|
||||||
|
|
||||||
|
property string _pendingMode: ""
|
||||||
|
property string _pendingQuery: ""
|
||||||
|
|
||||||
function show() {
|
function show() {
|
||||||
open();
|
open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openWithMode(mode) {
|
||||||
|
_pendingMode = mode || "";
|
||||||
|
open();
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleWithMode(mode) {
|
||||||
|
if (shouldBeVisible) {
|
||||||
|
close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
openWithMode(mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
function openWithQuery(query) {
|
||||||
|
_pendingQuery = query || "";
|
||||||
|
open();
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleWithQuery(query) {
|
||||||
|
if (shouldBeVisible) {
|
||||||
|
close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
openWithQuery(query);
|
||||||
|
}
|
||||||
|
|
||||||
popupWidth: 560
|
popupWidth: 560
|
||||||
popupHeight: 640
|
popupHeight: 640
|
||||||
triggerWidth: 40
|
triggerWidth: 40
|
||||||
@@ -30,15 +59,25 @@ DankPopout {
|
|||||||
var lc = contentLoader.item?.launcherContent;
|
var lc = contentLoader.item?.launcherContent;
|
||||||
if (!lc)
|
if (!lc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
const query = _pendingQuery;
|
||||||
|
const mode = _pendingMode || "apps";
|
||||||
|
_pendingMode = "";
|
||||||
|
_pendingQuery = "";
|
||||||
|
|
||||||
if (lc.searchField) {
|
if (lc.searchField) {
|
||||||
lc.searchField.text = "";
|
lc.searchField.text = query;
|
||||||
lc.searchField.forceActiveFocus();
|
lc.searchField.forceActiveFocus();
|
||||||
}
|
}
|
||||||
if (lc.controller) {
|
if (lc.controller) {
|
||||||
lc.controller.searchMode = "apps";
|
lc.controller.searchMode = mode;
|
||||||
lc.controller.pluginFilter = "";
|
lc.controller.pluginFilter = "";
|
||||||
lc.controller.searchQuery = "";
|
lc.controller.searchQuery = "";
|
||||||
lc.controller.performSearch();
|
if (query) {
|
||||||
|
lc.controller.setSearchQuery(query);
|
||||||
|
} else {
|
||||||
|
lc.controller.performSearch();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lc.resetScroll?.();
|
lc.resetScroll?.();
|
||||||
lc.actionPanel?.hide();
|
lc.actionPanel?.hide();
|
||||||
|
|||||||
@@ -642,24 +642,52 @@ Item {
|
|||||||
popoutTarget: appDrawerLoader.item
|
popoutTarget: appDrawerLoader.item
|
||||||
parentScreen: barWindow.screen
|
parentScreen: barWindow.screen
|
||||||
hyprlandOverviewLoader: barWindow ? barWindow.hyprlandOverviewLoader : null
|
hyprlandOverviewLoader: barWindow ? barWindow.hyprlandOverviewLoader : null
|
||||||
onClicked: {
|
|
||||||
|
function _preparePopout() {
|
||||||
appDrawerLoader.active = true;
|
appDrawerLoader.active = true;
|
||||||
// Use topBarContent.barConfig directly since widget barConfig binding doesn't work in Components
|
if (!appDrawerLoader.item)
|
||||||
|
return false;
|
||||||
const effectiveBarConfig = topBarContent.barConfig;
|
const effectiveBarConfig = topBarContent.barConfig;
|
||||||
// Calculate barPosition from axis.edge
|
|
||||||
const barPosition = barWindow.axis?.edge === "left" ? 2 : (barWindow.axis?.edge === "right" ? 3 : (barWindow.axis?.edge === "top" ? 0 : 1));
|
const barPosition = barWindow.axis?.edge === "left" ? 2 : (barWindow.axis?.edge === "right" ? 3 : (barWindow.axis?.edge === "top" ? 0 : 1));
|
||||||
if (appDrawerLoader.item && appDrawerLoader.item.setBarContext) {
|
if (appDrawerLoader.item.setBarContext)
|
||||||
appDrawerLoader.item.setBarContext(barPosition, effectiveBarConfig?.bottomGap ?? 0);
|
appDrawerLoader.item.setBarContext(barPosition, effectiveBarConfig?.bottomGap ?? 0);
|
||||||
}
|
if (appDrawerLoader.item.setTriggerPosition) {
|
||||||
if (appDrawerLoader.item && appDrawerLoader.item.setTriggerPosition) {
|
|
||||||
const globalPos = launcherButton.visualContent.mapToItem(null, 0, 0);
|
const globalPos = launcherButton.visualContent.mapToItem(null, 0, 0);
|
||||||
const currentScreen = barWindow.screen;
|
const currentScreen = barWindow.screen;
|
||||||
const pos = SettingsData.getPopupTriggerPosition(globalPos, currentScreen, barWindow.effectiveBarThickness, launcherButton.visualWidth, effectiveBarConfig?.spacing ?? 4, barPosition, effectiveBarConfig);
|
const pos = SettingsData.getPopupTriggerPosition(globalPos, currentScreen, barWindow.effectiveBarThickness, launcherButton.visualWidth, effectiveBarConfig?.spacing ?? 4, barPosition, effectiveBarConfig);
|
||||||
appDrawerLoader.item.setTriggerPosition(pos.x, pos.y, pos.width, launcherButton.section, currentScreen, barPosition, barWindow.effectiveBarThickness, effectiveBarConfig?.spacing ?? 4, effectiveBarConfig);
|
appDrawerLoader.item.setTriggerPosition(pos.x, pos.y, pos.width, launcherButton.section, currentScreen, barPosition, barWindow.effectiveBarThickness, effectiveBarConfig?.spacing ?? 4, effectiveBarConfig);
|
||||||
}
|
}
|
||||||
if (appDrawerLoader.item) {
|
return true;
|
||||||
PopoutManager.requestPopout(appDrawerLoader.item, undefined, "appDrawer");
|
}
|
||||||
}
|
|
||||||
|
function openWithMode(mode) {
|
||||||
|
if (!_preparePopout())
|
||||||
|
return;
|
||||||
|
appDrawerLoader.item.openWithMode(mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleWithMode(mode) {
|
||||||
|
if (!_preparePopout())
|
||||||
|
return;
|
||||||
|
appDrawerLoader.item.toggleWithMode(mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
function openWithQuery(query) {
|
||||||
|
if (!_preparePopout())
|
||||||
|
return;
|
||||||
|
appDrawerLoader.item.openWithQuery(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleWithQuery(query) {
|
||||||
|
if (!_preparePopout())
|
||||||
|
return;
|
||||||
|
appDrawerLoader.item.toggleWithQuery(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
if (!_preparePopout())
|
||||||
|
return;
|
||||||
|
PopoutManager.requestPopout(appDrawerLoader.item, undefined, "appDrawer");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user