diff --git a/FUNDING.yml b/FUNDING.yml index 8675e65..f4040c5 100644 --- a/FUNDING.yml +++ b/FUNDING.yml @@ -1 +1 @@ -custom: https://paypal.me/luigifab +custom: ["https://www.paypal.me/luigifab", "https://gandi.link/f/4b904048"] \ No newline at end of file diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index f963eff..0000000 --- a/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = src \ No newline at end of file diff --git a/debian-gtk2/changelog b/debian-gtk2/changelog deleted file mode 100644 index 2baca57..0000000 --- a/debian-gtk2/changelog +++ /dev/null @@ -1,5 +0,0 @@ -awf-gtk2 (2.0.0-2) UNRELEASED; urgency=low - - * Initial debian package release (Closes: #959434) - - -- Fabrice Creuzot Sat, 02 May 2020 10:33:59 +0000 diff --git a/debian-gtk3/changelog b/debian-gtk3/changelog deleted file mode 100644 index a22c9fc..0000000 --- a/debian-gtk3/changelog +++ /dev/null @@ -1,5 +0,0 @@ -awf-gtk3 (2.0.0-2) UNRELEASED; urgency=low - - * Initial debian package release (Closes: #959436) - - -- Fabrice Creuzot Sat, 02 May 2020 10:33:59 +0000 diff --git a/debian-gtk4/changelog b/debian-gtk4/changelog deleted file mode 100644 index ecfa7ed..0000000 --- a/debian-gtk4/changelog +++ /dev/null @@ -1,5 +0,0 @@ -awf-gtk4 (2.0.0-2) UNRELEASED; urgency=low - - * Initial debian package release (Closes: #959433) - - -- Fabrice Creuzot Sat, 02 May 2020 10:33:59 +0000 diff --git a/icons/scalable/apps/awf.svg b/icons/scalable/apps/awf.svg deleted file mode 100644 index 02e294a..0000000 --- a/icons/scalable/apps/awf.svg +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Makefile.am b/src/Makefile.am index a03b2d6..f963eff 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,22 +1 @@ -bin_PROGRAMS = - -if GTK4 -bin_PROGRAMS += awf-gtk@GTK4_SUFFIX@ -awf_gtk@GTK4_SUFFIX@_SOURCES = awf.c -awf_gtk@GTK4_SUFFIX@_CPPFLAGS = $(GTK4_CFLAGS) -I/usr/include/gtk-4.0/unix-print -awf_gtk@GTK4_SUFFIX@_LDADD = $(GTK4_LIBS) -endif - -if GTK3 -bin_PROGRAMS += awf-gtk@GTK3_SUFFIX@ -awf_gtk@GTK3_SUFFIX@_SOURCES = awf.c -awf_gtk@GTK3_SUFFIX@_CPPFLAGS = $(GTK3_CFLAGS) -I/usr/include/gtk-3.0/unix-print -awf_gtk@GTK3_SUFFIX@_LDADD = $(GTK3_LIBS) -endif - -if GTK2 -bin_PROGRAMS += awf-gtk@GTK2_SUFFIX@ -awf_gtk@GTK2_SUFFIX@_SOURCES = awf.c -awf_gtk@GTK2_SUFFIX@_CPPFLAGS = $(GTK2_CFLAGS) -I/usr/include/gtk-unix-print-2.0 -awf_gtk@GTK2_SUFFIX@_LDADD = $(GTK2_LIBS) -endif \ No newline at end of file +SUBDIRS = src \ No newline at end of file diff --git a/build.sh b/src/build.sh old mode 100755 new mode 100644 similarity index 90% rename from build.sh rename to src/build.sh index a3c9d15..f87389e --- a/build.sh +++ b/src/build.sh @@ -10,7 +10,7 @@ touch builder/ChangeLog touch builder/NEWS touch builder/AUTHORS touch builder/README -cp LICENSE builder/COPYING +cp /usr/share/common-licenses/GPL-3 builder/COPYING cp configure.ac builder/ cp Makefile.am builder/ cp src/Makefile.am builder/src/ diff --git a/configure.ac b/src/configure.ac similarity index 92% rename from configure.ac rename to src/configure.ac index 576d775..2822e6c 100644 --- a/configure.ac +++ b/src/configure.ac @@ -1,11 +1,10 @@ -AC_INIT([A widget factory], [2.0.0]) +AC_INIT([A widget factory], [2.1.0]) AC_CONFIG_SRCDIR([src/awf.c]) AM_INIT_AUTOMAKE AC_PROG_CC AM_PROG_CC_C_O -#AC_PROG_INSTALL PKG_CHECK_MODULES(GTK4, gtk4, GTK4_SUFFIX=4, GTK4_SUFFIX=0) AM_CONDITIONAL([GTK4], [test "$GTK4_SUFFIX" -eq 4]) diff --git a/debian-gtk2/awf-gtk2.desktop b/src/debian-gtk2/awf-gtk2.desktop old mode 100755 new mode 100644 similarity index 100% rename from debian-gtk2/awf-gtk2.desktop rename to src/debian-gtk2/awf-gtk2.desktop diff --git a/src/debian-gtk2/changelog b/src/debian-gtk2/changelog new file mode 100644 index 0000000..3e5debb --- /dev/null +++ b/src/debian-gtk2/changelog @@ -0,0 +1,12 @@ +awf-gtk2 (2.1.0-1) unstable; urgency=low + + * New upstream version + * Allow to change menu items keyboard shortcuts on hover (from gtk2.24 to gtk3.24) + + -- Fabrice Creuzot Tue, 07 Jul 2020 12:00:00 +0000 + +awf-gtk2 (2.0.0-3) unstable; urgency=low + + * Initial debian package release (Closes: #959434) + + -- Fabrice Creuzot Sat, 02 May 2020 10:33:59 +0000 diff --git a/debian-gtk2/control b/src/debian-gtk2/control similarity index 92% rename from debian-gtk2/control rename to src/debian-gtk2/control index c980987..14cac49 100644 --- a/debian-gtk2/control +++ b/src/debian-gtk2/control @@ -12,6 +12,8 @@ Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: A widget factory is a theme preview application for gtk2, +Description: A widget factory is a theme preview application for GTK It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. + . + This package include the gtk2 version. diff --git a/debian-gtk2/copyright b/src/debian-gtk2/copyright similarity index 100% rename from debian-gtk2/copyright rename to src/debian-gtk2/copyright diff --git a/debian-gtk2/deb.sh b/src/debian-gtk2/deb.sh old mode 100755 new mode 100644 similarity index 84% rename from debian-gtk2/deb.sh rename to src/debian-gtk2/deb.sh index a33b5fc..5400384 --- a/debian-gtk2/deb.sh +++ b/src/debian-gtk2/deb.sh @@ -1,7 +1,7 @@ #!/bin/bash gtk="gtk2" -version="2.0.0" +version="2.1.0" cd debian-${gtk}/ rm -rf builder/ @@ -17,15 +17,14 @@ cp -r ../src builder/awf-${gtk}-${version}/ cp awf-${gtk}.desktop builder/awf-${gtk}-${version}/ cp ../Makefile.am builder/awf-${gtk}-${version}/ cp ../configure.ac builder/awf-${gtk}-${version}/ -cp ../LICENSE builder/awf-${gtk}-${version}/COPYING +cp /usr/share/common-licenses/GPL-3 builder/awf-${gtk}-${version}/COPYING sed -i 's/ -eq 3/ -eq -1/g' builder/awf-${gtk}-${version}/configure.ac sed -i 's/ -eq 4/ -eq -1/g' builder/awf-${gtk}-${version}/configure.ac for file in builder/awf-${gtk}-${version}/icons/*/*/*; do mv $file ${file/\/awf./\/awf-${gtk}.}; done -for file in builder/awf-${gtk}-${version}/src/*.po; do +for file in builder/awf-${gtk}-${version}/src/po/*.po; do lang=$(basename "$file" .po) - lang=${lang/trad-/} mkdir -p builder/awf-${gtk}-${version}/locale/${lang}/LC_MESSAGES - msgfmt builder/awf-${gtk}-${version}/src/trad-${lang}.po -o builder/awf-${gtk}-${version}/locale/${lang}/LC_MESSAGES/awf-${gtk}.mo + msgfmt builder/awf-${gtk}-${version}/src/po/${lang}.po -o builder/awf-${gtk}-${version}/locale/${lang}/LC_MESSAGES/awf-${gtk}.mo done cd builder/ diff --git a/debian-gtk2/install b/src/debian-gtk2/install similarity index 100% rename from debian-gtk2/install rename to src/debian-gtk2/install diff --git a/debian-gtk2/lintian b/src/debian-gtk2/lintian similarity index 100% rename from debian-gtk2/lintian rename to src/debian-gtk2/lintian diff --git a/debian-gtk2/rules b/src/debian-gtk2/rules similarity index 100% rename from debian-gtk2/rules rename to src/debian-gtk2/rules diff --git a/debian-gtk2/upstream b/src/debian-gtk2/upstream similarity index 100% rename from debian-gtk2/upstream rename to src/debian-gtk2/upstream diff --git a/debian-gtk2/watch b/src/debian-gtk2/watch similarity index 100% rename from debian-gtk2/watch rename to src/debian-gtk2/watch diff --git a/debian-gtk3/awf-gtk3.desktop b/src/debian-gtk3/awf-gtk3.desktop old mode 100755 new mode 100644 similarity index 100% rename from debian-gtk3/awf-gtk3.desktop rename to src/debian-gtk3/awf-gtk3.desktop diff --git a/src/debian-gtk3/changelog b/src/debian-gtk3/changelog new file mode 100644 index 0000000..fddcd41 --- /dev/null +++ b/src/debian-gtk3/changelog @@ -0,0 +1,12 @@ +awf-gtk3 (2.1.0-1) unstable; urgency=low + + * New upstream version + * Allow to change menu items keyboard shortcuts on hover (from gtk2.24 to gtk3.24) + + -- Fabrice Creuzot Tue, 07 Jul 2020 12:00:00 +0000 + +awf-gtk3 (2.0.0-3) unstable; urgency=low + + * Initial debian package release (Closes: #959436) + + -- Fabrice Creuzot Sat, 02 May 2020 10:33:59 +0000 diff --git a/debian-gtk3/control b/src/debian-gtk3/control similarity index 92% rename from debian-gtk3/control rename to src/debian-gtk3/control index 078c3fc..e80d8d5 100644 --- a/debian-gtk3/control +++ b/src/debian-gtk3/control @@ -12,6 +12,8 @@ Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: A widget factory is a theme preview application for gtk3, +Description: A widget factory is a theme preview application for GTK It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. + . + This package include the gtk3 version. diff --git a/debian-gtk3/copyright b/src/debian-gtk3/copyright similarity index 100% rename from debian-gtk3/copyright rename to src/debian-gtk3/copyright diff --git a/debian-gtk3/deb.sh b/src/debian-gtk3/deb.sh old mode 100755 new mode 100644 similarity index 84% rename from debian-gtk3/deb.sh rename to src/debian-gtk3/deb.sh index bdd923e..29dc774 --- a/debian-gtk3/deb.sh +++ b/src/debian-gtk3/deb.sh @@ -1,7 +1,7 @@ #!/bin/bash gtk="gtk3" -version="2.0.0" +version="2.1.0" cd debian-${gtk}/ rm -rf builder/ @@ -17,15 +17,14 @@ cp -r ../src builder/awf-${gtk}-${version}/ cp awf-${gtk}.desktop builder/awf-${gtk}-${version}/ cp ../Makefile.am builder/awf-${gtk}-${version}/ cp ../configure.ac builder/awf-${gtk}-${version}/ -cp ../LICENSE builder/awf-${gtk}-${version}/COPYING +cp /usr/share/common-licenses/GPL-3 builder/awf-${gtk}-${version}/COPYING sed -i 's/ -eq 2/ -eq -1/g' builder/awf-${gtk}-${version}/configure.ac sed -i 's/ -eq 4/ -eq -1/g' builder/awf-${gtk}-${version}/configure.ac for file in builder/awf-${gtk}-${version}/icons/*/*/*; do mv $file ${file/\/awf./\/awf-${gtk}.}; done -for file in builder/awf-${gtk}-${version}/src/*.po; do +for file in builder/awf-${gtk}-${version}/src/po/*.po; do lang=$(basename "$file" .po) - lang=${lang/trad-/} mkdir -p builder/awf-${gtk}-${version}/locale/${lang}/LC_MESSAGES - msgfmt builder/awf-${gtk}-${version}/src/trad-${lang}.po -o builder/awf-${gtk}-${version}/locale/${lang}/LC_MESSAGES/awf-${gtk}.mo + msgfmt builder/awf-${gtk}-${version}/src/po/${lang}.po -o builder/awf-${gtk}-${version}/locale/${lang}/LC_MESSAGES/awf-${gtk}.mo done cd builder/ diff --git a/debian-gtk3/install b/src/debian-gtk3/install similarity index 100% rename from debian-gtk3/install rename to src/debian-gtk3/install diff --git a/debian-gtk3/lintian b/src/debian-gtk3/lintian similarity index 100% rename from debian-gtk3/lintian rename to src/debian-gtk3/lintian diff --git a/debian-gtk3/rules b/src/debian-gtk3/rules similarity index 100% rename from debian-gtk3/rules rename to src/debian-gtk3/rules diff --git a/debian-gtk3/upstream b/src/debian-gtk3/upstream similarity index 100% rename from debian-gtk3/upstream rename to src/debian-gtk3/upstream diff --git a/debian-gtk3/watch b/src/debian-gtk3/watch similarity index 100% rename from debian-gtk3/watch rename to src/debian-gtk3/watch diff --git a/debian-gtk4/awf-gtk4.desktop b/src/debian-gtk4/awf-gtk4.desktop old mode 100755 new mode 100644 similarity index 100% rename from debian-gtk4/awf-gtk4.desktop rename to src/debian-gtk4/awf-gtk4.desktop diff --git a/src/debian-gtk4/changelog b/src/debian-gtk4/changelog new file mode 100644 index 0000000..beb4e6f --- /dev/null +++ b/src/debian-gtk4/changelog @@ -0,0 +1,12 @@ +awf-gtk4 (2.1.0-1) experimental; urgency=low + + * New upstream version + * Allow to change menu items keyboard shortcuts on hover (from gtk2.24 to gtk3.24) + + -- Fabrice Creuzot Tue, 07 Jul 2020 12:00:00 +0000 + +awf-gtk4 (2.0.0-3) experimental; urgency=low + + * Initial debian package release (Closes: #959433) + + -- Fabrice Creuzot Sat, 02 May 2020 10:33:59 +0000 diff --git a/debian-gtk4/control b/src/debian-gtk4/control similarity index 92% rename from debian-gtk4/control rename to src/debian-gtk4/control index 1476d49..9397969 100644 --- a/debian-gtk4/control +++ b/src/debian-gtk4/control @@ -12,6 +12,8 @@ Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: A widget factory is a theme preview application for gtk4, +Description: A widget factory is a theme preview application for GTK It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. + . + This package include the gtk4 version. diff --git a/debian-gtk4/copyright b/src/debian-gtk4/copyright similarity index 100% rename from debian-gtk4/copyright rename to src/debian-gtk4/copyright diff --git a/debian-gtk4/deb.sh b/src/debian-gtk4/deb.sh old mode 100755 new mode 100644 similarity index 84% rename from debian-gtk4/deb.sh rename to src/debian-gtk4/deb.sh index 83973cd..b66029c --- a/debian-gtk4/deb.sh +++ b/src/debian-gtk4/deb.sh @@ -1,7 +1,7 @@ #!/bin/bash gtk="gtk4" -version="2.0.0" +version="2.1.0" cd debian-${gtk}/ rm -rf builder/ @@ -17,15 +17,14 @@ cp -r ../src builder/awf-${gtk}-${version}/ cp awf-${gtk}.desktop builder/awf-${gtk}-${version}/ cp ../Makefile.am builder/awf-${gtk}-${version}/ cp ../configure.ac builder/awf-${gtk}-${version}/ -cp ../LICENSE builder/awf-${gtk}-${version}/COPYING +cp /usr/share/common-licenses/GPL-3 builder/awf-${gtk}-${version}/COPYING sed -i 's/ -eq 2/ -eq -1/g' builder/awf-${gtk}-${version}/configure.ac sed -i 's/ -eq 3/ -eq -1/g' builder/awf-${gtk}-${version}/configure.ac for file in builder/awf-${gtk}-${version}/icons/*/*/*; do mv $file ${file/\/awf./\/awf-${gtk}.}; done -for file in builder/awf-${gtk}-${version}/src/*.po; do +for file in builder/awf-${gtk}-${version}/src/po/*.po; do lang=$(basename "$file" .po) - lang=${lang/trad-/} mkdir -p builder/awf-${gtk}-${version}/locale/${lang}/LC_MESSAGES - msgfmt builder/awf-${gtk}-${version}/src/trad-${lang}.po -o builder/awf-${gtk}-${version}/locale/${lang}/LC_MESSAGES/awf-${gtk}.mo + msgfmt builder/awf-${gtk}-${version}/src/po/${lang}.po -o builder/awf-${gtk}-${version}/locale/${lang}/LC_MESSAGES/awf-${gtk}.mo done cd builder/ diff --git a/debian-gtk4/install b/src/debian-gtk4/install similarity index 100% rename from debian-gtk4/install rename to src/debian-gtk4/install diff --git a/debian-gtk4/lintian b/src/debian-gtk4/lintian similarity index 100% rename from debian-gtk4/lintian rename to src/debian-gtk4/lintian diff --git a/debian-gtk4/rules b/src/debian-gtk4/rules similarity index 100% rename from debian-gtk4/rules rename to src/debian-gtk4/rules diff --git a/debian-gtk4/upstream b/src/debian-gtk4/upstream similarity index 100% rename from debian-gtk4/upstream rename to src/debian-gtk4/upstream diff --git a/debian-gtk4/watch b/src/debian-gtk4/watch similarity index 100% rename from debian-gtk4/watch rename to src/debian-gtk4/watch diff --git a/icons/128x128/apps/awf.png b/src/icons/128x128/apps/awf.png similarity index 100% rename from icons/128x128/apps/awf.png rename to src/icons/128x128/apps/awf.png diff --git a/icons/16x16/apps/awf.png b/src/icons/16x16/apps/awf.png similarity index 100% rename from icons/16x16/apps/awf.png rename to src/icons/16x16/apps/awf.png diff --git a/icons/22x22/apps/awf.png b/src/icons/22x22/apps/awf.png similarity index 100% rename from icons/22x22/apps/awf.png rename to src/icons/22x22/apps/awf.png diff --git a/icons/24x24/apps/awf.png b/src/icons/24x24/apps/awf.png similarity index 100% rename from icons/24x24/apps/awf.png rename to src/icons/24x24/apps/awf.png diff --git a/icons/32x32/apps/awf.png b/src/icons/32x32/apps/awf.png similarity index 100% rename from icons/32x32/apps/awf.png rename to src/icons/32x32/apps/awf.png diff --git a/icons/48x48/apps/awf.png b/src/icons/48x48/apps/awf.png similarity index 100% rename from icons/48x48/apps/awf.png rename to src/icons/48x48/apps/awf.png diff --git a/icons/64x64/apps/awf.png b/src/icons/64x64/apps/awf.png similarity index 100% rename from icons/64x64/apps/awf.png rename to src/icons/64x64/apps/awf.png diff --git a/src/icons/scalable/apps/awf.svg b/src/icons/scalable/apps/awf.svg new file mode 100644 index 0000000..d751335 --- /dev/null +++ b/src/icons/scalable/apps/awf.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/src/Makefile.am b/src/src/Makefile.am new file mode 100644 index 0000000..a03b2d6 --- /dev/null +++ b/src/src/Makefile.am @@ -0,0 +1,22 @@ +bin_PROGRAMS = + +if GTK4 +bin_PROGRAMS += awf-gtk@GTK4_SUFFIX@ +awf_gtk@GTK4_SUFFIX@_SOURCES = awf.c +awf_gtk@GTK4_SUFFIX@_CPPFLAGS = $(GTK4_CFLAGS) -I/usr/include/gtk-4.0/unix-print +awf_gtk@GTK4_SUFFIX@_LDADD = $(GTK4_LIBS) +endif + +if GTK3 +bin_PROGRAMS += awf-gtk@GTK3_SUFFIX@ +awf_gtk@GTK3_SUFFIX@_SOURCES = awf.c +awf_gtk@GTK3_SUFFIX@_CPPFLAGS = $(GTK3_CFLAGS) -I/usr/include/gtk-3.0/unix-print +awf_gtk@GTK3_SUFFIX@_LDADD = $(GTK3_LIBS) +endif + +if GTK2 +bin_PROGRAMS += awf-gtk@GTK2_SUFFIX@ +awf_gtk@GTK2_SUFFIX@_SOURCES = awf.c +awf_gtk@GTK2_SUFFIX@_CPPFLAGS = $(GTK2_CFLAGS) -I/usr/include/gtk-unix-print-2.0 +awf_gtk@GTK2_SUFFIX@_LDADD = $(GTK2_LIBS) +endif \ No newline at end of file diff --git a/src/awf.c b/src/src/awf.c similarity index 84% rename from src/awf.c rename to src/src/awf.c index 177e083..ef40fa8 100644 --- a/src/awf.c +++ b/src/src/awf.c @@ -1,4 +1,7 @@ /** + * Forked M/10/03/2020 + * Updated L/22/06/2020 + * * Copyright 2020 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf * @@ -20,12 +23,11 @@ * merchantability or fitness for a particular purpose. See the * GNU General Public License (GPL) for more details. * - * --- * * Translations update: * xgettext -d awf -o src/awf.pot -k_ -s src/awf.c - * msgmerge src/trans-fr.po src/awf.pot -o src/trans-fr.po - * msgfmt src/trans-fr.po -o src/fr/LC_MESSAGES/awf.mo + * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po + * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * GTK versions tested: * Ubuntu 11.04 (live/768 MB) GTK 3.0 + GTK 2.24 + GLIB 2.28 @@ -33,7 +35,7 @@ * Ubuntu 12.04 (live/1024 MB) GTK 3.4 + GTK 2.24 + GLIB 2.32 * Ubuntu 13.04 (live/1024 MB) GTK 3.6 + GTK 2.24 + GLIB 2.36 * Ubuntu 13.10 (live/1024 MB) GTK 3.8 + GTK 2.24 + GLIB 2.38 - * Ubuntu 14.04 (live/1024 MB) GTK 3.10 + * Ubuntu 14.04 (live/1024 MB) GTK 3.10 + GTK 2.24 + GLIB 2.40 * Ubuntu 14.10 (live/1024 MB) GTK 3.12 * Ubuntu 15.04 (live/1024 MB) GTK 3.14 * Ubuntu 15.10 (live/1024 MB) GTK 3.16 @@ -59,6 +61,20 @@ // defines #define _(String) gettext (String) +#define AWF_OPEN "/Test/Open" +#define AWF_RECE "/Test/Recent" +#define AWF_CALE "/Test/Calendar" +#define AWF_SAVE "/Test/Save" +#define AWF_REFR "/Test/Refresh" +#define AWF_PROP "/Test/Properties" +#define AWF_PRSE "/Test/PrintSetup" +#define AWF_PRIN "/Test/Print" +#define AWF_ABOU "/Test/About" +#define AWF_MCUT "/Test/More/Cut" +#define AWF_MCOP "/Test/More/Copy" +#define AWF_MPAS "/Test/More/Past" +#define AWF_CLOS "/Test/Close" +#define AWF_QUIT "/Test/Quit" #if GTK_CHECK_VERSION (3,98,0) #define TRUE_GTK_MAJOR_VERSION 4 @@ -66,14 +82,18 @@ #define gtk_major_version gtk_get_major_version () #define gtk_minor_version gtk_get_minor_version () #define gtk_micro_version gtk_get_micro_version () + #define BOXH (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)) + #define BOXV (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0)) + #define BOXHSEP (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)) + #define BOXVSEP (gtk_separator_new (GTK_ORIENTATION_VERTICAL)) + #define BOXHPANE (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL)) + #define BOXVPANE (gtk_paned_new (GTK_ORIENTATION_VERTICAL)) #elif GTK_CHECK_VERSION (3,0,0) #define TRUE_GTK_MAJOR_VERSION 3 #define GETTEXT_PACKAGE "awf-gtk3" #define gtk_major_version gtk_get_major_version () #define gtk_minor_version gtk_get_minor_version () #define gtk_micro_version gtk_get_micro_version () -#endif -#if GTK_CHECK_VERSION (3,0,0) #define BOXH (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)) #define BOXV (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0)) #define BOXHSEP (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)) @@ -89,6 +109,21 @@ #define BOXVSEP (gtk_vseparator_new ()) #define BOXHPANE (gtk_hpaned_new ()) #define BOXVPANE (gtk_vpaned_new ()) + #define GDK_KEY_F1 0xffbe + //#define GDK_KEY_F2 0xffbf + //#define GDK_KEY_F3 0xffc0 + //#define GDK_KEY_F4 0xffc1 + //#define GDK_KEY_F5 0xffc2 + //#define GDK_KEY_F6 0xffc3 + //#define GDK_KEY_F7 0xffc4 + //#define GDK_KEY_F8 0xffc5 + //#define GDK_KEY_F9 0xffc6 + //#define GDK_KEY_F10 0xffc7 + //#define GDK_KEY_F11 0xffc8 + #define GDK_KEY_F12 0xffc9 + #define GDK_KEY_Delete 0xffff + #define GDK_KEY_KP_Delete 0xff9f + #define GDK_KEY_BackSpace 0xff08 #endif // global local variables @@ -102,20 +137,23 @@ static GtkWidget *scale1, *scale2, *scale3, *scale4, *scale5, *scale6; static GtkWidget *progressbar1, *progressbar2, *progressbar3, *progressbar4; static GtkWidget *levelbar1, *levelbar2, *levelbar3, *levelbar4, *levelbar5, *levelbar6, *levelbar7, *levelbar8; static GtkWidget *notebook1, *notebook2, *notebook3, *notebook4; +static GtkWidget *current_menuitem; static gchar *opt_screenshot; static gboolean opt_startspinner = TRUE; static gboolean allow_update_theme = TRUE; +static gboolean must_save_accels = FALSE; // local functions +static void awf2_quit (); static GSList* awf_load_theme (gchar *directory); static void awf_exclude_theme (gpointer theme, gpointer unused); static gint awf_compare_theme (gconstpointer theme1, gconstpointer theme2); static void awf2_set_theme (gchar *new_theme); -static gboolean awf_sighup_handler (); -static void awf_update_progressbars (GtkRange *range); +static void awf2_update_progressbars (GtkRange *range); static void awf2_update_statusbar (gchar *text, gboolean withtime); static void awf2_update_widgets (); +static gboolean awf2_sighup_handler (); static gboolean awf2_take_screenshot (); // widgets static void awf2_create_window (gpointer app, gchar *theme); @@ -137,7 +175,6 @@ static void awf2_create_treview (GtkWidget *root); // menuitems #if GTK_CHECK_VERSION (3,98,0) static void awf2_create_menubar (GMenu *root); -static void awf2_gtk4_wrapper (GSimpleAction *simple, GVariant *parameter, gpointer user_data); #else static void awf2_create_menubar (GtkWidget *root); static GtkWidget* awf2_new_menu (GtkWidget *root, gchar *text); @@ -145,7 +182,13 @@ static GtkWidget* awf2_new_menu_tearoff (GtkWidget *menu); static GtkWidget* awf2_new_menu_separator (GtkWidget *menu); static GtkWidget* awf2_new_menu_check (GtkWidget *menu, gchar *text, gboolean checked, gboolean inconsistent, gboolean disabled); static GtkWidget* awf2_new_menu_radio (GtkWidget *menu, gchar *text, gboolean checked, gboolean inconsistent, gboolean disabled, GSList *group); -static GtkWidget* awf2_new_menu_item (GtkWidget *menu, gchar *text, gchar *accel, gchar *image, gboolean disabled); +static GtkWidget* awf2_new_menu_item (GtkWidget *menu, gchar *text, gchar *image, gboolean disabled); +// accelerators +static void awf2_accels_load (); +static void awf2_accels_select (GtkWidget *widget); +static void awf2_accels_deselect (GtkWidget *widget); +static void awf2_accels_change (GtkWidget *widget, GdkEventKey *event); +static void awf2_accels_save (); #endif // dialogs static void awf2_show_dialog_open (); @@ -158,9 +201,9 @@ static void awf2_show_dialog_about (); static void awf2_show_dialog_calendar (); // gtk3 #if GTK_CHECK_VERSION (3,98,0) -static void awf2_evtscroll_notebook_tabs (GtkEventControllerScroll *event, gdouble dx, gdouble dy, GtkWidget *widget); +static void awf2_gtk40_scrolltabs (GtkEventControllerScroll *event, gdouble dx, gdouble dy, GtkWidget *widget); #elif GTK_CHECK_VERSION (3,4,0) -static void awf2_gdkscroll_notebook_tabs (GtkWidget *widget, GdkEventScroll *event); +static void awf2_gtk34_scrolltabs (GtkWidget *widget, GdkEventScroll *event); #endif // run baby, run! @@ -172,7 +215,7 @@ int main (int argc, char **argv) { GSList *iterator; // load available themes - // @todo replace GSLists? + // @TODO replace GSLists? list_system_theme = awf_load_theme ("/usr/share/themes"); list_system_theme = g_slist_sort (list_system_theme, (GCompareFunc)awf_compare_theme); @@ -207,11 +250,10 @@ int main (int argc, char **argv) { theme = (gchar*)optarg; break; case 'l': - g_printf ("Available themes:\n"); for (iterator = list_system_theme; iterator; iterator = iterator->next) - g_printf (" %s\n", (gchar*)iterator->data); + g_printf ("%s\n", (gchar*)iterator->data); for (iterator = list_user_theme; iterator; iterator = iterator->next) - g_printf (" %s\n", (gchar*)iterator->data); + g_printf ("%s\n", (gchar*)iterator->data); return status; case 'h': default: @@ -225,14 +267,14 @@ int main (int argc, char **argv) { glib_major_version, glib_minor_version, glib_micro_version), _("Usage:"), "awf-gtk2 ", "(gtk 2.24+)", - "awf-gtk3 ", "(gtk 3.0+)", + "awf-gtk3 ", "(gtk 3.00+)", "awf-gtk4 ", "(gtk 3.98+)", _("Options:"), "-v ", _("Show version number"), "-l ", _("List available themes"), "-n ", _("Don't start spinners"), "-t ", _("Run with the specified theme"), - "-s ", _("Run and save a png screenshot on sighup") + "-s ", g_strdup_printf (_("Run and save a png screenshot on %s"), "sighup") ); return status; } @@ -240,20 +282,20 @@ int main (int argc, char **argv) { // create and show window #if GLIB_CHECK_VERSION (2,30,0) - g_unix_signal_add (SIGHUP, awf_sighup_handler, NULL); // glib >= 2.30 + g_unix_signal_add (SIGHUP, awf2_sighup_handler, NULL); // glib >= 2.30 #endif #if GTK_CHECK_VERSION (3,98,0) GtkApplication *app; app = gtk_application_new ("org.gtk.awf4", G_APPLICATION_FLAGS_NONE); g_signal_connect (app, "activate", G_CALLBACK (awf2_create_window), theme); - status = g_application_run (G_APPLICATION (app), 0, NULL); // todo (app, argc, argv) + status = g_application_run (G_APPLICATION (app), 0, NULL); // @TODO (app, argc, argv) g_object_unref (app); - #elif GTK_CHECK_VERSION (3,0,0) + #elif GTK_CHECK_VERSION (3,4,0) GtkApplication *app; app = gtk_application_new ("org.gtk.awf3", G_APPLICATION_FLAGS_NONE); g_signal_connect (app, "activate", G_CALLBACK (awf2_create_window), theme); - status = g_application_run (G_APPLICATION (app), 0, NULL); // todo (app, argc, argv) + status = g_application_run (G_APPLICATION (app), 0, NULL); // @TODO (app, argc, argv) g_object_unref (app); #else gtk_init (&argc, &argv); @@ -263,6 +305,15 @@ int main (int argc, char **argv) { return status; } +static void awf2_quit () { + + #if !GTK_CHECK_VERSION (3,98,0) + awf2_accels_save (); + #endif + + exit (0); +} + static GSList* awf_load_theme (gchar *directory) { GSList *list = NULL; @@ -354,8 +405,6 @@ static void awf2_set_theme (gchar *new_theme) { } else if ((strcmp ((gchar*)current_theme, (gchar*)new_theme) != 0)) { - //g_printf ("awf2_set_theme: from %s to %s\n", current_theme, new_theme); - g_object_set (gtk_settings_get_default (), "gtk-theme-name", new_theme, NULL); g_object_get (gtk_settings_get_default (), "gtk-theme-name", ¤t_theme, NULL); @@ -364,18 +413,7 @@ static void awf2_set_theme (gchar *new_theme) { } } -static gboolean awf_sighup_handler () { - - awf2_set_theme ("refresh"); - -#if !defined (G_SOURCE_CONTINUE) - return TRUE; // glib < 2.32 -#else - return G_SOURCE_CONTINUE; -#endif -} - -static void awf_update_progressbars (GtkRange *range) { +static void awf2_update_progressbars (GtkRange *range) { // https://developer.gnome.org/gtk3/stable/GtkProgressBar.html // https://developer.gnome.org/gtk3/stable/GtkLevelBar.html @@ -517,6 +555,17 @@ static void awf2_update_widgets () { } } +static gboolean awf2_sighup_handler () { + + awf2_set_theme ("refresh"); + +#if !defined (G_SOURCE_CONTINUE) + return TRUE; // glib < 2.32 +#else + return G_SOURCE_CONTINUE; +#endif +} + static gboolean awf2_take_screenshot () { // https://developer.gnome.org/gdk2/stable/gdk2-Pixbufs.html @@ -581,7 +630,6 @@ static void awf2_create_window (gpointer app, gchar *theme) { window = gtk_application_window_new (GTK_APPLICATION (app)); #else window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); #endif gtk_window_set_title (GTK_WINDOW (window), g_strdup_printf (_("A widget factory - GTK %d - %s"), TRUE_GTK_MAJOR_VERSION, VERSION)); @@ -728,6 +776,8 @@ static void awf2_create_window (gpointer app, gchar *theme) { allow_update_theme = TRUE; // go + g_signal_connect (window, "destroy", G_CALLBACK (awf2_quit), NULL); + #if GTK_CHECK_VERSION (3,98,0) gtk_style_context_add_class (gtk_widget_get_style_context (toolbar), "primary-toolbar-gtk4"); gtk_widget_show (window); @@ -791,22 +841,22 @@ static void awf2_create_toolbar (GtkWidget *root) { icon1 = gtk_button_new_from_icon_name ("gtk-open"); gtk_widget_set_size_request (icon1, 36, 36); gtk_style_context_add_class (gtk_widget_get_style_context (icon1), "flat"); - g_signal_connect_swapped (G_OBJECT (icon1), "clicked", G_CALLBACK (awf2_show_dialog_open), NULL); + g_signal_connect_swapped (icon1, "clicked", G_CALLBACK (awf2_show_dialog_open), NULL); icon2 = gtk_button_new_from_icon_name ("gtk-open"); gtk_widget_set_size_request (icon2, 36, 36); gtk_style_context_add_class (gtk_widget_get_style_context (icon2), "flat"); - g_signal_connect_swapped (G_OBJECT (icon2), "clicked", G_CALLBACK (awf2_show_dialog_open_recent), NULL); + g_signal_connect_swapped (icon2, "clicked", G_CALLBACK (awf2_show_dialog_open_recent), NULL); icon3 = gtk_button_new_from_icon_name ("gtk-save"); gtk_widget_set_size_request (icon3, 36, 36); gtk_style_context_add_class (gtk_widget_get_style_context (icon3), "flat"); - g_signal_connect_swapped (G_OBJECT (icon3), "clicked", G_CALLBACK (awf2_show_dialog_save), NULL); + g_signal_connect_swapped (icon3, "clicked", G_CALLBACK (awf2_show_dialog_save), NULL); icon4 = gtk_button_new_from_icon_name ("gtk-refresh"); gtk_widget_set_size_request (icon4, 36, 36); gtk_style_context_add_class (gtk_widget_get_style_context (icon4), "flat"); - g_signal_connect_swapped (G_OBJECT (icon4), "clicked", G_CALLBACK (awf2_set_theme), "refresh"); + g_signal_connect_swapped (icon4, "clicked", G_CALLBACK (awf2_set_theme), "refresh"); icon5 = gtk_button_new_from_icon_name ("gtk-goto-first"); gtk_widget_set_size_request (icon5, 36, 36); @@ -822,7 +872,7 @@ static void awf2_create_toolbar (GtkWidget *root) { gtk_widget_set_size_request (icon7, 36, 36); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (icon7), TRUE); gtk_style_context_add_class (gtk_widget_get_style_context (icon7), "flat"); - g_signal_connect_swapped (G_OBJECT (icon7), "clicked", G_CALLBACK (awf2_update_widgets), NULL); + g_signal_connect_swapped (icon7, "clicked", G_CALLBACK (awf2_update_widgets), NULL); gtk_container_add (GTK_CONTAINER (root), icon1); gtk_container_add (GTK_CONTAINER (root), icon2); @@ -846,23 +896,23 @@ static void awf2_create_toolbar (GtkWidget *root) { icon1 = GTK_WIDGET (gtk_menu_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (icon1), "gtk-open"); - g_signal_connect_swapped (G_OBJECT (icon1), "clicked", G_CALLBACK (awf2_show_dialog_open), NULL); + g_signal_connect_swapped (icon1, "clicked", G_CALLBACK (awf2_show_dialog_open), NULL); icon2 = GTK_WIDGET (gtk_menu_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (icon2), "gtk-open"); menu = gtk_menu_new (); - awf2_new_menu_item (menu, "Menu item", "", "", FALSE); + awf2_new_menu_item (menu, "Menu item", "", FALSE); gtk_widget_show_all (menu); // very important gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (icon2), menu); - g_signal_connect_swapped (G_OBJECT (icon2), "clicked", G_CALLBACK (awf2_show_dialog_open_recent), NULL); + g_signal_connect_swapped (icon2, "clicked", G_CALLBACK (awf2_show_dialog_open_recent), NULL); icon3 = GTK_WIDGET (gtk_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (icon3), "gtk-save"); - g_signal_connect_swapped (G_OBJECT (icon3), "clicked", G_CALLBACK (awf2_show_dialog_save), NULL); + g_signal_connect_swapped (icon3, "clicked", G_CALLBACK (awf2_show_dialog_save), NULL); icon4 = GTK_WIDGET (gtk_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (icon4), "gtk-refresh"); - g_signal_connect_swapped (G_OBJECT (icon4), "clicked", G_CALLBACK (awf2_set_theme), "refresh"); + g_signal_connect_swapped (icon4, "clicked", G_CALLBACK (awf2_set_theme), "refresh"); #if GTK_CHECK_VERSION (3,14,0) icon5 = GTK_WIDGET (gtk_tool_button_new (NULL, NULL)); @@ -883,7 +933,7 @@ static void awf2_create_toolbar (GtkWidget *root) { icon7 = GTK_WIDGET (gtk_toggle_tool_button_new ()); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (icon7), "gtk-add"); gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (icon7), TRUE); - g_signal_connect_swapped (G_OBJECT (icon7), "clicked", G_CALLBACK (awf2_update_widgets), NULL); + g_signal_connect_swapped (icon7, "clicked", G_CALLBACK (awf2_update_widgets), NULL); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (icon1), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (icon2), -1); @@ -1217,14 +1267,14 @@ static void awf2_create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWid gtk_range_set_value (GTK_RANGE (scale1), 50); gtk_scale_set_draw_value (GTK_SCALE (scale1), FALSE); gtk_widget_set_tooltip_text (scale1, "scale"); - g_signal_connect (G_OBJECT (scale1), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale1, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #else scale1 = gtk_hscale_new_with_range (0, 100, 1); gtk_widget_set_size_request (scale1, 175, -1); gtk_range_set_value (GTK_RANGE (scale1), 50); gtk_scale_set_draw_value (GTK_SCALE (scale1), FALSE); gtk_widget_set_tooltip_text (scale1, "scale"); - g_signal_connect (G_OBJECT (scale1), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale1, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #endif #if GTK_CHECK_VERSION (3,0,0) @@ -1234,7 +1284,7 @@ static void awf2_create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWid gtk_scale_set_draw_value (GTK_SCALE (scale2), FALSE); gtk_range_set_inverted (GTK_RANGE (scale2), TRUE); gtk_widget_set_tooltip_text (scale2, "scale"); - g_signal_connect (G_OBJECT (scale2), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale2, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #else scale2 = gtk_hscale_new_with_range (0, 100, 1); gtk_widget_set_size_request (scale2, 175, -1); @@ -1242,7 +1292,7 @@ static void awf2_create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWid gtk_scale_set_draw_value (GTK_SCALE (scale2), FALSE); gtk_range_set_inverted (GTK_RANGE (scale2), TRUE); gtk_widget_set_tooltip_text (scale2, "scale"); - g_signal_connect (G_OBJECT (scale2), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale2, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #endif #if GTK_CHECK_VERSION (3,0,0) @@ -1280,14 +1330,14 @@ static void awf2_create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWid gtk_range_set_value (GTK_RANGE (scale3), 50); gtk_scale_set_draw_value (GTK_SCALE (scale3), FALSE); gtk_widget_set_tooltip_text (scale3, "scale"); - g_signal_connect (G_OBJECT (scale3), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale3, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #else scale3 = gtk_vscale_new_with_range (0, 100, 1); gtk_widget_set_size_request (scale3, -1, 100); gtk_range_set_value (GTK_RANGE (scale3), 50); gtk_scale_set_draw_value (GTK_SCALE (scale3), FALSE); gtk_widget_set_tooltip_text (scale3, "scale"); - g_signal_connect (G_OBJECT (scale3), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale3, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #endif #if GTK_CHECK_VERSION (3,0,0) @@ -1297,7 +1347,7 @@ static void awf2_create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWid gtk_scale_set_draw_value (GTK_SCALE (scale4), FALSE); gtk_range_set_inverted (GTK_RANGE (scale4), TRUE); gtk_widget_set_tooltip_text (scale4, "scale"); - g_signal_connect (G_OBJECT (scale4), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale4, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #else scale4 = gtk_vscale_new_with_range (0, 100, 1); gtk_widget_set_size_request (scale4, -1, 100); @@ -1305,7 +1355,7 @@ static void awf2_create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWid gtk_scale_set_draw_value (GTK_SCALE (scale4), FALSE); gtk_range_set_inverted (GTK_RANGE (scale4), TRUE); gtk_widget_set_tooltip_text (scale4, "scale"); - g_signal_connect (G_OBJECT (scale4), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale4, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #endif #if GTK_CHECK_VERSION (3,0,0) @@ -1314,14 +1364,14 @@ static void awf2_create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWid gtk_range_set_value (GTK_RANGE (scale5), 50); gtk_scale_set_draw_value (GTK_SCALE (scale5), FALSE); gtk_widget_set_tooltip_text (scale5, "scale"); - g_signal_connect (G_OBJECT (scale5), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale5, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #else scale5 = gtk_vscale_new_with_range (0, 100, 1); gtk_widget_set_size_request (scale5, -1, 100); gtk_range_set_value (GTK_RANGE (scale5), 50); gtk_scale_set_draw_value (GTK_SCALE (scale5), FALSE); gtk_widget_set_tooltip_text (scale5, "scale"); - g_signal_connect (G_OBJECT (scale5), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale5, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #endif #if GTK_CHECK_VERSION (3,0,0) @@ -1331,7 +1381,7 @@ static void awf2_create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWid gtk_scale_set_draw_value (GTK_SCALE (scale6), FALSE); gtk_range_set_inverted (GTK_RANGE (scale6), TRUE); gtk_widget_set_tooltip_text (scale6, "scale"); - g_signal_connect (G_OBJECT (scale6), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale6, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #else scale6 = gtk_vscale_new_with_range (0, 100, 1); gtk_widget_set_size_request (scale6, -1, 100); @@ -1339,7 +1389,7 @@ static void awf2_create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWid gtk_scale_set_draw_value (GTK_SCALE (scale6), FALSE); gtk_range_set_inverted (GTK_RANGE (scale6), TRUE); gtk_widget_set_tooltip_text (scale6, "scale"); - g_signal_connect (G_OBJECT (scale6), "value_changed", G_CALLBACK (awf_update_progressbars), NULL); + g_signal_connect (scale6, "value_changed", G_CALLBACK (awf2_update_progressbars), NULL); #endif #if GTK_CHECK_VERSION (3,6,0) @@ -1560,37 +1610,37 @@ static void awf2_create_notebooks (GtkWidget *root1, GtkWidget *root2) { // this does not work, because scroll is possible from content // GtkEventController *event1, *event2, *event3, *event4; // event1 = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES | GTK_EVENT_CONTROLLER_SCROLL_DISCRETE); - // g_signal_connect (event1, "scroll", G_CALLBACK (awf2_evtscroll_notebook_tabs), notebook1); + // g_signal_connect (event1, "scroll", G_CALLBACK (awf2_gtk40_scrolltabs), notebook1); // gtk_widget_add_controller (notebook1, event1); // event2 = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES); - // g_signal_connect (event2, "scroll", G_CALLBACK (awf2_evtscroll_notebook_tabs), notebook2); + // g_signal_connect (event2, "scroll", G_CALLBACK (awf2_gtk40_scrolltabs), notebook2); // gtk_widget_add_controller (notebook2, event2); // event3 = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES); - // g_signal_connect (event3, "scroll", G_CALLBACK (awf2_evtscroll_notebook_tabs), notebook3); + // g_signal_connect (event3, "scroll", G_CALLBACK (awf2_gtk40_scrolltabs), notebook3); // gtk_widget_add_controller (notebook3, event3); // event4 = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES); - // g_signal_connect (event4, "scroll", G_CALLBACK (awf2_evtscroll_notebook_tabs), notebook4); + // g_signal_connect (event4, "scroll", G_CALLBACK (awf2_gtk40_scrolltabs), notebook4); // gtk_widget_add_controller (notebook4, event4); //elif GTK_CHECK_VERSION (3,24,0) // this works but there is a delay (first scroll is ignored) // GtkEventController *event1, *event2, *event3, *event4; // event1 = gtk_event_controller_scroll_new (notebook1, GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES | GTK_EVENT_CONTROLLER_SCROLL_DISCRETE); - // g_signal_connect (event1, "scroll", G_CALLBACK (awf2_evtscroll_notebook_tabs), notebook1); + // g_signal_connect (event1, "scroll", G_CALLBACK (awf2_gtk40_scrolltabs), notebook1); // event2 = gtk_event_controller_scroll_new (notebook2, GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES); - // g_signal_connect (event2, "scroll", G_CALLBACK (awf2_evtscroll_notebook_tabs), notebook2); + // g_signal_connect (event2, "scroll", G_CALLBACK (awf2_gtk40_scrolltabs), notebook2); // event3 = gtk_event_controller_scroll_new (notebook3, GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES); - // g_signal_connect (event3, "scroll", G_CALLBACK (awf2_evtscroll_notebook_tabs), notebook3); + // g_signal_connect (event3, "scroll", G_CALLBACK (awf2_gtk40_scrolltabs), notebook3); // event4 = gtk_event_controller_scroll_new (notebook4, GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES); - // g_signal_connect (event4, "scroll", G_CALLBACK (awf2_evtscroll_notebook_tabs), notebook4); + // g_signal_connect (event4, "scroll", G_CALLBACK (awf2_gtk40_scrolltabs), notebook4); #elif GTK_CHECK_VERSION (3,4,0) gtk_widget_add_events (notebook1, GDK_SCROLL_MASK); - g_signal_connect (G_OBJECT (notebook1), "scroll-event", G_CALLBACK (awf2_gdkscroll_notebook_tabs), NULL); + g_signal_connect (notebook1, "scroll-event", G_CALLBACK (awf2_gtk34_scrolltabs), NULL); gtk_widget_add_events (notebook2, GDK_SCROLL_MASK); - g_signal_connect (G_OBJECT (notebook2), "scroll-event", G_CALLBACK (awf2_gdkscroll_notebook_tabs), NULL); + g_signal_connect (notebook2, "scroll-event", G_CALLBACK (awf2_gtk34_scrolltabs), NULL); gtk_widget_add_events (notebook3, GDK_SCROLL_MASK); - g_signal_connect (G_OBJECT (notebook3), "scroll-event", G_CALLBACK (awf2_gdkscroll_notebook_tabs), NULL); + g_signal_connect (notebook3, "scroll-event", G_CALLBACK (awf2_gtk34_scrolltabs), NULL); gtk_widget_add_events (notebook4, GDK_SCROLL_MASK); - g_signal_connect (G_OBJECT (notebook4), "scroll-event", G_CALLBACK (awf2_gdkscroll_notebook_tabs), NULL); + g_signal_connect (notebook4, "scroll-event", G_CALLBACK (awf2_gtk34_scrolltabs), NULL); #endif gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook1)); @@ -1645,10 +1695,10 @@ static void awf2_create_notebook_tab (GtkWidget *notebook, gchar *text) { gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (notebook), content, TRUE); #if GTK_CHECK_VERSION (3,98,0) - // this works but there is a delay (first scroll is ignored) + // this works but there is a delay (first scroll is ignored) GtkEventController *event; event = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES | GTK_EVENT_CONTROLLER_SCROLL_DISCRETE); - g_signal_connect (event, "scroll", G_CALLBACK (awf2_evtscroll_notebook_tabs), notebook); + g_signal_connect (event, "scroll", G_CALLBACK (awf2_gtk40_scrolltabs), notebook); gtk_widget_add_controller (gtk_widget_get_parent (head), event); #endif } @@ -1716,7 +1766,7 @@ static void awf2_create_menubar (GMenu *root) { } if (!list_system_theme) - g_menu_append (menu, _("No theme found"), "disabled"); + g_menu_append (menu, _("No themes found"), "disabled"); menu = g_menu_new (); g_menu_append_submenu (root, _("_User theme"), G_MENU_MODEL (menu)); @@ -1729,22 +1779,17 @@ static void awf2_create_menubar (GMenu *root) { } if (!list_user_theme) - g_menu_append (menu, _("No theme found"), "disabled"); + g_menu_append (menu, _("No themes found"), "disabled"); menu = g_menu_new (); g_menu_append_submenu (root, _("_Options"), G_MENU_MODEL (menu)); menuitem = g_menu_item_new ("gtk-about", "undo"); g_menu_append_item (menu, menuitem); GAction *undo_action = G_ACTION (g_simple_action_new ("undo", NULL)); - g_signal_connect (G_OBJECT (undo_action), "activate", G_CALLBACK (awf2_show_dialog_about), NULL); + g_signal_connect (undo_action, "activate", G_CALLBACK (awf2_show_dialog_about), NULL); g_action_map_add_action (G_ACTION_MAP (group), undo_action); } -static void awf2_gtk4_wrapper (GSimpleAction *simple, GVariant *parameter, gpointer user_data) { - g_print ("%s\n", g_variant_get_string (parameter, NULL)); - g_print ("%s\n", (gchar*)user_data); -} - #else static void awf2_create_menubar (GtkWidget *root) { @@ -1752,9 +1797,15 @@ static void awf2_create_menubar (GtkWidget *root) { // https://developer.gnome.org/gtk3/stable/GtkMenu.html // https://developer.gnome.org/gtk3/stable/GtkMenuItem.html // https://developer.gnome.org/gtk3/stable/GtkRadioMenuItem.html + // https://developer.gnome.org/gtk3/stable/gtk3-Keyboard-Accelerators.html GtkWidget *menu, *submenu, *menuitem; GSList *iterator, *group = NULL; + GtkAccelGroup *accels = gtk_accel_group_new (); + GdkModifierType mods; + guint key; + + gtk_window_add_accel_group (GTK_WINDOW (window), accels); menu = awf2_new_menu (root, _("_System theme")); for (iterator = list_system_theme; iterator; iterator = iterator->next) { @@ -1762,11 +1813,11 @@ static void awf2_create_menubar (GtkWidget *root) { group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); if (strcmp ((gchar*)current_theme, (gchar*)iterator->data) == 0) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_set_theme), iterator->data); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_set_theme), iterator->data); } if (!list_system_theme) - awf2_new_menu_item (menu, _("No theme found"), "", "", TRUE); + awf2_new_menu_item (menu, _("No themes found"), "", TRUE); menu = awf2_new_menu (root, _("_User theme")); for (iterator = list_user_theme; iterator; iterator = iterator->next) { @@ -1774,73 +1825,141 @@ static void awf2_create_menubar (GtkWidget *root) { group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); if (strcmp ((gchar*)current_theme, (gchar*)iterator->data) == 0) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_set_theme), iterator->data); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_set_theme), iterator->data); } if (!list_user_theme) - awf2_new_menu_item (menu, _("No theme found"), "", "", TRUE); + awf2_new_menu_item (menu, _("No themes found"), "", TRUE); menu = awf2_new_menu (root, _("_Options")); - awf2_new_menu_tearoff (menu); - - menuitem = awf2_new_menu_item (menu, "", "o", "gtk-open", FALSE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_show_dialog_open), NULL); - - menuitem = awf2_new_menu_item (menu, _("Open recent file"), "", "", FALSE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_show_dialog_open_recent), NULL); + gtk_menu_set_accel_group (GTK_MENU (menu), accels); // very important - menuitem = awf2_new_menu_item (menu, _("Calendar"), "", "", FALSE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_show_dialog_calendar), NULL); - - menuitem = awf2_new_menu_item (menu, "", "s", "gtk-save", FALSE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_show_dialog_save), NULL); - - menuitem = awf2_new_menu_item (menu, _("Refresh theme"), "F5", "gtk-refresh", FALSE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_set_theme), "refresh"); + awf2_new_menu_tearoff (menu); - menuitem = awf2_new_menu_item (menu, "", "Return", "gtk-properties", FALSE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_show_dialog_properties), NULL); + menuitem = awf2_new_menu_item (menu, "", "gtk-open", FALSE); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_show_dialog_open), NULL); + gtk_accelerator_parse ("O", &key, &mods); + gtk_accel_map_add_entry (AWF_OPEN, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_OPEN); + + menuitem = awf2_new_menu_item (menu, _("Open recent file"), "", FALSE); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_show_dialog_open_recent), NULL); + gtk_accelerator_parse ("", &key, &mods); + gtk_accel_map_add_entry (AWF_RECE, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_RECE); + + menuitem = awf2_new_menu_item (menu, _("Calendar"), "", FALSE); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_show_dialog_calendar), NULL); + gtk_accelerator_parse ("", &key, &mods); + gtk_accel_map_add_entry (AWF_CALE, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_CALE); + + menuitem = awf2_new_menu_item (menu, "", "gtk-save", FALSE); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_show_dialog_save), NULL); + gtk_accelerator_parse ("S", &key, &mods); + gtk_accel_map_add_entry (AWF_SAVE, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_SAVE); + + menuitem = awf2_new_menu_item (menu, _("Refresh theme"), "gtk-refresh", FALSE); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_set_theme), "refresh"); + gtk_accelerator_parse ("F5", &key, &mods); + gtk_accel_map_add_entry (AWF_REFR, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_REFR); + + menuitem = awf2_new_menu_item (menu, "", "gtk-properties", FALSE); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_show_dialog_properties), NULL); + gtk_accelerator_parse ("Return", &key, &mods); + gtk_accel_map_add_entry (AWF_PROP, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_PROP); + + menuitem = awf2_new_menu_item (menu, "", "gtk-page-setup", FALSE); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_show_dialog_page_setup), NULL); + gtk_accelerator_parse ("", &key, &mods); + gtk_accel_map_add_entry (AWF_PRSE, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_PRSE); + + menuitem = awf2_new_menu_item (menu, "", "gtk-print", FALSE); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_show_dialog_print), NULL); + gtk_accelerator_parse ("P", &key, &mods); + gtk_accel_map_add_entry (AWF_PRIN, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_PRIN); + + menuitem = awf2_new_menu_item (menu, "", "gtk-about", FALSE); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_show_dialog_about), NULL); + gtk_accelerator_parse ("F1", &key, &mods); + gtk_accel_map_add_entry (AWF_ABOU, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_ABOU); - menuitem = awf2_new_menu_item (menu, "", "", "gtk-page-setup", FALSE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_show_dialog_page_setup), NULL); + submenu = awf2_new_menu (menu, _("More...")); + gtk_menu_set_accel_group (GTK_MENU (submenu), accels); // very important - menuitem = awf2_new_menu_item (menu, "", "p", "gtk-print", FALSE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_show_dialog_print), NULL); + menuitem = awf2_new_menu_item (submenu, "", "gtk-cut", FALSE); + gtk_accelerator_parse ("X", &key, &mods); + gtk_accel_map_add_entry (AWF_MCUT, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_MCUT); - menuitem = awf2_new_menu_item (menu, "", "", "gtk-about", FALSE); - g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (awf2_show_dialog_about), NULL); + menuitem = awf2_new_menu_item (submenu, "", "gtk-copy", FALSE); + gtk_accelerator_parse ("C", &key, &mods); + gtk_accel_map_add_entry (AWF_MCOP, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_MCOP); - submenu = awf2_new_menu (menu, _("More...")); - awf2_new_menu_item (submenu, "", "x", "gtk-cut", FALSE); - awf2_new_menu_item (submenu, "", "c", "gtk-copy", FALSE); - awf2_new_menu_item (submenu, "", "v", "gtk-paste", FALSE); + menuitem = awf2_new_menu_item (submenu, "", "gtk-paste", FALSE); + gtk_accelerator_parse ("V", &key, &mods); + gtk_accel_map_add_entry (AWF_MPAS, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_MPAS); awf2_new_menu_separator (menu); + awf2_new_menu_check (menu, g_strdup_printf ("Check 1 %s", _("(unchecked)")), FALSE, FALSE, FALSE); awf2_new_menu_check (menu, g_strdup_printf ("Check 2 %s", _("(checked)")), TRUE, FALSE, FALSE); awf2_new_menu_check (menu, g_strdup_printf ("Check 3 %s", _("(inconsistent)")), FALSE, TRUE, FALSE); awf2_new_menu_separator (menu); + awf2_new_menu_check (menu, g_strdup_printf ("Check 1 %s", _("(unchecked)")), FALSE, FALSE, TRUE); awf2_new_menu_check (menu, g_strdup_printf ("Check 2 %s", _("(checked)")), TRUE, FALSE, TRUE); awf2_new_menu_check (menu, g_strdup_printf ("Check 3 %s", _("(inconsistent)")), FALSE, TRUE, TRUE); awf2_new_menu_separator (menu); + menuitem = awf2_new_menu_radio (menu, g_strdup_printf ("Radio 1 %s", _("(unchecked)")), FALSE, FALSE, FALSE, NULL); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); awf2_new_menu_radio (menu, g_strdup_printf ("Radio 2 %s", _("(checked)")), TRUE, FALSE, FALSE, group); awf2_new_menu_radio (menu, g_strdup_printf ("Radio 3 %s", _("(inconsistent)")), FALSE, TRUE, FALSE, NULL); awf2_new_menu_separator (menu); + menuitem = awf2_new_menu_radio (menu, g_strdup_printf ("Radio 1 %s", _("(unchecked)")), FALSE, FALSE, TRUE, NULL); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); awf2_new_menu_radio (menu, g_strdup_printf ("Radio 2 %s", _("(checked)")), TRUE, FALSE, TRUE, group); awf2_new_menu_radio (menu, g_strdup_printf ("Radio 3 %s", _("(inconsistent)")), FALSE, TRUE, TRUE, NULL); awf2_new_menu_separator (menu); - awf2_new_menu_item (menu, "", "w", "gtk-close", TRUE); - menuitem = awf2_new_menu_item (menu, "", "q", "gtk-quit", FALSE); - //g_signal_connect_swapped (G_OBJECT (menuitem), "activate", G_CALLBACK (), NULL); + + menuitem = awf2_new_menu_item (menu, "", "gtk-close", TRUE); + gtk_accelerator_parse ("W", &key, &mods); + gtk_accel_map_add_entry (AWF_CLOS, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_CLOS); + + menuitem = awf2_new_menu_item (menu, "", "gtk-quit", FALSE); + g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (awf2_quit), NULL); + gtk_accelerator_parse ("Q", &key, &mods); + gtk_accel_map_add_entry (AWF_QUIT, key, mods); + gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), AWF_QUIT); + + awf2_accels_load (); + + // version check disabled to get same thing between GTK 2.24/3.0 and 3.2+ + // gtk-can-change-accels for GTK 2.24 and GTK 3.0 only + //#if !GTK_CHECK_VERSION (3,2,0) + // g_signal_connect_swapped (gtk_accel_map_get (), "changed", G_CALLBACK (awf2_...), NULL); + // g_object_set (gtk_settings_get_default (), "gtk-can-change-accels", TRUE, NULL); + // + // static void awf2_... (GtkAccelMap *accel_map, gchar *accel_path, guint accel_key, GdkModifierType accel_mods) + // if (accel_path != NULL) + // gtk_accel_map_change_entry (accel_path, accel_key, accel_mods, TRUE); + //#endif + g_object_set (gtk_settings_get_default (), "gtk-can-change-accels", FALSE, NULL); } static GtkWidget* awf2_new_menu (GtkWidget *root, gchar *text) { @@ -1855,6 +1974,13 @@ static GtkWidget* awf2_new_menu (GtkWidget *root, gchar *text) { gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu); gtk_menu_shell_append (GTK_MENU_SHELL (root), menuitem); + // version check disabled to get same thing between GTK 2.24/3.0 and 3.2+ + // gtk-can-change-accels for GTK 3.2+ + //#if GTK_CHECK_VERSION (3,2,0) + gtk_widget_set_events (menu, GDK_KEY_RELEASE_MASK); + g_signal_connect (menu, "key-release-event", G_CALLBACK (awf2_accels_change), NULL); + //#endif + return menu; } @@ -1918,14 +2044,12 @@ static GtkWidget* awf2_new_menu_radio (GtkWidget *menu, gchar *text, gboolean ch return menuitem; } -static GtkWidget* awf2_new_menu_item (GtkWidget *menu, gchar *text, gchar *accel, gchar *image, gboolean disabled) { +static GtkWidget* awf2_new_menu_item (GtkWidget *menu, gchar *text, gchar *image, gboolean disabled) { // https://developer.gnome.org/gtk3/stable/GtkMenuItem.html // https://developer.gnome.org/gtk3/stable/GtkImageMenuItem.html GtkWidget *menuitem; - GdkModifierType accelerator_mods; - guint accelerator_key; if (strlen (image) > 0) menuitem = gtk_image_menu_item_new_from_stock (image, NULL); @@ -1935,13 +2059,104 @@ static GtkWidget* awf2_new_menu_item (GtkWidget *menu, gchar *text, gchar *accel gtk_widget_set_sensitive (menuitem, !disabled); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); - //gtk_accelerator_parse (accel, &accelerator_key, &accelerator_mods); - //if (accelerator_key && accelerator_mods) - // gtk_widget_add_accelerator (menuitem, "activate", , accelerator_key, accelerator_mods, GTK_ACCEL_VISIBLE); + // version check disabled to get same thing between GTK 2.24/3.0 and 3.2+ + // gtk-can-change-accels for GTK 3.2+ + //#if GTK_CHECK_VERSION (3,2,0) + g_signal_connect (menuitem, "select", G_CALLBACK (awf2_accels_select), NULL); + g_signal_connect (menuitem, "deselect", G_CALLBACK (awf2_accels_deselect), NULL); + //#endif return menuitem; } +// accelerators + +static void awf2_accels_load () { + + // https://developer.gnome.org/gtk3/stable/gtk3-Accelerator-Maps.html + + gchar *path; + path = g_build_filename ("/", g_getenv ("HOME"), ".awf-gtk-accels", NULL); + + if (g_file_test (path, G_FILE_TEST_IS_REGULAR)) + gtk_accel_map_load (path); + + g_free (path); +} + +static void awf2_accels_select (GtkWidget *widget) { + current_menuitem = widget; +} + +static void awf2_accels_deselect (GtkWidget *widget) { + if (current_menuitem == widget) + current_menuitem = NULL; +} + +static void awf2_accels_change (GtkWidget *widget, GdkEventKey *event) { + + // version check disabled to get same thing between GTK 2.24/3.0 and 3.2+ + // gtk-can-change-accels for GTK 3.2+ + //#if GTK_CHECK_VERSION (3,2,0) + + // https://developer.gnome.org/gdk3/stable/gdk3-Keyboard-Handling.html + // https://gitlab.gnome.org/GNOME/gtk/-/commit/2d79334bb069224966b3dcd8456967c9800e8fd0 + + if (!current_menuitem) + return; + + GtkMenuItem *menuitem = GTK_MENU_ITEM (current_menuitem); + gchar *key = gdk_keyval_name (event->keyval); + + if ( + !gtk_menu_item_get_accel_path (menuitem) || + (strcmp (key, "Control_L") == 0) || (strcmp (key, "Control_R") == 0) || + (strcmp (key, "Shift_L") == 0) || (strcmp (key, "Shift_R") == 0) || + (strcmp (key, "Super_L") == 0) || (strcmp (key, "Super_R") == 0) || + (strcmp (key, "Alt_L") == 0) || (strcmp (key, "Alt_R") == 0) + ) { + return; + } + + if ( + (event->keyval == GDK_KEY_Delete) || + (event->keyval == GDK_KEY_KP_Delete) || + (event->keyval == GDK_KEY_BackSpace) || + // f1..12 + ((event->keyval >= GDK_KEY_F1) && (event->keyval <= GDK_KEY_F12)) || + // crtl/shift/super/alt + ? + (event->state & GDK_CONTROL_MASK) || (event->state & GDK_SHIFT_MASK) || + (event->state & GDK_SUPER_MASK) || (event->state & GDK_MOD1_MASK) + ) { + must_save_accels = TRUE; + + if ((event->keyval == GDK_KEY_Delete) || (event->keyval == GDK_KEY_KP_Delete) || (event->keyval == GDK_KEY_BackSpace)) + gtk_accel_map_change_entry (gtk_menu_item_get_accel_path (menuitem), 0, 0, TRUE); + else + gtk_accel_map_change_entry ( + gtk_menu_item_get_accel_path (menuitem), + gdk_keyval_to_lower (event->keyval), + event->state & gtk_accelerator_get_default_mod_mask (), + TRUE); + } + //#endif +} + +static void awf2_accels_save () { + + // https://developer.gnome.org/gtk3/stable/gtk3-Accelerator-Maps.html + + if (must_save_accels) { + + gchar *path; + + path = g_build_filename ("/", g_getenv ("HOME"), ".awf-gtk-accels", NULL); + gtk_accel_map_save (path); + + g_free (path); + } +} + #endif // dialogs @@ -2068,8 +2283,10 @@ static void awf2_show_dialog_about () { gtk_show_about_dialog (GTK_WINDOW (window), "version", VERSION, - "comments", g_strdup_printf ("%s\n\n%s\n%s", + "comments", g_strdup_printf ("%s\n\n%s\n%s\n\n%s\n%s", _("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme."), + g_strdup_printf (_("Remove %s file"), "~/.awf-gtk-accels"), + _("to reset keyboard shortcuts."), g_strdup_printf (_("compiled with gtk %d.%d.%d and glib %d.%d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION), @@ -2157,11 +2374,12 @@ static void awf2_show_dialog_calendar () { } // https://github.com/mate-desktop/mate-control-center/blob/master/capplets/common/capplet-util.c -// for awf2_gdkscroll_notebook_tabs source function is capplet_dialog_page_scroll_event_cb -// of mate-appearance-properties from mate-control-center, GNU GPL 2 +// for awf2_gtk34_scrolltabs source function is capplet_dialog_page_scroll_event_cb +// of mate-appearance-properties from mate-control-center, GNU GPL 2+ #if GTK_CHECK_VERSION (3,98,0) -static void awf2_evtscroll_notebook_tabs (GtkEventControllerScroll *event, gdouble dx, gdouble dy, GtkWidget *widget) { + +static void awf2_gtk40_scrolltabs (GtkEventControllerScroll *event, gdouble dx, gdouble dy, GtkWidget *widget) { GtkNotebook *notebook; GtkWidget *child, *event_widget, *action_widget; @@ -2194,8 +2412,10 @@ static void awf2_evtscroll_notebook_tabs (GtkEventControllerScroll *event, gdoub else if ((dy < 0) || (dx < 0)) gtk_notebook_prev_page (notebook); } + #elif GTK_CHECK_VERSION (3,4,0) -static void awf2_gdkscroll_notebook_tabs (GtkWidget *widget, GdkEventScroll *event) { + +static void awf2_gtk34_scrolltabs (GtkWidget *widget, GdkEventScroll *event) { GtkNotebook *notebook = GTK_NOTEBOOK (widget); GtkWidget *child, *event_widget, *action_widget; @@ -2246,5 +2466,6 @@ static void awf2_gdkscroll_notebook_tabs (GtkWidget *widget, GdkEventScroll *eve break; } } + #endif diff --git a/src/awf.pot b/src/src/awf.pot similarity index 54% rename from src/awf.pot rename to src/src/awf.pot index 9886781..ed4b2c7 100644 --- a/src/awf.pot +++ b/src/src/awf.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-06 19:25+0200\n" +"POT-Creation-Date: 2020-06-27 11:59+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,131 +17,145 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/awf.c:223 src/awf.c:2076 +#: gtk-awf/src/awf.c:265 gtk-awf/src/awf.c:2293 #, c-format msgid " started with gtk %d.%d.%d and glib %d.%d.%d" msgstr "" -#: src/awf.c:1820 src/awf.c:1825 src/awf.c:1831 src/awf.c:1837 +#: gtk-awf/src/awf.c:1914 gtk-awf/src/awf.c:1920 gtk-awf/src/awf.c:1927 +#: gtk-awf/src/awf.c:1934 msgid "(checked)" msgstr "" -#: src/awf.c:1821 src/awf.c:1826 src/awf.c:1832 src/awf.c:1838 +#: gtk-awf/src/awf.c:1915 gtk-awf/src/awf.c:1921 gtk-awf/src/awf.c:1928 +#: gtk-awf/src/awf.c:1935 msgid "(inconsistent)" msgstr "" -#: src/awf.c:1819 src/awf.c:1824 src/awf.c:1829 src/awf.c:1835 +#: gtk-awf/src/awf.c:1913 gtk-awf/src/awf.c:1919 gtk-awf/src/awf.c:1925 +#: gtk-awf/src/awf.c:1932 msgid "(unchecked)" msgstr "" -#: src/awf.c:219 src/awf.c:587 +#: gtk-awf/src/awf.c:261 gtk-awf/src/awf.c:635 #, c-format msgid "A widget factory - GTK %d - %s" msgstr "" -#: src/awf.c:1494 src/awf.c:2027 src/awf.c:2072 +#: gtk-awf/src/awf.c:1544 gtk-awf/src/awf.c:2242 gtk-awf/src/awf.c:2287 msgid "" "A widget factory is a theme preview application for GTK. It displays the " "various widget types provided by GTK in a single window allowing to see the " "visual effect of the applied theme." msgstr "" -#: src/awf.c:1792 +#: gtk-awf/src/awf.c:1851 msgid "Calendar" msgstr "" -#: src/awf.c:233 +#: gtk-awf/src/awf.c:275 msgid "Don't start spinners" msgstr "" -#: src/awf.c:232 +#: gtk-awf/src/awf.c:274 msgid "List available themes" msgstr "" -#: src/awf.c:1483 src/awf.c:1813 +#: gtk-awf/src/awf.c:1533 gtk-awf/src/awf.c:1893 msgid "More..." msgstr "" -#: src/awf.c:1719 src/awf.c:1732 src/awf.c:1769 src/awf.c:1781 -msgid "No theme found" +#: gtk-awf/src/awf.c:1769 gtk-awf/src/awf.c:1782 gtk-awf/src/awf.c:1820 +#: gtk-awf/src/awf.c:1832 +msgid "No themes found" msgstr "" -#: src/awf.c:2114 +#: gtk-awf/src/awf.c:2331 msgid "Ok" msgstr "" -#: src/awf.c:1789 +#: gtk-awf/src/awf.c:1845 msgid "Open recent file" msgstr "" -#: src/awf.c:230 +#: gtk-awf/src/awf.c:272 msgid "Options:" msgstr "" -#: src/awf.c:1798 +#: gtk-awf/src/awf.c:1863 msgid "Refresh theme" msgstr "" -#: src/awf.c:235 -msgid "Run and save a png screenshot on sighup" +#: gtk-awf/src/awf.c:2288 +#, c-format +msgid "Remove %s file" +msgstr "" + +#: gtk-awf/src/awf.c:277 +#, c-format +msgid "Run and save a png screenshot on %s" msgstr "" -#: src/awf.c:234 +#: gtk-awf/src/awf.c:276 msgid "Run with the specified theme" msgstr "" -#: src/awf.c:231 +#: gtk-awf/src/awf.c:273 msgid "Show version number" msgstr "" -#: src/awf.c:363 src/awf.c:620 +#: gtk-awf/src/awf.c:412 gtk-awf/src/awf.c:668 #, c-format msgid "Theme %s loaded." msgstr "" -#: src/awf.c:346 +#: gtk-awf/src/awf.c:397 #, c-format msgid "Theme %s reloaded at" msgstr "" -#: src/awf.c:555 +#: gtk-awf/src/awf.c:604 #, c-format msgid "Theme reloaded, then screenshot saved (%s) at" msgstr "" -#: src/awf.c:2116 +#: gtk-awf/src/awf.c:2333 msgid "This is a question bar." msgstr "" -#: src/awf.c:2122 +#: gtk-awf/src/awf.c:2339 msgid "This is a warning bar." msgstr "" -#: src/awf.c:2128 +#: gtk-awf/src/awf.c:2345 msgid "This is an error bar." msgstr "" -#: src/awf.c:2110 +#: gtk-awf/src/awf.c:2327 msgid "This is an info bar." msgstr "" -#: src/awf.c:226 +#: gtk-awf/src/awf.c:268 msgid "Usage:" msgstr "" -#: src/awf.c:1735 src/awf.c:1783 +#: gtk-awf/src/awf.c:1785 gtk-awf/src/awf.c:1834 msgid "_Options" msgstr "" -#: src/awf.c:1709 src/awf.c:1759 +#: gtk-awf/src/awf.c:1759 gtk-awf/src/awf.c:1810 msgid "_System theme" msgstr "" -#: src/awf.c:1722 src/awf.c:1771 +#: gtk-awf/src/awf.c:1772 gtk-awf/src/awf.c:1822 msgid "_User theme" msgstr "" -#: src/awf.c:220 src/awf.c:2073 +#: gtk-awf/src/awf.c:262 gtk-awf/src/awf.c:2290 #, c-format msgid "compiled with gtk %d.%d.%d and glib %d.%d.%d" msgstr "" + +#: gtk-awf/src/awf.c:2289 +msgid "to reset keyboard shortcuts." +msgstr "" diff --git a/src/trans-fr.po b/src/src/po/fr.po similarity index 57% rename from src/trans-fr.po rename to src/src/po/fr.po index e09cb0d..72296e7 100644 --- a/src/trans-fr.po +++ b/src/src/po/fr.po @@ -1,143 +1,152 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-06 19:25+0200\n" -"PO-Revision-Date: 2020-05-06 19:25+0200\n" -"Last-Translator: Fabrice Creuzot \n" -"Language: fr\n" -"MIME-Version: 1.0\n" +"POT-Creation-Date: 2020-06-27 11:59+0200\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/awf.c:223 src/awf.c:2076 +#: gtk-awf/src/awf.c:265 gtk-awf/src/awf.c:2293 #, c-format msgid " started with gtk %d.%d.%d and glib %d.%d.%d" msgstr " démarré avec gtk %d.%d.%d et glib %d.%d.%d" -#: src/awf.c:1820 src/awf.c:1825 src/awf.c:1831 src/awf.c:1837 +#: gtk-awf/src/awf.c:1914 gtk-awf/src/awf.c:1920 gtk-awf/src/awf.c:1927 +#: gtk-awf/src/awf.c:1934 msgid "(checked)" msgstr "(coché)" -#: src/awf.c:1821 src/awf.c:1826 src/awf.c:1832 src/awf.c:1838 +#: gtk-awf/src/awf.c:1915 gtk-awf/src/awf.c:1921 gtk-awf/src/awf.c:1928 +#: gtk-awf/src/awf.c:1935 msgid "(inconsistent)" msgstr "(inconsistant)" -#: src/awf.c:1819 src/awf.c:1824 src/awf.c:1829 src/awf.c:1835 +#: gtk-awf/src/awf.c:1913 gtk-awf/src/awf.c:1919 gtk-awf/src/awf.c:1925 +#: gtk-awf/src/awf.c:1932 msgid "(unchecked)" msgstr "(décoché)" -#: src/awf.c:219 src/awf.c:587 +#: gtk-awf/src/awf.c:261 gtk-awf/src/awf.c:635 #, c-format msgid "A widget factory - GTK %d - %s" msgstr "La fabrique à widgets - GTK %d - %s" -#: src/awf.c:1494 src/awf.c:2027 src/awf.c:2072 +#: gtk-awf/src/awf.c:1544 gtk-awf/src/awf.c:2242 gtk-awf/src/awf.c:2287 msgid "" "A widget factory is a theme preview application for GTK. It displays the " "various widget types provided by GTK in a single window allowing to see the " "visual effect of the applied theme." msgstr "" "La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle " -"affiche les différents types de widgets fournis par GTK dansune seule " +"affiche les différents types de widgets fournis par GTK dans une seule " "fenêtre permettant de voir l'effet visuel du thème appliqué." -#: src/awf.c:1792 +#: gtk-awf/src/awf.c:1851 msgid "Calendar" msgstr "Calendrier" -#: src/awf.c:233 +#: gtk-awf/src/awf.c:275 msgid "Don't start spinners" msgstr "Ne pas démarrer les spinners" -#: src/awf.c:232 +#: gtk-awf/src/awf.c:274 msgid "List available themes" msgstr "Lister les thèmes disponibles" -#: src/awf.c:1483 src/awf.c:1813 +#: gtk-awf/src/awf.c:1533 gtk-awf/src/awf.c:1893 msgid "More..." msgstr "Plus..." -#: src/awf.c:1719 src/awf.c:1732 src/awf.c:1769 src/awf.c:1781 -msgid "No theme found" +#: gtk-awf/src/awf.c:1769 gtk-awf/src/awf.c:1782 gtk-awf/src/awf.c:1820 +#: gtk-awf/src/awf.c:1832 +msgid "No themes found" msgstr "Aucun thème trouvé" -#: src/awf.c:2114 +#: gtk-awf/src/awf.c:2331 msgid "Ok" msgstr "Ok" -#: src/awf.c:1789 +#: gtk-awf/src/awf.c:1845 msgid "Open recent file" msgstr "Ouvrir un fichier récent" -#: src/awf.c:230 +#: gtk-awf/src/awf.c:272 msgid "Options:" msgstr "Options :" -#: src/awf.c:1798 +#: gtk-awf/src/awf.c:1863 msgid "Refresh theme" msgstr "Actualiser le thème" -#: src/awf.c:235 -msgid "Run and save a png screenshot on sighup" -msgstr "Démarrer et enregistrer une capture d'écran png lors du sighup" +#: gtk-awf/src/awf.c:2288 +#, c-format +msgid "Remove %s file" +msgstr "Supprimer le fichier %s" + +#: gtk-awf/src/awf.c:277 +#, c-format +msgid "Run and save a png screenshot on %s" +msgstr "Démarrer et enregistrer une capture d'écran png lors du %s" -#: src/awf.c:234 +#: gtk-awf/src/awf.c:276 msgid "Run with the specified theme" msgstr "Démarrer avec le thème spécifié" -#: src/awf.c:231 +#: gtk-awf/src/awf.c:273 msgid "Show version number" msgstr "Afficher le numéro de version" -#: src/awf.c:363 src/awf.c:620 +#: gtk-awf/src/awf.c:412 gtk-awf/src/awf.c:668 #, c-format msgid "Theme %s loaded." msgstr "Thème %s chargé." -#: src/awf.c:346 +#: gtk-awf/src/awf.c:397 #, c-format msgid "Theme %s reloaded at" msgstr "Thème %s rechargé à" -#: src/awf.c:555 +#: gtk-awf/src/awf.c:604 #, c-format msgid "Theme reloaded, then screenshot saved (%s) at" msgstr "Thème rechargé, puis capture d'écran enregistrée (%s) à" -#: src/awf.c:2116 +#: gtk-awf/src/awf.c:2333 msgid "This is a question bar." msgstr "Ceci est une barre de question." -#: src/awf.c:2122 +#: gtk-awf/src/awf.c:2339 msgid "This is a warning bar." msgstr "Ceci est une barre d'avertissement." -#: src/awf.c:2128 +#: gtk-awf/src/awf.c:2345 msgid "This is an error bar." msgstr "Ceci est une barre d'erreur." -#: src/awf.c:2110 +#: gtk-awf/src/awf.c:2327 msgid "This is an info bar." msgstr "Ceci est une barre d'information." -#: src/awf.c:226 +#: gtk-awf/src/awf.c:268 msgid "Usage:" msgstr "Utilisation :" -#: src/awf.c:1735 src/awf.c:1783 +#: gtk-awf/src/awf.c:1785 gtk-awf/src/awf.c:1834 msgid "_Options" msgstr "_Options" -#: src/awf.c:1709 src/awf.c:1759 +#: gtk-awf/src/awf.c:1759 gtk-awf/src/awf.c:1810 msgid "_System theme" msgstr "Thème _système" -#: src/awf.c:1722 src/awf.c:1771 +#: gtk-awf/src/awf.c:1772 gtk-awf/src/awf.c:1822 msgid "_User theme" msgstr "Thème _utilisateur" -#: src/awf.c:220 src/awf.c:2073 +#: gtk-awf/src/awf.c:262 gtk-awf/src/awf.c:2290 #, c-format msgid "compiled with gtk %d.%d.%d and glib %d.%d.%d" msgstr " compilé avec gtk %d.%d.%d et glib %d.%d.%d" + +#: gtk-awf/src/awf.c:2289 +msgid "to reset keyboard shortcuts." +msgstr "pour réinitialiser les raccourcis clavier."