diff --git a/cmd/linux.go b/cmd/linux.go index 8c710a64b..902a75b46 100644 --- a/cmd/linux.go +++ b/cmd/linux.go @@ -71,8 +71,11 @@ const ( Crux // RHEL distribution RHEL + // NixOS distribution + NixOS // Artix linux distribution ArtixLinux + ) // DistroInfo contains all the information relating to a linux distribution @@ -185,6 +188,8 @@ func parseOsRelease(osRelease string) *DistroInfo { result.Distribution = EndeavourOS case "crux": result.Distribution = Crux + case "nixos": + result.Distribution = NixOS case "artix": result.Distribution = ArtixLinux default: @@ -278,6 +283,18 @@ func PrtGetInstalled(packageName string) (bool, error) { return exitCode == 0, nil } +// NixEnvInstalled uses nix-env to see if a package is installed +func NixEnvInstalled(packageName string) (bool, error) { + program := NewProgramHelper() + nixEnv := program.FindProgram("nix-env") + if nixEnv == nil { + return false, fmt.Errorf("cannot check dependencies: nix-env not found") + } + packageName = strings.ReplaceAll(packageName, "+", `\+`) + _, _, exitCode, _ := nixEnv.Run("-q", packageName) + return exitCode == 0, nil +} + // RequestSupportForDistribution promts the user to submit a request to support their // currently unsupported distribution func RequestSupportForDistribution(distroInfo *DistroInfo) error { diff --git a/cmd/linuxdb.yaml b/cmd/linuxdb.yaml index c2b3ef34d..64628a5ea 100644 --- a/cmd/linuxdb.yaml +++ b/cmd/linuxdb.yaml @@ -354,3 +354,22 @@ distributions: help: Please install with `sudo prt-get depinst gtk3` and try again - name: webkitgtk help: Please install with `sudo prt-get depinst webkitgtk` and try again + nixos: + id: nixos + releases: + default: + version: default + name: NixOS + gccversioncommand: *gccdumpversion + programs: + - name: gcc + help: Please install with `nix-env -iA nixos.gcc` + - name: pkg-config + help: Please install with `nix-env -iA nixos.pkg-config` + - name: npm + help: Please install with `nix-env -iA nixos.nodejs` + libraries: + - name: gtk+3 + help: Please install with `nix-env -iA nixos.gtk3` + - name: webkitgtk + help: Please install with `nix-env -iA nixos.nodePackages.webkitgtk` diff --git a/cmd/system.go b/cmd/system.go index 56d17242a..49e4f760f 100644 --- a/cmd/system.go +++ b/cmd/system.go @@ -293,6 +293,8 @@ func CheckDependencies(logger *Logger) (bool, error) { libraryChecker = EOpkgInstalled case Crux: libraryChecker = PrtGetInstalled + case NixOS: + libraryChecker = NixEnvInstalled default: return false, RequestSupportForDistribution(distroInfo) } diff --git a/cmd/version.go b/cmd/version.go index 8fd3ec204..892ffa5a0 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -1,4 +1,4 @@ package cmd // Version - Wails version -const Version = "v1.16.5" +const Version = "v1.16.7" diff --git a/cmd/wails/2_init.go b/cmd/wails/2_init.go index 06289c6cd..eac708fde 100644 --- a/cmd/wails/2_init.go +++ b/cmd/wails/2_init.go @@ -15,6 +15,7 @@ func init() { projectOptions := projectHelper.NewProjectOptions() commandDescription := `Generates a new Wails project using the given flags. Any flags that are required and not given will be prompted for.` + build := false initCommand := app.Command("init", "Initialises a new Wails project"). LongDescription(commandDescription). @@ -23,7 +24,8 @@ Any flags that are required and not given will be prompted for.` StringFlag("template", "Template name", &projectOptions.Template). StringFlag("name", "Project name", &projectOptions.Name). StringFlag("description", "Project description", &projectOptions.Description). - StringFlag("output", "Output binary name", &projectOptions.BinaryName) + StringFlag("output", "Output binary name", &projectOptions.BinaryName). + BoolFlag("build", "Build project after generating", &build) initCommand.Action(func() error { @@ -64,6 +66,10 @@ Any flags that are required and not given will be prompted for.` return err } genSpinner.Success() + if !build { + logger.Yellow("Project '%s' initialised. Run `wails build` to build it.", projectOptions.Name) + return nil + } // Build the project cwd, _ := os.Getwd() diff --git a/lib/renderer/webview/webview.h b/lib/renderer/webview/webview.h index 53b6c9ced..2fb3b62d3 100644 --- a/lib/renderer/webview/webview.h +++ b/lib/renderer/webview/webview.h @@ -54,7 +54,7 @@ extern "C" int ready; int js_busy; int should_exit; - + int min_width; int min_height; int max_width; @@ -179,7 +179,7 @@ struct webview_priv WEBVIEW_API int webview_inject_css(struct webview *w, const char *css); WEBVIEW_API void webview_set_title(struct webview *w, const char *title); WEBVIEW_API void webview_focus(struct webview *w); - WEBVIEW_API void webview_minsize(struct webview *w, int width, int height); + WEBVIEW_API void webview_minsize(struct webview *w, int width, int height); WEBVIEW_API void webview_maxsize(struct webview *w, int width, int height); WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen); WEBVIEW_API void webview_set_color(struct webview *w, uint8_t r, uint8_t g, @@ -342,12 +342,12 @@ struct webview_priv w->priv.should_exit = 0; w->priv.queue = g_async_queue_new(); w->priv.window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - + w->priv.min_width = -1; w->priv.min_height = -1; w->priv.max_width = -1; w->priv.max_height = -1; - + gtk_window_set_title(GTK_WINDOW(w->priv.window), w->title); if (w->resizable) @@ -421,13 +421,13 @@ struct webview_priv } WEBVIEW_API void webview_minsize(struct webview *w, int width, int height) { - + w->priv.min_width = width; w->priv.min_height = height; GdkGeometry hints; GdkWindowHints usedHints = (GdkWindowHints) GDK_HINT_MIN_SIZE; - + hints.min_width = w->priv.min_width; hints.min_height = w->priv.min_height; if (w->priv.max_width != -1) { @@ -435,18 +435,18 @@ struct webview_priv hints.max_height = w->priv.max_height; usedHints = (GdkWindowHints)(GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE); } - + gtk_window_set_geometry_hints(GTK_WINDOW(w->priv.window), w->priv.window, &hints, usedHints); } WEBVIEW_API void webview_maxsize(struct webview *w, int width, int height) { - + w->priv.max_width = width; w->priv.max_height = height; - + GdkGeometry hints; GdkWindowHints usedHints = (GdkWindowHints) GDK_HINT_MAX_SIZE; - + if (w->priv.min_width != -1) { hints.min_width = w->priv.min_width; hints.min_height = w->priv.min_height; @@ -454,7 +454,7 @@ struct webview_priv } hints.max_width = w->priv.max_width; hints.max_height = w->priv.max_height; - + gtk_window_set_geometry_hints(GTK_WINDOW(w->priv.window), w->priv.window, &hints, usedHints); } @@ -514,7 +514,6 @@ struct webview_priv } gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dlg), FALSE); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dlg), FALSE); - gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dlg), TRUE); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dlg), TRUE); gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER(dlg), TRUE); gint response = gtk_dialog_run(GTK_DIALOG(dlg)); @@ -1398,12 +1397,12 @@ struct webview_priv case WM_GETMINMAXINFO: { if (w != NULL) { - // get pixel density + // get pixel density HDC hDC = GetDC(NULL); double DPIScaleX = GetDeviceCaps(hDC, 88)/96.0; double DPIScaleY = GetDeviceCaps(hDC, 90)/96.0; ReleaseDC(NULL, hDC); - + RECT rcClient, rcWind; POINT ptDiff; GetClientRect(hwnd, &rcClient); @@ -1413,7 +1412,7 @@ struct webview_priv int heightExtra = (rcWind.bottom - rcWind.top) - rcClient.bottom; LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam; - + if (w->priv.min_width != -1) { lpMMI->ptMinTrackSize.x = w->priv.min_width * DPIScaleX + widthExtra; lpMMI->ptMinTrackSize.y = w->priv.min_height * DPIScaleY + heightExtra; @@ -1423,7 +1422,7 @@ struct webview_priv lpMMI->ptMaxTrackSize.y = w->priv.max_height * DPIScaleY + heightExtra; } } - + return 0; } case WM_DESTROY: @@ -2328,14 +2327,14 @@ struct webview_priv { [w->priv.window makeKeyWindow]; } - + WEBVIEW_API void webview_minsize(struct webview *w, int width, int height) { NSSize size; size.width = width; size.height = height; [w->priv.window setMinSize:size]; } - + WEBVIEW_API void webview_maxsize(struct webview *w, int width, int height) { NSSize size; size.width = width; @@ -2346,7 +2345,7 @@ struct webview_priv [button performSelectorOnMainThread:@selector(setEnabled:) withObject:NO waitUntilDone:NO]; } - + WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen) { int b = ((([w->priv.window styleMask] & NSWindowStyleMaskFullScreen) == @@ -2503,4 +2502,4 @@ struct webview_priv } #endif -#endif /* WEBVIEW_H */ \ No newline at end of file +#endif /* WEBVIEW_H */