10 Commits

Author SHA1 Message Date
Piotr Miller
820848d984 Merge pull request #85 from nwg-piotr/add84
Add `-i` flag to force an icon theme
2023-01-22 22:41:42 +01:00
piotr
fa01d5bb32 bump to 0.3.8 2023-01-22 22:35:00 +01:00
piotr
8be1fc1ea2 allow forcing icon theme #84 2023-01-22 22:30:09 +01:00
Piotr Miller
0e5d38907f Merge pull request #83 from nwg-piotr/fix82
fixed trimming strings on non-ASCII characters
2023-01-12 22:50:59 +01:00
piotr
7ba7abd817 bump to 0.3.7 2023-01-12 22:48:52 +01:00
piotr
cedcf8619f fix cutting utf-8 strings #82 2023-01-12 02:27:27 +01:00
Piotr Miller
8ff2d5c89c Create FUNDING.yml 2022-12-15 12:05:39 +01:00
Piotr Miller
c4629e0c28 Merge pull request #80 from nwg-piotr/lockfile
Move lock file to XDG_DATA_HOME/nwg-drawer/
2022-12-11 23:21:32 +01:00
piotr
ab5e2ea6ae move lock file to dataDir #79 2022-12-11 23:05:57 +01:00
piotr
63117e2605 bump to 0.3.6 2022-12-11 21:44:01 +01:00
4 changed files with 49 additions and 22 deletions

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
github: nwg-piotr

14
main.go
View File

@@ -21,7 +21,7 @@ import (
"github.com/gotk3/gotk3/gtk" "github.com/gotk3/gotk3/gtk"
) )
const version = "0.3.5" const version = "0.3.8"
var ( var (
appDirs []string 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 displayVersion = flag.Bool("v", false, "display Version information")
var overlay = flag.Bool("ovl", false, "use OVerLay layer") var overlay = flag.Bool("ovl", false, "use OVerLay layer")
var gtkTheme = flag.String("g", "", "GTK theme name") 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 iconSize = flag.Int("is", 64, "Icon Size")
var marginTop = flag.Int("mt", 0, "Margin Top") var marginTop = flag.Int("mt", 0, "Margin Top")
var marginLeft = flag.Int("ml", 0, "Margin Left") var marginLeft = flag.Int("ml", 0, "Margin Left")
@@ -189,7 +190,7 @@ func main() {
// Otherwise the command may behave in two ways: // Otherwise the command may behave in two ways:
// 1. kill the running non-residennt instance and exit; // 1. kill the running non-residennt instance and exit;
// 2. die if a resident instance found. // 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) lockFile, err := singleinstance.CreateLockFile(lockFilePath)
if err != nil { if err != nil {
pid, err := readTextFile(lockFilePath) pid, err := readTextFile(lockFilePath)
@@ -326,6 +327,15 @@ func main() {
log.Info("Preferring dark theme variants") 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() cssProvider, _ := gtk.CssProviderNew()
err = cssProvider.LoadFromPath(*cssFileName) err = cssProvider.LoadFromPath(*cssFileName)

View File

@@ -131,17 +131,6 @@ func cacheDir() string {
return "" 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) { func readTextFile(path string) (string, error) {
bytes, err := os.ReadFile(path) bytes, err := os.ReadFile(path)
if err != nil { if err != nil {
@@ -177,6 +166,20 @@ func configDir() string {
return dir 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) { func createDir(dir string) {
if _, err := os.Stat(dir); os.IsNotExist(err) { if _, err := os.Stat(dir); os.IsNotExist(err) {
err := os.MkdirAll(dir, os.ModePerm) err := os.MkdirAll(dir, os.ModePerm)
@@ -688,3 +691,19 @@ func mapOutputs() (map[string]*gdk.Monitor, error) {
} }
return result, nil 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:]
}

View File

@@ -58,9 +58,8 @@ func setUpPinnedFlowBox() *gtk.FlowBox {
name = entry.Name name = entry.Name
} }
if len(name) > 20 { if len(name) > 20 {
r := []rune(name) r := substring(name, 0, 17)
name = string(r[:17]) name = fmt.Sprintf("%s…", string(r))
name = fmt.Sprintf("%s…", name)
} }
btn.SetLabel(name) btn.SetLabel(name)
@@ -252,9 +251,8 @@ func flowBoxButton(entry desktopEntry) *gtk.Button {
button.SetImagePosition(gtk.POS_TOP) button.SetImagePosition(gtk.POS_TOP)
name := entry.NameLoc name := entry.NameLoc
if len(name) > 20 { if len(name) > 20 {
r := []rune(name[:17]) r := substring(name, 0, 17)
name = string(r) name = fmt.Sprintf("%s…", string(r))
name = fmt.Sprintf("%s…", name)
} }
button.SetLabel(name) button.SetLabel(name)
@@ -263,9 +261,8 @@ func flowBoxButton(entry desktopEntry) *gtk.Button {
terminal := entry.Terminal terminal := entry.Terminal
desc := entry.CommentLoc desc := entry.CommentLoc
if len(desc) > 120 { if len(desc) > 120 {
r := []rune(desc[:117]) r := substring(desc, 0, 117)
desc = string(r) desc = fmt.Sprintf("%s…", string(r))
desc = fmt.Sprintf("%s…", desc)
} }
button.Connect("button-release-event", func(btn *gtk.Button, e *gdk.Event) bool { button.Connect("button-release-event", func(btn *gtk.Button, e *gdk.Event) bool {
btnEvent := gdk.EventButtonNewFromEvent(e) btnEvent := gdk.EventButtonNewFromEvent(e)