mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-31 08:52:49 -05:00
Compare commits
2 Commits
621710bd86
...
651672afe2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
651672afe2 | ||
|
|
2dbadfe1b5 |
@@ -142,8 +142,6 @@ var (
|
|||||||
clipConfigNoClearStartup bool
|
clipConfigNoClearStartup bool
|
||||||
clipConfigDisabled bool
|
clipConfigDisabled bool
|
||||||
clipConfigEnabled bool
|
clipConfigEnabled bool
|
||||||
clipConfigDisableHistory bool
|
|
||||||
clipConfigEnableHistory bool
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -167,10 +165,8 @@ func init() {
|
|||||||
clipConfigSetCmd.Flags().IntVar(&clipConfigAutoClearDays, "auto-clear-days", -1, "Auto-clear entries older than N days (0 to disable)")
|
clipConfigSetCmd.Flags().IntVar(&clipConfigAutoClearDays, "auto-clear-days", -1, "Auto-clear entries older than N days (0 to disable)")
|
||||||
clipConfigSetCmd.Flags().BoolVar(&clipConfigClearAtStartup, "clear-at-startup", false, "Clear history on startup")
|
clipConfigSetCmd.Flags().BoolVar(&clipConfigClearAtStartup, "clear-at-startup", false, "Clear history on startup")
|
||||||
clipConfigSetCmd.Flags().BoolVar(&clipConfigNoClearStartup, "no-clear-at-startup", false, "Don't clear history on startup")
|
clipConfigSetCmd.Flags().BoolVar(&clipConfigNoClearStartup, "no-clear-at-startup", false, "Don't clear history on startup")
|
||||||
clipConfigSetCmd.Flags().BoolVar(&clipConfigDisabled, "disable", false, "Disable clipboard manager entirely")
|
clipConfigSetCmd.Flags().BoolVar(&clipConfigDisabled, "disable", false, "Disable clipboard tracking")
|
||||||
clipConfigSetCmd.Flags().BoolVar(&clipConfigEnabled, "enable", false, "Enable clipboard manager")
|
clipConfigSetCmd.Flags().BoolVar(&clipConfigEnabled, "enable", false, "Enable clipboard tracking")
|
||||||
clipConfigSetCmd.Flags().BoolVar(&clipConfigDisableHistory, "disable-history", false, "Disable clipboard history persistence")
|
|
||||||
clipConfigSetCmd.Flags().BoolVar(&clipConfigEnableHistory, "enable-history", false, "Enable clipboard history persistence")
|
|
||||||
|
|
||||||
clipWatchCmd.Flags().BoolVarP(&clipWatchStore, "store", "s", false, "Store clipboard changes to history (no server required)")
|
clipWatchCmd.Flags().BoolVarP(&clipWatchStore, "store", "s", false, "Store clipboard changes to history (no server required)")
|
||||||
|
|
||||||
@@ -587,12 +583,6 @@ func runClipConfigSet(cmd *cobra.Command, args []string) {
|
|||||||
if clipConfigEnabled {
|
if clipConfigEnabled {
|
||||||
params["disabled"] = false
|
params["disabled"] = false
|
||||||
}
|
}
|
||||||
if clipConfigDisableHistory {
|
|
||||||
params["disableHistory"] = true
|
|
||||||
}
|
|
||||||
if clipConfigEnableHistory {
|
|
||||||
params["disableHistory"] = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(params) == 0 {
|
if len(params) == 0 {
|
||||||
fmt.Println("No config options specified")
|
fmt.Println("No config options specified")
|
||||||
|
|||||||
@@ -205,9 +205,6 @@ func handleSetConfig(conn net.Conn, req models.Request, m *Manager) {
|
|||||||
if v, ok := req.Params["disabled"].(bool); ok {
|
if v, ok := req.Params["disabled"].(bool); ok {
|
||||||
cfg.Disabled = v
|
cfg.Disabled = v
|
||||||
}
|
}
|
||||||
if v, ok := req.Params["disableHistory"].(bool); ok {
|
|
||||||
cfg.DisableHistory = v
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := m.SetConfig(cfg); err != nil {
|
if err := m.SetConfig(cfg); err != nil {
|
||||||
models.RespondError(conn, req.ID, err.Error())
|
models.RespondError(conn, req.ID, err.Error())
|
||||||
|
|||||||
@@ -36,10 +36,6 @@ var sensitiveMimeTypes = []string{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewManager(wlCtx wlcontext.WaylandContext, config Config) (*Manager, error) {
|
func NewManager(wlCtx wlcontext.WaylandContext, config Config) (*Manager, error) {
|
||||||
if config.Disabled {
|
|
||||||
return nil, fmt.Errorf("clipboard disabled in config")
|
|
||||||
}
|
|
||||||
|
|
||||||
display := wlCtx.Display()
|
display := wlCtx.Display()
|
||||||
dbPath, err := getDBPath()
|
dbPath, err := getDBPath()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -61,16 +57,17 @@ func NewManager(wlCtx wlcontext.WaylandContext, config Config) (*Manager, error)
|
|||||||
dbPath: dbPath,
|
dbPath: dbPath,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !config.Disabled {
|
||||||
if err := m.setupRegistry(); err != nil {
|
if err := m.setupRegistry(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m.notifierWg.Add(1)
|
m.notifierWg.Add(1)
|
||||||
go m.notifier()
|
go m.notifier()
|
||||||
|
|
||||||
go m.watchConfig()
|
go m.watchConfig()
|
||||||
|
|
||||||
if !config.DisableHistory {
|
|
||||||
db, err := openDB(dbPath)
|
db, err := openDB(dbPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to open db: %w", err)
|
return nil, fmt.Errorf("failed to open db: %w", err)
|
||||||
@@ -81,6 +78,7 @@ func NewManager(wlCtx wlcontext.WaylandContext, config Config) (*Manager, error)
|
|||||||
log.Errorf("Failed to migrate hashes: %v", err)
|
log.Errorf("Failed to migrate hashes: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !config.Disabled {
|
||||||
if config.ClearAtStartup {
|
if config.ClearAtStartup {
|
||||||
if err := m.clearHistoryInternal(); err != nil {
|
if err := m.clearHistoryInternal(); err != nil {
|
||||||
log.Errorf("Failed to clear history at startup: %v", err)
|
log.Errorf("Failed to clear history at startup: %v", err)
|
||||||
@@ -97,7 +95,7 @@ func NewManager(wlCtx wlcontext.WaylandContext, config Config) (*Manager, error)
|
|||||||
m.alive = true
|
m.alive = true
|
||||||
m.updateState()
|
m.updateState()
|
||||||
|
|
||||||
if m.dataControlMgr != nil && m.seat != nil {
|
if !config.Disabled && m.dataControlMgr != nil && m.seat != nil {
|
||||||
m.setupDataDeviceSync()
|
m.setupDataDeviceSync()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,7 +324,7 @@ func (m *Manager) readAndStore(r *os.File, mimeType string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !cfg.DisableHistory && m.db != nil {
|
if !cfg.Disabled && m.db != nil {
|
||||||
m.storeClipboardEntry(data, mimeType)
|
m.storeClipboardEntry(data, mimeType)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1211,23 +1209,13 @@ func (m *Manager) applyConfigChange(newCfg Config) {
|
|||||||
m.config = newCfg
|
m.config = newCfg
|
||||||
m.configMutex.Unlock()
|
m.configMutex.Unlock()
|
||||||
|
|
||||||
if newCfg.DisableHistory && !oldCfg.DisableHistory && m.db != nil {
|
switch {
|
||||||
log.Info("Clipboard history disabled, closing database")
|
case newCfg.Disabled && !oldCfg.Disabled:
|
||||||
m.db.Close()
|
log.Info("Clipboard tracking disabled")
|
||||||
m.db = nil
|
case !newCfg.Disabled && oldCfg.Disabled:
|
||||||
|
log.Info("Clipboard tracking enabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !newCfg.DisableHistory && oldCfg.DisableHistory && m.db == nil {
|
|
||||||
log.Info("Clipboard history enabled, opening database")
|
|
||||||
if db, err := openDB(m.dbPath); err == nil {
|
|
||||||
m.db = db
|
|
||||||
} else {
|
|
||||||
log.Errorf("Failed to reopen database: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Infof("Clipboard config reloaded: disableHistory=%v", newCfg.DisableHistory)
|
|
||||||
|
|
||||||
m.updateState()
|
m.updateState()
|
||||||
m.notifySubscribers()
|
m.notifySubscribers()
|
||||||
}
|
}
|
||||||
@@ -1235,8 +1223,8 @@ func (m *Manager) applyConfigChange(newCfg Config) {
|
|||||||
func (m *Manager) StoreData(data []byte, mimeType string) error {
|
func (m *Manager) StoreData(data []byte, mimeType string) error {
|
||||||
cfg := m.getConfig()
|
cfg := m.getConfig()
|
||||||
|
|
||||||
if cfg.DisableHistory {
|
if cfg.Disabled {
|
||||||
return fmt.Errorf("clipboard history disabled")
|
return fmt.Errorf("clipboard tracking disabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.db == nil {
|
if m.db == nil {
|
||||||
|
|||||||
@@ -457,7 +457,6 @@ func TestDefaultConfig(t *testing.T) {
|
|||||||
assert.Equal(t, 0, cfg.AutoClearDays)
|
assert.Equal(t, 0, cfg.AutoClearDays)
|
||||||
assert.False(t, cfg.ClearAtStartup)
|
assert.False(t, cfg.ClearAtStartup)
|
||||||
assert.False(t, cfg.Disabled)
|
assert.False(t, cfg.Disabled)
|
||||||
assert.False(t, cfg.DisableHistory)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestManager_PostDelegatesToWlContext(t *testing.T) {
|
func TestManager_PostDelegatesToWlContext(t *testing.T) {
|
||||||
|
|||||||
@@ -18,9 +18,7 @@ type Config struct {
|
|||||||
MaxEntrySize int64 `json:"maxEntrySize"`
|
MaxEntrySize int64 `json:"maxEntrySize"`
|
||||||
AutoClearDays int `json:"autoClearDays"`
|
AutoClearDays int `json:"autoClearDays"`
|
||||||
ClearAtStartup bool `json:"clearAtStartup"`
|
ClearAtStartup bool `json:"clearAtStartup"`
|
||||||
|
|
||||||
Disabled bool `json:"disabled"`
|
Disabled bool `json:"disabled"`
|
||||||
DisableHistory bool `json:"disableHistory"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func DefaultConfig() Config {
|
func DefaultConfig() Config {
|
||||||
|
|||||||
@@ -207,9 +207,6 @@ func handleClipboardSetConfig(conn net.Conn, req models.Request) {
|
|||||||
if v, ok := req.Params["disabled"].(bool); ok {
|
if v, ok := req.Params["disabled"].(bool); ok {
|
||||||
cfg.Disabled = v
|
cfg.Disabled = v
|
||||||
}
|
}
|
||||||
if v, ok := req.Params["disableHistory"].(bool); ok {
|
|
||||||
cfg.DisableHistory = v
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := clipboard.SaveConfig(cfg); err != nil {
|
if err := clipboard.SaveConfig(cfg); err != nil {
|
||||||
models.RespondError(conn, req.ID, err.Error())
|
models.RespondError(conn, req.ID, err.Error())
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ DankModal {
|
|||||||
property Component clipboardContent
|
property Component clipboardContent
|
||||||
property int activeImageLoads: 0
|
property int activeImageLoads: 0
|
||||||
readonly property int maxConcurrentLoads: 3
|
readonly property int maxConcurrentLoads: 3
|
||||||
readonly property bool clipboardAvailable: DMSService.isConnected && DMSService.capabilities.includes("clipboard")
|
readonly property bool clipboardAvailable: DMSService.isConnected && (DMSService.capabilities.length === 0 || DMSService.capabilities.includes("clipboard"))
|
||||||
property bool wtypeAvailable: false
|
property bool wtypeAvailable: false
|
||||||
|
|
||||||
Process {
|
Process {
|
||||||
|
|||||||
@@ -326,23 +326,13 @@ Item {
|
|||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
tab: "clipboard"
|
tab: "clipboard"
|
||||||
tags: ["clipboard", "disable", "manager"]
|
tags: ["clipboard", "disable", "history"]
|
||||||
settingKey: "disabled"
|
settingKey: "disabled"
|
||||||
text: I18n.tr("Disable Clipboard Manager")
|
text: I18n.tr("Disable History Persistence")
|
||||||
description: I18n.tr("Disable clipboard manager entirely (requires restart)")
|
description: I18n.tr("Clipboard works but nothing saved to disk")
|
||||||
checked: root.config.disabled ?? false
|
checked: root.config.disabled ?? false
|
||||||
onToggled: checked => root.saveConfig("disabled", checked)
|
onToggled: checked => root.saveConfig("disabled", checked)
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsToggleRow {
|
|
||||||
tab: "clipboard"
|
|
||||||
tags: ["clipboard", "disable", "history"]
|
|
||||||
settingKey: "disableHistory"
|
|
||||||
text: I18n.tr("Disable History Persistence")
|
|
||||||
description: I18n.tr("Clipboard works but nothing saved to disk")
|
|
||||||
checked: root.config.disableHistory ?? false
|
|
||||||
onToggled: checked => root.saveConfig("disableHistory", checked)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import QtQuick
|
|||||||
import qs.Common
|
import qs.Common
|
||||||
import qs.Services
|
import qs.Services
|
||||||
import qs.Widgets
|
import qs.Widgets
|
||||||
|
import qs.Modules.Settings.Widgets
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
@@ -96,47 +97,39 @@ Item {
|
|||||||
rightPadding: Theme.spacingM
|
rightPadding: Theme.spacingM
|
||||||
visible: DisplayService.gammaControlAvailable
|
visible: DisplayService.gammaControlAvailable
|
||||||
|
|
||||||
DankDropdown {
|
SettingsSliderRow {
|
||||||
|
id: nightTempSlider
|
||||||
|
settingKey: "nightModeTemperature"
|
||||||
|
tags: ["gamma", "night", "temperature", "kelvin", "warm", "color", "blue light"]
|
||||||
width: parent.width - parent.leftPadding - parent.rightPadding
|
width: parent.width - parent.leftPadding - parent.rightPadding
|
||||||
text: SessionData.nightModeAutoEnabled ? I18n.tr("Night Temperature") : I18n.tr("Color Temperature")
|
text: SessionData.nightModeAutoEnabled ? I18n.tr("Night Temperature") : I18n.tr("Color Temperature")
|
||||||
description: SessionData.nightModeAutoEnabled ? I18n.tr("Color temperature for night mode") : I18n.tr("Warm color temperature to apply")
|
description: SessionData.nightModeAutoEnabled ? I18n.tr("Color temperature for night mode") : I18n.tr("Warm color temperature to apply")
|
||||||
currentValue: SessionData.nightModeTemperature + "K"
|
minimum: 2500
|
||||||
options: {
|
maximum: 6000
|
||||||
var temps = [];
|
step: 100
|
||||||
for (var i = 2500; i <= 6000; i += 500) {
|
unit: "K"
|
||||||
temps.push(i + "K");
|
value: SessionData.nightModeTemperature
|
||||||
}
|
onSliderValueChanged: newValue => {
|
||||||
return temps;
|
SessionData.setNightModeTemperature(newValue);
|
||||||
}
|
if (SessionData.nightModeHighTemperature < newValue)
|
||||||
onValueChanged: value => {
|
SessionData.setNightModeHighTemperature(newValue);
|
||||||
var temp = parseInt(value.replace("K", ""));
|
|
||||||
SessionData.setNightModeTemperature(temp);
|
|
||||||
if (SessionData.nightModeHighTemperature < temp) {
|
|
||||||
SessionData.setNightModeHighTemperature(temp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DankDropdown {
|
SettingsSliderRow {
|
||||||
|
id: dayTempSlider
|
||||||
|
settingKey: "nightModeHighTemperature"
|
||||||
|
tags: ["gamma", "day", "temperature", "kelvin", "color"]
|
||||||
width: parent.width - parent.leftPadding - parent.rightPadding
|
width: parent.width - parent.leftPadding - parent.rightPadding
|
||||||
text: I18n.tr("Day Temperature")
|
text: I18n.tr("Day Temperature")
|
||||||
description: I18n.tr("Color temperature for day time")
|
description: I18n.tr("Color temperature for day time")
|
||||||
currentValue: SessionData.nightModeHighTemperature + "K"
|
minimum: SessionData.nightModeTemperature
|
||||||
|
maximum: 10000
|
||||||
|
step: 100
|
||||||
|
unit: "K"
|
||||||
|
value: Math.max(SessionData.nightModeHighTemperature, SessionData.nightModeTemperature)
|
||||||
visible: SessionData.nightModeAutoEnabled
|
visible: SessionData.nightModeAutoEnabled
|
||||||
options: {
|
onSliderValueChanged: newValue => SessionData.setNightModeHighTemperature(newValue)
|
||||||
var temps = [];
|
|
||||||
var minTemp = SessionData.nightModeTemperature;
|
|
||||||
for (var i = Math.max(2500, minTemp); i <= 10000; i += 500) {
|
|
||||||
temps.push(i + "K");
|
|
||||||
}
|
|
||||||
return temps;
|
|
||||||
}
|
|
||||||
onValueChanged: value => {
|
|
||||||
var temp = parseInt(value.replace("K", ""));
|
|
||||||
if (temp >= SessionData.nightModeTemperature) {
|
|
||||||
SessionData.setNightModeHighTemperature(temp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ Item {
|
|||||||
property alias value: slider.value
|
property alias value: slider.value
|
||||||
property alias minimum: slider.minimum
|
property alias minimum: slider.minimum
|
||||||
property alias maximum: slider.maximum
|
property alias maximum: slider.maximum
|
||||||
|
property alias step: slider.step
|
||||||
property alias unit: slider.unit
|
property alias unit: slider.unit
|
||||||
property alias wheelEnabled: slider.wheelEnabled
|
property alias wheelEnabled: slider.wheelEnabled
|
||||||
property alias thumbOutlineColor: slider.thumbOutlineColor
|
property alias thumbOutlineColor: slider.thumbOutlineColor
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Effects
|
|
||||||
import qs.Common
|
import qs.Common
|
||||||
import qs.Widgets
|
import qs.Widgets
|
||||||
|
|
||||||
@@ -9,6 +8,7 @@ Item {
|
|||||||
property int value: 50
|
property int value: 50
|
||||||
property int minimum: 0
|
property int minimum: 0
|
||||||
property int maximum: 100
|
property int maximum: 100
|
||||||
|
property int step: 1
|
||||||
property string leftIcon: ""
|
property string leftIcon: ""
|
||||||
property string rightIcon: ""
|
property string rightIcon: ""
|
||||||
property bool enabled: true
|
property bool enabled: true
|
||||||
@@ -29,11 +29,13 @@ Item {
|
|||||||
height: 48
|
height: 48
|
||||||
|
|
||||||
function updateValueFromPosition(x) {
|
function updateValueFromPosition(x) {
|
||||||
let ratio = Math.max(0, Math.min(1, (x - sliderHandle.width / 2) / (sliderTrack.width - sliderHandle.width)))
|
let ratio = Math.max(0, Math.min(1, (x - sliderHandle.width / 2) / (sliderTrack.width - sliderHandle.width)));
|
||||||
let newValue = Math.round(minimum + ratio * (maximum - minimum))
|
let rawValue = minimum + ratio * (maximum - minimum);
|
||||||
|
let newValue = step > 1 ? Math.round(rawValue / step) * step : Math.round(rawValue);
|
||||||
|
newValue = Math.max(minimum, Math.min(maximum, newValue));
|
||||||
if (newValue !== value) {
|
if (newValue !== value) {
|
||||||
value = newValue
|
value = newValue;
|
||||||
sliderValueChanged(newValue)
|
sliderValueChanged(newValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,13 +70,12 @@ Item {
|
|||||||
height: parent.height
|
height: parent.height
|
||||||
radius: Theme.cornerRadius
|
radius: Theme.cornerRadius
|
||||||
width: {
|
width: {
|
||||||
const ratio = (slider.value - slider.minimum) / (slider.maximum - slider.minimum)
|
const ratio = (slider.value - slider.minimum) / (slider.maximum - slider.minimum);
|
||||||
const travel = sliderTrack.width - sliderHandle.width
|
const travel = sliderTrack.width - sliderHandle.width;
|
||||||
const center = (travel * ratio) + sliderHandle.width / 2
|
const center = (travel * ratio) + sliderHandle.width / 2;
|
||||||
return Math.max(0, Math.min(sliderTrack.width, center))
|
return Math.max(0, Math.min(sliderTrack.width, center));
|
||||||
}
|
}
|
||||||
color: slider.enabled ? Theme.primary : Theme.withAlpha(Theme.onSurface, 0.12)
|
color: slider.enabled ? Theme.primary : Theme.withAlpha(Theme.onSurface, 0.12)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
StyledRect {
|
StyledRect {
|
||||||
@@ -86,16 +87,15 @@ Item {
|
|||||||
height: 24
|
height: 24
|
||||||
radius: Theme.cornerRadius
|
radius: Theme.cornerRadius
|
||||||
x: {
|
x: {
|
||||||
const ratio = (slider.value - slider.minimum) / (slider.maximum - slider.minimum)
|
const ratio = (slider.value - slider.minimum) / (slider.maximum - slider.minimum);
|
||||||
const travel = sliderTrack.width - width
|
const travel = sliderTrack.width - width;
|
||||||
return Math.max(0, Math.min(travel, travel * ratio))
|
return Math.max(0, Math.min(travel, travel * ratio));
|
||||||
}
|
}
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
color: slider.enabled ? Theme.primary : Theme.withAlpha(Theme.onSurface, 0.12)
|
color: slider.enabled ? Theme.primary : Theme.withAlpha(Theme.onSurface, 0.12)
|
||||||
border.width: 3
|
border.width: 3
|
||||||
border.color: slider.thumbOutlineColor
|
border.color: slider.thumbOutlineColor
|
||||||
|
|
||||||
|
|
||||||
StyledRect {
|
StyledRect {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
radius: Theme.cornerRadius
|
radius: Theme.cornerRadius
|
||||||
@@ -126,10 +126,10 @@ Item {
|
|||||||
opacity: 0
|
opacity: 0
|
||||||
|
|
||||||
function start() {
|
function start() {
|
||||||
opacity = 0.16
|
opacity = 0.16;
|
||||||
width = 0
|
width = 0;
|
||||||
height = 0
|
height = 0;
|
||||||
rippleAnimation.start()
|
rippleAnimation.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
SequentialAnimation {
|
SequentialAnimation {
|
||||||
@@ -153,12 +153,11 @@ Item {
|
|||||||
acceptedButtons: Qt.LeftButton
|
acceptedButtons: Qt.LeftButton
|
||||||
onPressedChanged: {
|
onPressedChanged: {
|
||||||
if (pressed && slider.enabled) {
|
if (pressed && slider.enabled) {
|
||||||
ripple.start()
|
ripple.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
scale: active ? 1.05 : 1.0
|
scale: active ? 1.05 : 1.0
|
||||||
|
|
||||||
Behavior on scale {
|
Behavior on scale {
|
||||||
@@ -189,40 +188,42 @@ Item {
|
|||||||
acceptedButtons: Qt.LeftButton
|
acceptedButtons: Qt.LeftButton
|
||||||
onWheel: wheelEvent => {
|
onWheel: wheelEvent => {
|
||||||
if (!slider.wheelEnabled) {
|
if (!slider.wheelEnabled) {
|
||||||
wheelEvent.accepted = false
|
wheelEvent.accepted = false;
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
let step = Math.max(0.5, (maximum - minimum) / 100)
|
let wheelStep = slider.step > 1 ? slider.step : Math.max(1, (maximum - minimum) / 100);
|
||||||
let newValue = wheelEvent.angleDelta.y > 0 ? Math.min(maximum, value + step) : Math.max(minimum, value - step)
|
let newValue = wheelEvent.angleDelta.y > 0 ? Math.min(maximum, value + wheelStep) : Math.max(minimum, value - wheelStep);
|
||||||
newValue = Math.round(newValue)
|
if (slider.step > 1)
|
||||||
|
newValue = Math.round(newValue / slider.step) * slider.step;
|
||||||
|
newValue = Math.round(newValue);
|
||||||
if (newValue !== value) {
|
if (newValue !== value) {
|
||||||
value = newValue
|
value = newValue;
|
||||||
sliderValueChanged(newValue)
|
sliderValueChanged(newValue);
|
||||||
}
|
}
|
||||||
wheelEvent.accepted = true
|
wheelEvent.accepted = true;
|
||||||
}
|
}
|
||||||
onPressed: mouse => {
|
onPressed: mouse => {
|
||||||
if (slider.enabled) {
|
if (slider.enabled) {
|
||||||
slider.isDragging = true
|
slider.isDragging = true;
|
||||||
sliderMouseArea.isDragging = true
|
sliderMouseArea.isDragging = true;
|
||||||
updateValueFromPosition(mouse.x)
|
updateValueFromPosition(mouse.x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onReleased: {
|
onReleased: {
|
||||||
if (slider.enabled) {
|
if (slider.enabled) {
|
||||||
slider.isDragging = false
|
slider.isDragging = false;
|
||||||
sliderMouseArea.isDragging = false
|
sliderMouseArea.isDragging = false;
|
||||||
slider.sliderDragFinished(slider.value)
|
slider.sliderDragFinished(slider.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onPositionChanged: mouse => {
|
onPositionChanged: mouse => {
|
||||||
if (pressed && slider.isDragging && slider.enabled) {
|
if (pressed && slider.isDragging && slider.enabled) {
|
||||||
updateValueFromPosition(mouse.x)
|
updateValueFromPosition(mouse.x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onClicked: mouse => {
|
onClicked: mouse => {
|
||||||
if (slider.enabled && !slider.isDragging) {
|
if (slider.enabled && !slider.isDragging) {
|
||||||
updateValueFromPosition(mouse.x)
|
updateValueFromPosition(mouse.x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -748,6 +748,32 @@
|
|||||||
],
|
],
|
||||||
"description": "Show only workspaces belonging to each specific monitor."
|
"description": "Show only workspaces belonging to each specific monitor."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"section": "reverseScrolling",
|
||||||
|
"label": "Reverse Scrolling Direction",
|
||||||
|
"tabIndex": 4,
|
||||||
|
"category": "Workspaces",
|
||||||
|
"keywords": [
|
||||||
|
"desktop",
|
||||||
|
"direction",
|
||||||
|
"over",
|
||||||
|
"panel",
|
||||||
|
"reverse",
|
||||||
|
"scroll",
|
||||||
|
"scrolling",
|
||||||
|
"spaces",
|
||||||
|
"statusbar",
|
||||||
|
"switch",
|
||||||
|
"taskbar",
|
||||||
|
"topbar",
|
||||||
|
"virtual",
|
||||||
|
"virtual desktops",
|
||||||
|
"workspace",
|
||||||
|
"workspaces"
|
||||||
|
],
|
||||||
|
"description": "Reverse workspace switch direction when scrolling over the bar",
|
||||||
|
"conditionKey": "isNiri"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"section": "dwlShowAllTags",
|
"section": "dwlShowAllTags",
|
||||||
"label": "Show All Tags",
|
"label": "Show All Tags",
|
||||||
@@ -793,26 +819,6 @@
|
|||||||
"description": "Display only workspaces that contain windows",
|
"description": "Display only workspaces that contain windows",
|
||||||
"conditionKey": "isNiri"
|
"conditionKey": "isNiri"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"section": "reverseScrolling",
|
|
||||||
"label": "Reverse Scrolling Direction",
|
|
||||||
"tabIndex": 4,
|
|
||||||
"category": "Workspaces",
|
|
||||||
"keywords": [
|
|
||||||
"active",
|
|
||||||
"contain",
|
|
||||||
"desktop",
|
|
||||||
"desktops",
|
|
||||||
"scroll",
|
|
||||||
"scrolling",
|
|
||||||
"reverse",
|
|
||||||
"direction",
|
|
||||||
"windows",
|
|
||||||
"workspace",
|
|
||||||
"workspaces"
|
|
||||||
],
|
|
||||||
"description": "Display only workspaces that contain windows"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"section": "showWorkspaceApps",
|
"section": "showWorkspaceApps",
|
||||||
"label": "Show Workspace Apps",
|
"label": "Show Workspace Apps",
|
||||||
@@ -1565,24 +1571,6 @@
|
|||||||
"theme"
|
"theme"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"section": "matugenTemplateZenBrowser",
|
|
||||||
"label": "Zen Browser",
|
|
||||||
"tabIndex": 10,
|
|
||||||
"category": "Theme & Colors",
|
|
||||||
"keywords": [
|
|
||||||
"appearance",
|
|
||||||
"colors",
|
|
||||||
"zen",
|
|
||||||
"zenbrowser",
|
|
||||||
"look",
|
|
||||||
"matugen",
|
|
||||||
"scheme",
|
|
||||||
"style",
|
|
||||||
"template",
|
|
||||||
"theme"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"section": "matugenTemplateGtk",
|
"section": "matugenTemplateGtk",
|
||||||
"label": "GTK",
|
"label": "GTK",
|
||||||
@@ -2360,6 +2348,23 @@
|
|||||||
"vesktop"
|
"vesktop"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"section": "matugenTemplateZenBrowser",
|
||||||
|
"label": "zenbrowser",
|
||||||
|
"tabIndex": 10,
|
||||||
|
"category": "Theme & Colors",
|
||||||
|
"keywords": [
|
||||||
|
"appearance",
|
||||||
|
"colors",
|
||||||
|
"look",
|
||||||
|
"matugen",
|
||||||
|
"scheme",
|
||||||
|
"style",
|
||||||
|
"template",
|
||||||
|
"theme",
|
||||||
|
"zenbrowser"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"section": "lockScreenActiveMonitor",
|
"section": "lockScreenActiveMonitor",
|
||||||
"label": "Active Lock Screen Monitor",
|
"label": "Active Lock Screen Monitor",
|
||||||
@@ -3582,16 +3587,18 @@
|
|||||||
"cliphist",
|
"cliphist",
|
||||||
"copy",
|
"copy",
|
||||||
"disable",
|
"disable",
|
||||||
"entirely",
|
"disk",
|
||||||
"history",
|
"history",
|
||||||
"linux",
|
"linux",
|
||||||
"manager",
|
"nothing",
|
||||||
"os",
|
"os",
|
||||||
"paste",
|
"paste",
|
||||||
"system"
|
"saved",
|
||||||
|
"system",
|
||||||
|
"works"
|
||||||
],
|
],
|
||||||
"icon": "tune",
|
"icon": "tune",
|
||||||
"description": "Disable clipboard manager entirely (requires restart)"
|
"description": "Clipboard works but nothing saved to disk"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"section": "autoClearDays",
|
"section": "autoClearDays",
|
||||||
@@ -3633,29 +3640,6 @@
|
|||||||
"icon": "settings",
|
"icon": "settings",
|
||||||
"description": "Clear all history when server starts"
|
"description": "Clear all history when server starts"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"section": "disableHistory",
|
|
||||||
"label": "Disable History Persistence",
|
|
||||||
"tabIndex": 23,
|
|
||||||
"category": "System",
|
|
||||||
"keywords": [
|
|
||||||
"clipboard",
|
|
||||||
"cliphist",
|
|
||||||
"copy",
|
|
||||||
"disable",
|
|
||||||
"disk",
|
|
||||||
"history",
|
|
||||||
"linux",
|
|
||||||
"nothing",
|
|
||||||
"os",
|
|
||||||
"paste",
|
|
||||||
"persistence",
|
|
||||||
"saved",
|
|
||||||
"system",
|
|
||||||
"works"
|
|
||||||
],
|
|
||||||
"description": "Clipboard works but nothing saved to disk"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"section": "maxHistory",
|
"section": "maxHistory",
|
||||||
"label": "History Settings",
|
"label": "History Settings",
|
||||||
@@ -3700,5 +3684,57 @@
|
|||||||
"system"
|
"system"
|
||||||
],
|
],
|
||||||
"description": "Maximum size per clipboard entry"
|
"description": "Maximum size per clipboard entry"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "nightModeHighTemperature",
|
||||||
|
"label": "Day Temperature",
|
||||||
|
"tabIndex": 25,
|
||||||
|
"category": "Displays",
|
||||||
|
"keywords": [
|
||||||
|
"celsius",
|
||||||
|
"color",
|
||||||
|
"colour",
|
||||||
|
"day",
|
||||||
|
"displays",
|
||||||
|
"fahrenheit",
|
||||||
|
"gamma",
|
||||||
|
"hue",
|
||||||
|
"kelvin",
|
||||||
|
"monitor",
|
||||||
|
"resolution",
|
||||||
|
"screen",
|
||||||
|
"temp",
|
||||||
|
"temperature",
|
||||||
|
"time",
|
||||||
|
"tint"
|
||||||
|
],
|
||||||
|
"description": "Color temperature for day time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"section": "nightModeTemperature",
|
||||||
|
"label": "Night Temperature",
|
||||||
|
"tabIndex": 25,
|
||||||
|
"category": "Displays",
|
||||||
|
"keywords": [
|
||||||
|
"blue light",
|
||||||
|
"celsius",
|
||||||
|
"color",
|
||||||
|
"colour",
|
||||||
|
"displays",
|
||||||
|
"fahrenheit",
|
||||||
|
"gamma",
|
||||||
|
"hue",
|
||||||
|
"kelvin",
|
||||||
|
"mode",
|
||||||
|
"monitor",
|
||||||
|
"night",
|
||||||
|
"resolution",
|
||||||
|
"screen",
|
||||||
|
"temp",
|
||||||
|
"temperature",
|
||||||
|
"tint",
|
||||||
|
"warm"
|
||||||
|
],
|
||||||
|
"description": "Color temperature for night mode"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user