Re: GNU G-Golf 0.8.0-rc6 available for testing

"pelzflorian (Florian Pelz)" <[email protected]>
Newsgroups gmane.lisp.guile.user
Message-ID <[email protected]>
David Pirotte <[email protected]> writes:
> I recommend you (and g-golf users) to carefully read at least the
> GObject tutorial and then the upstream doc entries of the objects,
> properties, functions, methods and virtual methods you are using in
> your own g-golf based app [1].

You are giving good recommendations.  My sequence

1. (make <gtk-application>)
2. use (gdk-display-get-default)
3. start the gtk-application

was just plain wrong.  In my last e-mail, I misinterpreted and thought
it worked in some cases, but in reality it never did.

In my C version, I had used gdk_display_get_default in a signal
connected to and run after GtkApplication::startup, which would have
been the right way to go.

If others use it for reference, attached is the version that follows the
conventions of the GtkApplication docs.


> [1] and also look at (and study from) the distributed examples g-golf
> provides, where that applies ... room for improvment(s) (constructive
> critics welcome), sure, but they are quite good i should say.

Your examples are good.  My app’s

(gtk-style-context-add-provider-for-display
 (gdk-display-get-default)
 provider
 100)))

looks less styley than G-Golf examples/gtk-4/css-basics.scm’s

(add-provider (get-style-context widget) provider #xFFFFFFFF)

But anyway.

Regards,
Florian
home-configuration.scm (text/plain, 10 KB)
;;; Copyright © 2023, 2024 Florian Pelz <[email protected]>
;;
;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; 
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.
;; 
;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
;; 
;; Dieses Programm ist Freie Software: Sie können es unter den Bedingungen
;; der GNU General Public License, wie von der Free Software Foundation,
;; Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren
;; veröffentlichten Version, weiter verteilen und/oder modifizieren.
;; 
;; Dieses Programm wird in der Hoffnung bereitgestellt, dass es nützlich sein wird, jedoch
;; OHNE JEDE GEWÄHR,; sogar ohne die implizite
;; Gewähr der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
;; Siehe die GNU General Public License für weitere Einzelheiten.
;; 
;; Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
;; Programm erhalten haben. Wenn nicht, siehe <https://www.gnu.org/licenses/>.

(use-modules (gnu home)
             (gnu home services)
             (gnu home services desktop)
             (gnu home services shells)
             (gnu home services sound)
             (gnu home services sway)
             (gnu packages)
             (gnu packages gtk)
             (gnu packages guile-xyz)
             (gnu services)
             (guix build-system glib-or-gtk)
             (guix gexp)
             (guix licenses)
             (guix packages)
             (guix transformations))

(home-environment
  (packages (specifications->packages (list "git")))
  (services
   (list (service home-bash-service-type)
         (service home-dbus-service-type) ;für VLC
         ;; (service home-pipewire-service-type)
         (service home-sway-service-type
           (sway-configuration
            (execs
             `(,(with-extensions
                 (list graphene gtk
                       ((options->transformation
                         '((with-commit . "guile-g-golf=v0.8.0-rc6")))
                        guile-g-golf))
                 #~(string-append
                    "guile "
                    #$(scheme-file "launcher.scm"
                       #~(begin
                           (eval-when (expand load eval)
                             (use-modules (oop goops))
                             (default-duplicate-binding-handler
                               '(merge-generics replace
                                 warn-override-core warn last))
                             (setenv "GI_TYPELIB_PATH"
                                     #$(file-append
                                        (directory-union
                                         "typelibs"
                                         (list gdk-pixbuf
                                               graphene gtk harfbuzz
                                               pango))
                                        "/lib/girepository-1.0"))
                             (use-modules (g-golf))
                             (g-irepository-require
                              "Gtk" #:version "4.0")
                             (for-each (lambda (name)
                                         (gi-import-by-name "Gtk" name))
                                       '("Application"
                                         "ApplicationWindow"
                                         "Builder"
                                         "CssProvider")))
                           (use-modules (sxml simple))
                           (define ui
                             '(interface
                               (requires (@ (version 4.0) (lib gtk)))
                               (object
                                (@ (id window) (class GtkApplicationWindow))
                                (child
                                 (object
                                  (@ (class GtkGrid))
                                  (property (@ (name row-homogeneous)) 1)
                                  (property (@ (name column-homogeneous)) 1)
                                  (child
                                   (object
                                    (@ (id btn-kodi) (class GtkButton))
                                    (property (@ (name label)) Kodi)
                                    (layout
                                     (property (@ (name column)) 0)
                                     (property (@ (name row)) 0))))
                                  (child
                                   (object
                                    (@ (id btn-halt) (class GtkButton))
                                    (property (@ (name label)) Halt)
                                    (layout
                                     (property (@ (name column)) 0)
                                     (property (@ (name row)) 1))))
                                  (child
                                   (object
                                    (@ (id btn-reboot) (class GtkButton))
                                    (property (@ (name label)) Reboot)
                                    (layout
                                     (property (@ (name column)) 1)
                                     (property (@ (name row)) 1))))
                                  (child
                                   (object
                                    (@ (id btn-mount) (class GtkButton))
                                    (property (@ (name label)) Mounten)
                                    (layout
                                     (property (@ (name column)) 1)
                                     (property (@ (name row)) 0)))))))))
                           (define provider
                             (make <gtk-css-provider>))
                           (define (mount-all)
                             (gtk-css-provider-load-from-string provider "\
.reddable label {
  background-color: red;
}
")
                             (unless (= 0 (system "\
sudo /run/privileged/bin/mount \
/dev/disk/by-id/usb-WD_Elements_25A3_574343374B31544434313530-0:0-part1 \
/media/WDElements/"))
                               (gtk-style-context-add-provider-for-display
                                (gdk-display-get-default)
                                provider
                                100)))
                           (define (activate app)
                             (let ((builder (make <gtk-builder>)))
                               (define (get str)
                                 (get-object builder str))
                               (add-from-string builder
                                                (with-output-to-string
                                                  (lambda ()
                                                    (sxml->xml ui)))
                                                -1)
                               (let ((window (get "window"))
                                     (btn-kodi (get "btn-kodi"))
                                     (btn-mount (get "btn-mount"))
                                     (btn-halt (get "btn-halt"))
                                     (btn-reboot (get "btn-reboot")))
                                 (connect btn-kodi 'clicked
                                          (lambda (b)
                                            (gtk-widget-hide window)
                                            (system
                                             (string-append "\
/var/guix/profiles/per-user/florian/current-guix/bin/guix \
shell --container --network --no-cwd flatpak \
--expose=/home/helle/.local/share/flatpak/ \
--share=/home/helle/you-kodi/.kodi=/home/helle/.var/app/tv.kodi.Kodi/data \
--expose=/sys \
--preserve='^DBUS_.*' \
--share=/media/WDElements --share=/media/fritznas \
--expose=/dev/dri --expose=" "/run/user/1001";(getenv "XDG_RUNTIME_DIR")
"/bus=/var/run/dbus/system_bus_socket --expose=/dev/dri --expose=/dev/snd \
--preserve='^DISPLAY$' -- flatpak run -v tv.kodi.Kodi --audio-backend=alsa"))
                                            (present window)))
                                 (connect btn-mount 'clicked
                                          (lambda (b)
                                            (mount-all)))
                                 (add-css-class btn-mount "reddable")
                                 (connect btn-halt 'clicked
                                          (lambda (b)
                                            (system "\
sudo /run/current-system/profile/sbin/halt")))
                                 (connect btn-reboot 'clicked
                                          (lambda (b)
                                            (system "\
sudo /run/current-system/profile/sbin/reboot")))
                                 (add-window app window)
                                 (present window))))
                           (let ((app (make <gtk-application>
                                        #:application-id "my.launcher")))
                             (connect app 'startup
                                      (lambda (app)
                                        (mount-all)))
                             (connect app 'activate activate)
                             (let ((status (g-application-run app '())))
                               (exit status status)))))
                    " 2>&1 | tee /home/helle/errors"))))))
         (simple-service 'gtk-config-service
                         home-xdg-configuration-files-service-type
                         `(("gtk-4.0/settings.ini" ,(mixed-text-file
                                                     "gtk-config"
                                                     "\
[Settings]
gtk-xft-dpi=500000
")))))))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.