Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
820848d984 | ||
|
|
fa01d5bb32 | ||
|
|
8be1fc1ea2 | ||
|
|
0e5d38907f | ||
|
|
7ba7abd817 | ||
|
|
cedcf8619f | ||
|
|
8ff2d5c89c | ||
|
|
c4629e0c28 | ||
|
|
ab5e2ea6ae | ||
|
|
63117e2605 |
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
github: nwg-piotr
|
||||
14
main.go
14
main.go
@@ -21,7 +21,7 @@ import (
|
||||
"github.com/gotk3/gotk3/gtk"
|
||||
)
|
||||
|
||||
const version = "0.3.5"
|
||||
const version = "0.3.8"
|
||||
|
||||
var (
|
||||
appDirs []string
|
||||
@@ -120,6 +120,7 @@ var targetOutput = flag.String("o", "", "name of the Output to display the drawe
|
||||
var displayVersion = flag.Bool("v", false, "display Version information")
|
||||
var overlay = flag.Bool("ovl", false, "use OVerLay layer")
|
||||
var gtkTheme = flag.String("g", "", "GTK theme name")
|
||||
var gtkIconTheme = flag.String("i", "", "GTK icon theme name")
|
||||
var iconSize = flag.Int("is", 64, "Icon Size")
|
||||
var marginTop = flag.Int("mt", 0, "Margin Top")
|
||||
var marginLeft = flag.Int("ml", 0, "Margin Left")
|
||||
@@ -189,7 +190,7 @@ func main() {
|
||||
// Otherwise the command may behave in two ways:
|
||||
// 1. kill the running non-residennt instance and exit;
|
||||
// 2. die if a resident instance found.
|
||||
lockFilePath := path.Join(tempDir(), "nwg-drawer.lock")
|
||||
lockFilePath := path.Join(dataDir(), "nwg-drawer.lock")
|
||||
lockFile, err := singleinstance.CreateLockFile(lockFilePath)
|
||||
if err != nil {
|
||||
pid, err := readTextFile(lockFilePath)
|
||||
@@ -326,6 +327,15 @@ func main() {
|
||||
log.Info("Preferring dark theme variants")
|
||||
}
|
||||
|
||||
if *gtkIconTheme != "" {
|
||||
err = settings.SetProperty("gtk-icon-theme-name", *gtkIconTheme)
|
||||
if err != nil {
|
||||
log.Error("Unable to set icon theme:", err)
|
||||
} else {
|
||||
log.Infof("User demanded icon theme: %s", *gtkIconTheme)
|
||||
}
|
||||
}
|
||||
|
||||
cssProvider, _ := gtk.CssProviderNew()
|
||||
|
||||
err = cssProvider.LoadFromPath(*cssFileName)
|
||||
|
||||
41
tools.go
41
tools.go
@@ -131,17 +131,6 @@ func cacheDir() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func tempDir() string {
|
||||
if os.Getenv("TMPDIR") != "" {
|
||||
return os.Getenv("TMPDIR")
|
||||
} else if os.Getenv("TEMP") != "" {
|
||||
return os.Getenv("TEMP")
|
||||
} else if os.Getenv("TMP") != "" {
|
||||
return os.Getenv("TMP")
|
||||
}
|
||||
return "/tmp"
|
||||
}
|
||||
|
||||
func readTextFile(path string) (string, error) {
|
||||
bytes, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
@@ -177,6 +166,20 @@ func configDir() string {
|
||||
return dir
|
||||
}
|
||||
|
||||
func dataDir() string {
|
||||
var dir string
|
||||
if os.Getenv("XDG_DATA_HOME") != "" {
|
||||
dir = path.Join(os.Getenv("XDG_DATA_HOME"), "nwg-drawer")
|
||||
} else if os.Getenv("HOME") != "" {
|
||||
dir = path.Join(os.Getenv("HOME"), ".local/share/nwg-drawer")
|
||||
}
|
||||
|
||||
log.Infof("Data dir: %s", dir)
|
||||
createDir(dir)
|
||||
|
||||
return dir
|
||||
}
|
||||
|
||||
func createDir(dir string) {
|
||||
if _, err := os.Stat(dir); os.IsNotExist(err) {
|
||||
err := os.MkdirAll(dir, os.ModePerm)
|
||||
@@ -688,3 +691,19 @@ func mapOutputs() (map[string]*gdk.Monitor, error) {
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// KAdot / https://stackoverflow.com/a/38537764/4040598 - thanks!
|
||||
func substring(s string, start int, end int) string {
|
||||
startStrIdx := 0
|
||||
i := 0
|
||||
for j := range s {
|
||||
if i == start {
|
||||
startStrIdx = j
|
||||
}
|
||||
if i == end {
|
||||
return s[startStrIdx:j]
|
||||
}
|
||||
i++
|
||||
}
|
||||
return s[startStrIdx:]
|
||||
}
|
||||
|
||||
@@ -58,9 +58,8 @@ func setUpPinnedFlowBox() *gtk.FlowBox {
|
||||
name = entry.Name
|
||||
}
|
||||
if len(name) > 20 {
|
||||
r := []rune(name)
|
||||
name = string(r[:17])
|
||||
name = fmt.Sprintf("%s…", name)
|
||||
r := substring(name, 0, 17)
|
||||
name = fmt.Sprintf("%s…", string(r))
|
||||
}
|
||||
btn.SetLabel(name)
|
||||
|
||||
@@ -252,9 +251,8 @@ func flowBoxButton(entry desktopEntry) *gtk.Button {
|
||||
button.SetImagePosition(gtk.POS_TOP)
|
||||
name := entry.NameLoc
|
||||
if len(name) > 20 {
|
||||
r := []rune(name[:17])
|
||||
name = string(r)
|
||||
name = fmt.Sprintf("%s…", name)
|
||||
r := substring(name, 0, 17)
|
||||
name = fmt.Sprintf("%s…", string(r))
|
||||
}
|
||||
button.SetLabel(name)
|
||||
|
||||
@@ -263,9 +261,8 @@ func flowBoxButton(entry desktopEntry) *gtk.Button {
|
||||
terminal := entry.Terminal
|
||||
desc := entry.CommentLoc
|
||||
if len(desc) > 120 {
|
||||
r := []rune(desc[:117])
|
||||
desc = string(r)
|
||||
desc = fmt.Sprintf("%s…", desc)
|
||||
r := substring(desc, 0, 117)
|
||||
desc = fmt.Sprintf("%s…", string(r))
|
||||
}
|
||||
button.Connect("button-release-event", func(btn *gtk.Button, e *gdk.Event) bool {
|
||||
btnEvent := gdk.EventButtonNewFromEvent(e)
|
||||
|
||||
Reference in New Issue
Block a user