More d-bus stuff added.

This commit is contained in:
Storm Dragon
2025-12-09 09:09:42 -05:00
parent 10d94792ed
commit 11240bfcbc
15 changed files with 1000 additions and 22657 deletions
-652
View File
@@ -1,652 +0,0 @@
# Makefile.in generated by automake 1.18.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2025 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = src
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/build-to-host.m4 \
$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/host-cpu-c-abi.m4 \
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
install-exec-recursive install-html-recursive \
install-info-recursive install-pdf-recursive \
install-ps-recursive install-recursive installcheck-recursive \
installdirs-recursive pdf-recursive ps-recursive \
tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
am__recursive_targets = \
$(RECURSIVE_TARGETS) \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
distdir distdir-am
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
DIST_SUBDIRS = $(SUBDIRS)
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
ATKBRIDGE_CFLAGS = @ATKBRIDGE_CFLAGS@
ATKBRIDGE_LIBS = @ATKBRIDGE_LIBS@
ATSPI2_CFLAGS = @ATSPI2_CFLAGS@
ATSPI2_LIBS = @ATSPI2_LIBS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DESIRED_LINGUAS = @DESIRED_LINGUAS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@
GSTREAMER_LIBS = @GSTREAMER_LIBS@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBOBJS = @LIBOBJS@
LIBPEAS_CFLAGS = @LIBPEAS_CFLAGS@
LIBPEAS_LIBS = @LIBPEAS_LIBS@
LIBS = @LIBS@
LOUIS_TABLE_DIR = @LOUIS_TABLE_DIR@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
PLATFORM_PATH = @PLATFORM_PATH@
POSUB = @POSUB@
PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@
PYGOBJECT_LIBS = @PYGOBJECT_LIBS@
PYTHON = @PYTHON@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
REVISION = @REVISION@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
XGETTEXT_015 = @XGETTEXT_015@
XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@
am__untar = @am__untar@
am__xargs_n = @am__xargs_n@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localedir_c = @localedir_c@
localedir_c_make = @localedir_c_make@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
pkgpyexecdir = @pkgpyexecdir@
pkgpythondir = @pkgpythondir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
pyexecdir = @pyexecdir@
pythondir = @pythondir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = cthulhu
all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets):
@fail=; \
if $(am__make_keepgoing); then \
failcom='fail=yes'; \
else \
failcom='exit 1'; \
fi; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-recursive
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-recursive
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-recursive
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic mostlyclean-am
distclean: distclean-recursive
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(am__recursive_targets) install-am install-strip
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
check-am clean clean-generic cscopelist-am ctags ctags-am \
distclean distclean-generic distclean-tags distdir dvi dvi-am \
html html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%
+6 -3
View File
@@ -20,6 +20,10 @@ import tempfile
import threading
from mimetypes import MimeTypes
import gi
gi.require_version('Atspi', '2.0')
from gi.repository import Atspi
from cthulhu.plugin import Plugin, cthulhu_hookimpl
from cthulhu import debug
from cthulhu import settings_manager
@@ -805,10 +809,9 @@ class OCRDesktop(Plugin):
# Hide window before clicking
self._results_window.hide()
# Perform click using AT-SPI
import pyatspi
# Perform click using AT-SPI2
time.sleep(0.5) # Brief delay
pyatspi.Registry.generateMouseEvent(x_coord, y_coord, "b1c")
Atspi.generate_mouse_event(x_coord, y_coord, "b1c")
debug.printMessage(debug.LEVEL_INFO, f"OCRDesktop: Clicked at ({x_coord}, {y_coord})", True)
+711 -20
View File
@@ -52,6 +52,13 @@ class SpeechAndVerbosityManager:
self._handlers = self._setup_handlers()
self._bindings = self._setup_bindings()
# Register with D-Bus
msg = "SPEECH AND VERBOSITY MANAGER: Registering D-Bus commands."
debug.printMessage(debug.LEVEL_INFO, msg, True)
controller = dbus_service.get_remote_controller()
if controller:
controller.register_decorated_module("SpeechAndVerbosityManager", self)
def get_bindings(self):
"""Returns the notification-presenter keybindings."""
@@ -259,7 +266,186 @@ class SpeechAndVerbosityManager:
def _get_server(self):
return speech.getSpeechServer()
# D-Bus getters and setters for speech settings
# ========================================================================
# D-Bus Speech Server Controls
# ========================================================================
@dbus_service.getter
def get_current_server(self) -> str:
"""Returns the name of the current speech server (Speech Dispatcher or Spiel)."""
server = self._get_server()
if server is None:
return ""
return server.getFactoryName() if hasattr(server, 'getFactoryName') else ""
@dbus_service.getter
def get_available_servers(self) -> list:
"""Returns a list of available speech servers."""
# TODO: Implement multi-server support if needed
return ["speechdispatcher"]
@dbus_service.getter
def get_current_synthesizer(self) -> str:
"""Returns the current synthesizer of the speech server."""
server = self._get_server()
if server is None:
return ""
return server.getOutputModule() if hasattr(server, 'getOutputModule') else ""
@dbus_service.setter
def set_current_synthesizer(self, value: str) -> bool:
"""Sets the current synthesizer of the active speech server."""
server = self._get_server()
if server is None:
return False
try:
if hasattr(server, 'setOutputModule'):
server.setOutputModule(value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting synthesizer: {e}", True)
return False
@dbus_service.getter
def get_available_synthesizers(self) -> list:
"""Returns a list of available synthesizers of the speech server."""
server = self._get_server()
if server is None:
return []
try:
if hasattr(server, 'list_output_modules'):
return server.list_output_modules()
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error getting synthesizers: {e}", True)
return []
# ========================================================================
# D-Bus Voice Controls
# ========================================================================
@dbus_service.getter
def get_available_voices(self) -> list:
"""Returns a list of available voices for the current synthesizer."""
server = self._get_server()
if server is None:
return []
try:
if hasattr(server, 'getVoiceFamilies'):
voices = server.getVoiceFamilies()
return [v.get('name', '') for v in voices if v.get('name')]
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error getting voices: {e}", True)
return []
@dbus_service.getter
def get_current_voice(self) -> str:
"""Returns the current voice name."""
server = self._get_server()
if server is None:
return ""
try:
if hasattr(server, 'getVoiceFamily'):
family = server.getVoiceFamily()
if family:
return family.get('name', '')
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error getting current voice: {e}", True)
return ""
@dbus_service.setter
def set_current_voice(self, voice_name: str) -> bool:
"""Sets the current voice for the active synthesizer."""
server = self._get_server()
if server is None:
return False
try:
if hasattr(server, 'getVoiceFamilies') and hasattr(server, 'setVoiceFamily'):
voices = server.getVoiceFamilies()
for voice_family in voices:
if voice_family.get('name') == voice_name:
server.setVoiceFamily(voice_family)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting voice: {e}", True)
return False
# ========================================================================
# D-Bus Rate/Pitch/Volume Controls
# ========================================================================
@dbus_service.getter
def get_rate(self) -> int:
"""Returns the current speech rate."""
from . import acss
result = 50
default_voice = settings.voices.get(settings.DEFAULT_VOICE)
if default_voice and acss.ACSS.RATE in default_voice:
result = default_voice[acss.ACSS.RATE]
return result
@dbus_service.setter
def set_rate(self, value: int) -> bool:
"""Sets the current speech rate (0-100, default: 50)."""
try:
from . import acss
default_voice = settings.voices.get(settings.DEFAULT_VOICE)
if default_voice and acss.ACSS.RATE in default_voice:
default_voice[acss.ACSS.RATE] = value
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting rate: {e}", True)
return False
@dbus_service.getter
def get_pitch(self) -> float:
"""Returns the current speech pitch."""
from . import acss
result = 5.0
default_voice = settings.voices.get(settings.DEFAULT_VOICE)
if default_voice and acss.ACSS.AVERAGE_PITCH in default_voice:
result = default_voice[acss.ACSS.AVERAGE_PITCH]
return result
@dbus_service.setter
def set_pitch(self, value: float) -> bool:
"""Sets the current speech pitch (0.0-10.0, default: 5.0)."""
try:
from . import acss
default_voice = settings.voices.get(settings.DEFAULT_VOICE)
if default_voice and acss.ACSS.AVERAGE_PITCH in default_voice:
default_voice[acss.ACSS.AVERAGE_PITCH] = value
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting pitch: {e}", True)
return False
@dbus_service.getter
def get_volume(self) -> float:
"""Returns the current speech volume."""
from . import acss
result = 10.0
default_voice = settings.voices.get(settings.DEFAULT_VOICE)
if default_voice and acss.ACSS.GAIN in default_voice:
result = default_voice[acss.ACSS.GAIN]
return result
@dbus_service.setter
def set_volume(self, value: float) -> bool:
"""Sets the current speech volume (0.0-10.0, default: 10.0)."""
try:
from . import acss
default_voice = settings.voices.get(settings.DEFAULT_VOICE)
if default_voice and acss.ACSS.GAIN in default_voice:
default_voice[acss.ACSS.GAIN] = value
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting volume: {e}", True)
return False
# ========================================================================
# D-Bus Speech Enable/Mute Controls
# ========================================================================
@dbus_service.getter
def get_speech_is_muted(self) -> bool:
"""Returns whether speech output is temporarily muted."""
@@ -405,12 +591,484 @@ class SpeechAndVerbosityManager:
_settings_manager.setSetting('capitalizationStyle', settings.CAPITALIZATION_STYLE_SPELL)
else:
return False
self.update_capitalization_style()
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting capitalization style: {e}", True)
return False
def decrease_rate(self, script, event=None):
# ========================================================================
# D-Bus Verbosity Settings
# ========================================================================
@dbus_service.getter
def get_speak_misspelled_indicator(self) -> bool:
"""Returns whether the misspelled indicator is spoken."""
return _settings_manager.getSetting('speakMisspelledIndicator')
@dbus_service.setter
def set_speak_misspelled_indicator(self, value: bool) -> bool:
"""Sets whether the misspelled indicator is spoken."""
try:
_settings_manager.setSetting('speakMisspelledIndicator', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speak misspelled indicator: {e}", True)
return False
@dbus_service.getter
def get_speak_description(self) -> bool:
"""Returns whether object descriptions are spoken."""
return _settings_manager.getSetting('speakDescription')
@dbus_service.setter
def set_speak_description(self, value: bool) -> bool:
"""Sets whether object descriptions are spoken."""
try:
_settings_manager.setSetting('speakDescription', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speak description: {e}", True)
return False
@dbus_service.getter
def get_speak_position_in_set(self) -> bool:
"""Returns whether the position and set size of objects are spoken."""
return _settings_manager.getSetting('enablePositionSpeaking')
@dbus_service.setter
def set_speak_position_in_set(self, value: bool) -> bool:
"""Sets whether the position and set size of objects are spoken."""
try:
_settings_manager.setSetting('enablePositionSpeaking', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speak position in set: {e}", True)
return False
@dbus_service.getter
def get_speak_widget_mnemonic(self) -> bool:
"""Returns whether widget mnemonics are spoken."""
return _settings_manager.getSetting('enableMnemonicSpeaking')
@dbus_service.setter
def set_speak_widget_mnemonic(self, value: bool) -> bool:
"""Sets whether widget mnemonics are spoken."""
try:
_settings_manager.setSetting('enableMnemonicSpeaking', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speak widget mnemonic: {e}", True)
return False
@dbus_service.getter
def get_speak_tutorial_messages(self) -> bool:
"""Returns whether tutorial messages are spoken."""
return _settings_manager.getSetting('enableTutorialMessages')
@dbus_service.setter
def set_speak_tutorial_messages(self, value: bool) -> bool:
"""Sets whether tutorial messages are spoken."""
try:
_settings_manager.setSetting('enableTutorialMessages', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speak tutorial messages: {e}", True)
return False
@dbus_service.getter
def get_insert_pauses_between_utterances(self) -> bool:
"""Returns whether pauses are inserted between utterances, e.g. between name and role."""
return _settings_manager.getSetting('enablePauseBreaks')
@dbus_service.setter
def set_insert_pauses_between_utterances(self, value: bool) -> bool:
"""Sets whether pauses are inserted between utterances, e.g. between name and role."""
try:
_settings_manager.setSetting('enablePauseBreaks', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting insert pauses: {e}", True)
return False
@dbus_service.getter
def get_repeated_character_limit(self) -> int:
"""Returns the count at which repeated, non-alphanumeric symbols will be described."""
return _settings_manager.getSetting('repeatCharacterLimit')
@dbus_service.setter
def set_repeated_character_limit(self, value: int) -> bool:
"""Sets the count at which repeated, non-alphanumeric symbols will be described."""
try:
_settings_manager.setSetting('repeatCharacterLimit', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting repeated character limit: {e}", True)
return False
@dbus_service.getter
def get_use_pronunciation_dictionary(self) -> bool:
"""Returns whether the user's pronunciation dictionary should be applied."""
return _settings_manager.getSetting('usePronunciationDictionary')
@dbus_service.setter
def set_use_pronunciation_dictionary(self, value: bool) -> bool:
"""Sets whether the user's pronunciation dictionary should be applied."""
try:
_settings_manager.setSetting('usePronunciationDictionary', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting use pronunciation dictionary: {e}", True)
return False
@dbus_service.getter
def get_messages_are_detailed(self) -> bool:
"""Returns whether informative messages will be detailed or brief."""
return _settings_manager.getSetting('messagesAreDetailed')
@dbus_service.setter
def set_messages_are_detailed(self, value: bool) -> bool:
"""Sets whether informative messages will be detailed or brief."""
try:
_settings_manager.setSetting('messagesAreDetailed', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting messages are detailed: {e}", True)
return False
@dbus_service.getter
def get_speak_indentation_only_if_changed(self) -> bool:
"""Returns whether indentation will be announced only if it has changed."""
return _settings_manager.getSetting('speakIndentationOnlyIfChanged')
@dbus_service.setter
def set_speak_indentation_only_if_changed(self, value: bool) -> bool:
"""Sets whether indentation will be announced only if it has changed."""
try:
_settings_manager.setSetting('speakIndentationOnlyIfChanged', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speak indentation only if changed: {e}", True)
return False
# ========================================================================
# D-Bus Table Reading Settings
# ========================================================================
@dbus_service.getter
def get_speak_blank_lines(self) -> bool:
"""Returns whether blank lines will be spoken."""
return _settings_manager.getSetting('speakBlankLines')
@dbus_service.setter
def set_speak_blank_lines(self, value: bool) -> bool:
"""Sets whether blank lines will be spoken."""
try:
_settings_manager.setSetting('speakBlankLines', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speak blank lines: {e}", True)
return False
@dbus_service.getter
def get_speak_row_in_gui_table(self) -> bool:
"""Returns whether Up/Down in GUI tables speaks the row or just the cell."""
return _settings_manager.getSetting('readFullRowInGUITable')
@dbus_service.setter
def set_speak_row_in_gui_table(self, value: bool) -> bool:
"""Sets whether Up/Down in GUI tables speaks the row or just the cell."""
try:
_settings_manager.setSetting('readFullRowInGUITable', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speak row in GUI table: {e}", True)
return False
@dbus_service.getter
def get_speak_row_in_document_table(self) -> bool:
"""Returns whether Up/Down in text-document tables speaks the row or just the cell."""
return _settings_manager.getSetting('readFullRowInDocumentTable')
@dbus_service.setter
def set_speak_row_in_document_table(self, value: bool) -> bool:
"""Sets whether Up/Down in text-document tables speaks the row or just the cell."""
try:
_settings_manager.setSetting('readFullRowInDocumentTable', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speak row in document table: {e}", True)
return False
@dbus_service.getter
def get_speak_row_in_spreadsheet(self) -> bool:
"""Returns whether Up/Down in spreadsheets speaks the row or just the cell."""
return _settings_manager.getSetting('readFullRowInSpreadSheet')
@dbus_service.setter
def set_speak_row_in_spreadsheet(self, value: bool) -> bool:
"""Sets whether Up/Down in spreadsheets speaks the row or just the cell."""
try:
_settings_manager.setSetting('readFullRowInSpreadSheet', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speak row in spreadsheet: {e}", True)
return False
@dbus_service.getter
def get_announce_cell_span(self) -> bool:
"""Returns whether cell spans are announced when greater than 1."""
return _settings_manager.getSetting('speakCellSpan')
@dbus_service.setter
def set_announce_cell_span(self, value: bool) -> bool:
"""Sets whether cell spans are announced when greater than 1."""
try:
_settings_manager.setSetting('speakCellSpan', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting announce cell span: {e}", True)
return False
@dbus_service.getter
def get_announce_cell_coordinates(self) -> bool:
"""Returns whether (non-spreadsheet) cell coordinates are announced."""
return _settings_manager.getSetting('speakCellCoordinates')
@dbus_service.setter
def set_announce_cell_coordinates(self, value: bool) -> bool:
"""Sets whether (non-spreadsheet) cell coordinates are announced."""
try:
_settings_manager.setSetting('speakCellCoordinates', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting announce cell coordinates: {e}", True)
return False
@dbus_service.getter
def get_announce_spreadsheet_cell_coordinates(self) -> bool:
"""Returns whether spreadsheet cell coordinates are announced."""
return _settings_manager.getSetting('speakSpreadsheetCoordinates')
@dbus_service.setter
def set_announce_spreadsheet_cell_coordinates(self, value: bool) -> bool:
"""Sets whether spreadsheet cell coordinates are announced."""
try:
_settings_manager.setSetting('speakSpreadsheetCoordinates', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting announce spreadsheet cell coordinates: {e}", True)
return False
@dbus_service.getter
def get_always_announce_selected_range_in_spreadsheet(self) -> bool:
"""Returns whether the selected range in spreadsheets is always announced."""
return _settings_manager.getSetting('alwaysSpeakSelectedSpreadsheetRange')
@dbus_service.setter
def set_always_announce_selected_range_in_spreadsheet(self, value: bool) -> bool:
"""Sets whether the selected range in spreadsheets is always announced."""
try:
_settings_manager.setSetting('alwaysSpeakSelectedSpreadsheetRange', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting always announce selected range: {e}", True)
return False
@dbus_service.getter
def get_announce_cell_headers(self) -> bool:
"""Returns whether cell headers are announced."""
return _settings_manager.getSetting('speakCellHeaders')
@dbus_service.setter
def set_announce_cell_headers(self, value: bool) -> bool:
"""Sets whether cell headers are announced."""
try:
_settings_manager.setSetting('speakCellHeaders', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting announce cell headers: {e}", True)
return False
# ========================================================================
# D-Bus Context Announcement Settings
# ========================================================================
@dbus_service.getter
def get_announce_blockquote(self) -> bool:
"""Returns whether blockquotes are announced when entered."""
return _settings_manager.getSetting('speakContextBlockquote')
@dbus_service.setter
def set_announce_blockquote(self, value: bool) -> bool:
"""Sets whether blockquotes are announced when entered."""
try:
_settings_manager.setSetting('speakContextBlockquote', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting announce blockquote: {e}", True)
return False
@dbus_service.getter
def get_announce_form(self) -> bool:
"""Returns whether non-landmark forms are announced when entered."""
return _settings_manager.getSetting('speakContextNonLandmarkForm')
@dbus_service.setter
def set_announce_form(self, value: bool) -> bool:
"""Sets whether non-landmark forms are announced when entered."""
try:
_settings_manager.setSetting('speakContextNonLandmarkForm', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting announce form: {e}", True)
return False
@dbus_service.getter
def get_announce_grouping(self) -> bool:
"""Returns whether groupings are announced when entered."""
return _settings_manager.getSetting('speakContextPanel')
@dbus_service.setter
def set_announce_grouping(self, value: bool) -> bool:
"""Sets whether groupings are announced when entered."""
try:
_settings_manager.setSetting('speakContextPanel', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting announce grouping: {e}", True)
return False
@dbus_service.getter
def get_announce_landmark(self) -> bool:
"""Returns whether landmarks are announced when entered."""
return _settings_manager.getSetting('speakContextLandmark')
@dbus_service.setter
def set_announce_landmark(self, value: bool) -> bool:
"""Sets whether landmarks are announced when entered."""
try:
_settings_manager.setSetting('speakContextLandmark', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting announce landmark: {e}", True)
return False
@dbus_service.getter
def get_announce_list(self) -> bool:
"""Returns whether lists are announced when entered."""
return _settings_manager.getSetting('speakContextList')
@dbus_service.setter
def set_announce_list(self, value: bool) -> bool:
"""Sets whether lists are announced when entered."""
try:
_settings_manager.setSetting('speakContextList', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting announce list: {e}", True)
return False
@dbus_service.getter
def get_announce_table(self) -> bool:
"""Returns whether tables are announced when entered."""
return _settings_manager.getSetting('speakContextTable')
@dbus_service.setter
def set_announce_table(self, value: bool) -> bool:
"""Sets whether tables are announced when entered."""
try:
_settings_manager.setSetting('speakContextTable', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting announce table: {e}", True)
return False
@dbus_service.getter
def get_use_color_names(self) -> bool:
"""Returns whether colors are announced by name or as RGB values."""
return _settings_manager.getSetting('useColorNames')
@dbus_service.setter
def set_use_color_names(self, value: bool) -> bool:
"""Sets whether colors are announced by name or as RGB values."""
try:
_settings_manager.setSetting('useColorNames', value)
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting use color names: {e}", True)
return False
# ========================================================================
# D-Bus Speech Control Commands
# ========================================================================
@dbus_service.command
def start_speech(self, script=None, event=None) -> bool:
"""Starts the speech server."""
try:
speech.init()
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error starting speech: {e}", True)
return False
@dbus_service.command
def interrupt_speech(self, script=None, event=None) -> bool:
"""Interrupts the speech server."""
try:
server = self._get_server()
if server:
server.stop()
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error interrupting speech: {e}", True)
return False
@dbus_service.command
def shutdown_speech(self, script=None, event=None) -> bool:
"""Shuts down the speech server."""
try:
server = self._get_server()
if server:
server.shutdownActiveServers()
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error shutting down speech: {e}", True)
return False
@dbus_service.command
def refresh_speech(self, script=None, event=None) -> bool:
"""Shuts down and re-initializes speech."""
try:
self.shutdown_speech()
self.start_speech()
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error refreshing speech: {e}", True)
return False
@dbus_service.setter
def set_speech_is_enabled(self, value: bool) -> bool:
"""Sets whether the speech server is enabled. See also is-muted."""
try:
_settings_manager.setSetting('enableSpeech', value)
if value:
self.start_speech()
else:
self.shutdown_speech()
return True
except Exception as e:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting speech enabled: {e}", True)
return False
@dbus_service.getter
def get_speech_is_enabled(self) -> bool:
"""Returns whether the speech server is enabled. See also is-muted."""
return _settings_manager.getSetting('enableSpeech')
@dbus_service.command
def decrease_rate(self, script=None, event=None):
"""Decreases the speech rate"""
server = self._get_server()
@@ -420,9 +1078,12 @@ class SpeechAndVerbosityManager:
return True
server.decreaseSpeechRate()
if script:
script.presentMessage(messages.SPEECH_SLOWER)
return True
def increase_rate(self, script, event=None):
@dbus_service.command
def increase_rate(self, script=None, event=None):
"""Increases the speech rate"""
server = self._get_server()
@@ -432,9 +1093,12 @@ class SpeechAndVerbosityManager:
return True
server.increaseSpeechRate()
if script:
script.presentMessage(messages.SPEECH_FASTER)
return True
def decrease_pitch(self, script, event=None):
@dbus_service.command
def decrease_pitch(self, script=None, event=None):
"""Decreases the speech pitch"""
server = self._get_server()
@@ -444,9 +1108,12 @@ class SpeechAndVerbosityManager:
return True
server.decreaseSpeechPitch()
if script:
script.presentMessage(messages.SPEECH_LOWER)
return True
def increase_pitch(self, script, event=None):
@dbus_service.command
def increase_pitch(self, script=None, event=None):
"""Increase the speech pitch"""
server = self._get_server()
@@ -456,9 +1123,12 @@ class SpeechAndVerbosityManager:
return True
server.increaseSpeechPitch()
if script:
script.presentMessage(messages.SPEECH_HIGHER)
return True
def decrease_volume(self, script, event=None):
@dbus_service.command
def decrease_volume(self, script=None, event=None):
"""Decreases the speech volume"""
server = self._get_server()
@@ -468,9 +1138,12 @@ class SpeechAndVerbosityManager:
return True
server.decreaseSpeechVolume()
if script:
script.presentMessage(messages.SPEECH_SOFTER)
return True
def increase_volume(self, script, event=None):
@dbus_service.command
def increase_volume(self, script=None, event=None):
"""Increases the speech volume"""
server = self._get_server()
@@ -480,6 +1153,8 @@ class SpeechAndVerbosityManager:
return True
server.increaseSpeechVolume()
if script:
script.presentMessage(messages.SPEECH_LOUDER)
return True
def update_capitalization_style(self):
@@ -506,7 +1181,8 @@ class SpeechAndVerbosityManager:
server.updatePunctuationLevel()
return True
def cycle_synthesizer(self, script, event=None):
@dbus_service.command
def cycle_synthesizer(self, script=None, event=None):
"""Cycle through the speech-dispatcher's available output modules."""
server = self._get_server()
@@ -532,10 +1208,12 @@ class SpeechAndVerbosityManager:
index = 0
server.setOutputModule(available[index])
script.presentMessage(available[index])
if script:
script.presentMessage(available[index])
return True
def cycle_capitalization_style(self, script, event=None):
@dbus_service.command
def cycle_capitalization_style(self, script=None, event=None):
"""Cycle through the speech-dispatcher capitalization styles."""
current_style = _settings_manager.getSetting('capitalizationStyle')
@@ -553,11 +1231,13 @@ class SpeechAndVerbosityManager:
brief = messages.CAPITALIZATION_NONE_BRIEF
_settings_manager.setSetting('capitalizationStyle', new_style)
script.presentMessage(full, brief)
if script:
script.presentMessage(full, brief)
self.update_capitalization_style()
return True
def cycle_punctuation_level(self, script, event=None):
@dbus_service.command
def cycle_punctuation_level(self, script=None, event=None):
"""Cycle through the punctuation levels for speech."""
current_level = _settings_manager.getSetting('verbalizePunctuationStyle')
@@ -579,11 +1259,13 @@ class SpeechAndVerbosityManager:
brief = messages.PUNCTUATION_NONE_BRIEF
_settings_manager.setSetting('verbalizePunctuationStyle', new_level)
script.presentMessage(full, brief)
if script:
script.presentMessage(full, brief)
self.update_punctuation_level()
return True
def cycle_key_echo(self, script, event=None):
@dbus_service.command
def cycle_key_echo(self, script=None, event=None):
"""Cycle through the key echo levels."""
(new_key, new_word, new_sentence) = (False, False, False)
key = _settings_manager.getSetting('enableKeyEcho')
@@ -618,10 +1300,12 @@ class SpeechAndVerbosityManager:
_settings_manager.setSetting('enableKeyEcho', new_key)
_settings_manager.setSetting('enableEchoByWord', new_word)
_settings_manager.setSetting('enableEchoBySentence', new_sentence)
script.presentMessage(full, brief)
if script:
script.presentMessage(full, brief)
return True
def change_number_style(self, script, event=None):
@dbus_service.command
def change_number_style(self, script=None, event=None):
"""Changes spoken number style between digits and words."""
speak_digits = _settings_manager.getSetting('speakNumbersAsDigits')
@@ -633,7 +1317,8 @@ class SpeechAndVerbosityManager:
full = messages.NUMBER_STYLE_DIGITS_FULL
_settings_manager.setSetting('speakNumbersAsDigits', not speak_digits)
script.presentMessage(full, brief)
if script:
script.presentMessage(full, brief)
return True
@dbus_service.command
@@ -666,7 +1351,8 @@ class SpeechAndVerbosityManager:
_settings_manager.setSetting('speechVerbosityLevel', settings.VERBOSITY_LEVEL_BRIEF)
return True
def toggle_indentation_and_justification(self, script, event=None):
@dbus_service.command
def toggle_indentation_and_justification(self, script=None, event=None):
"""Toggles the speaking of indentation and justification."""
value = _settings_manager.getSetting('enableSpeechIndentation')
@@ -677,12 +1363,17 @@ class SpeechAndVerbosityManager:
else:
full = messages.INDENTATION_JUSTIFICATION_OFF_FULL
brief = messages.INDENTATION_JUSTIFICATION_OFF_BRIEF
script.presentMessage(full, brief)
if script:
script.presentMessage(full, brief)
return True
def toggle_table_cell_reading_mode(self, script, event=None):
@dbus_service.command
def toggle_table_cell_reading_mode(self, script=None, event=None):
"""Toggles between speak cell and speak row."""
if not script:
return False
table = script.utilities.getTable(cthulhu_state.locusOfFocus)
if not table:
script.presentMessage(messages.TABLE_NOT_IN_A)
+1
View File
@@ -37,6 +37,7 @@ gi.require_version("Atspi", "2.0")
from gi.repository import Atspi
from . import cmdnames
from . import dbus_service
from . import debug
from . import guilabels
from . import input_event