aboutsummaryrefslogtreecommitdiff
path: root/gtksecentry
diff options
context:
space:
mode:
Diffstat (limited to 'gtksecentry')
-rw-r--r--gtksecentry/Makefile.am12
-rw-r--r--gtksecentry/Makefile.in560
-rw-r--r--gtksecentry/gseal-gtk-compat.h61
-rw-r--r--gtksecentry/gtksecentry.c3364
-rw-r--r--gtksecentry/gtksecentry.h190
5 files changed, 0 insertions, 4187 deletions
diff --git a/gtksecentry/Makefile.am b/gtksecentry/Makefile.am
deleted file mode 100644
index 2daf7ed..0000000
--- a/gtksecentry/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-NULL =
-
-AM_CPPFLAGS = $(GTK_CFLAGS) \
- -I$(top_srcdir)/secmem -I$(top_srcdir)/gtksecentry
-
-noinst_LIBRARIES = libgtksecentry.a
-
-libgtksecentry_a_SOURCES = \
- gtksecentry.c \
- gtksecentry.h \
- gseal-gtk-compat.h
-
diff --git a/gtksecentry/Makefile.in b/gtksecentry/Makefile.in
deleted file mode 100644
index 56746df..0000000
--- a/gtksecentry/Makefile.in
+++ /dev/null
@@ -1,560 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
-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 = gtksecentry
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
- $(top_srcdir)/m4/compiler-flags.m4 \
- $(top_srcdir)/m4/gnome-doc-utils.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-ARFLAGS = cru
-AM_V_AR = $(am__v_AR_$(V))
-am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
-am__v_AR_0 = @echo " AR " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
-libgtksecentry_a_AR = $(AR) $(ARFLAGS)
-libgtksecentry_a_LIBADD =
-am_libgtksecentry_a_OBJECTS = gtksecentry.$(OBJEXT)
-libgtksecentry_a_OBJECTS = $(am_libgtksecentry_a_OBJECTS)
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
-am__v_lt_0 = --silent
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo " CC " $@;
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo " GEN " $@;
-SOURCES = $(libgtksecentry_a_SOURCES)
-DIST_SOURCES = $(libgtksecentry_a_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-COMPILER_FLAGS = @COMPILER_FLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DBUS_CFLAGS = @DBUS_CFLAGS@
-DBUS_LIBS = @DBUS_LIBS@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GCONFTOOL = @GCONFTOOL@
-GCONF_CFLAGS = @GCONF_CFLAGS@
-GCONF_LIBS = @GCONF_LIBS@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GMODULE_CFLAGS = @GMODULE_CFLAGS@
-GMODULE_LIBS = @GMODULE_LIBS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GREP = @GREP@
-GTK_CFLAGS = @GTK_CFLAGS@
-GTK_LIBS = @GTK_LIBS@
-HELP_DIR = @HELP_DIR@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-KA_PLUGINS_DIR = @KA_PLUGINS_DIR@
-KRB5_CFLAGS = @KRB5_CFLAGS@
-KRB5_CONFIG = @KRB5_CONFIG@
-KRB5_LIBS = @KRB5_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBCAP = @LIBCAP@
-LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
-LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NETWORK_MANAGER_CFLAGS = @NETWORK_MANAGER_CFLAGS@
-NETWORK_MANAGER_LIBS = @NETWORK_MANAGER_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-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@
-PAM_LIBS = @PAM_LIBS@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-RANLIB = @RANLIB@
-SC_PKCS11 = @SC_PKCS11@
-SED = @SED@
-SETCAP = @SETCAP@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-WARN_PYTHON_CFLAGS = @WARN_PYTHON_CFLAGS@
-XGETTEXT = @XGETTEXT@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-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@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-check_interval = @check_interval@
-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@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-minimum_lifetime = @minimum_lifetime@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-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@
-NULL =
-AM_CPPFLAGS = $(GTK_CFLAGS) \
- -I$(top_srcdir)/secmem -I$(top_srcdir)/gtksecentry
-
-noinst_LIBRARIES = libgtksecentry.a
-libgtksecentry_a_SOURCES = \
- gtksecentry.c \
- gtksecentry.h \
- gseal-gtk-compat.h
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(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 gtksecentry/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu gtksecentry/Makefile
-.PRECIOUS: 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__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- 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):
-
-clean-noinstLIBRARIES:
- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libgtksecentry.a: $(libgtksecentry_a_OBJECTS) $(libgtksecentry_a_DEPENDENCIES)
- $(AM_V_at)-rm -f libgtksecentry.a
- $(AM_V_AR)$(libgtksecentry_a_AR) libgtksecentry.a $(libgtksecentry_a_OBJECTS) $(libgtksecentry_a_LIBADD)
- $(AM_V_at)$(RANLIB) libgtksecentry.a
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtksecentry.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- 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
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- 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"
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(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
-check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || 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-am
-
-clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLIBRARIES ctags distclean \
- distclean-compile distclean-generic distclean-libtool \
- 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 \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
- pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# 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:
diff --git a/gtksecentry/gseal-gtk-compat.h b/gtksecentry/gseal-gtk-compat.h
deleted file mode 100644
index bbad970..0000000
--- a/gtksecentry/gseal-gtk-compat.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
-/*
- * Copyright © 2009 Thomas H.P. Andersen <phomes@gmail.com>,
- * 2009 Javier Jardón <jjardon@gnome.org>
- * 2010 Guido Günther <agx@sigxcpu.org>
- *
- * This runtime is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1, or (at your option)
- * any later version.
- *
- * This runtime is distributed in the hope runtime it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this runtime; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef GSEAL_GTK_COMPAT_H
-#define GSEAL_GTK_COMPAT_H
-
-G_BEGIN_DECLS
-
-#if !GTK_CHECK_VERSION (2, 20, 0)
-#define gtk_widget_get_realized(widget) GTK_WIDGET_REALIZED(widget)
-#define gtk_widget_get_mapped(widget) GTK_WIDGET_MAPPED(widget)
-#endif /* GTK < 2.20.0 */
-
-#if !GTK_CHECK_VERSION (2, 18, 0)
-#define gtk_cell_renderer_get_alignment(cell, xalign, yalign) g_object_get (cell, "xalign", xalign, "yalign", yalign, NULL)
-#define gtk_cell_renderer_get_padding(cell, xpad, ypad) g_object_get (cell, "xpad", xpad, "ypad", ypad, NULL)
-#define gtk_cell_renderer_set_padding(cell, xpad, ypad) g_object_set (cell, "xpad", xpad, "ypad", ypad, NULL)
-#define gtk_widget_get_allocation(widget, alloc) (*(alloc)=(widget)->allocation)
-#define gtk_widget_set_allocation(widget, alloc) ((widget)->allocation=*(alloc))
-#define gtk_widget_get_app_paintable(widget) (GTK_WIDGET_APP_PAINTABLE (widget))
-#define gtk_widget_set_can_default(widget, can_default) ((can_default) ? (GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_DEFAULT)) : (GTK_WIDGET_UNSET_FLAGS (widget, GTK_CAN_DEFAULT)))
-#define gtk_widget_set_can_focus(widget, can_focus) ((can_focus) ? (GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS)) : (GTK_WIDGET_UNSET_FLAGS (widget, GTK_CAN_FOCUS)))
-#define gtk_widget_set_double_buffered(widget, double_buffered) ((double_buffered) ? (GTK_WIDGET_SET_FLAGS (widget, GTK_DOUBLE_BUFFERED)) : (GTK_WIDGET_UNSET_FLAGS (widget, GTK_DOUBLE_BUFFERED)))
-#define gtk_widget_is_drawable(widget) (GTK_WIDGET_DRAWABLE (widget))
-#define gtk_widget_is_sensitive(widget) (GTK_WIDGET_IS_SENSITIVE(widget))
-#define gtk_widget_has_focus(widget) (GTK_WIDGET_HAS_FOCUS (widget))
-#define gtk_widget_get_has_window(widget) (!GTK_WIDGET_NO_WINDOW (widget))
-#define gtk_widget_get_sensitive(widget) (GTK_WIDGET_SENSITIVE(widget))
-#define gtk_widget_get_state(widget) ((widget)->state)
-#define gtk_widget_get_visible(widget) (GTK_WIDGET_VISIBLE (widget))
-#define gtk_widget_set_window(widget, _window) ((widget)->window=_window)
-#define gtk_widget_set_realized(widget, realized) ((realized) ? (GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED)) : (GTK_WIDGET_UNSET_FLAGS (widget, GTK_REALIZED)))
-#endif /* GTK+ < 2.18.0 */
-
-#if !GTK_CHECK_VERSION (2, 14, 0)
-#define gtk_window_get_default_widget(window) ((window)->default_widget)
-#define gtk_widget_get_window(widget) ((widget)->window)
-#endif /* GTK+ < 2.14.0 */
-
-G_END_DECLS
-
-#endif /* GSEAL_GTK_COMPAT_H */
-/* ex:ts=8:noet: */
diff --git a/gtksecentry/gtksecentry.c b/gtksecentry/gtksecentry.c
deleted file mode 100644
index f68f094..0000000
--- a/gtksecentry/gtksecentry.c
+++ /dev/null
@@ -1,3364 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 2004 Albrecht Dreß
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
- * file for a list of people on the GTK+ Team. See the ChangeLog
- * files for a list of changes. These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
- */
-
-/*
- * Heavily stripped down for use in pinentry-gtk-2 by Albrecht Dreß
- * <albrecht.dress@arcor.de> Feb. 2004:
- *
- * The entry is now always invisible, uses secure memory methods to
- * allocate the text memory, and all potentially dangerous methods
- * (copy & paste, popup, etc.) have been removed.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-
-#include "gtksecentry.h"
-#include "memory.h"
-
-#define MIN_SECURE_ENTRY_WIDTH 150
-#define DRAW_TIMEOUT 20
-#define INNER_BORDER 2
-
-/* Initial size of buffer, in bytes */
-#define MIN_SIZE 16
-
-/* Maximum size of text buffer, in bytes */
-#define MAX_SIZE G_MAXUSHORT
-
-enum {
- ACTIVATE,
- MOVE_CURSOR,
- INSERT_AT_CURSOR,
- DELETE_FROM_CURSOR,
- LAST_SIGNAL
-};
-
-enum {
- PROP_0,
- PROP_CURSOR_POSITION,
- PROP_SELECTION_BOUND,
- PROP_MAX_LENGTH,
- PROP_HAS_FRAME,
- PROP_INVISIBLE_CHAR,
- PROP_ACTIVATES_DEFAULT,
- PROP_WIDTH_CHARS,
- PROP_SCROLL_OFFSET,
- PROP_TEXT
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-/* GObject, GtkObject methods
- */
-static void gtk_secure_entry_class_init(GtkSecureEntryClass * klass);
-static void gtk_secure_entry_editable_init(GtkEditableClass * iface);
-static void gtk_secure_entry_cell_editable_init(GtkCellEditableIface *
- iface);
-static void gtk_secure_entry_init(GtkSecureEntry * entry);
-static void gtk_secure_entry_set_property(GObject * object,
- guint prop_id,
- const GValue * value,
- GParamSpec * pspec);
-static void gtk_secure_entry_get_property(GObject * object,
- guint prop_id,
- GValue * value,
- GParamSpec * pspec);
-static void gtk_secure_entry_finalize(GObject * object);
-
-/* GtkWidget methods
- */
-static void gtk_secure_entry_realize(GtkWidget * widget);
-static void gtk_secure_entry_unrealize(GtkWidget * widget);
-static void gtk_secure_entry_size_request(GtkWidget * widget,
- GtkRequisition * requisition);
-static void gtk_secure_entry_size_allocate(GtkWidget * widget,
- GtkAllocation * allocation);
-static void gtk_secure_entry_draw_frame(GtkWidget * widget);
-static gint gtk_secure_entry_expose(GtkWidget * widget,
- GdkEventExpose * event);
-static gint gtk_secure_entry_button_press(GtkWidget * widget,
- GdkEventButton * event);
-static gint gtk_secure_entry_button_release(GtkWidget * widget,
- GdkEventButton * event);
-static gint gtk_secure_entry_motion_notify(GtkWidget * widget,
- GdkEventMotion * event);
-static gint gtk_secure_entry_key_press(GtkWidget * widget,
- GdkEventKey * event);
-static gint gtk_secure_entry_key_release(GtkWidget * widget,
- GdkEventKey * event);
-static gint gtk_secure_entry_focus_in(GtkWidget * widget,
- GdkEventFocus * event);
-static gint gtk_secure_entry_focus_out(GtkWidget * widget,
- GdkEventFocus * event);
-static void gtk_secure_entry_grab_focus(GtkWidget * widget);
-static void gtk_secure_entry_style_set(GtkWidget * widget,
- GtkStyle * previous_style);
-static void gtk_secure_entry_direction_changed(GtkWidget * widget,
- GtkTextDirection
- previous_dir);
-static void gtk_secure_entry_state_changed(GtkWidget * widget,
- GtkStateType previous_state);
-static void gtk_secure_entry_screen_changed(GtkWidget * widget,
- GdkScreen * old_screen);
-
-/* GtkEditable method implementations
- */
-static void gtk_secure_entry_insert_text(GtkEditable * editable,
- const gchar * new_text,
- gint new_text_length,
- gint * position);
-static void gtk_secure_entry_delete_text(GtkEditable * editable,
- gint start_pos, gint end_pos);
-static void gtk_secure_entry_real_set_position(GtkEditable * editable,
- gint position);
-static gint gtk_secure_entry_get_position(GtkEditable * editable);
-static void gtk_secure_entry_set_selection_bounds(GtkEditable * editable,
- gint start, gint end);
-static gboolean gtk_secure_entry_get_selection_bounds(GtkEditable *
- editable,
- gint * start,
- gint * end);
-
-/* GtkCellEditable method implementations
- */
-static void gtk_secure_entry_start_editing(GtkCellEditable * cell_editable,
- GdkEvent * event);
-
-/* Default signal handlers
- */
-static void gtk_secure_entry_real_insert_text(GtkEditable * editable,
- const gchar * new_text,
- gint new_text_length,
- gint * position);
-static void gtk_secure_entry_real_delete_text(GtkEditable * editable,
- gint start_pos,
- gint end_pos);
-static void gtk_secure_entry_move_cursor(GtkSecureEntry * entry,
- GtkMovementStep step,
- gint count,
- gboolean extend_selection);
-static void gtk_secure_entry_insert_at_cursor(GtkSecureEntry * entry,
- const gchar * str);
-static void gtk_secure_entry_delete_from_cursor(GtkSecureEntry * entry,
- GtkDeleteType type,
- gint count);
-static void gtk_secure_entry_real_activate(GtkSecureEntry * entry);
-
-static void gtk_secure_entry_keymap_direction_changed(GdkKeymap * keymap,
- GtkSecureEntry *
- entry);
-/* IM Context Callbacks
- */
-static void gtk_secure_entry_commit_cb(GtkIMContext * context,
- const gchar * str,
- GtkSecureEntry * entry);
-static void gtk_secure_entry_preedit_changed_cb(GtkIMContext * context,
- GtkSecureEntry * entry);
-static gboolean gtk_secure_entry_retrieve_surrounding_cb(GtkIMContext *
- context,
- GtkSecureEntry *
- entry);
-static gboolean gtk_secure_entry_delete_surrounding_cb(GtkIMContext *
- context,
- gint offset,
- gint n_chars,
- GtkSecureEntry *
- entry);
-
-/* Internal routines
- */
-static void gtk_secure_entry_enter_text(GtkSecureEntry * entry,
- const gchar * str);
-static void gtk_secure_entry_set_positions(GtkSecureEntry * entry,
- gint current_pos,
- gint selection_bound);
-static void gtk_secure_entry_draw_text(GtkSecureEntry * entry);
-static void gtk_secure_entry_draw_cursor(GtkSecureEntry * entry);
-static PangoLayout *gtk_secure_entry_ensure_layout(GtkSecureEntry * entry,
- gboolean
- include_preedit);
-static void gtk_secure_entry_reset_layout(GtkSecureEntry * entry);
-static void gtk_secure_entry_queue_draw(GtkSecureEntry * entry);
-static void gtk_secure_entry_reset_im_context(GtkSecureEntry * entry);
-static void gtk_secure_entry_recompute(GtkSecureEntry * entry);
-static gint gtk_secure_entry_find_position(GtkSecureEntry * entry, gint x);
-static void gtk_secure_entry_get_cursor_locations(GtkSecureEntry * entry,
- gint * strong_x,
- gint * weak_x);
-static void gtk_secure_entry_adjust_scroll(GtkSecureEntry * entry);
-static gint gtk_secure_entry_move_visually(GtkSecureEntry * editable,
- gint start, gint count);
-static gint gtk_secure_entry_move_logically(GtkSecureEntry * entry,
- gint start, gint count);
-static gboolean gtk_secure_entry_mnemonic_activate(GtkWidget * widget,
- gboolean group_cycling);
-static void gtk_secure_entry_check_cursor_blink(GtkSecureEntry * entry);
-static void gtk_secure_entry_pend_cursor_blink(GtkSecureEntry * entry);
-static void get_text_area_size(GtkSecureEntry * entry,
- gint * x,
- gint * y, gint * width, gint * height);
-static void get_widget_window_size(GtkSecureEntry * entry,
- gint * x,
- gint * y, gint * width, gint * height);
-
-
-
-#define _gtk_marshal_VOID__VOID g_cclosure_marshal_VOID__VOID
-#define _gtk_marshal_VOID__STRING g_cclosure_marshal_VOID__STRING
-static void _gtk_marshal_VOID__ENUM_INT_BOOLEAN(GClosure * closure,
- GValue * return_value,
- guint n_param_values,
- const GValue *
- param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-static void _gtk_marshal_VOID__ENUM_INT(GClosure * closure,
- GValue * return_value,
- guint n_param_values,
- const GValue * param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-
-static GtkWidgetClass *parent_class = NULL;
-
-gboolean g_use_secure_mem = FALSE;
-
-# define g_sec_new(type, count) \
- ((type *) g_sec_malloc ((unsigned) sizeof (type) * (count)))
-
-#define WITH_SECURE_MEM(EXP) do { \
- gboolean tmp = g_use_secure_mem; \
- g_use_secure_mem = TRUE; \
- EXP; \
- g_use_secure_mem = tmp; \
- } while(0)
-
-
-gpointer
-g_malloc(gsize size)
-{
- gpointer p;
-
- if (size == 0)
- return NULL;
-
- if (g_use_secure_mem)
- p = (gpointer) secmem_malloc(size);
- else
- p = (gpointer) malloc(size);
- if (!p)
- g_error("could not allocate %"G_GSIZE_FORMAT" bytes", size);
-
- return p;
-}
-
-gpointer
-g_malloc0(gsize size)
-{
- gpointer p;
-
- if (size == 0)
- return NULL;
-
- if (g_use_secure_mem) {
- p = (gpointer) secmem_malloc(size);
- if (p)
- memset(p, 0, size);
- } else
- p = (gpointer) calloc(size, 1);
- if (!p)
- g_error("could not allocate %"G_GSIZE_FORMAT" bytes", size);
-
- return p;
-}
-
-gpointer
-g_realloc(gpointer mem, gsize size)
-{
- gpointer p;
-
- if (size == 0) {
- g_free(mem);
-
- return NULL;
- }
-
- if (!mem) {
- if (g_use_secure_mem)
- p = (gpointer) secmem_malloc(size);
- else
- p = (gpointer) malloc(size);
- } else {
- if (g_use_secure_mem) {
- g_assert(m_is_secure(mem));
- p = (gpointer) secmem_realloc(mem, size);
- } else
- p = (gpointer) realloc(mem, size);
- }
-
- if (!p)
- g_error("could not reallocate %lu bytes", (gulong) size);
-
- return p;
-}
-
-void
-g_free(gpointer mem)
-{
- if (mem) {
- if (m_is_secure(mem))
- secmem_free(mem);
- else
- free(mem);
- }
-}
-
-GType
-gtk_secure_entry_get_type(void)
-{
- static GType entry_type = 0;
-
- if (!entry_type) {
- static const GTypeInfo entry_info = {
- sizeof(GtkSecureEntryClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gtk_secure_entry_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(GtkSecureEntry),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gtk_secure_entry_init,
- NULL,
- };
-
- static const GInterfaceInfo editable_info = {
- (GInterfaceInitFunc) gtk_secure_entry_editable_init, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
-
- static const GInterfaceInfo cell_editable_info = {
- (GInterfaceInitFunc) gtk_secure_entry_cell_editable_init, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
-
- entry_type =
- g_type_register_static(GTK_TYPE_WIDGET, "GtkSecureEntry",
- &entry_info, 0);
-
- g_type_add_interface_static(entry_type,
- GTK_TYPE_EDITABLE, &editable_info);
- g_type_add_interface_static(entry_type,
- GTK_TYPE_CELL_EDITABLE,
- &cell_editable_info);
- }
-
- return entry_type;
-}
-
-static void
-add_move_binding(GtkBindingSet * binding_set,
- guint keyval,
- guint modmask, GtkMovementStep step, gint count)
-{
- g_return_if_fail((modmask & GDK_SHIFT_MASK) == 0);
-
- gtk_binding_entry_add_signal(binding_set, keyval, modmask,
- "move_cursor", 3,
- G_TYPE_ENUM, step,
- G_TYPE_INT, count, G_TYPE_BOOLEAN, FALSE);
-
- /* Selection-extending version */
- gtk_binding_entry_add_signal(binding_set, keyval,
- modmask | GDK_SHIFT_MASK, "move_cursor",
- 3, G_TYPE_ENUM, step, G_TYPE_INT, count,
- G_TYPE_BOOLEAN, TRUE);
-}
-
-static void
-gtk_secure_entry_class_init(GtkSecureEntryClass * class)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS(class);
- GtkWidgetClass *widget_class;
- GtkBindingSet *binding_set;
-
- widget_class = (GtkWidgetClass *) class;
- parent_class = g_type_class_peek_parent(class);
-
- gobject_class->finalize = gtk_secure_entry_finalize;
- gobject_class->set_property = gtk_secure_entry_set_property;
- gobject_class->get_property = gtk_secure_entry_get_property;
-
- widget_class->realize = gtk_secure_entry_realize;
- widget_class->unrealize = gtk_secure_entry_unrealize;
- widget_class->size_request = gtk_secure_entry_size_request;
- widget_class->size_allocate = gtk_secure_entry_size_allocate;
- widget_class->expose_event = gtk_secure_entry_expose;
- widget_class->button_press_event = gtk_secure_entry_button_press;
- widget_class->button_release_event = gtk_secure_entry_button_release;
- widget_class->motion_notify_event = gtk_secure_entry_motion_notify;
- widget_class->key_press_event = gtk_secure_entry_key_press;
- widget_class->key_release_event = gtk_secure_entry_key_release;
- widget_class->focus_in_event = gtk_secure_entry_focus_in;
- widget_class->focus_out_event = gtk_secure_entry_focus_out;
- widget_class->grab_focus = gtk_secure_entry_grab_focus;
- widget_class->style_set = gtk_secure_entry_style_set;
- widget_class->direction_changed = gtk_secure_entry_direction_changed;
- widget_class->state_changed = gtk_secure_entry_state_changed;
- widget_class->screen_changed = gtk_secure_entry_screen_changed;
- widget_class->mnemonic_activate = gtk_secure_entry_mnemonic_activate;
-
- class->move_cursor = gtk_secure_entry_move_cursor;
- class->insert_at_cursor = gtk_secure_entry_insert_at_cursor;
- class->delete_from_cursor = gtk_secure_entry_delete_from_cursor;
- class->activate = gtk_secure_entry_real_activate;
-
- g_object_class_install_property(gobject_class,
- PROP_CURSOR_POSITION,
- g_param_spec_int("cursor_position",
- "Cursor Position",
- "The current position of the insertion cursor in chars",
- 0, MAX_SIZE, 0,
- G_PARAM_READABLE));
-
- g_object_class_install_property(gobject_class,
- PROP_SELECTION_BOUND,
- g_param_spec_int("selection_bound",
- "Selection Bound",
- "The position of the opposite end of the selection from the cursor in chars",
- 0, MAX_SIZE, 0,
- G_PARAM_READABLE));
-
- g_object_class_install_property(gobject_class,
- PROP_MAX_LENGTH,
- g_param_spec_int("max_length",
- "Maximum length",
- "Maximum number of characters for this entry. Zero if no maximum",
- 0, MAX_SIZE, 0,
- G_PARAM_READABLE |
- G_PARAM_WRITABLE));
-
- g_object_class_install_property(gobject_class,
- PROP_HAS_FRAME,
- g_param_spec_boolean("has_frame",
- "Has Frame",
- "FALSE removes outside bevel from entry",
- TRUE,
- G_PARAM_READABLE |
- G_PARAM_WRITABLE));
-
- g_object_class_install_property(gobject_class,
- PROP_INVISIBLE_CHAR,
- g_param_spec_unichar("invisible_char",
- "Invisible character",
- "The character to use when masking entry contents (in \"password mode\")",
- '*',
- G_PARAM_READABLE |
- G_PARAM_WRITABLE));
-
- g_object_class_install_property(gobject_class,
- PROP_ACTIVATES_DEFAULT,
- g_param_spec_boolean
- ("activates_default",
- "Activates default",
- "Whether to activate the default widget (such as the default button in a dialog) when Enter is pressed",
- FALSE,
- G_PARAM_READABLE | G_PARAM_WRITABLE));
- g_object_class_install_property(gobject_class, PROP_WIDTH_CHARS,
- g_param_spec_int("width_chars",
- "Width in chars",
- "Number of characters to leave space for in the entry",
- -1, G_MAXINT, -1,
- G_PARAM_READABLE |
- G_PARAM_WRITABLE));
-
- g_object_class_install_property(gobject_class,
- PROP_SCROLL_OFFSET,
- g_param_spec_int("scroll_offset",
- "Scroll offset",
- "Number of pixels of the entry scrolled off the screen to the left",
- 0, G_MAXINT, 0,
- G_PARAM_READABLE));
-
- g_object_class_install_property(gobject_class,
- PROP_TEXT,
- g_param_spec_string("text",
- "Text",
- "The contents of the entry",
- "",
- G_PARAM_READABLE |
- G_PARAM_WRITABLE));
-
- /* Action signals */
-
- signals[ACTIVATE] =
- g_signal_new("activate",
- G_OBJECT_CLASS_TYPE(gobject_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET(GtkSecureEntryClass, activate),
- NULL, NULL, _gtk_marshal_VOID__VOID, G_TYPE_NONE, 0);
- widget_class->activate_signal = signals[ACTIVATE];
-
- signals[MOVE_CURSOR] =
- g_signal_new("move_cursor",
- G_OBJECT_CLASS_TYPE(gobject_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET(GtkSecureEntryClass, move_cursor),
- NULL, NULL,
- _gtk_marshal_VOID__ENUM_INT_BOOLEAN,
- G_TYPE_NONE, 3,
- GTK_TYPE_MOVEMENT_STEP, G_TYPE_INT, G_TYPE_BOOLEAN);
-
- signals[INSERT_AT_CURSOR] =
- g_signal_new("insert_at_cursor",
- G_OBJECT_CLASS_TYPE(gobject_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET(GtkSecureEntryClass,
- insert_at_cursor), NULL, NULL,
- _gtk_marshal_VOID__STRING, G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[DELETE_FROM_CURSOR] =
- g_signal_new("delete_from_cursor",
- G_OBJECT_CLASS_TYPE(gobject_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET(GtkSecureEntryClass,
- delete_from_cursor), NULL, NULL,
- _gtk_marshal_VOID__ENUM_INT, G_TYPE_NONE, 2,
- GTK_TYPE_DELETE_TYPE, G_TYPE_INT);
-
- /*
- * Key bindings
- */
-
- binding_set = gtk_binding_set_by_class(class);
-
- /* Moving the insertion point */
- add_move_binding(binding_set, GDK_Right, 0,
- GTK_MOVEMENT_VISUAL_POSITIONS, 1);
-
- add_move_binding(binding_set, GDK_Left, 0,
- GTK_MOVEMENT_VISUAL_POSITIONS, -1);
-
- add_move_binding(binding_set, GDK_KP_Right, 0,
- GTK_MOVEMENT_VISUAL_POSITIONS, 1);
-
- add_move_binding(binding_set, GDK_KP_Left, 0,
- GTK_MOVEMENT_VISUAL_POSITIONS, -1);
-
- add_move_binding(binding_set, GDK_Right, GDK_CONTROL_MASK,
- GTK_MOVEMENT_WORDS, 1);
-
- add_move_binding(binding_set, GDK_Left, GDK_CONTROL_MASK,
- GTK_MOVEMENT_WORDS, -1);
-
- add_move_binding(binding_set, GDK_KP_Right, GDK_CONTROL_MASK,
- GTK_MOVEMENT_WORDS, 1);
-
- add_move_binding(binding_set, GDK_KP_Left, GDK_CONTROL_MASK,
- GTK_MOVEMENT_WORDS, -1);
-
- add_move_binding(binding_set, GDK_Home, 0,
- GTK_MOVEMENT_DISPLAY_LINE_ENDS, -1);
-
- add_move_binding(binding_set, GDK_End, 0,
- GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1);
-
- add_move_binding(binding_set, GDK_KP_Home, 0,
- GTK_MOVEMENT_DISPLAY_LINE_ENDS, -1);
-
- add_move_binding(binding_set, GDK_KP_End, 0,
- GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1);
-
- add_move_binding(binding_set, GDK_Home, GDK_CONTROL_MASK,
- GTK_MOVEMENT_BUFFER_ENDS, -1);
-
- add_move_binding(binding_set, GDK_End, GDK_CONTROL_MASK,
- GTK_MOVEMENT_BUFFER_ENDS, 1);
-
- add_move_binding(binding_set, GDK_KP_Home, GDK_CONTROL_MASK,
- GTK_MOVEMENT_BUFFER_ENDS, -1);
-
- add_move_binding(binding_set, GDK_KP_End, GDK_CONTROL_MASK,
- GTK_MOVEMENT_BUFFER_ENDS, 1);
-
- /* Select all
- */
- gtk_binding_entry_add_signal(binding_set, GDK_a, GDK_CONTROL_MASK,
- "move_cursor", 3,
- GTK_TYPE_MOVEMENT_STEP,
- GTK_MOVEMENT_BUFFER_ENDS, G_TYPE_INT, -1,
- G_TYPE_BOOLEAN, FALSE);
- gtk_binding_entry_add_signal(binding_set, GDK_a, GDK_CONTROL_MASK,
- "move_cursor", 3, GTK_TYPE_MOVEMENT_STEP,
- GTK_MOVEMENT_BUFFER_ENDS, G_TYPE_INT, 1,
- G_TYPE_BOOLEAN, TRUE);
-
-
- /* Activate
- */
- gtk_binding_entry_add_signal(binding_set, GDK_Return, 0,
- "activate", 0);
- gtk_binding_entry_add_signal(binding_set, GDK_KP_Enter, 0,
- "activate", 0);
-
- /* Deleting text */
- gtk_binding_entry_add_signal(binding_set, GDK_Delete, 0,
- "delete_from_cursor", 2,
- G_TYPE_ENUM, GTK_DELETE_CHARS,
- G_TYPE_INT, 1);
-
- gtk_binding_entry_add_signal(binding_set, GDK_KP_Delete, 0,
- "delete_from_cursor", 2,
- G_TYPE_ENUM, GTK_DELETE_CHARS,
- G_TYPE_INT, 1);
-
- gtk_binding_entry_add_signal(binding_set, GDK_BackSpace, 0,
- "delete_from_cursor", 2,
- G_TYPE_ENUM, GTK_DELETE_CHARS,
- G_TYPE_INT, -1);
-
- /* Make this do the same as Backspace, to help with mis-typing */
- gtk_binding_entry_add_signal(binding_set, GDK_BackSpace,
- GDK_SHIFT_MASK, "delete_from_cursor", 2,
- G_TYPE_ENUM, GTK_DELETE_CHARS, G_TYPE_INT,
- -1);
-
- gtk_binding_entry_add_signal(binding_set, GDK_Delete, GDK_CONTROL_MASK,
- "delete_from_cursor", 2,
- G_TYPE_ENUM, GTK_DELETE_WORD_ENDS,
- G_TYPE_INT, 1);
-
- gtk_binding_entry_add_signal(binding_set, GDK_KP_Delete,
- GDK_CONTROL_MASK, "delete_from_cursor", 2,
- G_TYPE_ENUM, GTK_DELETE_WORD_ENDS,
- G_TYPE_INT, 1);
-
- gtk_binding_entry_add_signal(binding_set, GDK_BackSpace,
- GDK_CONTROL_MASK, "delete_from_cursor", 2,
- G_TYPE_ENUM, GTK_DELETE_WORD_ENDS,
- G_TYPE_INT, -1);
-}
-
-static void
-gtk_secure_entry_editable_init(GtkEditableClass * iface)
-{
- iface->do_insert_text = gtk_secure_entry_insert_text;
- iface->do_delete_text = gtk_secure_entry_delete_text;
- iface->insert_text = gtk_secure_entry_real_insert_text;
- iface->delete_text = gtk_secure_entry_real_delete_text;
- iface->set_selection_bounds = gtk_secure_entry_set_selection_bounds;
- iface->get_selection_bounds = gtk_secure_entry_get_selection_bounds;
- iface->set_position = gtk_secure_entry_real_set_position;
- iface->get_position = gtk_secure_entry_get_position;
-}
-
-static void
-gtk_secure_entry_cell_editable_init(GtkCellEditableIface * iface)
-{
- iface->start_editing = gtk_secure_entry_start_editing;
-}
-
-static void
-gtk_secure_entry_set_property(GObject * object,
- guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(object);
-
- switch (prop_id) {
- case PROP_MAX_LENGTH:
- gtk_secure_entry_set_max_length(entry, g_value_get_int(value));
- break;
-
- case PROP_HAS_FRAME:
- gtk_secure_entry_set_has_frame(entry, g_value_get_boolean(value));
- break;
-
- case PROP_INVISIBLE_CHAR:
- gtk_secure_entry_set_invisible_char(entry,
- g_value_get_uint(value));
- break;
-
- case PROP_ACTIVATES_DEFAULT:
- gtk_secure_entry_set_activates_default(entry,
- g_value_get_boolean(value));
- break;
-
- case PROP_WIDTH_CHARS:
- gtk_secure_entry_set_width_chars(entry, g_value_get_int(value));
- break;
-
- case PROP_TEXT:
- gtk_secure_entry_set_text(entry, g_value_get_string(value));
- break;
-
- case PROP_SCROLL_OFFSET:
- case PROP_CURSOR_POSITION:
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gtk_secure_entry_get_property(GObject * object,
- guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(object);
-
- switch (prop_id) {
- case PROP_CURSOR_POSITION:
- g_value_set_int(value, entry->current_pos);
- break;
- case PROP_SELECTION_BOUND:
- g_value_set_int(value, entry->selection_bound);
- break;
- case PROP_MAX_LENGTH:
- g_value_set_int(value, entry->text_max_length);
- break;
- case PROP_HAS_FRAME:
- g_value_set_boolean(value, entry->has_frame);
- break;
- case PROP_INVISIBLE_CHAR:
- g_value_set_uint(value, entry->invisible_char);
- break;
- case PROP_ACTIVATES_DEFAULT:
- g_value_set_boolean(value, entry->activates_default);
- break;
- case PROP_WIDTH_CHARS:
- g_value_set_int(value, entry->width_chars);
- break;
- case PROP_SCROLL_OFFSET:
- g_value_set_int(value, entry->scroll_offset);
- break;
- case PROP_TEXT:
- g_value_set_string(value, gtk_secure_entry_get_text(entry));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gtk_secure_entry_init(GtkSecureEntry * entry)
-{
- gtk_widget_set_can_focus (GTK_WIDGET(entry), TRUE);
-
- entry->text_size = MIN_SIZE;
- WITH_SECURE_MEM(entry->text = g_malloc(entry->text_size));
- entry->text[0] = '\0';
-
- entry->invisible_char = '*';
- entry->width_chars = -1;
- entry->is_cell_renderer = FALSE;
- entry->editing_canceled = FALSE;
- entry->has_frame = TRUE;
-
- /* This object is completely private. No external entity can gain a reference
- * to it; so we create it here and destroy it in finalize().
- */
- entry->im_context = gtk_im_multicontext_new();
-
- g_signal_connect(entry->im_context, "commit",
- G_CALLBACK(gtk_secure_entry_commit_cb), entry);
- g_signal_connect(entry->im_context, "preedit_changed",
- G_CALLBACK(gtk_secure_entry_preedit_changed_cb),
- entry);
- g_signal_connect(entry->im_context, "retrieve_surrounding",
- G_CALLBACK(gtk_secure_entry_retrieve_surrounding_cb),
- entry);
- g_signal_connect(entry->im_context, "delete_surrounding",
- G_CALLBACK(gtk_secure_entry_delete_surrounding_cb),
- entry);
-}
-
-static void
-gtk_secure_entry_finalize(GObject * object)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(object);
-
- if (entry->cached_layout)
- g_object_unref(entry->cached_layout);
-
- g_object_unref(entry->im_context);
-
- if (entry->blink_timeout)
- g_source_remove(entry->blink_timeout);
-
- if (entry->recompute_idle)
- g_source_remove(entry->recompute_idle);
-
- entry->text_size = 0;
-
- if (entry->text)
- WITH_SECURE_MEM(g_free(entry->text));
- entry->text = NULL;
-
- G_OBJECT_CLASS(parent_class)->finalize(object);
-}
-
-static void
-gtk_secure_entry_realize(GtkWidget * widget)
-{
- GtkSecureEntry *entry;
- GtkEditable *editable;
- GdkWindow *window;
- GtkStyle *style;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- gtk_widget_set_realized (widget, TRUE);
-
- entry = GTK_SECURE_ENTRY(widget);
- editable = GTK_EDITABLE(widget);
-
- attributes.window_type = GDK_WINDOW_CHILD;
-
- get_widget_window_size(entry, &attributes.x, &attributes.y,
- &attributes.width, &attributes.height);
-
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.visual = gtk_widget_get_visual(widget);
- attributes.colormap = gtk_widget_get_colormap(widget);
- attributes.event_mask = gtk_widget_get_events(widget);
- attributes.event_mask |= (GDK_EXPOSURE_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_BUTTON1_MOTION_MASK |
- GDK_BUTTON3_MOTION_MASK |
- GDK_POINTER_MOTION_HINT_MASK |
- GDK_POINTER_MOTION_MASK |
- GDK_ENTER_NOTIFY_MASK |
- GDK_LEAVE_NOTIFY_MASK);
- attributes_mask =
- GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-
- window = gdk_window_new(gtk_widget_get_parent_window(widget),
- &attributes, attributes_mask);
- gtk_widget_set_window (widget, window);
- gdk_window_set_user_data(window, entry);
-
- get_text_area_size(entry, &attributes.x, &attributes.y,
- &attributes.width, &attributes.height);
-
- attributes.cursor =
- gdk_cursor_new_for_display(gtk_widget_get_display(widget),
- GDK_XTERM);
- attributes_mask |= GDK_WA_CURSOR;
-
- entry->text_area =
- gdk_window_new(window, &attributes, attributes_mask);
- gdk_window_set_user_data(entry->text_area, entry);
-
- gdk_cursor_unref(attributes.cursor);
-
- style = gtk_widget_get_style (widget);
- style = gtk_style_attach(style, window);
- gtk_widget_set_style (widget, style);
-
- gdk_window_set_background(window,
- &style->base[gtk_widget_get_state (widget)]);
- gdk_window_set_background(entry->text_area,
- &style->base[gtk_widget_get_state (widget)]);
-
- gdk_window_show(entry->text_area);
-
- gtk_im_context_set_client_window(entry->im_context, entry->text_area);
-
- gtk_secure_entry_adjust_scroll(entry);
-}
-
-static void
-gtk_secure_entry_unrealize(GtkWidget * widget)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
-
- gtk_secure_entry_reset_layout(entry);
-
- gtk_im_context_set_client_window(entry->im_context, NULL);
-
- if (entry->text_area) {
- gdk_window_set_user_data(entry->text_area, NULL);
- gdk_window_destroy(entry->text_area);
- entry->text_area = NULL;
- }
-
- if (GTK_WIDGET_CLASS(parent_class)->unrealize)
- (*GTK_WIDGET_CLASS(parent_class)->unrealize) (widget);
-}
-
-static void
-get_borders(GtkSecureEntry * entry, gint * xborder, gint * yborder)
-{
- GtkWidget *widget = GTK_WIDGET(entry);
- GtkStyle *style;
- gint focus_width;
- gboolean interior_focus;
-
- gtk_widget_style_get(widget,
- "interior-focus", &interior_focus,
- "focus-line-width", &focus_width, NULL);
-
- style = gtk_widget_get_style (widget);
- if (entry->has_frame) {
- *xborder = style->xthickness;
- *yborder = style->ythickness;
- } else {
- *xborder = 0;
- *yborder = 0;
- }
-
- if (!interior_focus) {
- *xborder += focus_width;
- *yborder += focus_width;
- }
-}
-
-static void
-gtk_secure_entry_size_request(GtkWidget * widget,
- GtkRequisition * requisition)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
- GtkStyle *style;
- PangoFontMetrics *metrics;
- gint xborder, yborder;
- PangoContext *context;
-
- style = gtk_widget_get_style (widget);
- context = gtk_widget_get_pango_context(widget);
- metrics = pango_context_get_metrics(context,
- style->font_desc,
- pango_context_get_language
- (context));
-
- entry->ascent = pango_font_metrics_get_ascent(metrics);
- entry->descent = pango_font_metrics_get_descent(metrics);
-
- get_borders(entry, &xborder, &yborder);
-
- xborder += INNER_BORDER;
- yborder += INNER_BORDER;
-
- if (entry->width_chars < 0)
- requisition->width = MIN_SECURE_ENTRY_WIDTH + xborder * 2;
- else {
- gint char_width =
- pango_font_metrics_get_approximate_char_width(metrics);
- gint digit_width =
- pango_font_metrics_get_approximate_digit_width(metrics);
- gint char_pixels =
- (MAX(char_width, digit_width) + PANGO_SCALE - 1) / PANGO_SCALE;
-
- requisition->width =
- char_pixels * entry->width_chars + xborder * 2;
- }
-
- requisition->height =
- PANGO_PIXELS(entry->ascent + entry->descent) + yborder * 2;
-
- pango_font_metrics_unref(metrics);
-}
-
-static void
-get_text_area_size(GtkSecureEntry * entry,
- gint * x, gint * y, gint * width, gint * height)
-{
- gint xborder, yborder;
- GtkRequisition requisition;
- GtkWidget *widget = GTK_WIDGET(entry);
- GtkAllocation allocation;
-
- gtk_widget_get_child_requisition(widget, &requisition);
- gtk_widget_get_allocation (GTK_WIDGET(entry), &allocation);
-
- get_borders(entry, &xborder, &yborder);
-
- if (x)
- *x = xborder;
-
- if (y)
- *y = yborder;
-
- if (width)
- *width = allocation.width - xborder * 2;
-
- if (height)
- *height = requisition.height - yborder * 2;
-}
-
-static void
-get_widget_window_size(GtkSecureEntry * entry,
- gint * x, gint * y, gint * width, gint * height)
-{
- GtkRequisition requisition;
- GtkWidget *widget = GTK_WIDGET(entry);
- GtkAllocation allocation;
-
- gtk_widget_get_child_requisition(widget, &requisition);
- gtk_widget_get_allocation (GTK_WIDGET(entry), &allocation);
-
- if (x)
- *x = allocation.x;
-
- if (y) {
- if (entry->is_cell_renderer)
- *y = allocation.y;
- else
- *y = allocation.y + (allocation.height -
- requisition.height) / 2;
- }
-
- if (width)
- *width = allocation.width;
-
- if (height) {
- if (entry->is_cell_renderer)
- *height = allocation.height;
- else
- *height = requisition.height;
- }
-}
-
-static void
-gtk_secure_entry_size_allocate(GtkWidget * widget,
- GtkAllocation * allocation)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
-
- gtk_widget_set_allocation (widget, allocation);
-
- if (gtk_widget_get_realized (widget)) {
- /* We call gtk_widget_get_child_requisition, since we want (for
- * backwards compatibility reasons) the realization here to
- * be affected by the usize of the entry, if set
- */
- gint x, y, width, height;
-
- get_widget_window_size(entry, &x, &y, &width, &height);
-
- gdk_window_move_resize(gtk_widget_get_window (widget),
- x, y, width, height);
-
- get_text_area_size(entry, &x, &y, &width, &height);
-
- gdk_window_move_resize(entry->text_area, x, y, width, height);
-
- gtk_secure_entry_recompute(entry);
- }
-}
-
-static void
-gtk_secure_entry_draw_frame(GtkWidget * widget)
-{
- GtkStyle *style;
- GdkWindow *window;
- gint x = 0, y = 0;
- gint width, height;
- gboolean interior_focus;
- gint focus_width;
-
- gtk_widget_style_get(widget,
- "interior-focus", &interior_focus,
- "focus-line-width", &focus_width, NULL);
-
- window = gtk_widget_get_window (widget);
- gdk_drawable_get_size(window, &width, &height);
-
- if (gtk_widget_has_focus (widget) && !interior_focus) {
- x += focus_width;
- y += focus_width;
- width -= 2 * focus_width;
- height -= 2 * focus_width;
- }
-
- style = gtk_widget_get_style (widget);
- gtk_paint_shadow(style, window,
- GTK_STATE_NORMAL, GTK_SHADOW_IN,
- NULL, widget, "entry", x, y, width, height);
-
- if (gtk_widget_has_focus (widget) && !interior_focus) {
- x -= focus_width;
- y -= focus_width;
- width += 2 * focus_width;
- height += 2 * focus_width;
-
- gtk_paint_focus(style, window,
- gtk_widget_get_state (widget), NULL, widget, "entry", 0,
- 0, width, height);
- }
-}
-
-static gint
-gtk_secure_entry_expose(GtkWidget * widget, GdkEventExpose * event)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
- GtkStyle *style;
-
- if (gtk_widget_get_window (widget) == event->window)
- gtk_secure_entry_draw_frame(widget);
- else if (entry->text_area == event->window) {
- gint area_width, area_height;
-
- get_text_area_size(entry, NULL, NULL, &area_width, &area_height);
-
-
- style = gtk_widget_get_style (widget);
- gtk_paint_flat_box(style, entry->text_area,
- gtk_widget_get_state (widget), GTK_SHADOW_NONE,
- NULL, widget, "entry_bg",
- 0, 0, area_width, area_height);
-
- if ((entry->invisible_char != 0) &&
- gtk_widget_has_focus (widget) &&
- entry->selection_bound == entry->current_pos
- && entry->cursor_visible)
- gtk_secure_entry_draw_cursor(GTK_SECURE_ENTRY(widget));
-
- gtk_secure_entry_draw_text(GTK_SECURE_ENTRY(widget));
- }
-
- return FALSE;
-}
-
-static gint
-gtk_secure_entry_button_press(GtkWidget * widget, GdkEventButton * event)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
- gint tmp_pos;
-
- if (event->window != entry->text_area ||
- (entry->button && event->button != entry->button))
- return FALSE;
-
- entry->button = event->button;
-
- if (!gtk_widget_has_focus (widget)) {
- entry->in_click = TRUE;
- gtk_widget_grab_focus(widget);
- entry->in_click = FALSE;
- }
-
- tmp_pos =
- gtk_secure_entry_find_position(entry,
- event->x + entry->scroll_offset);
-
- if (event->button == 1) {
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- gtk_secure_entry_set_positions(entry, tmp_pos, tmp_pos);
- break;
-
- default:
- break;
- }
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gint
-gtk_secure_entry_button_release(GtkWidget * widget, GdkEventButton * event)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
-
- if (event->window != entry->text_area
- || entry->button != event->button)
- return FALSE;
-
- entry->button = 0;
-
- return TRUE;
-}
-
-static gint
-gtk_secure_entry_motion_notify(GtkWidget * widget, GdkEventMotion * event)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
- gint tmp_pos;
-
- if (entry->mouse_cursor_obscured) {
- GdkCursor *cursor;
-
- cursor =
- gdk_cursor_new_for_display(gtk_widget_get_display(widget),
- GDK_XTERM);
- gdk_window_set_cursor(entry->text_area, cursor);
- gdk_cursor_unref(cursor);
- entry->mouse_cursor_obscured = FALSE;
- }
-
- if (event->window != entry->text_area || entry->button != 1)
- return FALSE;
-
- if (event->is_hint || (entry->text_area != event->window))
- gdk_window_get_pointer(entry->text_area, NULL, NULL, NULL);
-
- {
- gint height;
- gdk_drawable_get_size(entry->text_area, NULL, &height);
-
- if (event->y < 0)
- tmp_pos = 0;
- else if (event->y >= height)
- tmp_pos = entry->text_length;
- else
- tmp_pos =
- gtk_secure_entry_find_position(entry,
- event->x +
- entry->scroll_offset);
-
- gtk_secure_entry_set_positions(entry, tmp_pos, -1);
- }
-
- return TRUE;
-}
-
-static void
-set_invisible_cursor(GdkWindow * window)
-{
- GdkBitmap *empty_bitmap;
- GdkCursor *cursor;
- GdkColor useless;
- char invisible_cursor_bits[] = { 0x0 };
-
- useless.red = useless.green = useless.blue = 0;
- useless.pixel = 0;
-
- empty_bitmap = gdk_bitmap_create_from_data(window,
- invisible_cursor_bits, 1,
- 1);
-
- cursor = gdk_cursor_new_from_pixmap(empty_bitmap,
- empty_bitmap,
- &useless, &useless, 0, 0);
-
- gdk_window_set_cursor(window, cursor);
-
- gdk_cursor_unref(cursor);
-
- g_object_unref(empty_bitmap);
-}
-
-static void
-gtk_secure_entry_obscure_mouse_cursor(GtkSecureEntry * entry)
-{
- if (entry->mouse_cursor_obscured)
- return;
-
- set_invisible_cursor(entry->text_area);
-
- entry->mouse_cursor_obscured = TRUE;
-}
-
-static gint
-gtk_secure_entry_key_press(GtkWidget * widget, GdkEventKey * event)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
-
- gtk_secure_entry_pend_cursor_blink(entry);
-
- if (gtk_im_context_filter_keypress(entry->im_context, event)) {
- gtk_secure_entry_obscure_mouse_cursor(entry);
- entry->need_im_reset = TRUE;
- return TRUE;
- }
-
- if (GTK_WIDGET_CLASS(parent_class)->key_press_event(widget, event))
- /* Activate key bindings
- */
- return TRUE;
-
- return FALSE;
-}
-
-static gint
-gtk_secure_entry_key_release(GtkWidget * widget, GdkEventKey * event)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
-
- if (gtk_im_context_filter_keypress(entry->im_context, event)) {
- entry->need_im_reset = TRUE;
- return TRUE;
- }
-
- return GTK_WIDGET_CLASS(parent_class)->key_release_event(widget,
- event);
-}
-
-static gint
-gtk_secure_entry_focus_in(GtkWidget * widget,
- GdkEventFocus * event G_GNUC_UNUSED)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
-
- gtk_widget_queue_draw(widget);
-
- entry->need_im_reset = TRUE;
- gtk_im_context_focus_in(entry->im_context);
-
- g_signal_connect(gdk_keymap_get_for_display
- (gtk_widget_get_display(widget)), "direction_changed",
- G_CALLBACK(gtk_secure_entry_keymap_direction_changed),
- entry);
-
- gtk_secure_entry_check_cursor_blink(entry);
-
- return FALSE;
-}
-
-static gint
-gtk_secure_entry_focus_out(GtkWidget * widget,
- GdkEventFocus * event G_GNUC_UNUSED)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
-
- gtk_widget_queue_draw(widget);
-
- entry->need_im_reset = TRUE;
- gtk_im_context_focus_out(entry->im_context);
-
- gtk_secure_entry_check_cursor_blink(entry);
-
- g_signal_handlers_disconnect_by_func(gdk_keymap_get_for_display
- (gtk_widget_get_display(widget)),
- gtk_secure_entry_keymap_direction_changed,
- entry);
-
- return FALSE;
-}
-
-static void
-gtk_secure_entry_grab_focus(GtkWidget * widget)
-{
- GtkWidget *tmp;
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
- gboolean select_on_focus;
-
- gtk_widget_set_can_default (widget, TRUE);
- GTK_WIDGET_CLASS(parent_class)->grab_focus(widget);
-
- /* read current select on focus setting from GtkEntry */
- tmp = gtk_entry_new ();
- g_object_get(gtk_widget_get_settings(tmp),
- "gtk-entry-select-on-focus", &select_on_focus, NULL);
- gtk_widget_destroy (tmp);
-
- if (select_on_focus && !entry->in_click)
- gtk_editable_select_region(GTK_EDITABLE(widget), 0, -1);
-}
-
-static void
-gtk_secure_entry_direction_changed(GtkWidget * widget,
- GtkTextDirection previous_dir)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
-
- gtk_secure_entry_recompute(entry);
-
- GTK_WIDGET_CLASS(parent_class)->direction_changed(widget,
- previous_dir);
-}
-
-static void
-gtk_secure_entry_state_changed(GtkWidget * widget,
- GtkStateType previous_state G_GNUC_UNUSED)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
- GtkStyle *style;
-
- style = gtk_widget_get_style (widget);
- if (gtk_widget_get_realized (widget)) {
- gdk_window_set_background(gtk_widget_get_window(widget),
- &style->base[gtk_widget_get_state (widget)]);
- gdk_window_set_background(entry->text_area,
- &style->base[gtk_widget_get_state (widget)]);
- }
-
- if (!gtk_widget_is_sensitive (widget)) {
- /* Clear any selection */
- gtk_editable_select_region(GTK_EDITABLE(entry), entry->current_pos,
- entry->current_pos);
- }
-
- gtk_widget_queue_draw(widget);
-}
-
-static void
-gtk_secure_entry_screen_changed(GtkWidget * widget,
- GdkScreen * old_screen G_GNUC_UNUSED)
-{
- gtk_secure_entry_recompute(GTK_SECURE_ENTRY(widget));
-}
-
-/* GtkEditable method implementations
- */
-static void
-gtk_secure_entry_insert_text(GtkEditable * editable,
- const gchar * new_text,
- gint new_text_length, gint * position)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(editable);
- gchar *text;
-
- if (*position < 0 || *position > entry->text_length)
- *position = entry->text_length;
-
- g_object_ref(editable);
-
- WITH_SECURE_MEM(text = g_new(gchar, new_text_length + 1));
-
- text[new_text_length] = '\0';
- strncpy(text, new_text, new_text_length);
-
- g_signal_emit_by_name(editable, "insert_text", text, new_text_length,
- position);
-
- WITH_SECURE_MEM(g_free(text));
-
- g_object_unref(editable);
-}
-
-static void
-gtk_secure_entry_delete_text(GtkEditable * editable,
- gint start_pos, gint end_pos)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(editable);
-
- if (end_pos < 0 || end_pos > entry->text_length)
- end_pos = entry->text_length;
- if (start_pos < 0)
- start_pos = 0;
- if (start_pos > end_pos)
- start_pos = end_pos;
-
- g_object_ref(editable);
-
- g_signal_emit_by_name(editable, "delete_text", start_pos, end_pos);
-
- g_object_unref(editable);
-}
-
-static void
-gtk_secure_entry_set_position_internal(GtkSecureEntry * entry,
- gint position, gboolean reset_im)
-{
- if (position < 0 || position > entry->text_length)
- position = entry->text_length;
-
- if (position != entry->current_pos ||
- position != entry->selection_bound) {
- if (reset_im)
- gtk_secure_entry_reset_im_context(entry);
- gtk_secure_entry_set_positions(entry, position, position);
- }
-}
-
-static void
-gtk_secure_entry_real_set_position(GtkEditable * editable, gint position)
-{
- gtk_secure_entry_set_position_internal(GTK_SECURE_ENTRY(editable),
- position, TRUE);
-}
-
-static gint
-gtk_secure_entry_get_position(GtkEditable * editable)
-{
- return GTK_SECURE_ENTRY(editable)->current_pos;
-}
-
-static void
-gtk_secure_entry_set_selection_bounds(GtkEditable * editable,
- gint start, gint end)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(editable);
-
- if (start < 0)
- start = entry->text_length;
- if (end < 0)
- end = entry->text_length;
-
- gtk_secure_entry_reset_im_context(entry);
-
- gtk_secure_entry_set_positions(entry,
- MIN(end, entry->text_length),
- MIN(start, entry->text_length));
-}
-
-static gboolean
-gtk_secure_entry_get_selection_bounds(GtkEditable * editable,
- gint * start, gint * end)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(editable);
-
- *start = entry->selection_bound;
- *end = entry->current_pos;
-
- return (entry->selection_bound != entry->current_pos);
-}
-
-static void
-gtk_secure_entry_style_set(GtkWidget * widget, GtkStyle * previous_style)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
- GtkStyle *style;
-
- gtk_secure_entry_recompute(entry);
-
- style = gtk_widget_get_style (widget);
- if (previous_style && gtk_widget_get_realized (widget)) {
- gdk_window_set_background(gtk_widget_get_window (widget),
- &style->base[gtk_widget_get_state (widget)]);
- gdk_window_set_background(entry->text_area,
- &style->base[gtk_widget_get_state (widget)]);
- }
-}
-
-/* GtkCellEditable method implementations
- */
-static void
-gtk_cell_editable_secure_entry_activated(GtkSecureEntry * entry,
- gpointer data G_GNUC_UNUSED)
-{
- gtk_cell_editable_editing_done(GTK_CELL_EDITABLE(entry));
- gtk_cell_editable_remove_widget(GTK_CELL_EDITABLE(entry));
-}
-
-static gboolean
-gtk_cell_editable_key_press_event(GtkSecureEntry * entry,
- GdkEventKey * key_event,
- gpointer data G_GNUC_UNUSED)
-{
- if (key_event->keyval == GDK_Escape) {
- entry->editing_canceled = TRUE;
- gtk_cell_editable_editing_done(GTK_CELL_EDITABLE(entry));
- gtk_cell_editable_remove_widget(GTK_CELL_EDITABLE(entry));
-
- return TRUE;
- }
-
- /* override focus */
- if (key_event->keyval == GDK_Up || key_event->keyval == GDK_Down) {
- gtk_cell_editable_editing_done(GTK_CELL_EDITABLE(entry));
- gtk_cell_editable_remove_widget(GTK_CELL_EDITABLE(entry));
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-gtk_secure_entry_start_editing(GtkCellEditable * cell_editable,
- GdkEvent * event G_GNUC_UNUSED)
-{
- GTK_SECURE_ENTRY(cell_editable)->is_cell_renderer = TRUE;
-
- g_signal_connect(cell_editable, "activate",
- G_CALLBACK(gtk_cell_editable_secure_entry_activated), NULL);
- g_signal_connect(cell_editable, "key_press_event",
- G_CALLBACK(gtk_cell_editable_key_press_event), NULL);
-}
-
-/* Default signal handlers
- */
-static void
-gtk_secure_entry_real_insert_text(GtkEditable * editable,
- const gchar * new_text,
- gint new_text_length, gint * position)
-{
- gint _index;
- gint n_chars;
-
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(editable);
-
- if (new_text_length < 0)
- new_text_length = strlen(new_text);
-
- n_chars = g_utf8_strlen(new_text, new_text_length);
- if (entry->text_max_length > 0
- && n_chars + entry->text_length > entry->text_max_length) {
- gdk_display_beep(gtk_widget_get_display(GTK_WIDGET(entry)));
- n_chars = entry->text_max_length - entry->text_length;
- new_text_length =
- g_utf8_offset_to_pointer(new_text, n_chars) - new_text;
- }
-
- if (new_text_length + entry->n_bytes + 1 > entry->text_size) {
- while (new_text_length + entry->n_bytes + 1 > entry->text_size) {
- if (entry->text_size == 0)
- entry->text_size = MIN_SIZE;
- else {
- if (2 * (guint) entry->text_size < MAX_SIZE &&
- 2 * (guint) entry->text_size > entry->text_size)
- entry->text_size *= 2;
- else {
- entry->text_size = MAX_SIZE;
- if (new_text_length >
- (gint) entry->text_size - (gint) entry->n_bytes -
- 1) {
- new_text_length =
- (gint) entry->text_size -
- (gint) entry->n_bytes - 1;
- new_text_length =
- g_utf8_find_prev_char(new_text,
- new_text +
- new_text_length + 1) -
- new_text;
- n_chars = g_utf8_strlen(new_text, new_text_length);
- }
- break;
- }
- }
- }
-
- WITH_SECURE_MEM(entry->text =
- g_realloc(entry->text, entry->text_size));
- }
-
- _index = g_utf8_offset_to_pointer(entry->text, *position) - entry->text;
-
- g_memmove(entry->text + _index + new_text_length, entry->text + _index,
- entry->n_bytes - _index);
- memcpy(entry->text + _index, new_text, new_text_length);
-
- entry->n_bytes += new_text_length;
- entry->text_length += n_chars;
-
- /* NUL terminate for safety and convenience */
- entry->text[entry->n_bytes] = '\0';
-
- if (entry->current_pos > *position)
- entry->current_pos += n_chars;
-
- if (entry->selection_bound > *position)
- entry->selection_bound += n_chars;
-
- *position += n_chars;
-
- gtk_secure_entry_recompute(entry);
-
- g_signal_emit_by_name(editable, "changed");
- g_object_notify(G_OBJECT(editable), "text");
-}
-
-static void
-gtk_secure_entry_real_delete_text(GtkEditable * editable,
- gint start_pos, gint end_pos)
-{
- GtkSecureEntry *entry = GTK_SECURE_ENTRY(editable);
-
- if (start_pos < 0)
- start_pos = 0;
- if (end_pos < 0 || end_pos > entry->text_length)
- end_pos = entry->text_length;
-
- if (start_pos < end_pos) {
- gint start_index =
- g_utf8_offset_to_pointer(entry->text, start_pos) - entry->text;
- gint end_index =
- g_utf8_offset_to_pointer(entry->text, end_pos) - entry->text;
- gint current_pos;
- gint selection_bound;
-
- g_memmove(entry->text + start_index, entry->text + end_index,
- entry->n_bytes + 1 - end_index);
- entry->text_length -= (end_pos - start_pos);
- entry->n_bytes -= (end_index - start_index);
-
- current_pos = entry->current_pos;
- if (current_pos > start_pos)
- current_pos -= MIN(current_pos, end_pos) - start_pos;
-
- selection_bound = entry->selection_bound;
- if (selection_bound > start_pos)
- selection_bound -= MIN(selection_bound, end_pos) - start_pos;
-
- gtk_secure_entry_set_positions(entry, current_pos,
- selection_bound);
-
- gtk_secure_entry_recompute(entry);
-
- g_signal_emit_by_name(editable, "changed");
- g_object_notify(G_OBJECT(editable), "text");
- }
-}
-
-/* Compute the X position for an offset that corresponds to the "more important
- * cursor position for that offset. We use this when trying to guess to which
- * end of the selection we should go to when the user hits the left or
- * right arrow key.
- */
-static gint
-get_better_cursor_x(GtkSecureEntry * entry, gint offset)
-{
- GdkKeymap *keymap =
- gdk_keymap_get_for_display(gtk_widget_get_display
- (GTK_WIDGET(entry)));
- PangoDirection keymap_direction = gdk_keymap_get_direction(keymap);
- gboolean split_cursor;
-
- PangoLayout *layout = gtk_secure_entry_ensure_layout(entry, TRUE);
- const gchar *text = pango_layout_get_text(layout);
- gint _index = g_utf8_offset_to_pointer(text, offset) - text;
-
- PangoRectangle strong_pos, weak_pos;
-
- g_object_get(gtk_widget_get_settings(GTK_WIDGET(entry)),
- "gtk-split-cursor", &split_cursor, NULL);
-
- pango_layout_get_cursor_pos(layout, _index, &strong_pos, &weak_pos);
-
- if (split_cursor)
- return strong_pos.x / PANGO_SCALE;
- else
- return (keymap_direction ==
- entry->resolved_dir) ? strong_pos.x /
- PANGO_SCALE : weak_pos.x / PANGO_SCALE;
-}
-
-static void
-gtk_secure_entry_move_cursor(GtkSecureEntry * entry,
- GtkMovementStep step,
- gint count, gboolean extend_selection)
-{
- gint new_pos = entry->current_pos;
-
- gtk_secure_entry_reset_im_context(entry);
-
- if (entry->current_pos != entry->selection_bound && !extend_selection) {
- /* If we have a current selection and aren't extending it, move to the
- * start/or end of the selection as appropriate
- */
- switch (step) {
- case GTK_MOVEMENT_VISUAL_POSITIONS:
- {
- gint current_x =
- get_better_cursor_x(entry, entry->current_pos);
- gint bound_x =
- get_better_cursor_x(entry, entry->selection_bound);
-
- if (count < 0)
- new_pos =
- current_x <
- bound_x ? entry->current_pos : entry->
- selection_bound;
- else
- new_pos =
- current_x >
- bound_x ? entry->current_pos : entry->
- selection_bound;
-
- break;
- }
- case GTK_MOVEMENT_LOGICAL_POSITIONS:
- case GTK_MOVEMENT_DISPLAY_LINE_ENDS:
- case GTK_MOVEMENT_PARAGRAPH_ENDS:
- case GTK_MOVEMENT_BUFFER_ENDS:
- new_pos = count < 0 ? 0 : entry->text_length;
- break;
- case GTK_MOVEMENT_WORDS:
- case GTK_MOVEMENT_DISPLAY_LINES:
- case GTK_MOVEMENT_PARAGRAPHS:
- case GTK_MOVEMENT_PAGES:
- case GTK_MOVEMENT_HORIZONTAL_PAGES:
- break;
- }
- } else {
- switch (step) {
- case GTK_MOVEMENT_LOGICAL_POSITIONS:
- new_pos =
- gtk_secure_entry_move_logically(entry, new_pos, count);
- break;
- case GTK_MOVEMENT_VISUAL_POSITIONS:
- new_pos =
- gtk_secure_entry_move_visually(entry, new_pos, count);
- break;
- case GTK_MOVEMENT_DISPLAY_LINE_ENDS:
- case GTK_MOVEMENT_PARAGRAPH_ENDS:
- case GTK_MOVEMENT_BUFFER_ENDS:
- new_pos = count < 0 ? 0 : entry->text_length;
- break;
- case GTK_MOVEMENT_WORDS:
- case GTK_MOVEMENT_DISPLAY_LINES:
- case GTK_MOVEMENT_PARAGRAPHS:
- case GTK_MOVEMENT_PAGES:
- case GTK_MOVEMENT_HORIZONTAL_PAGES:
- break;
- }
- }
-
- if (extend_selection)
- gtk_editable_select_region(GTK_EDITABLE(entry),
- entry->selection_bound, new_pos);
- else
- gtk_editable_set_position(GTK_EDITABLE(entry), new_pos);
-
- gtk_secure_entry_pend_cursor_blink(entry);
-}
-
-static void
-gtk_secure_entry_insert_at_cursor(GtkSecureEntry * entry,
- const gchar * str)
-{
- GtkEditable *editable = GTK_EDITABLE(entry);
- gint pos = entry->current_pos;
-
- gtk_secure_entry_reset_im_context(entry);
-
- gtk_editable_insert_text(editable, str, -1, &pos);
- gtk_editable_set_position(editable, pos);
-}
-
-static void
-gtk_secure_entry_delete_from_cursor(GtkSecureEntry * entry,
- GtkDeleteType type, gint count)
-{
- GtkEditable *editable = GTK_EDITABLE(entry);
- gint start_pos = entry->current_pos;
- gint end_pos = entry->current_pos;
-
- gtk_secure_entry_reset_im_context(entry);
-
- if (entry->selection_bound != entry->current_pos) {
- gtk_editable_delete_selection(editable);
- return;
- }
-
- switch (type) {
- case GTK_DELETE_CHARS:
- end_pos =
- gtk_secure_entry_move_logically(entry, entry->current_pos,
- count);
- gtk_editable_delete_text(editable, MIN(start_pos, end_pos),
- MAX(start_pos, end_pos));
- break;
- case GTK_DELETE_DISPLAY_LINE_ENDS:
- case GTK_DELETE_PARAGRAPH_ENDS:
- if (count < 0)
- gtk_editable_delete_text(editable, 0, entry->current_pos);
- else
- gtk_editable_delete_text(editable, entry->current_pos, -1);
- break;
- case GTK_DELETE_DISPLAY_LINES:
- case GTK_DELETE_PARAGRAPHS:
- gtk_editable_delete_text(editable, 0, -1);
- break;
- default:
- break;
- }
-
- gtk_secure_entry_pend_cursor_blink(entry);
-}
-
-static void
-gtk_secure_entry_real_activate(GtkSecureEntry * entry)
-{
- GtkWindow *window;
- GtkWidget *toplevel;
- GtkWidget *widget;
-
- widget = GTK_WIDGET(entry);
-
- if (entry->activates_default) {
- toplevel = gtk_widget_get_toplevel(widget);
- if (GTK_IS_WINDOW(toplevel)) {
- GtkWidget *default_widget;
-
- window = GTK_WINDOW(toplevel);
- if (window)
- default_widget = gtk_window_get_default_widget (window);
- else
- return;
-
- if (widget != default_widget &&
- !(widget == gtk_window_get_focus (window) &&
- (!default_widget
- || !gtk_widget_get_sensitive (default_widget))))
- gtk_window_activate_default(window);
- }
- }
-}
-
-static void
-gtk_secure_entry_keymap_direction_changed(GdkKeymap * keymap G_GNUC_UNUSED,
- GtkSecureEntry * entry)
-{
- gtk_secure_entry_recompute(entry);
-}
-
-/* IM Context Callbacks
- */
-
-static void
-gtk_secure_entry_commit_cb(GtkIMContext * context G_GNUC_UNUSED,
- const gchar * str, GtkSecureEntry * entry)
-{
- gtk_secure_entry_enter_text(entry, str);
-}
-
-static void
-gtk_secure_entry_preedit_changed_cb(GtkIMContext * context G_GNUC_UNUSED,
- GtkSecureEntry * entry)
-{
- gchar *preedit_string;
- gint cursor_pos;
-
- gtk_im_context_get_preedit_string(entry->im_context,
- &preedit_string, NULL, &cursor_pos);
- entry->preedit_length = strlen(preedit_string);
- cursor_pos = CLAMP(cursor_pos, 0, g_utf8_strlen(preedit_string, -1));
- entry->preedit_cursor = cursor_pos;
- g_free(preedit_string);
-
- gtk_secure_entry_recompute(entry);
-}
-
-static gboolean
-gtk_secure_entry_retrieve_surrounding_cb(GtkIMContext * context,
- GtkSecureEntry * entry)
-{
- gtk_im_context_set_surrounding(context,
- entry->text,
- entry->n_bytes,
- g_utf8_offset_to_pointer(entry->text,
- entry->
- current_pos) -
- entry->text);
-
- return TRUE;
-}
-
-static gboolean
-gtk_secure_entry_delete_surrounding_cb(GtkIMContext * slave G_GNUC_UNUSED,
- gint offset,
- gint n_chars,
- GtkSecureEntry * entry)
-{
- gtk_editable_delete_text(GTK_EDITABLE(entry),
- entry->current_pos + offset,
- entry->current_pos + offset + n_chars);
-
- return TRUE;
-}
-
-/* Internal functions
- */
-
-/* Used for im_commit_cb and inserting Unicode chars */
-static void
-gtk_secure_entry_enter_text(GtkSecureEntry * entry, const gchar * str)
-{
- GtkEditable *editable = GTK_EDITABLE(entry);
- gint tmp_pos;
-
- if (gtk_editable_get_selection_bounds(editable, NULL, NULL))
- gtk_editable_delete_selection(editable);
- else {
- if (entry->overwrite_mode)
- gtk_secure_entry_delete_from_cursor(entry, GTK_DELETE_CHARS,
- 1);
- }
-
- tmp_pos = entry->current_pos;
- gtk_editable_insert_text(editable, str, strlen(str), &tmp_pos);
- gtk_secure_entry_set_position_internal(entry, tmp_pos, FALSE);
-}
-
-/* All changes to entry->current_pos and entry->selection_bound
- * should go through this function.
- */
-static void
-gtk_secure_entry_set_positions(GtkSecureEntry * entry,
- gint current_pos, gint selection_bound)
-{
- gboolean changed = FALSE;
-
- g_object_freeze_notify(G_OBJECT(entry));
-
- if (current_pos != -1 && entry->current_pos != current_pos) {
- entry->current_pos = current_pos;
- changed = TRUE;
-
- g_object_notify(G_OBJECT(entry), "cursor_position");
- }
-
- if (selection_bound != -1 && entry->selection_bound != selection_bound) {
- entry->selection_bound = selection_bound;
- changed = TRUE;
-
- g_object_notify(G_OBJECT(entry), "selection_bound");
- }
-
- g_object_thaw_notify(G_OBJECT(entry));
-
- if (changed)
- gtk_secure_entry_recompute(entry);
-}
-
-static void
-gtk_secure_entry_reset_layout(GtkSecureEntry * entry)
-{
- if (entry->cached_layout) {
- g_object_unref(entry->cached_layout);
- entry->cached_layout = NULL;
- }
-}
-
-static void
-update_im_cursor_location(GtkSecureEntry * entry)
-{
- GdkRectangle area;
- gint strong_x;
- gint strong_xoffset;
- gint area_width, area_height;
-
- gtk_secure_entry_get_cursor_locations(entry, &strong_x, NULL);
- get_text_area_size(entry, NULL, NULL, &area_width, &area_height);
-
- strong_xoffset = strong_x - entry->scroll_offset;
- if (strong_xoffset < 0) {
- strong_xoffset = 0;
- } else if (strong_xoffset > area_width) {
- strong_xoffset = area_width;
- }
- area.x = strong_xoffset;
- area.y = 0;
- area.width = 0;
- area.height = area_height;
-
- gtk_im_context_set_cursor_location(entry->im_context, &area);
-}
-
-static gboolean
-recompute_idle_func(gpointer data)
-{
- GtkSecureEntry *entry;
-
- GDK_THREADS_ENTER();
-
- entry = GTK_SECURE_ENTRY(data);
-
- entry->recompute_idle = 0;
-
- if (gtk_widget_has_screen(GTK_WIDGET(entry))) {
- gtk_secure_entry_adjust_scroll(entry);
- gtk_secure_entry_queue_draw(entry);
-
- update_im_cursor_location(entry);
- }
-
- GDK_THREADS_LEAVE();
-
- return FALSE;
-}
-
-static void
-gtk_secure_entry_recompute(GtkSecureEntry * entry)
-{
- gtk_secure_entry_reset_layout(entry);
- gtk_secure_entry_check_cursor_blink(entry);
-
- if (!entry->recompute_idle) {
- entry->recompute_idle = g_idle_add_full(G_PRIORITY_HIGH_IDLE + 15, /* between resize and redraw */
- recompute_idle_func, entry,
- NULL);
- }
-}
-
-static void
-append_char(GString * str, gunichar ch, gint count)
-{
- gint i;
- gint char_len;
- gchar buf[7];
-
- char_len = g_unichar_to_utf8(ch, buf);
-
- i = 0;
- while (i < count) {
- g_string_append_len(str, buf, char_len);
- ++i;
- }
-}
-
-static PangoLayout *
-gtk_secure_entry_create_layout(GtkSecureEntry * entry,
- gboolean include_preedit)
-{
- GtkWidget *widget = GTK_WIDGET(entry);
- PangoLayout *layout = gtk_widget_create_pango_layout(widget, NULL);
- PangoAttrList *tmp_attrs = pango_attr_list_new();
-
- gchar *preedit_string = NULL;
- gint preedit_length = 0;
- PangoAttrList *preedit_attrs = NULL;
-
- pango_layout_set_single_paragraph_mode(layout, TRUE);
-
- if (include_preedit) {
- gtk_im_context_get_preedit_string(entry->im_context,
- &preedit_string, &preedit_attrs,
- NULL);
- preedit_length = entry->preedit_length;
- }
-
- if (preedit_length) {
- GString *tmp_string = g_string_new(NULL);
-
- gint cursor_index = g_utf8_offset_to_pointer(entry->text,
- entry->current_pos) -
- entry->text;
-
- gint ch_len;
- gint preedit_len_chars;
- gunichar invisible_char;
-
- ch_len = g_utf8_strlen(entry->text, entry->n_bytes);
- preedit_len_chars = g_utf8_strlen(preedit_string, -1);
- ch_len += preedit_len_chars;
-
- if (entry->invisible_char != 0)
- invisible_char = entry->invisible_char;
- else
- invisible_char = ' '; /* just pick a char */
-
- append_char(tmp_string, invisible_char, ch_len);
-
- /* Fix cursor index to point to invisible char corresponding
- * to the preedit, fix preedit_length to be the length of
- * the invisible chars representing the preedit
- */
- cursor_index =
- g_utf8_offset_to_pointer(tmp_string->str,
- entry->current_pos) -
- tmp_string->str;
- preedit_length =
- preedit_len_chars * g_unichar_to_utf8(invisible_char,
- NULL);
-
- pango_layout_set_text(layout, tmp_string->str, tmp_string->len);
-
- pango_attr_list_splice(tmp_attrs, preedit_attrs,
- cursor_index, preedit_length);
-
- g_string_free(tmp_string, TRUE);
- } else {
- PangoDirection pango_dir;
-
- pango_dir = pango_find_base_dir(entry->text, entry->n_bytes);
- if (pango_dir == PANGO_DIRECTION_NEUTRAL) {
- if (gtk_widget_has_focus (widget)) {
- GdkDisplay *display = gtk_widget_get_display(widget);
- GdkKeymap *keymap = gdk_keymap_get_for_display(display);
- pango_dir = gdk_keymap_get_direction(keymap);
- } else {
- if (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_LTR)
- pango_dir = PANGO_DIRECTION_LTR;
- else
- pango_dir = PANGO_DIRECTION_RTL;
- }
- }
-
- pango_context_set_base_dir(gtk_widget_get_pango_context(widget),
- pango_dir);
-
- pango_layout_set_alignment(layout, pango_dir);
-
- entry->resolved_dir = pango_dir;
-
- {
- GString *str = g_string_new(NULL);
- gunichar invisible_char;
-
- if (entry->invisible_char != 0)
- invisible_char = entry->invisible_char;
- else
- invisible_char = ' '; /* just pick a char */
-
- append_char(str, invisible_char, entry->text_length);
- pango_layout_set_text(layout, str->str, str->len);
- g_string_free(str, TRUE);
- }
- }
-
- pango_layout_set_attributes(layout, tmp_attrs);
-
- if (preedit_string)
- g_free(preedit_string);
- if (preedit_attrs)
- pango_attr_list_unref(preedit_attrs);
-
- pango_attr_list_unref(tmp_attrs);
-
- return layout;
-}
-
-static PangoLayout *
-gtk_secure_entry_ensure_layout(GtkSecureEntry * entry,
- gboolean include_preedit)
-{
- if (entry->preedit_length > 0 &&
- !include_preedit != !entry->cache_includes_preedit)
- gtk_secure_entry_reset_layout(entry);
-
- if (!entry->cached_layout) {
- entry->cached_layout =
- gtk_secure_entry_create_layout(entry, include_preedit);
- entry->cache_includes_preedit = include_preedit;
- }
-
- return entry->cached_layout;
-}
-
-static void
-get_layout_position(GtkSecureEntry * entry, gint * x, gint * y)
-{
- PangoLayout *layout;
- PangoRectangle logical_rect;
- gint area_width, area_height;
- gint y_pos;
- PangoLayoutLine *line;
-
- layout = gtk_secure_entry_ensure_layout(entry, TRUE);
-
- get_text_area_size(entry, NULL, NULL, &area_width, &area_height);
-
- area_height = PANGO_SCALE * (area_height - 2 * INNER_BORDER);
-
- line = pango_layout_get_lines(layout)->data;
- pango_layout_line_get_extents(line, NULL, &logical_rect);
-
- /* Align primarily for locale's ascent/descent */
- y_pos = ((area_height - entry->ascent - entry->descent) / 2 +
- entry->ascent + logical_rect.y);
-
- /* Now see if we need to adjust to fit in actual drawn string */
- if (logical_rect.height > area_height)
- y_pos = (area_height - logical_rect.height) / 2;
- else if (y_pos < 0)
- y_pos = 0;
- else if (y_pos + logical_rect.height > area_height)
- y_pos = area_height - logical_rect.height;
-
- y_pos = INNER_BORDER + y_pos / PANGO_SCALE;
-
- if (x)
- *x = INNER_BORDER - entry->scroll_offset;
-
- if (y)
- *y = y_pos;
-}
-
-static void
-gtk_secure_entry_draw_text(GtkSecureEntry * entry)
-{
- GtkWidget *widget = GTK_WIDGET(entry);
- PangoLayoutLine *line;
- GtkStyle *style;
-
- if (entry->invisible_char == 0)
- return;
-
- if (gtk_widget_is_drawable (widget)) {
- PangoLayout *layout = gtk_secure_entry_ensure_layout(entry, TRUE);
- gint x, y;
- gint start_pos, end_pos;
-
- get_layout_position(entry, &x, &y);
-
- style = gtk_widget_get_style (widget);
- gdk_draw_layout(entry->text_area,
- style->text_gc[gtk_widget_get_state (widget)],
- x, y, layout);
-
- if (gtk_editable_get_selection_bounds
- (GTK_EDITABLE(entry), &start_pos, &end_pos)) {
- gint *ranges;
- gint n_ranges, i;
- PangoRectangle logical_rect;
- const gchar *text = pango_layout_get_text(layout);
- gint start_index =
- g_utf8_offset_to_pointer(text, start_pos) - text;
- gint end_index =
- g_utf8_offset_to_pointer(text, end_pos) - text;
-#if GTK_CHECK_VERSION(2, 90, 5)
- cairo_region_t *clip_region = cairo_region_create();
-#else
- GdkRegion *clip_region = gdk_region_new();
-#endif
- GdkGC *text_gc;
- GdkGC *selection_gc;
-
- line = pango_layout_get_lines(layout)->data;
-
- pango_layout_line_get_x_ranges(line, start_index, end_index,
- &ranges, &n_ranges);
-
- pango_layout_get_extents(layout, NULL, &logical_rect);
-
- if (gtk_widget_has_focus (widget)) {
- selection_gc = style->base_gc[GTK_STATE_SELECTED];
- text_gc = style->text_gc[GTK_STATE_SELECTED];
- } else {
- selection_gc = style->base_gc[GTK_STATE_ACTIVE];
- text_gc = style->text_gc[GTK_STATE_ACTIVE];
- }
-
- for (i = 0; i < n_ranges; i++) {
- GdkRectangle rect;
-
- rect.x =
- INNER_BORDER - entry->scroll_offset +
- ranges[2 * i] / PANGO_SCALE;
- rect.y = y;
- rect.width =
- (ranges[2 * i + 1] - ranges[2 * i]) / PANGO_SCALE;
- rect.height = logical_rect.height / PANGO_SCALE;
-
- gdk_draw_rectangle(entry->text_area, selection_gc, TRUE,
- rect.x, rect.y, rect.width,
- rect.height);
-#if GTK_CHECK_VERSION(2, 90, 5)
- cairo_region_union_rectangle (clip_region, &rect);
-#else
- gdk_region_union_with_rect(clip_region, &rect);
-#endif
- }
-
- gdk_gc_set_clip_region(text_gc, clip_region);
- gdk_draw_layout(entry->text_area, text_gc, x, y, layout);
- gdk_gc_set_clip_region(text_gc, NULL);
-
-#if GTK_CHECK_VERSION(2, 90, 5)
- cairo_region_destroy(clip_region);
-#else
- gdk_region_destroy(clip_region);
-#endif
- g_free(ranges);
- }
- }
-}
-
-static void
-draw_insertion_cursor(GtkSecureEntry * entry,
- GdkRectangle * cursor_location,
- gboolean is_primary,
- PangoDirection direction, gboolean draw_arrow)
-{
- GtkWidget *widget = GTK_WIDGET(entry);
- GtkTextDirection text_dir;
-
- if (direction == PANGO_DIRECTION_LTR)
- text_dir = GTK_TEXT_DIR_LTR;
- else
- text_dir = GTK_TEXT_DIR_RTL;
-
- gtk_draw_insertion_cursor(widget, entry->text_area, NULL,
- cursor_location,
- is_primary, text_dir, draw_arrow);
-}
-
-static void
-gtk_secure_entry_draw_cursor(GtkSecureEntry * entry)
-{
- GtkWidget *widget = GTK_WIDGET(entry);
- GdkKeymap *keymap =
- gdk_keymap_get_for_display(gtk_widget_get_display
- (widget));
- PangoDirection keymap_direction = gdk_keymap_get_direction(keymap);
-
- if (gtk_widget_is_drawable (widget)) {
- GdkRectangle cursor_location;
- gboolean split_cursor;
-
- gint xoffset = INNER_BORDER - entry->scroll_offset;
- gint strong_x, weak_x;
- gint text_area_height;
- PangoDirection dir1 = PANGO_DIRECTION_NEUTRAL;
- PangoDirection dir2 = PANGO_DIRECTION_NEUTRAL;
- gint x1 = 0;
- gint x2 = 0;
-
- gdk_drawable_get_size(entry->text_area, NULL, &text_area_height);
-
- gtk_secure_entry_get_cursor_locations(entry, &strong_x, &weak_x);
-
- g_object_get(gtk_widget_get_settings(widget),
- "gtk-split-cursor", &split_cursor, NULL);
-
- dir1 = entry->resolved_dir;
-
- if (split_cursor) {
- x1 = strong_x;
-
- if (weak_x != strong_x) {
- dir2 =
- (entry->resolved_dir ==
- PANGO_DIRECTION_LTR) ? PANGO_DIRECTION_RTL :
- PANGO_DIRECTION_LTR;
- x2 = weak_x;
- }
- } else {
- if (keymap_direction == entry->resolved_dir)
- x1 = strong_x;
- else
- x1 = weak_x;
- }
-
- cursor_location.x = xoffset + x1;
- cursor_location.y = INNER_BORDER;
- cursor_location.width = 0;
- cursor_location.height = text_area_height - 2 * INNER_BORDER;
-
- draw_insertion_cursor(entry,
- &cursor_location, TRUE, dir1,
- dir2 != PANGO_DIRECTION_NEUTRAL);
-
- if (dir2 != PANGO_DIRECTION_NEUTRAL) {
- cursor_location.x = xoffset + x2;
- draw_insertion_cursor(entry,
- &cursor_location, FALSE, dir2, TRUE);
- }
- }
-}
-
-static void
-gtk_secure_entry_queue_draw(GtkSecureEntry * entry)
-{
- if (gtk_widget_get_realized (GTK_WIDGET(entry)))
- gdk_window_invalidate_rect(entry->text_area, NULL, FALSE);
-}
-
-static void
-gtk_secure_entry_reset_im_context(GtkSecureEntry * entry)
-{
- if (entry->need_im_reset) {
- entry->need_im_reset = 0;
- gtk_im_context_reset(entry->im_context);
- }
-}
-
-static gint
-gtk_secure_entry_find_position(GtkSecureEntry * entry, gint x)
-{
- PangoLayout *layout;
- PangoLayoutLine *line;
- gint _index;
- gint pos;
- gboolean trailing;
- const gchar *text;
- gint cursor_index;
-
- layout = gtk_secure_entry_ensure_layout(entry, TRUE);
- text = pango_layout_get_text(layout);
- cursor_index =
- g_utf8_offset_to_pointer(text, entry->current_pos) - text;
-
- line = pango_layout_get_lines(layout)->data;
- pango_layout_line_x_to_index(line, x * PANGO_SCALE, &_index, &trailing);
-
- if (_index >= cursor_index && entry->preedit_length) {
- if (_index >= cursor_index + entry->preedit_length)
- _index -= entry->preedit_length;
- else {
- _index = cursor_index;
- trailing = 0;
- }
- }
-
- pos = g_utf8_pointer_to_offset(text, text + _index);
- pos += trailing;
-
- return pos;
-}
-
-static void
-gtk_secure_entry_get_cursor_locations(GtkSecureEntry * entry,
- gint * strong_x, gint * weak_x)
-{
- if (!entry->invisible_char) {
- if (strong_x)
- *strong_x = 0;
-
- if (weak_x)
- *weak_x = 0;
- } else {
- PangoLayout *layout = gtk_secure_entry_ensure_layout(entry, TRUE);
- const gchar *text = pango_layout_get_text(layout);
- PangoRectangle strong_pos, weak_pos;
- gint _index;
-
- _index =
- g_utf8_offset_to_pointer(text,
- entry->current_pos +
- entry->preedit_cursor) - text;
-
- pango_layout_get_cursor_pos(layout, _index, &strong_pos, &weak_pos);
-
- if (strong_x)
- *strong_x = strong_pos.x / PANGO_SCALE;
-
- if (weak_x)
- *weak_x = weak_pos.x / PANGO_SCALE;
- }
-}
-
-static void
-gtk_secure_entry_adjust_scroll(GtkSecureEntry * entry)
-{
- gint min_offset, max_offset;
- gint text_area_width, text_width;
- gint strong_x, weak_x;
- gint strong_xoffset, weak_xoffset;
- PangoLayout *layout;
- PangoLayoutLine *line;
- PangoRectangle logical_rect;
-
- if (!gtk_widget_get_realized (GTK_WIDGET(entry)))
- return;
-
- gdk_drawable_get_size(entry->text_area, &text_area_width, NULL);
- text_area_width -= 2 * INNER_BORDER;
-
- layout = gtk_secure_entry_ensure_layout(entry, TRUE);
- line = pango_layout_get_lines(layout)->data;
-
- pango_layout_line_get_extents(line, NULL, &logical_rect);
-
- /* Display as much text as we can */
-
- text_width = PANGO_PIXELS(logical_rect.width);
-
- if (text_width > text_area_width) {
- min_offset = 0;
- max_offset = text_width - text_area_width;
- } else {
- min_offset = 0;
- max_offset = min_offset;
- }
-
- entry->scroll_offset =
- CLAMP(entry->scroll_offset, min_offset, max_offset);
-
- /* And make sure cursors are on screen. Note that the cursor is
- * actually drawn one pixel into the INNER_BORDER space on
- * the right, when the scroll is at the utmost right. This
- * looks better to to me than confining the cursor inside the
- * border entirely, though it means that the cursor gets one
- * pixel closer to the the edge of the widget on the right than
- * on the left. This might need changing if one changed
- * INNER_BORDER from 2 to 1, as one would do on a
- * small-screen-real-estate display.
- *
- * We always make sure that the strong cursor is on screen, and
- * put the weak cursor on screen if possible.
- */
-
- gtk_secure_entry_get_cursor_locations(entry, &strong_x, &weak_x);
-
- strong_xoffset = strong_x - entry->scroll_offset;
-
- if (strong_xoffset < 0) {
- entry->scroll_offset += strong_xoffset;
- strong_xoffset = 0;
- } else if (strong_xoffset > text_area_width) {
- entry->scroll_offset += strong_xoffset - text_area_width;
- strong_xoffset = text_area_width;
- }
-
- weak_xoffset = weak_x - entry->scroll_offset;
-
- if (weak_xoffset < 0
- && strong_xoffset - weak_xoffset <= text_area_width) {
- entry->scroll_offset += weak_xoffset;
- } else if (weak_xoffset > text_area_width &&
- strong_xoffset - (weak_xoffset - text_area_width) >= 0) {
- entry->scroll_offset += weak_xoffset - text_area_width;
- }
-
- g_object_notify(G_OBJECT(entry), "scroll_offset");
-}
-
-static gint
-gtk_secure_entry_move_visually(GtkSecureEntry * entry,
- gint start, gint count)
-{
- gint _index;
- PangoLayout *layout = gtk_secure_entry_ensure_layout(entry, FALSE);
- const gchar *text;
-
- text = pango_layout_get_text(layout);
-
- _index = g_utf8_offset_to_pointer(text, start) - text;
-
- while (count != 0) {
- int new_index, new_trailing;
- gboolean split_cursor;
- gboolean strong;
-
- g_object_get(gtk_widget_get_settings(GTK_WIDGET(entry)),
- "gtk-split-cursor", &split_cursor, NULL);
-
- if (split_cursor)
- strong = TRUE;
- else {
- GdkKeymap *keymap =
- gdk_keymap_get_for_display(gtk_widget_get_display
- (GTK_WIDGET(entry)));
- PangoDirection keymap_direction =
- gdk_keymap_get_direction(keymap);
-
- strong = keymap_direction == entry->resolved_dir;
- }
-
- if (count > 0) {
- pango_layout_move_cursor_visually(layout, strong, _index, 0, 1,
- &new_index, &new_trailing);
- count--;
- } else {
- pango_layout_move_cursor_visually(layout, strong, _index, 0, -1,
- &new_index, &new_trailing);
- count++;
- }
-
- if (new_index < 0 || new_index == G_MAXINT)
- break;
-
- _index = new_index;
-
- while (new_trailing--)
- _index = g_utf8_next_char(text + new_index) - text;
- }
-
- return g_utf8_pointer_to_offset(text, text + _index);
-}
-
-static gint
-gtk_secure_entry_move_logically(GtkSecureEntry * entry,
- gint start, gint count)
-{
- gint new_pos = start;
-
- /* Prevent any leak of information */
- new_pos = CLAMP(start + count, 0, entry->text_length);
-
- return new_pos;
-}
-
-/* Public API
- */
-
-GtkWidget *
-gtk_secure_entry_new(void)
-{
- return g_object_new(GTK_TYPE_SECURE_ENTRY, NULL);
-}
-
-/**
- * gtk_secure_entry_new_with_max_length:
- * @max: the maximum length of the entry, or 0 for no maximum.
- * (other than the maximum length of entries.) The value passed in will
- * be clamped to the range 0-65536.
- *
- * Creates a new #GtkSecureEntry widget with the given maximum length.
- *
- * Note: the existence of this function is inconsistent
- * with the rest of the GTK+ API. The normal setup would
- * be to just require the user to make an extra call
- * to gtk_secure_entry_set_max_length() instead. It is not
- * expected that this function will be removed, but
- * it would be better practice not to use it.
- *
- * Return value: a new #GtkSecureEntry.
- **/
-GtkWidget *
-gtk_secure_entry_new_with_max_length(gint max)
-{
- GtkSecureEntry *entry;
-
- max = CLAMP(max, 0, MAX_SIZE);
-
- entry = g_object_new(GTK_TYPE_SECURE_ENTRY, NULL);
- entry->text_max_length = max;
-
- return GTK_WIDGET(entry);
-}
-
-void
-gtk_secure_entry_set_text(GtkSecureEntry * entry, const gchar * text)
-{
- gint tmp_pos;
-
- g_return_if_fail(GTK_IS_SECURE_ENTRY(entry));
- g_return_if_fail(text != NULL);
-
- /* Actually setting the text will affect the cursor and selection;
- * if the contents don't actually change, this will look odd to the user.
- */
- if (strcmp(entry->text, text) == 0)
- return;
-
- gtk_editable_delete_text(GTK_EDITABLE(entry), 0, -1);
-
- tmp_pos = 0;
- gtk_editable_insert_text(GTK_EDITABLE(entry), text, strlen(text),
- &tmp_pos);
-}
-
-/**
- * gtk_secure_entry_set_invisible_char:
- * @entry: a #GtkSecureEntry
- * @ch: a Unicode character
- *
- * Sets the character to use in place of the actual text when
- * gtk_secure_entry_set_visibility() has been called to set text visibility
- * to %FALSE. i.e. this is the character used in "password mode" to
- * show the user how many characters have been typed. The default
- * invisible char is an asterisk ('*'). If you set the invisible char
- * to 0, then the user will get no feedback at all; there will be
- * no text on the screen as they type.
- *
- **/
-void
-gtk_secure_entry_set_invisible_char(GtkSecureEntry * entry, gunichar ch)
-{
- g_return_if_fail(GTK_IS_SECURE_ENTRY(entry));
-
- if (ch == entry->invisible_char)
- return;
-
- entry->invisible_char = ch;
- g_object_notify(G_OBJECT(entry), "invisible_char");
- gtk_secure_entry_recompute(entry);
-}
-
-/**
- * gtk_secure_entry_get_invisible_char:
- * @entry: a #GtkSecureEntry
- *
- * Retrieves the character displayed in place of the real characters
- * for entries with visisbility set to false. See gtk_secure_entry_set_invisible_char().
- *
- * Return value: the current invisible char, or 0, if the entry does not
- * show invisible text at all.
- **/
-gunichar
-gtk_secure_entry_get_invisible_char(GtkSecureEntry * entry)
-{
- g_return_val_if_fail(GTK_IS_SECURE_ENTRY(entry), 0);
-
- return entry->invisible_char;
-}
-
-/**
- * gtk_secure_entry_get_text:
- * @entry: a #GtkSecureEntry
- *
- * Retrieves the contents of the entry widget.
- * See also gtk_editable_get_chars().
- *
- * Return value: a pointer to the contents of the widget as a
- * string. This string points to internally allocated
- * storage in the widget and must not be freed, modified or
- * stored.
- **/
-G_CONST_RETURN gchar *
-gtk_secure_entry_get_text(GtkSecureEntry * entry)
-{
- g_return_val_if_fail(GTK_IS_SECURE_ENTRY(entry), NULL);
-
- return entry->text;
-}
-
-/**
- * gtk_secure_entry_set_max_length:
- * @entry: a #GtkSecureEntry.
- * @max: the maximum length of the entry, or 0 for no maximum.
- * (other than the maximum length of entries.) The value passed in will
- * be clamped to the range 0-65536.
- *
- * Sets the maximum allowed length of the contents of the widget. If
- * the current contents are longer than the given length, then they
- * will be truncated to fit.
- **/
-void
-gtk_secure_entry_set_max_length(GtkSecureEntry * entry, gint max)
-{
- g_return_if_fail(GTK_IS_SECURE_ENTRY(entry));
-
- max = CLAMP(max, 0, MAX_SIZE);
-
- if (max > 0 && entry->text_length > max)
- gtk_editable_delete_text(GTK_EDITABLE(entry), max, -1);
-
- entry->text_max_length = max;
- g_object_notify(G_OBJECT(entry), "max_length");
-}
-
-/**
- * gtk_secure_entry_get_max_length:
- * @entry: a #GtkSecureEntry
- *
- * Retrieves the maximum allowed length of the text in
- * @entry. See gtk_secure_entry_set_max_length().
- *
- * Return value: the maximum allowed number of characters
- * in #GtkSecureEntry, or 0 if there is no maximum.
- **/
-gint
-gtk_secure_entry_get_max_length(GtkSecureEntry * entry)
-{
- g_return_val_if_fail(GTK_IS_SECURE_ENTRY(entry), 0);
-
- return entry->text_max_length;
-}
-
-/**
- * gtk_secure_entry_set_activates_default:
- * @entry: a #GtkSecureEntry
- * @setting: %TRUE to activate window's default widget on Enter keypress
- *
- * If @setting is %TRUE, pressing Enter in the @entry will activate the default
- * widget for the window containing the entry. This usually means that
- * the dialog box containing the entry will be closed, since the default
- * widget is usually one of the dialog buttons.
- *
- * (For experts: if @setting is %TRUE, the entry calls
- * gtk_window_activate_default() on the window containing the entry, in
- * the default handler for the "activate" signal.)
- *
- **/
-void
-gtk_secure_entry_set_activates_default(GtkSecureEntry * entry,
- gboolean setting)
-{
- g_return_if_fail(GTK_IS_SECURE_ENTRY(entry));
- setting = setting != FALSE;
-
- if (setting != entry->activates_default) {
- entry->activates_default = setting;
- g_object_notify(G_OBJECT(entry), "activates_default");
- }
-}
-
-/**
- * gtk_secure_entry_get_activates_default:
- * @entry: a #GtkSecureEntry
- *
- * Retrieves the value set by gtk_secure_entry_set_activates_default().
- *
- * Return value: %TRUE if the entry will activate the default widget
- **/
-gboolean
-gtk_secure_entry_get_activates_default(GtkSecureEntry * entry)
-{
- g_return_val_if_fail(GTK_IS_SECURE_ENTRY(entry), FALSE);
-
- return entry->activates_default;
-}
-
-/**
- * gtk_secure_entry_set_width_chars:
- * @entry: a #GtkSecureEntry
- * @n_chars: width in chars
- *
- * Changes the size request of the entry to be about the right size
- * for @n_chars characters. Note that it changes the size
- * <emphasis>request</emphasis>, the size can still be affected by
- * how you pack the widget into containers. If @n_chars is -1, the
- * size reverts to the default entry size.
- *
- **/
-void
-gtk_secure_entry_set_width_chars(GtkSecureEntry * entry, gint n_chars)
-{
- g_return_if_fail(GTK_IS_SECURE_ENTRY(entry));
-
- if (entry->width_chars != n_chars) {
- entry->width_chars = n_chars;
- g_object_notify(G_OBJECT(entry), "width_chars");
- gtk_widget_queue_resize(GTK_WIDGET(entry));
- }
-}
-
-/**
- * gtk_secure_entry_get_width_chars:
- * @entry: a #GtkSecureEntry
- *
- * Gets the value set by gtk_secure_entry_set_width_chars().
- *
- * Return value: number of chars to request space for, or negative if unset
- **/
-gint
-gtk_secure_entry_get_width_chars(GtkSecureEntry * entry)
-{
- g_return_val_if_fail(GTK_IS_SECURE_ENTRY(entry), 0);
-
- return entry->width_chars;
-}
-
-/**
- * gtk_secure_entry_set_has_frame:
- * @entry: a #GtkSecureEntry
- * @setting: new value
- *
- * Sets whether the entry has a beveled frame around it.
- **/
-void
-gtk_secure_entry_set_has_frame(GtkSecureEntry * entry, gboolean setting)
-{
- g_return_if_fail(GTK_IS_SECURE_ENTRY(entry));
-
- setting = (setting != FALSE);
-
- if (entry->has_frame == setting)
- return;
-
- gtk_widget_queue_resize(GTK_WIDGET(entry));
- entry->has_frame = setting;
- g_object_notify(G_OBJECT(entry), "has_frame");
-}
-
-/**
- * gtk_secure_entry_get_has_frame:
- * @entry: a #GtkSecureEntry
- *
- * Gets the value set by gtk_secure_entry_set_has_frame().
- *
- * Return value: whether the entry has a beveled frame
- **/
-gboolean
-gtk_secure_entry_get_has_frame(GtkSecureEntry * entry)
-{
- g_return_val_if_fail(GTK_IS_SECURE_ENTRY(entry), FALSE);
-
- return entry->has_frame;
-}
-
-
-/**
- * gtk_secure_entry_get_layout:
- * @entry: a #GtkSecureEntry
- *
- * Gets the #PangoLayout used to display the entry.
- * The layout is useful to e.g. convert text positions to
- * pixel positions, in combination with gtk_secure_entry_get_layout_offsets().
- * The returned layout is owned by the entry so need not be
- * freed by the caller.
- *
- * Keep in mind that the layout text may contain a preedit string, so
- * gtk_secure_entry_layout_index_to_text_index() and
- * gtk_secure_entry_text_index_to_layout_index() are needed to convert byte
- * indices in the layout to byte indices in the entry contents.
- *
- * Return value: the #PangoLayout for this entry
- **/
-PangoLayout *
-gtk_secure_entry_get_layout(GtkSecureEntry * entry)
-{
- PangoLayout *layout;
-
- g_return_val_if_fail(GTK_IS_SECURE_ENTRY(entry), NULL);
-
- layout = gtk_secure_entry_ensure_layout(entry, TRUE);
-
- return layout;
-}
-
-
-/**
- * gtk_secure_entry_layout_index_to_text_index:
- * @entry: a #GtkSecureEntry
- * @layout_index: byte index into the entry layout text
- *
- * Converts from a position in the entry contents (returned
- * by gtk_secure_entry_get_text()) to a position in the
- * entry's #PangoLayout (returned by gtk_secure_entry_get_layout(),
- * with text retrieved via pango_layout_get_text()).
- *
- * Return value: byte index into the entry contents
- **/
-gint
-gtk_secure_entry_layout_index_to_text_index(GtkSecureEntry * entry,
- gint layout_index)
-{
- PangoLayout *layout;
- const gchar *text;
- gint cursor_index;
-
- g_return_val_if_fail(GTK_IS_SECURE_ENTRY(entry), 0);
-
- layout = gtk_secure_entry_ensure_layout(entry, TRUE);
- text = pango_layout_get_text(layout);
- cursor_index =
- g_utf8_offset_to_pointer(text, entry->current_pos) - text;
-
- if (layout_index >= cursor_index && entry->preedit_length) {
- if (layout_index >= cursor_index + entry->preedit_length)
- layout_index -= entry->preedit_length;
- else
- layout_index = cursor_index;
- }
-
- return layout_index;
-}
-
-/**
- * gtk_secure_entry_text_index_to_layout_index:
- * @entry: a #GtkSecureEntry
- * @text_index: byte index into the entry contents
- *
- * Converts from a position in the entry's #PangoLayout(returned by
- * gtk_secure_entry_get_layout()) to a position in the entry contents
- * (returned by gtk_secure_entry_get_text()).
- *
- * Return value: byte index into the entry layout text
- **/
-gint
-gtk_secure_entry_text_index_to_layout_index(GtkSecureEntry * entry,
- gint text_index)
-{
- PangoLayout *layout;
- const gchar *text;
- gint cursor_index;
- g_return_val_if_fail(GTK_IS_SECURE_ENTRY(entry), 0);
-
- layout = gtk_secure_entry_ensure_layout(entry, TRUE);
- text = pango_layout_get_text(layout);
- cursor_index =
- g_utf8_offset_to_pointer(text, entry->current_pos) - text;
-
- if (text_index > cursor_index)
- text_index += entry->preedit_length;
-
- return text_index;
-}
-
-/**
- * gtk_secure_entry_get_layout_offsets:
- * @entry: a #GtkSecureEntry
- * @x: location to store X offset of layout, or %NULL
- * @y: location to store Y offset of layout, or %NULL
- *
- *
- * Obtains the position of the #PangoLayout used to render text
- * in the entry, in widget coordinates. Useful if you want to line
- * up the text in an entry with some other text, e.g. when using the
- * entry to implement editable cells in a sheet widget.
- *
- * Also useful to convert mouse events into coordinates inside the
- * #PangoLayout, e.g. to take some action if some part of the entry text
- * is clicked.
- *
- * Note that as the user scrolls around in the entry the offsets will
- * change; you'll need to connect to the "notify::scroll_offset"
- * signal to track this. Remember when using the #PangoLayout
- * functions you need to convert to and from pixels using
- * PANGO_PIXELS() or #PANGO_SCALE.
- *
- * Keep in mind that the layout text may contain a preedit string, so
- * gtk_secure_entry_layout_index_to_text_index() and
- * gtk_secure_entry_text_index_to_layout_index() are needed to convert byte
- * indices in the layout to byte indices in the entry contents.
- *
- **/
-void
-gtk_secure_entry_get_layout_offsets(GtkSecureEntry * entry,
- gint * x, gint * y)
-{
- gint text_area_x, text_area_y;
-
- g_return_if_fail(GTK_IS_SECURE_ENTRY(entry));
-
- /* this gets coords relative to text area */
- get_layout_position(entry, x, y);
-
- /* convert to widget coords */
- get_text_area_size(entry, &text_area_x, &text_area_y, NULL, NULL);
-
- if (x)
- *x += text_area_x;
-
- if (y)
- *y += text_area_y;
-}
-
-static gboolean
-gtk_secure_entry_mnemonic_activate(GtkWidget * widget,
- gboolean group_cycling G_GNUC_UNUSED)
-{
- gtk_widget_grab_focus(widget);
- return TRUE;
-}
-
-/* We display the cursor when
- *
- * - the selection is empty, AND
- * - the widget has focus
- */
-
-#define CURSOR_ON_MULTIPLIER 0.66
-#define CURSOR_OFF_MULTIPLIER 0.34
-#define CURSOR_PEND_MULTIPLIER 1.0
-
-static gboolean
-cursor_blinks(GtkSecureEntry * entry)
-{
- GtkWidget *widget = GTK_WIDGET(entry);
- GtkSettings *settings = gtk_widget_get_settings(widget);
- gboolean blink;
-
- if (gtk_widget_has_focus (widget) &&
- entry->selection_bound == entry->current_pos) {
- g_object_get(settings, "gtk-cursor-blink", &blink, NULL);
- return blink;
- } else
- return FALSE;
-}
-
-static gint
-get_cursor_time(GtkSecureEntry * entry)
-{
- GtkSettings *settings = gtk_widget_get_settings(GTK_WIDGET(entry));
- gint blinktime;
-
- g_object_get(settings, "gtk-cursor-blink-time", &blinktime, NULL);
-
- return blinktime;
-}
-
-static void
-show_cursor(GtkSecureEntry * entry)
-{
- GtkWidget *widget = GTK_WIDGET(entry);
-
- if (!entry->cursor_visible) {
- entry->cursor_visible = TRUE;
-
- if (gtk_widget_has_focus (widget)
- && entry->selection_bound == entry->current_pos)
- gtk_widget_queue_draw(widget);
- }
-}
-
-static void
-hide_cursor(GtkSecureEntry * entry)
-{
- GtkWidget *widget = GTK_WIDGET(entry);
-
- if (entry->cursor_visible) {
- entry->cursor_visible = FALSE;
-
- if (gtk_widget_has_focus (widget)
- && entry->selection_bound == entry->current_pos)
- gtk_widget_queue_draw(widget);
- }
-}
-
-/*
- * Blink!
- */
-static gint
-blink_cb(gpointer data)
-{
- GtkSecureEntry *entry;
- GtkWidget *widget;
-
- GDK_THREADS_ENTER();
-
- entry = GTK_SECURE_ENTRY(data);
- widget = GTK_WIDGET (entry);
-
- if (!gtk_widget_has_focus (widget)) {
- g_warning
- ("GtkSecureEntry - did not receive focus-out-event. If you\n"
- "connect a handler to this signal, it must return\n"
- "FALSE so the entry gets the event as well");
- }
-
- g_assert(gtk_widget_has_focus (widget));
- g_assert(entry->selection_bound == entry->current_pos);
-
- if (entry->cursor_visible) {
- hide_cursor(entry);
- entry->blink_timeout =
- g_timeout_add(get_cursor_time(entry) * CURSOR_OFF_MULTIPLIER,
- blink_cb, entry);
- } else {
- show_cursor(entry);
- entry->blink_timeout =
- g_timeout_add(get_cursor_time(entry) * CURSOR_ON_MULTIPLIER,
- blink_cb, entry);
- }
-
- GDK_THREADS_LEAVE();
-
- /* Remove ourselves */
- return FALSE;
-}
-
-static void
-gtk_secure_entry_check_cursor_blink(GtkSecureEntry * entry)
-{
- if (cursor_blinks(entry)) {
- if (!entry->blink_timeout) {
- entry->blink_timeout =
- g_timeout_add(get_cursor_time(entry) *
- CURSOR_ON_MULTIPLIER, blink_cb, entry);
- show_cursor(entry);
- }
- } else {
- if (entry->blink_timeout) {
- g_source_remove(entry->blink_timeout);
- entry->blink_timeout = 0;
- }
-
- entry->cursor_visible = TRUE;
- }
-
-}
-
-static void
-gtk_secure_entry_pend_cursor_blink(GtkSecureEntry * entry)
-{
- if (cursor_blinks(entry)) {
- if (entry->blink_timeout != 0)
- g_source_remove(entry->blink_timeout);
-
- entry->blink_timeout =
- g_timeout_add(get_cursor_time(entry) * CURSOR_PEND_MULTIPLIER,
- blink_cb, entry);
- show_cursor(entry);
- }
-}
-
-static inline gboolean
-keyval_is_cursor_move(guint keyval)
-{
- if (keyval == GDK_Up || keyval == GDK_KP_Up)
- return TRUE;
-
- if (keyval == GDK_Down || keyval == GDK_KP_Down)
- return TRUE;
-
- if (keyval == GDK_Page_Up)
- return TRUE;
-
- if (keyval == GDK_Page_Down)
- return TRUE;
-
- return FALSE;
-}
-
-/* stolen from gtkmarshalers.c */
-
-#define g_marshal_value_peek_enum(v) (v)->data[0].v_int
-#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-
-/* VOID:ENUM,INT,BOOLEAN (gtkmarshalers.list:64) */
-static void
-_gtk_marshal_VOID__ENUM_INT_BOOLEAN(GClosure * closure,
- GValue * return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue * param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__ENUM_INT_BOOLEAN) (gpointer data1,
- gint arg_1,
- gint arg_2,
- gboolean arg_3,
- gpointer data2);
- register GMarshalFunc_VOID__ENUM_INT_BOOLEAN callback;
- register GCClosure *cc = (GCClosure *) closure;
- register gpointer data1, data2;
-
- g_return_if_fail(n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA(closure)) {
- data1 = closure->data;
- data2 = g_value_peek_pointer(param_values + 0);
- } else {
- data1 = g_value_peek_pointer(param_values + 0);
- data2 = closure->data;
- }
- callback =
- (GMarshalFunc_VOID__ENUM_INT_BOOLEAN) (marshal_data ? marshal_data
- : cc->callback);
-
- callback(data1,
- g_marshal_value_peek_enum(param_values + 1),
- g_marshal_value_peek_int(param_values + 2),
- g_marshal_value_peek_boolean(param_values + 3), data2);
-}
-
-static void
-_gtk_marshal_VOID__ENUM_INT(GClosure * closure,
- GValue * return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue * param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__ENUM_INT) (gpointer data1,
- gint arg_1,
- gint arg_2,
- gpointer data2);
- register GMarshalFunc_VOID__ENUM_INT callback;
- register GCClosure *cc = (GCClosure *) closure;
- register gpointer data1, data2;
-
- g_return_if_fail(n_param_values == 3);
-
- if (G_CCLOSURE_SWAP_DATA(closure)) {
- data1 = closure->data;
- data2 = g_value_peek_pointer(param_values + 0);
- } else {
- data1 = g_value_peek_pointer(param_values + 0);
- data2 = closure->data;
- }
- callback =
- (GMarshalFunc_VOID__ENUM_INT) (marshal_data ? marshal_data : cc->
- callback);
-
- callback(data1,
- g_marshal_value_peek_enum(param_values + 1),
- g_marshal_value_peek_int(param_values + 2), data2);
-}
diff --git a/gtksecentry/gtksecentry.h b/gtksecentry/gtksecentry.h
deleted file mode 100644
index c2d9771..0000000
--- a/gtksecentry/gtksecentry.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 2004 Albrecht Dreß
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
- * file for a list of people on the GTK+ Team. See the ChangeLog
- * files for a list of changes. These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
- */
-
-/*
- * Heavily stripped down for use in pinentry-gtk-2 by Albrecht Dreß
- * <albrecht.dress@arcor.de> Feb. 2004:
- *
- * The entry is now always invisible, uses secure memory methods to
- * allocate the text memory, and all potentially dangerous methods
- * (copy & paste, popup, etc.) have been removed.
- */
-
-#ifndef __GTK_SECURE_ENTRY_H__
-#define __GTK_SECURE_ENTRY_H__
-
-
-#include <gtk/gtk.h>
-#include "gseal-gtk-compat.h"
-
-#ifdef __cplusplus
-extern "C" {
-#ifdef MAKE_EMACS_HAPPY
-}
-#endif /* MAKE_EMACS_HAPPY */
-#endif /* __cplusplus */
-#define GTK_TYPE_SECURE_ENTRY (gtk_secure_entry_get_type ())
-#define GTK_SECURE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SECURE_ENTRY, GtkSecureEntry))
-#define GTK_SECURE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SECURE_ENTRY, GtkSecureEntryClass))
-#define GTK_IS_SECURE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SECURE_ENTRY))
-#define GTK_IS_SECURE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SECURE_ENTRY))
-#define GTK_SECURE_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SECURE_ENTRY, GtkSecureEntryClass))
-typedef struct _GtkSecureEntry GtkSecureEntry;
-typedef struct _GtkSecureEntryClass GtkSecureEntryClass;
-
-struct _GtkSecureEntry {
- GtkWidget widget;
-
- gchar *text;
-
- guint overwrite_mode:1;
-
- guint16 text_length; /* length in use, in chars */
- guint16 text_max_length;
-
- /*< private > */
- GdkWindow *text_area;
- GtkIMContext *im_context;
-
- gint current_pos;
- gint selection_bound;
-
- PangoLayout *cached_layout;
- guint cache_includes_preedit:1;
-
- guint need_im_reset:1;
-
- guint has_frame:1;
-
- guint activates_default:1;
-
- guint cursor_visible:1;
-
- guint in_click:1; /* Flag so we don't select all when clicking in entry to focus in */
-
- guint is_cell_renderer:1;
- guint editing_canceled:1; /* Only used by GtkCellRendererText */
-
- guint mouse_cursor_obscured:1;
-
- guint resolved_dir : 4; /* PangoDirection */
-
- guint button;
- guint blink_timeout;
- guint recompute_idle;
- gint scroll_offset;
- gint ascent; /* font ascent, in pango units */
- gint descent; /* font descent, in pango units */
-
- guint16 text_size; /* allocated size, in bytes */
- guint16 n_bytes; /* length in use, in bytes */
-
- guint16 preedit_length; /* length of preedit string, in bytes */
- guint16 preedit_cursor; /* offset of cursor within preedit string, in chars */
-
- gunichar invisible_char;
-
- gint width_chars;
-};
-
-struct _GtkSecureEntryClass {
- GtkWidgetClass parent_class;
-
- /* Action signals
- */
- void (*activate) (GtkSecureEntry * entry);
- void (*move_cursor) (GtkSecureEntry * entry,
- GtkMovementStep step,
- gint count, gboolean extend_selection);
- void (*insert_at_cursor) (GtkSecureEntry * entry, const gchar * str);
- void (*delete_from_cursor) (GtkSecureEntry * entry,
- GtkDeleteType type, gint count);
-
- /* Padding for future expansion */
- void (*_gtk_reserved1) (void);
- void (*_gtk_reserved2) (void);
- void (*_gtk_reserved3) (void);
- void (*_gtk_reserved4) (void);
-};
-
-GType
-gtk_secure_entry_get_type(void)
- G_GNUC_CONST;
-GtkWidget *
-gtk_secure_entry_new(void);
-GtkWidget *
-gtk_secure_entry_new_with_max_length(gint max);
-void
-gtk_secure_entry_set_invisible_char(GtkSecureEntry * entry, gunichar ch);
-gunichar
-gtk_secure_entry_get_invisible_char(GtkSecureEntry * entry);
-void
-gtk_secure_entry_set_has_frame(GtkSecureEntry * entry, gboolean setting);
-gboolean
-gtk_secure_entry_get_has_frame(GtkSecureEntry * entry);
-/* text is truncated if needed */
-void
-gtk_secure_entry_set_max_length(GtkSecureEntry * entry, gint max);
-gint
-gtk_secure_entry_get_max_length(GtkSecureEntry * entry);
-void
-gtk_secure_entry_set_activates_default(GtkSecureEntry * entry,
- gboolean setting);
-gboolean
-gtk_secure_entry_get_activates_default(GtkSecureEntry * entry);
-
-void
-gtk_secure_entry_set_width_chars(GtkSecureEntry * entry, gint n_chars);
-gint
-gtk_secure_entry_get_width_chars(GtkSecureEntry * entry);
-
-/* Somewhat more convenient than the GtkEditable generic functions
- */
-void
-gtk_secure_entry_set_text(GtkSecureEntry * entry, const gchar * text);
-/* returns a reference to the text */
-G_CONST_RETURN gchar *
-gtk_secure_entry_get_text(GtkSecureEntry * entry);
-
-PangoLayout *
-gtk_secure_entry_get_layout(GtkSecureEntry * entry);
-gint
-gtk_secure_entry_layout_index_to_text_index(GtkSecureEntry * entry,
- gint layout_index);
-gint
-gtk_secure_entry_text_index_to_layout_index(GtkSecureEntry * entry,
- gint text_index);
-void
-gtk_secure_entry_get_layout_offsets(GtkSecureEntry * entry,
- gint * x, gint * y);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GTK_SECURE_ENTRY_H__ */
bgstack15