23 Commits

Author SHA1 Message Date
piotr
98efb36614 bump version 2022-01-15 23:58:23 +01:00
Piotr Miller
59533536b1 Merge pull request #48 from nightly-brew/detach-from-process-group
Use Setsid when spawning programs
2022-01-15 03:58:52 +01:00
nightly-brew
07821f39b7 Use Setsid when starting the selected program to make sure it's not killed by signals sent to the drawer's process group. 2022-01-15 02:36:07 +01:00
piotr
4ea160e524 update README 2022-01-13 23:58:10 +01:00
Piotr Miller
8fb4209a97 Merge pull request #47 from nwg-piotr/not-wayland
remove bin
2022-01-13 23:46:57 +01:00
piotr
c85c364ba5 ignore bin 2022-01-13 23:42:42 +01:00
piotr
8239254485 remove bin #40 2022-01-13 23:42:31 +01:00
Piotr Miller
7681055a23 Merge pull request #46 from nwg-piotr/fix45
check if fileSearchResultWrapper exists #45
2022-01-12 11:17:56 +01:00
piotr
15c9029935 check if fileSearchResultWrapper exists #45 2022-01-12 11:06:05 +01:00
Piotr Miller
f67f1a9950 Merge pull request #43 from nwg-piotr/fix-pinned
create empty pinned file if not found on startup (and some other minor issues)
2022-01-11 14:41:39 +01:00
piotr
2c63e256ba update readme 2022-01-11 14:36:56 +01:00
piotr
92095d5b97 hide fileSearchResultWrapper initially 2022-01-11 12:31:47 +01:00
piotr
a6977d9444 create pinned file if not found 2022-01-11 11:45:05 +01:00
Piotr Miller
378aa33cf3 Merge pull request #42 from nwg-piotr/issue36
Close on RMB only #36
2022-01-10 23:55:16 +01:00
piotr
9d6d572f72 close on LMB only #36 2022-01-10 22:04:58 +01:00
piotr
8fdb174643 hot fix to #41 2022-01-09 23:20:48 +01:00
piotr
0810250b3a default temt -> foot; consume Esc key event 2022-01-09 14:30:59 +01:00
piotr
6e76f49729 fix #38 @nightly-brew 2022-01-09 12:56:51 +01:00
Piotr Miller
94c94b8b1e Merge pull request #35 from nwg-piotr/term
support for the foot terminal
2021-11-29 00:47:33 +01:00
piotr
3d6f3e6e3c support foot terminal 2021-11-21 21:45:10 +01:00
piotr
2e305e6e52 bump to 0.2.1 2021-10-01 00:40:27 +02:00
Piotr Miller
0b28592f0f Merge pull request #32 from nwg-piotr/fix31
Hide resident window on SIGUSR1 if visible
2021-10-01 00:03:39 +02:00
piotr
8daf645e3b close resident on SIGUSR1 if visible #31 2021-09-30 12:33:39 +02:00
6 changed files with 49 additions and 15 deletions

3
.gitignore vendored
View File

@@ -11,5 +11,8 @@
# Output of the go coverage tool, specifically when used with LiteIDE # Output of the go coverage tool, specifically when used with LiteIDE
*.out *.out
# Binaries built with make
bin
# Dependency directories (remove the comment below to include it) # Dependency directories (remove the comment below to include it)
# vendor/ # vendor/

View File

@@ -21,10 +21,12 @@ and `nwggrid`.
[![Packaging status](https://repology.org/badge/vertical-allrepos/nwg-drawer.svg)](https://repology.org/project/nwg-drawer/versions) [![Packaging status](https://repology.org/badge/vertical-allrepos/nwg-drawer.svg)](https://repology.org/project/nwg-drawer/versions)
To close the window w/o running a program, you may use `Esc` key, or right-click the window next to the icons.
## v0.2.x note ## v0.2.x note
1. Placing config files in the nwg-panel config directory was a mistake, sorry. The 0.2.0 version migrates them to `~/.config/nwg-drawer`. 1. Placing config files in the nwg-panel config directory was a mistake, sorry. The 0.2.0 version migrates them to `~/.config/nwg-drawer`.
2. From now on you may run the program residently, which should speed it up. See "Running" below. 2. From now on you may run the program residently, which should speed it up (but also occupy some resources!). See "Running" below.
## Installation ## Installation
@@ -38,7 +40,7 @@ and `nwggrid`.
Optional (recommended): Optional (recommended):
- thunar - thunar
- alacritty - foot
You may use another file manager and terminal emulator (see command line arguments), but mentioned above have been You may use another file manager and terminal emulator (see command line arguments), but mentioned above have been
confirmed to work well with the program. Also see **Files** below. confirmed to work well with the program. Also see **Files** below.
@@ -50,9 +52,6 @@ confirmed to work well with the program. Also see **Files** below.
3. `make build` 3. `make build`
4. `sudo make install` 4. `sudo make install`
Building the gotk3 library takes quite a lot of time. If your machine is x86_64, you may skip steps 2-3, and
install the provided binary by executing step 4.
## Command line arguments ## Command line arguments
```text ```text

Binary file not shown.

27
main.go
View File

@@ -21,7 +21,7 @@ import (
"github.com/gotk3/gotk3/gtk" "github.com/gotk3/gotk3/gtk"
) )
const version = "0.2.0" const version = "0.2.7"
var ( var (
appDirs []string appDirs []string
@@ -126,7 +126,7 @@ var columnsNumber = flag.Uint("c", 6, "number of Columns")
var itemSpacing = flag.Uint("spacing", 20, "icon spacing") var itemSpacing = flag.Uint("spacing", 20, "icon spacing")
var lang = flag.String("lang", "", "force lang, e.g. \"en\", \"pl\"") var lang = flag.String("lang", "", "force lang, e.g. \"en\", \"pl\"")
var fileManager = flag.String("fm", "thunar", "File Manager") var fileManager = flag.String("fm", "thunar", "File Manager")
var term = flag.String("term", defaultStringIfBlank(os.Getenv("TERM"), "alacritty"), "Terminal emulator") var term = flag.String("term", defaultStringIfBlank(os.Getenv("TERM"), "foot"), "Terminal emulator")
var nameLimit = flag.Int("fslen", 80, "File Search name LENgth Limit") var nameLimit = flag.Int("fslen", 80, "File Search name LENgth Limit")
var noCats = flag.Bool("nocats", false, "Disable filtering by category") var noCats = flag.Bool("nocats", false, "Disable filtering by category")
var noFS = flag.Bool("nofs", false, "Disable file search") var noFS = flag.Bool("nofs", false, "Disable file search")
@@ -162,8 +162,13 @@ func main() {
if *resident { if *resident {
// As win.Show() called from inside a goroutine randomly crashes GTK, // As win.Show() called from inside a goroutine randomly crashes GTK,
// let's just set e helper variable here. We'll be checking it with glib.TimeoutAdd. // let's just set e helper variable here. We'll be checking it with glib.TimeoutAdd.
if !win.IsVisible() {
log.Debug("SIGUSR1 received, showing the window") log.Debug("SIGUSR1 received, showing the window")
showWindowTrigger = true showWindowTrigger = true
} else {
log.Debug("SIGUSR1 received, hiding the window")
restoreStateAndHide()
}
} else { } else {
log.Info("SIGUSR1 received, and I'm not resident, bye bye") log.Info("SIGUSR1 received, and I'm not resident, bye bye")
gtk.MainQuit() gtk.MainQuit()
@@ -246,6 +251,7 @@ func main() {
pinned, err = loadTextFile(pinnedFile) pinned, err = loadTextFile(pinnedFile)
if err != nil { if err != nil {
pinned = nil pinned = nil
savePinned()
} }
log.Info(fmt.Sprintf("Found %v pinned items", len(pinned))) log.Info(fmt.Sprintf("Found %v pinned items", len(pinned)))
@@ -344,10 +350,9 @@ func main() {
gtk.MainQuit() gtk.MainQuit()
}) })
win.Connect("key-press-event", func(window *gtk.Window, event *gdk.Event) bool { win.Connect("key-release-event", func(window *gtk.Window, event *gdk.Event) bool {
key := &gdk.EventKey{Event: event} key := &gdk.EventKey{Event: event}
switch key.KeyVal() { if key.KeyVal() == gdk.KEY_Escape {
case gdk.KEY_Escape:
s, _ := searchEntry.GetText() s, _ := searchEntry.GetText()
if s != "" { if s != "" {
searchEntry.GrabFocus() searchEntry.GrabFocus()
@@ -359,7 +364,14 @@ func main() {
restoreStateAndHide() restoreStateAndHide()
} }
} }
return true
}
return false return false
})
win.Connect("key-press-event", func(window *gtk.Window, event *gdk.Event) bool {
key := &gdk.EventKey{Event: event}
switch key.KeyVal() {
case gdk.KEY_downarrow, gdk.KEY_Up, gdk.KEY_Down, gdk.KEY_Left, gdk.KEY_Right, gdk.KEY_Tab, case gdk.KEY_downarrow, gdk.KEY_Up, gdk.KEY_Down, gdk.KEY_Left, gdk.KEY_Right, gdk.KEY_Tab,
gdk.KEY_Return, gdk.KEY_Page_Up, gdk.KEY_Page_Down, gdk.KEY_Home, gdk.KEY_End: gdk.KEY_Return, gdk.KEY_Page_Up, gdk.KEY_Page_Down, gdk.KEY_Home, gdk.KEY_End:
return false return false
@@ -414,7 +426,7 @@ func main() {
resultWindow.Connect("button-release-event", func(sw *gtk.ScrolledWindow, e *gdk.Event) bool { resultWindow.Connect("button-release-event", func(sw *gtk.ScrolledWindow, e *gdk.Event) bool {
btnEvent := gdk.EventButtonNewFromEvent(e) btnEvent := gdk.EventButtonNewFromEvent(e)
if btnEvent.Button() == 1 || btnEvent.Button() == 3 { if btnEvent.Button() == 3 {
if !*resident { if !*resident {
gtk.MainQuit() gtk.MainQuit()
} else { } else {
@@ -483,6 +495,9 @@ func main() {
glib.TimeoutAdd(uint(1), func() bool { glib.TimeoutAdd(uint(1), func() bool {
if showWindowTrigger && win != nil && !win.IsVisible() { if showWindowTrigger && win != nil && !win.IsVisible() {
win.ShowAll() win.ShowAll()
if fileSearchResultWrapper != nil {
fileSearchResultWrapper.Hide()
}
// focus 1st element // focus 1st element
b := appFlowBox.GetChildAtIndex(0) b := appFlowBox.GetChildAtIndex(0)
if b != nil { if b != nil {

View File

@@ -15,6 +15,7 @@ import (
"regexp" "regexp"
"sort" "sort"
"strings" "strings"
"syscall"
"time" "time"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
@@ -559,7 +560,13 @@ func launch(command string, terminal bool) {
cmd := exec.Command(elements[cmdIdx], elements[1+cmdIdx:]...) cmd := exec.Command(elements[cmdIdx], elements[1+cmdIdx:]...)
if terminal { if terminal {
args := []string{"-e", elements[cmdIdx]} var args []string
if *term != "foot" {
args = []string{"-e", elements[cmdIdx]}
} else {
args = []string{elements[cmdIdx]}
}
cmd = exec.Command(*term, args...) cmd = exec.Command(*term, args...)
} }
@@ -572,6 +579,10 @@ func launch(command string, terminal bool) {
msg := fmt.Sprintf("env vars: %s; command: '%s'; args: %s\n", envVars, elements[cmdIdx], elements[1+cmdIdx:]) msg := fmt.Sprintf("env vars: %s; command: '%s'; args: %s\n", envVars, elements[cmdIdx], elements[1+cmdIdx:])
log.Info(msg) log.Info(msg)
cmd.SysProcAttr = &syscall.SysProcAttr {
Setsid: true,
}
cmd.Start() cmd.Start()
if *resident { if *resident {

View File

@@ -77,6 +77,9 @@ func setUpPinnedFlowBox() *gtk.FlowBox {
btn.Connect("enter-notify-event", func() { btn.Connect("enter-notify-event", func() {
statusLabel.SetText(entry.CommentLoc) statusLabel.SetText(entry.CommentLoc)
}) })
btn.Connect("focus-in-event", func() {
statusLabel.SetText(entry.CommentLoc)
})
flowBox.Add(btn) flowBox.Add(btn)
} }
pinnedFlowBoxWrapper.PackStart(flowBox, true, false, 0) pinnedFlowBoxWrapper.PackStart(flowBox, true, false, 0)
@@ -272,6 +275,9 @@ func flowBoxButton(entry desktopEntry) *gtk.Button {
button.Connect("enter-notify-event", func() { button.Connect("enter-notify-event", func() {
statusLabel.SetText(desc) statusLabel.SetText(desc)
}) })
button.Connect("focus-in-event", func() {
statusLabel.SetText(desc)
})
return button return button
} }