diff --git a/bin/nwg-drawer b/bin/nwg-drawer index c8722dd..0d5a8ab 100755 Binary files a/bin/nwg-drawer and b/bin/nwg-drawer differ diff --git a/main.go b/main.go index fbd3a41..8ca5e5a 100644 --- a/main.go +++ b/main.go @@ -90,6 +90,7 @@ var ( fileSearchResultWrapper *gtk.Box pinnedFlowBox *gtk.FlowBox pinnedFlowBoxWrapper *gtk.Box + categoriesWrapper *gtk.Box catButtons []*gtk.Button statusLabel *gtk.Label status string @@ -109,6 +110,8 @@ var lang = flag.String("lang", "", "force lang, e.g. \"en\", \"pl\"") var fileManager = flag.String("fm", "thunar", "File Manager") var term = flag.String("term", "alacritty", "Terminal emulator") var nameLimit = flag.Int("fslen", 80, "File Search name length Limit") +var noCats = flag.Bool("nocats", false, "Disable filtering by category") +var noFS = flag.Bool("nofs", false, "Disable file search") func main() { timeStart := time.Now() @@ -240,6 +243,15 @@ func main() { gtk.MainQuit() }) + win.Connect("button-release-event", func(sw *gtk.Window, e *gdk.Event) bool { + btnEvent := gdk.EventButtonNewFromEvent(e) + if btnEvent.Button() == 1 || btnEvent.Button() == 3 { + gtk.MainQuit() + return true + } + return false + }) + win.Connect("key-press-event", func(window *gtk.Window, event *gdk.Event) bool { key := &gdk.EventKey{Event: event} switch key.KeyVal() { @@ -254,7 +266,6 @@ func main() { return false 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: - //searchEntry.SetText("") return false default: @@ -299,10 +310,12 @@ func main() { searchEntry.SetMaxWidthChars(30) searchBoxWrapper.PackStart(searchEntry, true, false, 0) - categoriesWrapper, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0) - categoriesButtonBox := setUpCategoriesButtonBox() - categoriesWrapper.PackStart(categoriesButtonBox, true, false, 0) - outerVBox.PackStart(categoriesWrapper, false, false, 0) + if !*noCats { + categoriesWrapper, _ = gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0) + categoriesButtonBox := setUpCategoriesButtonBox() + categoriesWrapper.PackStart(categoriesButtonBox, true, false, 0) + outerVBox.PackStart(categoriesWrapper, false, false, 0) + } pinnedWrapper, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0) outerVBox.PackStart(pinnedWrapper, false, false, 0) @@ -312,10 +325,19 @@ func main() { pinnedFlowBox = setUpPinnedFlowBox() resultWindow, _ = gtk.ScrolledWindowNew(nil, nil) + resultWindow.SetEvents(int(gdk.ALL_EVENTS_MASK)) resultWindow.SetPolicy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) resultWindow.Connect("enter-notify-event", func() { cancelClose() }) + resultWindow.Connect("button-release-event", func(sw *gtk.ScrolledWindow, e *gdk.Event) bool { + btnEvent := gdk.EventButtonNewFromEvent(e) + if btnEvent.Button() == 1 || btnEvent.Button() == 3 { + gtk.MainQuit() + return true + } + return false + }) outerVBox.PackStart(resultWindow, true, true, 10) resultsWrapper, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 0) @@ -342,11 +364,13 @@ func main() { resultsWrapper.PackStart(placeholder, true, true, 0) placeholder.SetSizeRequest(20, 20) - wrapper, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0) - fileSearchResultWrapper, _ = gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0) - fileSearchResultWrapper.SetProperty("name", "files-box") - wrapper.PackStart(fileSearchResultWrapper, true, false, 0) - resultsWrapper.PackEnd(wrapper, false, false, 10) + if !*noFS { + wrapper, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0) + fileSearchResultWrapper, _ = gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0) + fileSearchResultWrapper.SetProperty("name", "files-box") + wrapper.PackStart(fileSearchResultWrapper, true, false, 0) + resultsWrapper.PackEnd(wrapper, false, false, 10) + } statusLineWrapper, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0) outerVBox.PackStart(statusLineWrapper, false, false, 10) @@ -354,9 +378,13 @@ func main() { statusLineWrapper.PackStart(statusLabel, true, false, 0) win.ShowAll() - fileSearchResultWrapper.SetSizeRequest(appFlowBox.GetAllocatedWidth(), 1) - categoriesWrapper.SetSizeRequest(1, categoriesWrapper.GetAllocatedHeight()*2) - fileSearchResultWrapper.Hide() + if !*noFS { + fileSearchResultWrapper.SetSizeRequest(appFlowBox.GetAllocatedWidth(), 1) + fileSearchResultWrapper.Hide() + } + if !*noCats { + categoriesWrapper.SetSizeRequest(1, categoriesWrapper.GetAllocatedHeight()*2) + } t := time.Now() println(fmt.Sprintf("UI created in %v ms. Thank you for your patience.", t.Sub(timeStart).Milliseconds())) diff --git a/tools.go b/tools.go index c0d8083..10b7a12 100644 --- a/tools.go +++ b/tools.go @@ -583,17 +583,19 @@ func launch(command string, terminal bool) { envVarsNum := strings.Count(command, "=") var envVars []string - cmdIdx := 0 - lastEnvVarIdx := 0 + cmdIdx := -1 if envVarsNum > 0 { for idx, item := range elements { if strings.Contains(item, "=") { - lastEnvVarIdx = idx envVars = append(envVars, item) + } else if !strings.HasPrefix(item, "-") && cmdIdx == -1 { + cmdIdx = idx } } - cmdIdx = lastEnvVarIdx + 1 + } + if cmdIdx == -1 { + cmdIdx = 0 } cmd := exec.Command(elements[cmdIdx], elements[1+cmdIdx:]...) diff --git a/uicomponents.go b/uicomponents.go index 2c24b51..d366a45 100644 --- a/uicomponents.go +++ b/uicomponents.go @@ -319,13 +319,17 @@ func setUpSearchEntry() *gtk.SearchEntry { phrase, _ = searchEntry.GetText() if len(phrase) > 0 { + // search apps appFlowBox = setUpAppsFlowBox(nil, phrase) - if len(phrase) > 2 { + // search files + if !*noFS && len(phrase) > 2 { if fileSearchResultFlowBox != nil { fileSearchResultFlowBox.Destroy() } + fileSearchResultFlowBox = setUpFileSearchResultContainer() + for key := range userDirsMap { if key != "home" { fileSearchResults = nil @@ -337,17 +341,25 @@ func setUpSearchEntry() *gtk.SearchEntry { statusLabel.SetText("0 results") } } else { + // search phrase too short if fileSearchResultFlowBox != nil { fileSearchResultFlowBox.Destroy() } - fileSearchResultWrapper.Hide() + if fileSearchResultWrapper != nil { + fileSearchResultWrapper.Hide() + } } } else { + // clear search results + appFlowBox = setUpAppsFlowBox(nil, "") + if fileSearchResultFlowBox != nil { fileSearchResultFlowBox.Destroy() } - appFlowBox = setUpAppsFlowBox(nil, "") - fileSearchResultWrapper.Hide() + + if fileSearchResultWrapper != nil { + fileSearchResultWrapper.Hide() + } } }) searchEntry.Connect("focus-in-event", func() {